在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

基于DWC2的USB驅(qū)動(dòng)開發(fā)-控制傳輸中斷相關(guān)寄存器

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

本文轉(zhuǎn)自公眾號(hào)系列文章,歡迎關(guān)注
基于DWC2的USB驅(qū)動(dòng)開發(fā)-USB包詳解 (qq.com)

一.前言

本篇講解Scatter/Gather DMA模式下控制傳輸相關(guān)的寄存器。控制傳輸是USB驅(qū)動(dòng)的核心部分,控制傳輸調(diào)通了驅(qū)動(dòng)就完成了一大半,而驅(qū)動(dòng)的核心又是中斷的處理。

二.控制傳輸相關(guān)的DMA描述符

Scatter/Gather DMA模式的優(yōu)點(diǎn)是可以提供一個(gè)描述符鏈表,一次處理更多的數(shù)據(jù),控制器自動(dòng)去索引描述符鏈表,進(jìn)行相應(yīng)的DMA處理。而Buffer DMA模式一次只能處理一個(gè)DMA操作。

來簡(jiǎn)單回顧下控制傳輸,控制傳輸包括

Setup,Data,Status三個(gè)階段,不是所有情況都需要包括三種階段,存在無數(shù)據(jù)階段的控制傳輸。

存在三種可能

控制寫

控制讀

無數(shù)據(jù)的控制傳輸,2階段控制傳輸。

控制傳輸需要準(zhǔn)備以下幾種描述符

2.1.SETUP

為了接收最多可能存在的3個(gè)連續(xù)的SETUP包,所以需要準(zhǔn)備一個(gè)描述符鏈表包括3個(gè)描述符。該描述符也可以用于接收控制讀傳輸主機(jī)發(fā)送的狀態(tài)包(0長(zhǎng)包)。

該描述符鏈表的前面兩個(gè)還可以作為ping-pong提高接收效率。

第三個(gè)描述符,初始化為空,最終設(shè)置為以接收在數(shù)據(jù)和狀態(tài)階段主機(jī)又異常發(fā)了SETUP。

圖片

2.2IN

圖片

2.3OUT

圖片

三.控制傳輸相關(guān)的中斷處理

3.1相關(guān)寄存器

首先我們來看和中斷相關(guān)的一些寄存器,控制傳輸對(duì)應(yīng)的就是端點(diǎn)0所以和其他端點(diǎn)其實(shí)是一樣的,只不過其多了一些比如SETUP等狀態(tài)而已。

首先我們來看相關(guān)的寄存器

首先全局的:GAHBCFG寄存器的bit0 GlblIntrMsk作為全局中斷的總開關(guān),置位使能總中斷。

然后寄存器GINTMSK/2的bit19,bit18,OEPIntMsk和IEPIntMsk作為所有的OUT和IN端點(diǎn)的中斷使能,對(duì)應(yīng)的狀態(tài)寄存器是GINTSTS/2。

然后DIEPMSK和DOEPMSK控制所有的OUT和IN端點(diǎn)的中斷類型,哪些使能。

對(duì)應(yīng)的狀態(tài)寄存器是DIEPINTi 和DOEPINTi。

最后DAINTMSK控制某一個(gè)端點(diǎn)是否使能中斷。對(duì)應(yīng)的狀態(tài)寄存器是DAINT。

注意

DIEPMSK和DOEPMSK是對(duì)所有端點(diǎn)的配置,不能對(duì)某一個(gè)端點(diǎn)使能某些類型中斷,對(duì)另外一個(gè)端點(diǎn)使能其他類型的中斷。

以上形成了金字塔式的總分式,層層控制的中斷開關(guān)控制

而中斷的處理順序是層層解析的方式,先通過

DAINT查看是哪個(gè)端點(diǎn)產(chǎn)生的中斷,然后通過DIEPINTi 和DOEPINTi確認(rèn)對(duì)應(yīng)端點(diǎn)具體的中斷類型。

DAINT的標(biāo)志的置位和清除是跟著DIEPINTi 和DOEPINTi變化的,該寄存器軟件只讀。對(duì)應(yīng)DIEPINTi 和DOEPINTi寄存器有標(biāo)志置位則該寄存器對(duì)應(yīng)位置位,DIEPINTi 和DOEPINTi寄存器所有標(biāo)志位清除則該寄存器對(duì)應(yīng)位清除。

而GINTSTS.OEPInt和GINTSTS.IEPInt是跟著DAINT的狀態(tài)走的,軟件也是只讀的,DAINT對(duì)應(yīng)位有置為則該位置位,DAINT中對(duì)應(yīng)所有寄存器都清零,則該位也清零。

DIEPINTi 和DOEPINTi寄存器的標(biāo)志都是寫1清零。所以對(duì)于IN和OUT中斷的標(biāo)志清除,只需要對(duì)這兩個(gè)寄存器對(duì)應(yīng)位寫1清零即可。DAINT和GINTSTS.OEPInt和GINTSTS.IEPInt是根據(jù)上述寄存器狀態(tài)硬件清除無需軟件手動(dòng)清。

