基于DSP/BIoS設備驅動模型的視頻驅動程序開發(fā)
微型驅動主要通過一些函數來完成對外部設備的直接控制。只要微型驅動創(chuàng)建了規(guī)定的函數,應用程序就可以方便地通過DIO適配模塊、PIo適配模塊或(和)GIO類驅動調用。
例如:GIO_create被調用時,會運行mdCreate-Chan來創(chuàng)建一個通道。
這些微型驅動函數包括:mdBindDev/mdUBind-Dev(綁定/刪除通道函數):在程序建立接口時調用,完成設備的初始化硬件設備/在程序結束時調用,卸載設備。mdCreateChan/mdDeleteChan(創(chuàng)建/刪除通道):需要在應用程序與設備實例之間創(chuàng)建一個邏輯通信通道,用于交換驅動數據。應用程序可創(chuàng)建一個或多個邏輯通道,微型驅動用通道對象來代表這些通道。這兩個函數就是用來分配和釋放通道對象。mdSubmitChan(遞交I/O請求):該函數處理傳遞給它的IOM_Pack-et結構體中的命令代碼(cmd),根據命令代碼,完成相應的處理或返回錯誤代碼。ISR(服務設備中斷并完成I/O操作):IOM微型驅動在中斷的ISR中將以處理完的IOM_Packet請求出隊,啟動下一次傳輸或服務請求,調用類驅動的回調函數與應用程序進行同步,并返回出隊的IOM_Packet。mdControlChan(控制設備):用來操作外部設備。
這些微型驅動的函數入口放在接口表(IOM_Fxns)中,供適配模塊或GIO類驅動調用。
2 TMS320DM642視頻驅動
下面以TMS320DM842芯片為例,介紹有關TMS320DM642視頻采集與顯示的驅動程序的開發(fā)。通過編寫驅動程序,完成視頻信號的實時采集與顯示功能。TMS320DM642是TI公司推出的一款專門用于視頻/圖像處理的定點數字信號處理器,它基于C64x內核,帶有3個可配置的視頻端口,與視頻采集芯片直接相連,無需外加邏輯電路或FIFO緩存,只需編寫相關解編碼芯片的驅動程序,就可以完成視頻信號的采集與顯示。在這里使用的解碼、編碼芯片分別為PHILIPS SAA7115和SAA7105。
2.1 視頻類驅動
在視頻驅動程序結構中,為了最大程度地提高視頻驅動代碼的復用性和通用性,將類驅動又劃分為兩層結構,其中上層為FVID模型,它是在DSP/BIOS GIO類驅動之上的簡單封裝,下層是GIO類驅動程序。GIO類驅動提供獨立的、一般的API函數集并且為微型驅動提供廣泛的服務,而上層的FVID模型向上層的視頻采集、顯示結構提供定制的API函數。
在視頻驅動中,主要是通過調用FVID模塊函數來完成類驅動代碼的編寫工作。FVID主要有以下幾個API函數:FVID_create:分配并初始化通道對象;FVID_control:向微型驅動發(fā)送控制命令;FVID_al-loc:向應用程序分配視頻端口緩沖區(qū);FVID_ex-change:交換緩沖區(qū);FVID_free:釋放緩沖區(qū);FVID_delete:刪除通道對象。
在配備視頻接口的設備驅動時,至少指定它要開設3個以上的視頻緩沖區(qū)(FVID模型中,默認分配3個緩沖區(qū)),幀緩沖區(qū)通過FVID_alloc(),FVID_free(),FVID_exchange()三個函數在應用程序與驅動之間交換。
2.2 視頻微型驅動
視頻微型驅動也分為兩層結構,上層為通用視頻端口層部分,下層為指定編解碼芯片微驅動層部分,它們通過外部設備控制接口(External Device Control,EDC)實現對外圍芯片的操作。這種微驅動結構的好處是,當使用不同的芯片時,只需修改指定編解碼芯片微驅動那一部分,不需將整個微驅動重新編寫,使得驅動的復用性大大增強。
視頻驅動程序模型如圖3所示。
評論