女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

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

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-07-16 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文轉自公眾號,歡迎關注

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

前言

如下寄存器DIEPxxx,對應IN端點,和發送數據相關,這一篇先介紹和DMA相關的兩個寄存器,其他的后續再講,

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

了解這些值的含義以及何時如何變化,可以在有問題時幫助進行調試,知道當前出于何種狀態。

以下實例是以Scatter/Gather DMA模式IN端點1進行操作

寄存器的地址偏移分別是

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待發送數據的地址。

必須DWORD即8字節對齊。

比如這里描述符鏈表使用了全局數組,用attribute指定對齊大小

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

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

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

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

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

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

傳入的參數即描述符鏈表的地址是0x81008d8是8字節的對齊的

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

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

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

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

圖片

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

圖片

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

那是因為我們這里配置p_dam就是配置了18個描述符,如下18個DWORD,所以可以看到如下18個描述符一起處理完了,最后一個描述符標志了是最后一個。

圖片

DIEPDMABi

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

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

用于指示當前正在處理的用戶緩沖區的地址,DMA處理完指定緩沖區后就會更新。

所以從該寄存器可以看到是否處理了用戶的緩沖區數據。

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

圖片

總結

這里重點講解了DMA相關的兩個寄存器,主要是他們可以協助分析數據發送,比如有時候數據沒有發出,可以從這里看出是否處理了描述符,是否處理了用戶數據,來協助判斷當前狀態。

審核編輯 黃宇

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

    關注

    31

    文章

    5433

    瀏覽量

    124418
  • usb
    usb
    +關注

    關注

    60

    文章

    8179

    瀏覽量

    272764
  • dma
    dma
    +關注

    關注

    3

    文章

    576

    瀏覽量

    103194
  • 驅動開發
    +關注

    關注

    0

    文章

    134

    瀏覽量

    12307
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    上一篇我們介紹了控制寄存器,而驅動的編寫底層無非就是配置各種寄存器,所以第一步先要準備寄存器的頭文件,對
    的頭像 發表于 05-16 14:04 ?3023次閱讀
    基于<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 ?2708次閱讀
    基于<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><b class='flag-5'>詳解</b>

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

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

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

    本文對控制寄存器有了一個整體上的概覽,先了解個大概,了解寄存器的組織結構,大致了解一下常用的寄存器。后面編程時再一個個對照每一個寄存器
    的頭像 發表于 05-16 12:50 ?4373次閱讀
    基于<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驅動開發-0x0D PHY寄存器讀寫代碼編寫與測試

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

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

    前面我們詳細介紹了發送即DIEP相關的一些寄存器,這一篇我們來看看接收即DOEP相關的一些寄存器。形式上DOEP和DIEP
    的頭像 發表于 07-19 09:00 ?1928次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-DOEP接收<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 ?3903次閱讀
    基于<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>

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

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

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

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

    ARM寄存器詳解

    ARM有37個寄存器,其中31個通用寄存器,6個狀態寄存器。   這里尤其要注意區別的是ARM自身寄存器和它的一些外設的寄存器的區別。
    發表于 07-10 10:04 ?3070次閱讀

    DSP2812寄存器詳解

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

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現。
    發表于 05-20 11:47 ?0次下載

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

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發表于 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>

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

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

    ARM通用寄存器及狀態寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態寄存器的認識與理解。
    的頭像 發表于 01-06 14:58 ?8529次閱讀