對(duì)比DIEPMSK和DIEPINTi可知,DIEP的NYET,Bble,PktDrp,TxFEmp是不受MASK控制的。

圖片

對(duì)比DOEPMSK和DOEPINTi可知,DOEP的StupPktRcvd,PktDrpSts是不受MASK控制的。

圖片

對(duì)比如IN和OUT中斷類型有一些相同的,有一些不一樣的,比如OUT多了Setup等。

圖片

拓?fù)浣Y(jié)構(gòu)如下

圖片

3.2中斷處理

前面提到控制傳輸對(duì)應(yīng)端點(diǎn)0,和其他端點(diǎn)沒什么本質(zhì)區(qū)別。其中斷狀態(tài)主要關(guān)注

DIEPINTn和DOEPINTn兩個(gè)寄存器以確定具體的中斷類型。

前面回顧了控制傳輸有3個(gè)階段,所以對(duì)于驅(qū)動(dòng)編寫來說重點(diǎn)要知道當(dāng)前處于什么階段以決定下一步軟件要怎么做,所以軟件一般使用狀態(tài)機(jī)記錄當(dāng)前狀態(tài)然后根據(jù)中斷標(biāo)志確定下一個(gè)階段。從上面可以看到DIEPINTn和DOEPINTn兩個(gè)寄存器有很多的中斷類型,并不是所有的都和控制傳輸?shù)碾A段有關(guān)的,控制器設(shè)計(jì)時(shí)就考慮到了這一點(diǎn),盡量精簡(jiǎn)標(biāo)志的邏輯,通過盡可能少的標(biāo)志組合可以確定當(dāng)前階段。

手冊(cè)《10.3.1 Interrupt Handling》中做了一個(gè)總結(jié),

軟件只需要關(guān)心以下標(biāo)志即可

DIEPINTn.XferCompl 如果描述符中IOC設(shè)置,表示IN端點(diǎn)對(duì)應(yīng)的描述符處理完

DIEPINTn.InTknTxfEmp TxFIFO空時(shí)收到了主機(jī)發(fā)的IN令牌,此時(shí)設(shè)備沒有數(shù)據(jù)可回

DOEPINTn.XferCompl 如果描述符中IOC設(shè)置,表示OUT端點(diǎn)對(duì)應(yīng)的描述符處理完

DOEPINTn.SetUp 表示控制器在Setup包后收到了IN和OUT令牌。

DOEPINTn.StsPhseRcvd 控制寫傳輸主機(jī)切換到了狀態(tài)階段,此時(shí)設(shè)備需要發(fā)狀態(tài)包(0長(zhǎng)包)

當(dāng)控制器看到需要為OUT端點(diǎn)設(shè)置多個(gè)中斷位時(shí),控制器會(huì)對(duì)這些中斷設(shè)置進(jìn)行一些優(yōu)化,減少中斷的有效組合的數(shù)量,以簡(jiǎn)化應(yīng)用程序處理。

控制器對(duì)中斷處理的優(yōu)先級(jí)如下

DOEPINTn.XferCompl>DOEPINTn.StsPhseRcvd(SI)>DOEPINTon.SetUp.

基于此,應(yīng)用程序只需要解碼下表中所示的OUT端點(diǎn)的中斷組合:

場(chǎng)景StsPhseRcvd (SI)SetUp (SPD)XferCompl (IOC)說明
A001控制器更新了描述符,軟件需要查詢描述符的SR位以確定數(shù)據(jù)是SETUP包還是OUT傳輸?shù)臄?shù)據(jù)。
B010前面收到了SETUP包且Setup階段完成,即收到了Setup包的內(nèi)容。
C011控制器更新了描述符,對(duì)應(yīng)Setup包。且Setup階段完成。
D100控制OUT傳輸,主機(jī)切換到了狀態(tài)階段。
E101在A的基礎(chǔ)上且主機(jī)切換到了控制寫的狀態(tài)階段,即D+A.

總結(jié)一下就是B和C確定當(dāng)前處于Setup完成階段,根據(jù)Setup包內(nèi)容軟件決定后面是發(fā)數(shù)據(jù)還是讀數(shù)據(jù),還是回狀態(tài)包(無數(shù)據(jù))。

D和E確定當(dāng)前處于控制寫的狀態(tài)階段,設(shè)備需要回0長(zhǎng)包。

A需要根據(jù)描述符的SR位以確定當(dāng)前是收到的SETUP包還是OUT數(shù)據(jù)包。

四.總結(jié)

