91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-07-17 07:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

前言

上一篇我們介紹了IN端點,發(fā)送,DMA相關(guān)的兩個寄存器,這一篇繼續(xù)講另外的幾個寄存器。

DIEPCTLi

偏移地址 0x900+i*20

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

傳輸使能與禁能

Bit31和bit30

圖片

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

端點的使能也就是激活應(yīng)該是bit15。

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

注意硬件在發(fā)送完數(shù)據(jù)后產(chǎn)生相應(yīng)的中斷時會自動清除該位即SETUP的完成,數(shù)據(jù)發(fā)送完成時,即相當(dāng)于自動流控,發(fā)送完后硬件自動Disable,軟件重新配置相應(yīng)的描述符和DMA再重新Enable。否則不Disable此時軟件還沒準(zhǔn)備好描述符和DMA就會沒有數(shù)據(jù)可發(fā)。

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

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

注意置位后不是一定數(shù)據(jù)傳輸馬上就停止了,要到停止中斷才能確認(rèn)是停止了。

即DIEPINTi寄存器的bit1 EPDisbld為1.

端點激活

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

圖片

PID設(shè)置

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

圖片

Bit16可以查看當(dāng)前的PID狀態(tài)

圖片

NACK操作

軟件設(shè)置SNAK該位以發(fā)送NACK用于流控

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

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

Bit17 NAKSts表示當(dāng)前是否出于NAK狀態(tài)

圖片

發(fā)送FIFO號

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

只有獨立發(fā)送FIFO模式,或者周期端點,則每個發(fā)送IN端點可以對應(yīng)一個獨立的TxFIFO

圖片

STALL

軟件置位該為以產(chǎn)生STALL的ACK

圖片

端點類型

圖片

下一個端點

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

模式不需要)

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

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

圖片

端點最大包大小

圖片

DIEPINTi****中斷狀態(tài)

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

其中bit0 XferCompl表示發(fā)送完,是最重要的中斷狀態(tài)

圖片

DIEPTSIZi

發(fā)送大小寄存器

一個微幀發(fā)送包數(shù)MC

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

該位只有內(nèi)部DMA的非Scatter-Gather DMA模式使用

圖片

包數(shù)

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

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

圖片

傳輸大小

指定一次DMA傳輸?shù)拇笮?/p>

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

該值也會根據(jù)已經(jīng)處理完的數(shù)據(jù)量遞減

圖片

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

圖片

DTXFSTSi

該寄存器可以看指定端點對應(yīng)的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變?yōu)榱?x08100968和0x207047c8這個上一篇文章已經(jīng)分析過了

DTXFSTS1為0x00000300

DIEPTXFi 0x104+(i-1)*4

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

圖片

DIEPTSIZ1由0x13C5變?yōu)榱?x3F7003b1.

圖片

圖片

EPEna之后

圖片

圖片

可以看到描述的狀態(tài)也變?yōu)榱薉MA Done,長度也變?yōu)榱?表示發(fā)送完了。

圖片

總結(jié)

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

