新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > DSP/BIOS中的IO設備驅動編程技術

        DSP/BIOS中的IO設備驅動編程技術

        作者: 時間:2010-12-22 來源:網絡 收藏

        2.2 三類函數

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

        2.2.1 控制函數

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

        2.2.2 隊列管理

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

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

        2.2.3 信令

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

        3 LIO驅動程序例子

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

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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 梨树县| 青岛市| 阜新| 崇明县| 上林县| 新乡县| 东宁县| 黔东| 井研县| 安新县| 宣汉县| 星座| 南宫市| 仪征市| 青冈县| 化德县| 额济纳旗| 冀州市| 新巴尔虎右旗| 增城市| 开化县| 曲沃县| 廊坊市| 和田县| 邹平县| 盐城市| 高邮市| 安龙县| 冷水江市| 兴城市| 营山县| 呼玛县| 新兴县| 阜城县| 定远县| 称多县| 芮城县| 太和县| 仁布县| 伽师县| 海原县|