精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-07-17 07:41 ? 次閱讀

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

前言

上一篇我們介紹了IN端點,發送,DMA相關的兩個寄存器,這一篇繼續講另外的幾個寄存器。

DIEPCTLi

偏移地址 0x900+i*20

該寄存器控制端點的屬性,使能等,是端點操作的核心寄存器

傳輸使能與禁能

Bit31和bit30

圖片

其實這里名字Enable和Disable取的并不合適,這里實際并不是指的端點的使能和禁能,更確切的說應該是啟動和停止DMA對描述符連鏈表,DMA緩沖數據的處理,啟動和停止端點數據的傳輸。

端點的使能也就是激活應該是bit15。

軟件在準備好描述符( Scatter/Gather DMA )即DIEPDMAi以及描述符鏈表后,置位該位,硬件就會開始處理該描述符。對于非Scatter/Gather DMA 的DMA則是準備好DMA對應的緩沖區也是配置DIEPDMAi后使能該位硬件開始DMA處理。當然這里DMA處理描述符和DMA緩沖區實際就是搬運數據到TxFIFO中去,所以要TxFIFO有空閑才會進行。

注意硬件在發送完數據后產生相應的中斷時會自動清除該位即SETUP的完成,數據發送完成時,即相當于自動流控,發送完后硬件自動Disable,軟件重新配置相應的描述符和DMA再重新Enable。否則不Disable此時軟件還沒準備好描述符和DMA就會沒有數據可發。

另外手動置位EPDis時 EPEna也會清零,兩者互斥。

而EPDis表示停止傳輸,軟件只能在EPEna之前置位過才能置位該位,在停止中斷中硬件自動清除該位。

注意置位后不是一定數據傳輸馬上就停止了,要到停止中斷才能確認是停止了。

即DIEPINTi寄存器的bit1 EPDisbld為1.

端點激活

硬件收到復位信號后清除該位(EP0的不置位,因為EP0要默認使能,用于控制傳輸進行枚舉),軟件在設置配置,設置接口的標準請求時置位該位。

圖片

PID設置

設置PID,注意Scatter-Gather DMA模式是在描述符中設置PID的,所以這里保留

圖片

Bit16可以查看當前的PID狀態

圖片

NACK操作

軟件設置SNAK該位以發送NACK用于流控

注意硬件在SETUP完成后也會置位改位,所以軟件在開啟新的傳輸時需要置位CNAK和EPEna以停止NACK和啟動傳輸。

DIEPINTi的bit6 INEPNakEff置位表示SNAK設置NACK生效。
圖片

Bit17 NAKSts表示當前是否出于NAK狀態

圖片

發送FIFO號

Shared FIFO模式非周期端點共用一個發送FIFO所以這里必須為0,

只有獨立發送FIFO模式,或者周期端點,則每個發送IN端點可以對應一個獨立的TxFIFO

圖片

STALL

軟件置位該為以產生STALL的ACK

圖片

端點類型

圖片

下一個端點

Shared FIFO模式才有,必須要DMA模式才有(Slave

模式不需要)

對于每個發送端點獨立FIFO模式也不需要,因為都是獨立控制的,

只有Shared FIFO模式共享FIFO所以才需要鏈表告訴DMA下一個處理哪個端點

圖片

端點最大包大小

圖片

DIEPINTi****中斷狀態

這里是某個端點詳細的中斷原因,其中中斷的使能是總的中斷使能控制DAINTMSK,即控制哪一個端點的中斷使能,

其中bit0 XferCompl表示發送完,是最重要的中斷狀態

圖片

DIEPTSIZi

發送大小寄存器

一個微幀發送包數MC

注意Scatter-Gather DMA在描述中配置,不使用該寄存器的MC

該位只有內部DMA的非Scatter-Gather DMA模式使用

圖片

包數

注意每搬運完一個包到TxFIFO,該值會遞減,所以可以看該寄存器看已經搬運完的包數

同樣注意Scatter-Gather DMA在描述中配置,也不使用該寄存器

圖片

傳輸大小

指定一次DMA傳輸的大小

同樣注意Scatter-Gather DMA在描述中配置,也不使用該寄存器

該值也會根據已經處理完的數據量遞減

圖片

其中x 由GHWCFG3的bit4:0可以看到

圖片

DTXFSTSi

該寄存器可以看指定端點對應的TxFIFO剩余空閑的空間大小

實例

Scatter/Gather DMA模式

核心代碼如下即配置DMA地址,使能EPEna,清除NACK。這里沒有貼出描述符的填充過程。

void ep_writedma(uint32_t dma, uint8_t epnum)
{


  REG_DIEP_DMA(epnum) = dma;


  REG_DIEP_CTL(epnum) |= (DEP_ENA_BIT | DEP_CLEAR_NAK);


}

如下是EPena置位前后寄存器值,該位軟件置位后傳輸完后硬件自動清零

圖片

DIEPINT1 的bit0 XferCompl置位說明DMA處理完了

Bit9 BNAIntr置位說明DMA處理完后面沒有描述符需要處理了。

DIEPDMA1,DIEPDMAB1變為了0x08100968和0x207047c8這個上一篇文章已經分析過了

DTXFSTS1為0x00000300

DIEPTXFi 0x104+(i-1)*4

看到TxFIFO1的大小是0x300,也就是都發送完了TxFIFO中又都空閑了

圖片

DIEPTSIZ1由0x13C5變為了0x3F7003b1.

圖片

