RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于DWC2的USB驅(qū)動開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-07-16 16:42 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關(guān)注

基于DWC2的USB驅(qū)動開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解 (qq.com)

前言

如下寄存器DIEPxxx,對應(yīng)IN端點(diǎn),和發(fā)送數(shù)據(jù)相關(guān),這一篇先介紹和DMA相關(guān)的兩個寄存器,其他的后續(xù)再講,

并且通過觀察其寄存器的實(shí)際值的變化來加深理解。

了解這些值的含義以及何時如何變化,可以在有問題時幫助進(jìn)行調(diào)試,知道當(dāng)前出于何種狀態(tài)。

以下實(shí)例是以Scatter/Gather DMA模式IN端點(diǎn)1進(jìn)行操作

寄存器的地址偏移分別是

0x900+i*0x20

0x908+i*0x20

0x910+i*0x20

0x914+i*0x20

0x918+i*0x20

0x91C+i*0x20

圖片

DIEPDMA****i

寄存器偏移:0x914 + i*20

Scatter/Gather DMA模式時該寄存器的值即用戶指定的描述符鏈表的地址

非Scatter/Gather DMA時該寄存器的值即用戶指定的DMA待發(fā)送數(shù)據(jù)的地址。

必須DWORD即8字節(jié)對齊。

比如這里描述符鏈表使用了全局?jǐn)?shù)組,用attribute指定對齊大小

attribute ((aligned(8))) static uint32_t s_dam[1024][2];

注意該寄存器在每次處理完描述符后會遞增,用戶可以通過該寄存器判斷DMA是否進(jìn)行了描述符的處理。

注意該寄存器需要CTL寄存器ENA置位后才能回讀否則讀到的是0.

我們以一個實(shí)例來看該寄存器值的變化,以下是關(guān)鍵代碼,即準(zhǔn)備一次DMA發(fā)送,前面描述符的準(zhǔn)備過程不在這里貼出。

void ep_writedma(uint32_t dma, uint8_t epnum)
{
  REG_DIEP_DMA(epnum) = dma;
  REG_DIEP_CTL(epnum) |= (DEP_ENA_BIT | DEP_CLEAR_NAK);
}

以下是執(zhí)行REG_DIEP_DMA(epnum) = dma;前,寄存器DIEPDMA1的值為0

傳入的參數(shù)即描述符鏈表的地址是0x81008d8是8字節(jié)的對齊的

此時a0為0x81008d8,即我們的描述符鏈表的地址

a4為寄存器地址0x3000934,sw a0,0(a4) 即將0x81008d8寫入寄存器0x3000934
圖片

注意在CTL寄存器使能端點(diǎn)之前是不能回讀該寄存器的值的,如下為0

執(zhí)行完sw語句再來看,此時DIEPDMA1還是0

圖片

在執(zhí)行完使能,CTL寄存器的ENA置位后才能看到,如下此時看待DIEPDMA1的值變?yōu)榱?x08100968,為什么不是寫入的0x81008d8呢,也就時之前說的,ENA一置位,DMA就會去處理該描述符,0x08100968-0x81008d8=0x90=144 ,144/8=18個描述符(一個描述符2個WORD8字節(jié))。

圖片

那么為什么該寄存器值遞增了這么多呢

那是因?yàn)槲覀冞@里配置p_dam就是配置了18個描述符,如下18個DWORD,所以可以看到如下18個描述符一起處理完了,最后一個描述符標(biāo)志了是最后一個。

圖片

DIEPDMABi

寄存器偏移:0x91C + i*20

該寄存器只有Scatter/Gather DMA模式有效,非Scatter/Gather DMA模式,DIEPDMAi就是用戶緩沖區(qū)的地址,也就是Scatter/Gather DMA模式的本寄存器。

用于指示當(dāng)前正在處理的用戶緩沖區(qū)的地址,DMA處理完指定緩沖區(qū)后就會更新。

所以從該寄存器可以看到是否處理了用戶的緩沖區(qū)數(shù)據(jù)。

