新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DSP/BIoS設(shè)備驅(qū)動(dòng)模型的視頻驅(qū)動(dòng)程序開發(fā)

基于DSP/BIoS設(shè)備驅(qū)動(dòng)模型的視頻驅(qū)動(dòng)程序開發(fā)

作者: 時(shí)間:2009-05-06 來源:網(wǎng)絡(luò) 收藏
微型主要通過一些函數(shù)來完成對外部設(shè)備的直接控制。只要微型創(chuàng)建了規(guī)定的函數(shù),應(yīng)用程序就可以方便地通過DIO適配模塊、PIo適配模塊或(和)GIO類調(diào)用。
例如:GIO_create被調(diào)用時(shí),會(huì)運(yùn)行mdCreate-Chan來創(chuàng)建一個(gè)通道。
這些微型驅(qū)動(dòng)函數(shù)包括:mdBindDev/mdUBind-Dev(綁定/刪除通道函數(shù)):在程序建立接口時(shí)調(diào)用,完成設(shè)備的初始化硬件設(shè)備/在程序結(jié)束時(shí)調(diào)用,卸載設(shè)備。mdCreateChan/mdDeleteChan(創(chuàng)建/刪除通道):需要在應(yīng)用程序與設(shè)備實(shí)例之間創(chuàng)建一個(gè)邏輯通信通道,用于交換驅(qū)動(dòng)數(shù)據(jù)。應(yīng)用程序可創(chuàng)建一個(gè)或多個(gè)邏輯通道,微型驅(qū)動(dòng)用通道對象來代表這些通道。這兩個(gè)函數(shù)就是用來分配和釋放通道對象。mdSubmitChan(遞交I/O請求):該函數(shù)處理傳遞給它的IOM_Pack-et結(jié)構(gòu)體中的命令代碼(cmd),根據(jù)命令代碼,完成相應(yīng)的處理或返回錯(cuò)誤代碼。ISR(服務(wù)設(shè)備中斷并完成I/O操作):IOM微型驅(qū)動(dòng)在中斷的ISR中將以處理完的IOM_Packet請求出隊(duì),啟動(dòng)下一次傳輸或服務(wù)請求,調(diào)用類驅(qū)動(dòng)的回調(diào)函數(shù)與應(yīng)用程序進(jìn)行同步,并返回出隊(duì)的IOM_Packet。mdControlChan(控制設(shè)備):用來操作外部設(shè)備。
這些微型驅(qū)動(dòng)的函數(shù)入口放在接口表(IOM_Fxns)中,供適配模塊或GIO類驅(qū)動(dòng)調(diào)用。
2 驅(qū)動(dòng)
下面以TMS320DM842芯片為例,介紹有關(guān)采集與顯示的驅(qū)動(dòng)程序的開發(fā)。通過編寫驅(qū)動(dòng)程序,完成信號的實(shí)時(shí)采集與顯示功能。是TI公司推出的一款專門用于視頻/圖像處理的定點(diǎn)數(shù)字信號處理器,它C64x內(nèi)核,帶有3個(gè)可配置的視頻端口,與視頻采集芯片直接相連,無需外加邏輯電路或FIFO緩存,只需編寫相關(guān)解編碼芯片的驅(qū)動(dòng)程序,就可以完成視頻信號的采集與顯示。在這里使用的解碼、編碼芯片分別為PHILIPS SAA7115和SAA7105。
2.1 視頻類驅(qū)動(dòng)
在視頻驅(qū)動(dòng)程序結(jié)構(gòu)中,為了最大程度地提高視頻驅(qū)動(dòng)代碼的復(fù)用性和通用性,將類驅(qū)動(dòng)又劃分為兩層結(jié)構(gòu),其中上層為FVID,它是在/BIOS GIO類驅(qū)動(dòng)之上的簡單封裝,下層是GIO類驅(qū)動(dòng)程序。GIO類驅(qū)動(dòng)提供獨(dú)立的、一般的API函數(shù)集并且為微型驅(qū)動(dòng)提供廣泛的服務(wù),而上層的FVID向上層的視頻采集、顯示結(jié)構(gòu)提供定制的API函數(shù)。
在視頻驅(qū)動(dòng)中,主要是通過調(diào)用FVID模塊函數(shù)來完成類驅(qū)動(dòng)代碼的編寫工作。FVID主要有以下幾個(gè)API函數(shù):FVID_create:分配并初始化通道對象;FVID_control:向微型驅(qū)動(dòng)發(fā)送控制命令;FVID_al-loc:向應(yīng)用程序分配視頻端口緩沖區(qū);FVID_ex-change:交換緩沖區(qū);FVID_free:釋放緩沖區(qū);FVID_delete:刪除通道對象。
在配備視頻接口的時(shí),至少指定它要開設(shè)3個(gè)以上的視頻緩沖區(qū)(FVID中,默認(rèn)分配3個(gè)緩沖區(qū)),幀緩沖區(qū)通過FVID_alloc(),F(xiàn)VID_free(),F(xiàn)VID_exchange()三個(gè)函數(shù)在應(yīng)用程序與驅(qū)動(dòng)之間交換。
2.2 視頻微型驅(qū)動(dòng)
視頻微型驅(qū)動(dòng)也分為兩層結(jié)構(gòu),上層為通用視頻端口層部分,下層為指定編解碼芯片微驅(qū)動(dòng)層部分,它們通過外部設(shè)備控制接口(External Device Control,EDC)實(shí)現(xiàn)對外圍芯片的操作。這種微驅(qū)動(dòng)結(jié)構(gòu)的好處是,當(dāng)使用不同的芯片時(shí),只需修改指定編解碼芯片微驅(qū)動(dòng)那一部分,不需將整個(gè)微驅(qū)動(dòng)重新編寫,使得驅(qū)動(dòng)的復(fù)用性大大增強(qiáng)。
視頻驅(qū)動(dòng)程序模型如圖3所示。
2.3 TMS320DM642視頻驅(qū)動(dòng)設(shè)計(jì)步驟
2.3.1 注冊微型驅(qū)動(dòng)
由于應(yīng)用程序、類驅(qū)動(dòng)最終都是要通過微型驅(qū)動(dòng)的函數(shù)來完成對外部設(shè)備的直接控制,所以驅(qū)動(dòng)程序設(shè)計(jì)的第一步就是要在/BIOS Config中的Input/Output->Device Drivers->Uger-Defined Devices項(xiàng)目添加設(shè)備并注冊微驅(qū)動(dòng),進(jìn)行屬性的設(shè)置,并指明IOM_Fxns函數(shù)表地址和設(shè)備參數(shù)地址,如圖4所示。
/BIOS會(huì)在內(nèi)部維護(hù)一個(gè)“設(shè)備表”,其中包含User-Defined Devices對象進(jìn)行配置的設(shè)備實(shí)例。
2.3.2 編寫類驅(qū)動(dòng)代碼
FVID函數(shù)會(huì)在設(shè)備表中查找已注冊的微驅(qū)動(dòng),并調(diào)用微驅(qū)動(dòng)函數(shù)完成對外部設(shè)備的操作控制。

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