圖片

EPEna之后

圖片

圖片

可以看到描述的狀態也變為了DMA Done,長度也變為了0表示發送完了。

圖片

總結

以上是IN端點發送數據,DMA和端點相關需要配置的寄存器,需要注意的是Scatter/Gather DMA模式 一些狀態,比如發送包數,長度放在了描述符中去了。

熟悉以上寄存器對編寫驅動控制IN端點發送數據至關重要,一些寄存器也可以給調試提供信息

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

    關注

    31

    文章

    5325

    瀏覽量

    120052
  • usb
    usb
    +關注

    關注

    60

    文章

    7903

    瀏覽量

    264046
  • dma
    dma
    +關注

    關注

    3

    文章

    559

    瀏覽量

    100446
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12065
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    120
收藏 人收藏

    評論

    相關推薦

    詳解寄存器模型鏡像值

    DUT的配置寄存器的值是實際值,reg_model有鏡像值、期望值的概念。
    的頭像 發表于 10-23 09:43 ?193次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>寄存器</b>模型鏡像值

    接口的控制與狀態寄存器什么作用

    接口的控制與狀態寄存器(Control and Status Registers,簡稱CSR)是計算機系統中用于控制和監控硬件設備操作的寄存器。它們是硬件設備與其驅動程序之間的橋梁,允許軟件控制硬件
    的頭像 發表于 10-17 10:42 ?284次閱讀

    寄存器間接尋址和寄存器尋址的區別

    寄存器間接尋址和寄存器尋址是計算機體系結構中兩種重要的尋址方式,它們在指令執行過程中起著關鍵作用。下面將從定義、原理、特點、應用場景以及區別等方面對這兩種尋址方式進行詳細闡述。
    的頭像 發表于 10-05 17:13 ?865次閱讀

    寄存器是什么意思?寄存器是如何構成的?

    在計算機科學中,寄存器(Register)是一個高速存儲單元,它位于中央處理(CPU)內部,用于存儲計算機程序執行過程中所需要的數據、指令地址或狀態信息。寄存器是計算機體系結構中至關重要的組成部分,對計算機的運算速度和性能有著
    的頭像 發表于 08-02 18:23 ?3421次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構成的?

    在STM32L4R5ZIT6中移植cherryUSB,顯示不支持DMA模式為什么?

    initialized 1! [I/wiz] RT-Thread WIZnet package (V2.1.0) initialize success. [I/USB] ========== dwc2
    發表于 07-25 08:32

    寄存器尋址和直接尋址的區別

    寄存器尋址和直接尋址是計算機指令系統中的兩種基本尋址方式。它們在指令的執行過程中起著至關重要的作用,決定了指令操作數的來源和目標。下面我們將介紹這兩種尋址方式的特點、區別以及在實際應用中的優缺點
    的頭像 發表于 07-12 10:42 ?1346次閱讀

    寄存器尋址的實現方式

    在計算機體系結構中,寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內部的寄存器寄存器尋址可以提高程序的執行效率,因為它避免了對內存的訪問。 寄存器尋址的基本概念
    的頭像 發表于 07-12 10:36 ?565次閱讀

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機中用于存儲數據的高速存儲單元,它們是CPU內部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 一、基本寄存器
    的頭像 發表于 07-12 10:31 ?1146次閱讀

    與定時相關寄存器有哪些類型

    ,微控制通常提供了一系列的定時寄存器,用于配置和控制定時的行為。 以下是一些常見的與定時相關
    的頭像 發表于 07-12 10:25 ?794次閱讀

    端點存儲 (EPM) 位于何處? 系統RAM還是MMIO寄存器空間?

    您好,端點存儲 (EPM) 位于何處? 系統 RAM 還是 MMIO 寄存器空間? 非常感謝!
    發表于 05-30 07:52

    用STM32f205+PHY做一個高速usb的Device設備,USB批量傳輸設置兩個端點為OUT、IN后異常怎么解決?

    發送IN令牌包后,從機無響應。 因為枚舉過程數據正常,故懷疑是STM32配置BULK端點時出錯,經過多次查找后發現,當配置端點2為OUT模式后,STM32
    發表于 04-24 07:41

    干貨滿滿:ARM的內核寄存器講解

    內核寄存器與外設寄存器: 內核寄存器與外設寄存器是完全不同的概念。內核寄存器是指 CPU 內部的寄存器
    發表于 04-17 11:47 ?3024次閱讀
    干貨滿滿:ARM的內核<b class='flag-5'>寄存器</b>講解

    CPU的6個主要寄存器

    CPU寄存器是中央處理內的組成部分,是有限存貯容量的高速存貯部件。寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制
    的頭像 發表于 02-03 15:15 ?3940次閱讀

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一種用于在數字電路中實現數據移位操作的基本電路元件。它由多個觸發以及相關控制電路組成,具有存儲、接受和移動數據的功能。移位寄存器可以分為兩種類型:串行移位
    的頭像 發表于 01-18 10:52 ?7413次閱讀

    MC17XS6500高邊驅動芯片寄存器的介紹

    本文主要是對MC17XS6500高邊驅動芯片寄存器進行的介紹,MC17XS6500寄存器分為輸入寄存器和輸出寄存器,對常用的幾個輸入和輸出
    的頭像 發表于 12-29 08:27 ?733次閱讀
    MC17XS6500高邊<b class='flag-5'>驅動</b>芯片<b class='flag-5'>寄存器</b>的介紹