同樣是CTL的ENA置位后,處理完描述符后更新,從以下可以看出最后一個描述的用戶數(shù)據(jù)緩沖區(qū)地址為0x8704400長度為0x3C1,所以處理完后DIEPDMAB1更新為了0x87047C1

圖片

總結(jié)

這里重點(diǎn)講解了DMA相關(guān)的兩個寄存器,主要是他們可以協(xié)助分析數(shù)據(jù)發(fā)送,比如有時候數(shù)據(jù)沒有發(fā)出,可以從這里看出是否處理了描述符,是否處理了用戶數(shù)據(jù),來協(xié)助判斷當(dāng)前狀態(tài)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120224
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264454
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    560

    瀏覽量

    100544
  • 驅(qū)動開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    130

    瀏覽量

    12072
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    基于DWC2USB驅(qū)動開發(fā)-IN端點(diǎn)發(fā)送相關(guān)寄存器詳解

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

    基于DWC2USB驅(qū)動開發(fā)-DOEP接收相關(guān)的其他寄存器詳解

    前面介紹了DOEP的DMA相關(guān)寄存器,這一篇繼續(xù)來講剩下的寄存器。
    的頭像 發(fā)表于 07-19 10:50 ?1509次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-DOEP接收<b class='flag-5'>相關(guān)</b>的其他<b class='flag-5'>寄存器</b><b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-0x05 DWC2 USB2.0 IP 寄存器介紹

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

    基于DWC2USB驅(qū)動開發(fā)-0x0D PHY寄存器讀寫代碼編寫與測試

    我們前面重點(diǎn)介紹了ULPI接口和PHY的寄存器,這一篇來進(jìn)行PHY寄存器讀寫的代碼編寫與測試。從這一篇開始就正真進(jìn)入了驅(qū)動編寫的過程了。
    的頭像 發(fā)表于 06-06 13:03 ?2256次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-0x0D PHY<b class='flag-5'>寄存器</b>讀寫代碼編寫與測試

    基于DWC2USB驅(qū)動開發(fā)-DOEP接收相關(guān)DMA寄存器詳解

    前面我們詳細(xì)介紹了發(fā)送即DIEP相關(guān)的一些寄存器,這一篇我們來看看接收即DOEP相關(guān)的一些寄存器。形式上DOEP和DIEP
    的頭像 發(fā)表于 07-19 09:00 ?1279次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-DOEP接收<b class='flag-5'>相關(guān)</b>的<b class='flag-5'>DMA</b><b class='flag-5'>寄存器</b><b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-控制傳輸中斷相關(guān)寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關(guān)寄存器??刂苽鬏斒?b class='flag-5'>USB驅(qū)動的核心部分,控制傳輸調(diào)通了
    的頭像 發(fā)表于 07-24 00:07 ?2558次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-控制傳輸中斷<b class='flag-5'>相關(guān)</b><b class='flag-5'>寄存器</b>

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思 數(shù)據(jù)寄存器數(shù)據(jù)寄存器包括累加AX、基址寄存器BX、計(jì)數(shù)
    發(fā)表于 03-08 14:38 ?1.3w次閱讀

    ARM寄存器詳解

    ARM有37個寄存器,其中31個通用寄存器,6個狀態(tài)寄存器。   這里尤其要注意區(qū)別的是ARM自身寄存器和它的一些外設(shè)的寄存器的區(qū)別。
    發(fā)表于 07-10 10:04 ?2956次閱讀

    DSP2812寄存器詳解

    DSP2812寄存器詳解DSP2812寄存器詳DSP2812寄存器詳解
    發(fā)表于 01-08 14:17 ?8次下載

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實(shí)現(xiàn)。
    發(fā)表于 05-20 11:47 ?0次下載

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發(fā)表于 10-16 13:04 ?14次下載
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名稱,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)資源<b class='flag-5'>詳解</b>

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。本文主要介紹了移位寄存器的用途以及移位寄存器
    發(fā)表于 12-22 15:49 ?2w次閱讀

    ARM通用寄存器及狀態(tài)寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態(tài)寄存器的認(rèn)識與理解。
    的頭像 發(fā)表于 01-06 14:58 ?7140次閱讀
    RM新时代网站-首页