吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DWC2的USB驅動開發-DOEP接收相關的DMA寄存器詳解

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-07-19 09:00 ? 次閱讀

本文轉自公眾號,歡迎關注
基于DWC2的USB驅動開發-DOEP接收相關的DMA寄存器詳解 (qq.com)

前言

前面我們詳細介紹了發送即DIEP相關的一些寄存器,這一篇我們來看看接收即DOEP相關的一些寄存器。形式上DOEP和DIEP寄存器是類似的。不過我們看寄存器列表會發現DOEP會少一個寄存器DTXFSTSi ,

什么會少這個寄存器呢?

因為接收是所有端點共享一個接收緩沖區的,所以這里就沒有DRXFSTSi 這個對應的寄存器來表示每個端點對應的接收緩沖區剩余可用空間了。發送是可以配置為每個端點獨占一個緩沖區的所以有對應的寄存器。

雖然POEP少了一個寄存器,但是寄存器偏移地址上,還是和PIEP保持對應關系的,缺的位置還是預留了空間的,這對軟件來說比較方便,所以一般IP的設計也要考慮軟件的實現是否方便。

圖片

這一篇先來介紹DMA相關的寄存器,后面再講剩余的寄存器,為什么DMA寄存器要單獨講,因為其很重要,了解其是如何設置,如何更新,什么階段誰擁有等很重要,可以協助調試分析問題,并且DOEP和DIEP的DMA寄存器的行為有些許差異這點調試時是很重要的,所以這里重點講。

DOEPDMAi

該寄存器的偏移地址是

0xB14 + i*20,雖然端點0的寄存器手冊有單獨描述,但是其偏移地址還是符合該表達式的,實際描述內容也是重復的。

這樣所有的寄存器我們可以使用同樣的宏來尋址

#define DOEP_DMA(n) (OTG_BASE + (0xb14 + (n)*0x20))

這也是IP設計寄存器地址設置要考慮的,方便軟件編程

我們來看手冊的描述
圖片

如果是 Scatter/Gather DMA模式則該寄存器設置為描述符鏈表的地址,否則則設置接收緩沖區的地址,DMA接收到數據自動從RxFIFO搬運到該處。

注意該寄存器必須8字節對齊。

該值在OUT DONE,接收到數據產生中斷后,軟件可以回讀其值,回讀的值為設置的值偏移已經處理的描述符或者已經接收的字節數。

注意該寄存器寫完后并不能立即回讀,此時回讀值為之前的值或者默認值,只有OUT DONE中斷接收到數據之后才能回讀,此時EPena硬件清零,回讀的值已經是按照上述描述更新的值。

在軟件設置該值(注意此時哪怕EPEna沒有置位也是一樣的)到OUT DONE中斷之前該寄存器由控制器所有,此時軟件不能再次寫,回讀也不能回讀出寫入的值。只有OUT DONE中斷之后EPEna硬件自動清零后才能讀會硬件更新的值,注意不是寫入值,時硬件根據處理了多少描述符或者接受了多少數據遞增后的值。

以下是實例

如下使用OUT端點2 設置

0x81012a0到DOEPDMAi ** ,** 0x81012a0是8字節對齊的,時描述符地址

執行完REG_DOEP_DMA(epnum) = (uint32_t)(pep->dma_addr);后回讀DOEPDMAi****的值并沒有更新,此時軟件不能再寫,回讀也不能讀出設置值

圖片

CTL寄存器的EPEna置位,SNAK變為了0表示不再NACK了,準備接收數據了

圖片

進入OUT DONE中斷再來看

CTL寄存器的EPEna位硬件清零0.表示接收到了數據
圖片

此時DOEPDMAi 0x81012a0變為了0x81012a8,因為只有以一個描述符,所以處理完后偏移了8字節。

DOEPDMABi

該寄存器的偏移地址是

0xB1C + i*20

從上面可以看到

0x0000000變為了

0x8100d58

之前是0x0000000是因為設置完后并不能回讀,實際的描述中對應的緩沖區是

0x8100d38,0x8100d58-0x8100d38正好是接收到的數據的長度。

圖片

總結