熟悉以上寄存器對編寫驅(qū)動控制IN端點發(fā)送數(shù)據(jù)至關(guān)重要,一些寄存器也可以給調(diào)試提供信息。

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

    關(guān)注

    31

    文章

    5608

    瀏覽量

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

    關(guān)注

    60

    文章

    8438

    瀏覽量

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

    關(guān)注

    3

    文章

    581

    瀏覽量

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

    關(guān)注

    0

    文章

    140

    瀏覽量

    12625
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    SN74SSTVF16857 14位寄存器緩沖:設(shè)計與應(yīng)用詳解

    SN74SSTVF16857 14位寄存器緩沖:設(shè)計與應(yīng)用詳解 在電子設(shè)計領(lǐng)域,寄存器緩沖是不可或缺的組件,它能有效處理數(shù)據(jù)傳輸和信號處
    的頭像 發(fā)表于 02-10 14:05 ?156次閱讀

    探索IDT74SSTUBF32866B:DDR2的25位可配置寄存器緩沖

    探索IDT74SSTUBF32866B:DDR2的25位可配置寄存器緩沖 在DDR2內(nèi)存模塊的設(shè)計中,合適的寄存器緩沖
    的頭像 發(fā)表于 01-08 16:30 ?251次閱讀

    bk3633 usb 設(shè)備如何讀取主機向端點0 發(fā)送數(shù)據(jù)包

    bk3633 usb 設(shè)備如何讀取主機向端點0 發(fā)送數(shù)據(jù)包
    發(fā)表于 12-30 13:03

    探索IDT74SSTUBF32866B:DDR2的25位可配置寄存器緩沖

    1.7 - 1.9V VDD電壓運行的25位1:1或14位1:2可配置寄存器緩沖。它的時鐘和數(shù)據(jù)輸入與JEDEC標(biāo)準(zhǔn)的SSTL_18兼容,控制輸入為LVCMOS,輸出則是經(jīng)過優(yōu)化的1.8V CMOS
    的頭像 發(fā)表于 12-24 16:30 ?316次閱讀

    Renesas IDT74SSTUBF32866B:DDR2的25位可配置寄存器緩沖詳解

    Renesas IDT74SSTUBF32866B:DDR2的25位可配置寄存器緩沖詳解 在DDR2內(nèi)存模塊的設(shè)計中,一款合適的
    的頭像 發(fā)表于 12-23 15:55 ?476次閱讀

    嵌入式系統(tǒng)必懂的 20 個寄存器

    嵌入式開發(fā)看起來很復(fù)雜,但很多操作其實都離不開寄存器寄存器就是MCU內(nèi)部的存儲單元,它們控制著處理和外設(shè)的行為。熟悉這些寄存器,你就能更
    的頭像 發(fā)表于 11-14 10:28 ?1082次閱讀
    嵌入式系統(tǒng)必懂的 20 個<b class='flag-5'>寄存器</b>

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計32:寄存器功能驗證與分析2

    寄存器最大值為 64’hFFFFFFFFFFFFFFFF,到達最大值后一個時鐘周期后翻轉(zhuǎn)回 0, 在隨機時刻使用 force 將寄存器賦值臨近最大值, 當(dāng)寄存器達到最大值后, 翻轉(zhuǎn)回到 0, 讀取數(shù)值為 0, 仿真行為符合設(shè)計預(yù)
    的頭像 發(fā)表于 10-14 17:06 ?715次閱讀
    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計32:<b class='flag-5'>寄存器</b>功能驗證與分析<b class='flag-5'>2</b>

    TPIC6595 8位功率移位寄存器技術(shù)文檔摘要

    該TPIC6595是一款單片、高壓、大電流功率的8位移位寄存器,設(shè)計用于需要相對較高負載功率的系統(tǒng)。該器件在輸出端包含一個內(nèi)置電壓鉗位,用于電感瞬態(tài)保護。功率驅(qū)動器應(yīng)用包括繼電器、螺線管和其他中電流
    的頭像 發(fā)表于 09-09 11:10 ?921次閱讀
    TPIC6595 8位功率移位<b class='flag-5'>寄存器</b>技術(shù)文檔摘要

    ?TPIC6B595 8位功率移位寄存器技術(shù)文檔總結(jié)

    TPIC6B595器件是一款單片、高壓、中電流功率8位移位寄存器,設(shè)計用于需要相對高負載功率的系統(tǒng)。該器件在輸出端包含一個內(nèi)置電壓鉗位,用于電感瞬態(tài)保護。功率驅(qū)動器應(yīng)用包括繼電器、螺線管和其他中電流
    的頭像 發(fā)表于 09-09 10:16 ?1008次閱讀
    ?TPIC6B595 8位功率移位<b class='flag-5'>寄存器</b>技術(shù)文檔總結(jié)

    SN74LV594A:2-5.5V帶輸出寄存器的8位移位寄存器技術(shù)解析

    Texas Instruments SN74LV594A/SN74LV594A-Q1 8位并行輸出串行移位寄存器設(shè)計采用2V至5.5V V~CC~ 運行。SN74LV594A-Q1符合汽車應(yīng)用類
    的頭像 發(fā)表于 09-02 09:42 ?915次閱讀
    SN74LV594A:<b class='flag-5'>2</b>-5.5V帶輸出<b class='flag-5'>寄存器</b>的8位移位<b class='flag-5'>寄存器</b>技術(shù)解析

    ?TLC6C5912 12通道移位寄存器LED驅(qū)動器技術(shù)文檔總結(jié)

    該TLC6C5912是一款單片、中壓、低電流功率 12 位移位寄存器 設(shè)計用于需要相對中等負載功率的系統(tǒng),例如 LED。 該器件包含一個 12 位串行輸入并行輸出移位寄存器,可為 12 位饋電
    的頭像 發(fā)表于 08-26 14:16 ?993次閱讀
    ?TLC6C5912 12通道移位<b class='flag-5'>寄存器</b>LED<b class='flag-5'>驅(qū)動器</b>技術(shù)文檔總結(jié)

    Texas Instruments SN74LV8T594/SN74LV8T594-Q1移位寄存器特性/應(yīng)用/框圖

    器件輸出(QA至QH)。為移位寄存器和存儲寄存器提供單獨的時鐘(SRCLK和RCLK)和直接覆蓋清除(SRCLR和RCLR)輸入,允許數(shù)據(jù)單獨加載,而不會發(fā)送至輸出。此外,內(nèi)部移位寄存器
    的頭像 發(fā)表于 08-03 10:56 ?1095次閱讀
    Texas Instruments SN74LV8T594/SN74LV8T594-Q1移位<b class='flag-5'>寄存器</b>特性/應(yīng)用/框圖

    如何通過CYUSB3014的設(shè)備寄存器讀取主機發(fā)起的數(shù)據(jù)傳輸?shù)腁CK?如何通過寄存器讀取主機發(fā)送的復(fù)位命令?

    IN 事務(wù)。那么,可以讀取哪個寄存器來確認(rèn)設(shè)備是否收到了用于發(fā)起 IN 事務(wù)的第一個 ACK 數(shù)據(jù)包? 2. 主機端遠程復(fù)位設(shè)備芯片使用哪個寄存器?讀取該寄存器可以確認(rèn)設(shè)備已收到來自
    發(fā)表于 07-15 06:20

    使用寄存器點亮LED燈

    學(xué)習(xí)本章時,配合以上芯片手冊中的“19. I/O Ports”章節(jié)一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。本章內(nèi)容涉及到較多寄存器方面的深入內(nèi)容,對于初學(xué)者而言這些內(nèi)容豐富也較難理解,但非常有必要細讀研究、夯實基礎(chǔ)。
    的頭像 發(fā)表于 05-28 17:37 ?1305次閱讀
    使用<b class='flag-5'>寄存器</b>點亮LED燈

    如何用C語言操作寄存器——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(10)

    由于寄存器的數(shù)量是非常之多的,如果每個寄存器都用像*((uint32_t*)(0x40080000+0x0020*1))這樣的方式去訪問的話,會顯得很繁瑣、很麻煩。為了更方便地訪問寄存器,我們會借助C語言結(jié)構(gòu)體的特性去定義
    的頭像 發(fā)表于 04-22 15:30 ?1966次閱讀
    如何用C語言操作<b class='flag-5'>寄存器</b>——瑞薩RA系列FSP庫<b class='flag-5'>開發(fā)</b>實戰(zhàn)指南(10)