本篇重點(diǎn)介紹了中斷相關(guān)寄存器,以及OUT端點(diǎn)相關(guān)中斷的組合以確定當(dāng)前處于控制傳輸?shù)氖裁措A段。兩者都是驅(qū)動(dòng)編寫的重點(diǎn)需要理解的內(nèi)容。下一篇我們繼續(xù)介紹控制傳輸,軟件的編寫。

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5343

    瀏覽量

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

    關(guān)注

    60

    文章

    7945

    瀏覽量

    264600
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3615

    瀏覽量

    93719
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    898

    瀏覽量

    41492
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5047

    瀏覽量

    97442
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4787

    瀏覽量

    68591
  • 單板計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    15631
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32869
  • 驅(qū)動(dòng)開發(fā)

    關(guān)注

    0

    文章

    130

    瀏覽量

    12075
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    128
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    上一篇我們介紹了控制器寄存器,而驅(qū)動(dòng)的編寫底層無非就是配置各種寄存器,所以第一步先要準(zhǔn)備寄存器的頭文件,對(duì)
    的頭像 發(fā)表于 05-16 14:04 ?2430次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</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ū)動(dòng)開發(fā)-IN端點(diǎn)發(fā)送相關(guān)寄存器詳解

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

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

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

    基于DWC2USB驅(qū)動(dòng)開發(fā)-0x01開篇介紹與新思DWC2 USB2.0控制器簡(jiǎn)介

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-0x01開篇介紹與新思DWC2 USB2
    的頭像 發(fā)表于 05-08 18:10 ?4609次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-0x01開篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0<b class='flag-5'>控制器</b>簡(jiǎn)介

    基于DWC2USB驅(qū)動(dòng)開發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹

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

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

    本文對(duì)控制器寄存器有了一個(gè)整體上的概覽,先了解個(gè)大概,了解寄存器的組織結(jié)構(gòu),大致了解一下常用的寄存器。后面編程時(shí)再一個(gè)個(gè)對(duì)照每一個(gè)寄存器
    的頭像 發(fā)表于 05-16 12:50 ?3314次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</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ū)動(dòng)開發(fā)-0x0D PHY寄存器讀寫代碼編寫與測(cè)試

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

    基于DWC2USB驅(qū)動(dòng)開發(fā)-USB復(fù)位詳解

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-USB復(fù)位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們?cè)敿?xì)介紹了
    的頭像 發(fā)表于 07-07 11:18 ?6.5w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>復(fù)位詳解

    基于DWC2USB驅(qū)動(dòng)開發(fā)-USB連接詳解

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊(cè),規(guī)格書,練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?3708次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>連接詳解

    基于DWC2USB驅(qū)動(dòng)開發(fā)-設(shè)備類驅(qū)動(dòng)框架

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-設(shè)備類驅(qū)動(dòng)框架 (qq.com) 一.前言 從軟件頂層,從數(shù)據(jù)流的角度來看
    的頭像 發(fā)表于 07-16 15:56 ?1321次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-設(shè)備類<b class='flag-5'>驅(qū)動(dòng)</b>框架

    基于DWC2USB驅(qū)動(dòng)開發(fā)-發(fā)送相關(guān)寄存器DMA寄存器詳解

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-發(fā)送相關(guān)寄存器DMA
    的頭像 發(fā)表于 07-16 16:42 ?1655次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-發(fā)送<b class='flag-5'>相關(guān)</b>的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b>詳解

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

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

    基于DWC2USB驅(qū)動(dòng)開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對(duì)于驅(qū)動(dòng)
    的頭像 發(fā)表于 08-08 09:43 ?2307次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>-數(shù)據(jù)不能發(fā)送問題分析案例

    如何對(duì)基于hal庫的DWC2 USB IP進(jìn)行調(diào)試呢

    背景之前適配 DWC2 USB IP 的時(shí)候,主要是基于 st 的 hal 庫來走的,當(dāng)時(shí)我就對(duì)他們的 hal 庫代碼不滿,只是無奈,迫于時(shí)間就沒重構(gòu),果不其然,usb bug 一堆,隨意舉例,這還
    發(fā)表于 06-14 15:23

    51單片機(jī)與中斷相關(guān)寄存器

    51單片機(jī)與中斷相關(guān)寄存器簡(jiǎn)介中斷控制寄存器IE中斷
    發(fā)表于 11-12 11:36 ?8次下載
    51單片機(jī)與<b class='flag-5'>中斷</b><b class='flag-5'>相關(guān)</b>的<b class='flag-5'>寄存器</b>
    主站蜘蛛池模板: 天天视频国产精品| 一区二区三区四区在线不卡高清| 久久影院午夜伦手机不四虎卡| 最新丁香六月| 欧美三级视频| 天天操操| 高清视频 一区二区三区四区| 欧美黄色tv| 欧美夜夜夜| 高清一区高清二区视频| 美女国产在线观看免费观看| 私色综合网| 中文字幕日韩三级| 国产三级观看| 性欧美1819| 日日噜噜夜夜狠狠久久aⅴ| 456主播喷水在线观看| 狼狼鲁狼狼色| 日本一区二区三区四区不卡| 五月天婷婷网亚洲综合在线| 清朝荒淫牲艳史在线播放| 噜噜噜天天躁狠狠躁夜夜精品| 米奇精品一区二区三区| 亚洲成在| 亚洲视频精选| 久月婷婷| 国产美女作爱| 91大神在线观看精品一区| 欧美性xxxxbbbb| 九色亚洲| 色婷婷激婷婷深爱五月小说| 午夜亚洲视频| 中国videos偷窥| av2014天堂网| 九九热在线精品视频| 国产激烈无遮挡免费床戏视频| 在线播放黄色网址| 欧美69视频在线| 丁香亚洲综合五月天婷婷| 日韩免费一级毛片| 黄 色 成 年人在线|