DMA相關的兩個寄存器非常重要,可以幫助調試,但是要注意寫入之后并不能馬上回讀,也不能再寫,需要OUT DONE之后才能回讀和重新寫,寫入該寄存器到OUT DONE中斷之前該寄存器都是控制器所有。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121198
  • usb
    usb
    +關注

    關注

    60

    文章

    7981

    瀏覽量

    266117
  • dma
    dma
    +關注

    關注

    3

    文章

    566

    瀏覽量

    100966
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12112
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    151
收藏 人收藏

    評論

    相關推薦

    基于DWC2USB驅動開發-0x06 DWC2 USB2.0 IP 頭文件與寄存器的讀寫操作

    上一篇我們介紹了控制寄存器,而驅動的編寫底層無非就是配置各種寄存器,所以第一步先要準備寄存器的頭文件,對
    的頭像 發表于 05-16 14:04 ?2522次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x06 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP 頭文件與<b class='flag-5'>寄存器</b>的讀寫操作

    基于DWC2USB驅動開發-IN端點發送相關寄存器詳解

    上一篇我們介紹了IN端點,發送,DMA相關的兩個寄存器,這一篇繼續講另外的幾個寄存器
    的頭像 發表于 07-17 07:41 ?2007次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-IN端點發送<b class='flag-5'>相關</b>的<b class='flag-5'>寄存器</b><b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-DOEP接收相關的其他寄存器詳解

    前面介紹了DOEPDMA相關寄存器,這一篇繼續來講剩下的寄存器
    的頭像 發表于 07-19 10:50 ?1616次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>DOEP</b><b class='flag-5'>接收</b><b class='flag-5'>相關</b>的其他<b class='flag-5'>寄存器</b><b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2.0控制簡介

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2
    的頭像 發表于 05-08 18:10 ?4801次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x01開篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制<b class='flag-5'>器</b>簡介

    基于DWC2USB驅動開發-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制IP,被大量使用。從linux的內核源碼驅動
    的頭像 發表于 05-09 10:09 ?9859次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征介紹

    基于DWC2USB驅動開發-0x05 DWC2 USB2.0 IP 寄存器介紹

    本文對控制寄存器有了一個整體上的概覽,先了解個大概,了解寄存器的組織結構,大致了解一下常用的寄存器。后面編程時再一個個對照每一個寄存器
    的頭像 發表于 05-16 12:50 ?3488次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x05 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP <b class='flag-5'>寄存器</b>介紹

    基于DWC2USB驅動開發-IAD描述符詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設備功能關聯多
    的頭像 發表于 06-27 08:45 ?26.6w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-IAD描述符<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-USB復位詳解

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-USB復位詳解 (qq.com) 一.前言
    的頭像 發表于 07-07 11:18 ?7.6w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>復位<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-USB連接詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-USB連接詳解 (qq.com) 一.前
    的頭像 發表于 07-07 08:46 ?3882次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>連接<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-設備類驅動框架

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-設備類驅動框架 (qq.com) 一.前言 從軟件頂層,從數據流的角度來看
    的頭像 發表于 07-16 15:56 ?1376次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-設備類<b class='flag-5'>驅動</b>框架

    基于DWC2USB驅動開發-發送相關寄存器DMA寄存器詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-發送相關寄存器
    的頭像 發表于 07-16 16:42 ?1740次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-發送<b class='flag-5'>相關</b>的<b class='flag-5'>寄存器</b><b class='flag-5'>DMA</b><b class='flag-5'>寄存器</b><b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-控制傳輸中斷相關寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關寄存器。控制傳輸是USB驅動的核心部分,控制傳輸調通了
    的頭像 發表于 07-24 00:07 ?2791次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-控制傳輸中斷<b class='flag-5'>相關</b><b class='flag-5'>寄存器</b>

    基于DWC2USB驅動開發-數據不能發送問題分析案例

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-數據不能發送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅動
    的頭像 發表于 08-08 09:43 ?2496次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據不能發送問題分析案例

    新思 DWC2 的參考手冊從哪里可以下載

    最近在學習STM32F4 USB驅動,有看到 dwc2驅動的代碼,但是沒有手冊用來參考,ST手冊上寄存器不全,從網上看到有下面兩個手冊,但
    發表于 01-22 11:32

    如何對基于hal庫的DWC2 USB IP進行調試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構,果不其然,usb bug 一堆,隨意舉例,這還
    發表于 06-14 15:23
    灵丘县| 顶级赌场官方安卓版手机下载| 百家乐开庄概率| 新濠百家乐官网娱乐场| 百威百家乐官网的玩法技巧和规则| 百家乐官网蔬菜配送公司| 试用的百家乐官网软件| 百家乐官网娱乐平台官网网| 连环百家乐官网的玩法技巧和规则 | 百家乐官网凯时赌场娱乐网规则| 长春百家乐官网的玩法技巧和规则 | 赢家百家乐的玩法技巧和规则| 百家乐赌场代理荐| 百家乐英皇娱乐平台| 好运来百家乐的玩法技巧和规则 | 大发888国际娱乐bet| bet365官网bet365gwylc| 澳门赌场| 百家乐官网怎打能赢| 百家乐官网获胜秘决百家乐官网获胜秘诀| 网上百家乐官网是假还是真的| 百家乐官网平注常赢玩法技巧| 澳门百家乐赌客| 威尼斯人娱乐怎么样| 巴青县| 百家乐官网破解方法技巧| 做生意的门市风水| 澳门赌百家乐的玩法技巧和规则 | 战神百家乐官网娱乐| 百家乐官网稳赢赌法| 太原百家乐官网的玩法技巧和规则 | 百家乐社区| 凯旋门娱乐| 百家乐官网怎么稳赢| 澳门百家乐现场游戏| 大发888亚洲游戏下载| 大悟县| 百家乐官网牌机的破解法| 广发百家乐官网的玩法技巧和规则| 蓝盾百家乐娱乐场开户注册 | 太阳城娱乐城网址|