<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > DSP/BIOS中的IO設備驅動(dòng)編程技術(shù)

DSP/BIOS中的IO設備驅動(dòng)編程技術(shù)

作者: 時(shí)間:2010-12-22 來(lái)源:網(wǎng)絡(luò ) 收藏

2.2 三類(lèi)函數

LIO接口中有三類(lèi)函數:控制函數、緩沖區和隊列管理函數、信令函數。

2.2.1 控制函數

控制函數用來(lái)實(shí)現設備的啟動(dòng)、關(guān)閉和控制。其初始函數為驅動(dòng)程序保存資源(物理外設和內存)。它使用結構指針作為可選變量,此結構是一種設備的特殊變量結構。

2.2.2 隊列管理

假定每個(gè)設備至少有一個(gè)用來(lái)傳送數據的緩沖區。許多設備(如McBSP和DMA)帶有允許雙緩沖的緩沖隊列。圖1是一個(gè)有三個(gè)存儲單元的LIO驅動(dòng)程序,驅動(dòng)程序中有:由外設填滿(mǎn)或清空的緩沖區“todevice”(到設備)隊列,將傳送的緩沖區返回到應用程序的緩沖區管理程序的“from device”(來(lái)自設備)隊列和當前傳送數據的緩沖區。在虛線(xiàn)框里的認為是在驅動(dòng)程序里面。當前傳送數據的緩沖一般由外設寄存器控制,如DMA源寄存器或目標寄存器,在圖1中畫(huà)在“外設”中。含硬件隊列(如DMA重新如載寄存器)的設備也會(huì )含一個(gè)或多個(gè)存儲單元用業(yè)存儲指針為以后傳送用,此隊列為“to device”隊列。能包含緩沖區指針的第三個(gè)存儲單元是“from device”隊列,在驅動(dòng)程序中為一變量。當設備準備傳送緩沖區時(shí),緩沖區從輸入隊列傳送到外設寄存器。這些緩沖區然后移到輸出隊列以完成傳送,作為對CPU中斷的響應。

PutBuf()將緩沖區從應用程序傳送到驅動(dòng)程序的輸入隊列。GetBuf()從輸出隊列得到緩沖區。IsEmpty()和IsFull()返回輸入隊列、輸出隊列的狀態(tài)。如果輸入隊列滿(mǎn),因為無(wú)空間裝新緩沖區,調用putBuf()會(huì )返回錯誤代碼。若IsFull()返回false,接下來(lái)可調用putBuf()。如果IsFull()返回true,但若在IsFull()返回true和調用putBuf()之間完成傳送,則調用putBuf()也可能會(huì )成功。

2.2.3 信令

如圖1所示,當傳送結束一般會(huì )觸發(fā)CPU中斷。此中斷會(huì )使應用程序將傳送的緩沖區轉移到輸出隊列,然后調用calback()傳到驅動(dòng)程序。Callback()應向應用程序發(fā)信號告知傳送完畢。

3 LIO驅動(dòng)程序例子

音頻處理如語(yǔ)音壓縮、呼叫過(guò)程音調檢測等,是DSP的一般應用。本例是使用TMS320C5402 DSK上的DMA將音頻編解碼數據從McBSP移到緩沖區中。

當驅動(dòng)程序響應應用程序調用和設備中斷時(shí),采用數據結構跟蹤驅動(dòng)程序的狀態(tài)。有效狀態(tài)是設備驅動(dòng)程序緩沖區隊列的狀態(tài),如圖1所示。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>