1 DSP的外設驅動開發模型
TI公司為開發DSP的外設驅動程序定義了標準的設備驅動模型,并將設備驅動分為類驅動和微驅動,即依賴于硬件層和不依賴于硬件層。兩層之間使用通用接口進行數據通信,并提供了一系列的API接口,用戶應用程序通過調用API來訪問相應的外部設備。外設驅動開發模型的建立,提高了外設驅動程序的可重用性和模塊化程度,簡化了驅動程序的開發。外設開發模型如圖1所示。
② 微驅動(mini driver)。微驅動程序與外部硬件設備相關,所以設計微驅動程序是外設驅動開發的重點。微驅動程序與類驅動程序的接口格式是固定的,但微驅動程序對底層硬件的操作則須根據硬件平臺的不同需要做相應的改動。微驅動通過接收類驅動層發出的調用命令來決定對底層硬件進行什么樣的操作。
類驅動通過標準的微驅動接口調用微驅動控制硬件設備。到目前為止,TI共定義了3類驅動:①流輸入輸出模塊(SIO),為每個DSP/BIOS線程提供一個獨立的I/O機制,執行點到點的數據傳送,支持動態創建,通過DIO適配模塊與IOM連接;②管道管理模塊(PIP),提供管理異步I/O的數據管道,每個管道對象都有一塊同樣大小的緩存,PIP模塊通過緩存進行數據傳輸,通過PIO適配模塊與IOM通信;③通用輸入輸出模塊(GIO),基于流輸入/輸出模式的同步I/O,適合大流量數據的傳輸,更適合文件系統。在用戶應用程序中可直接調用GIO的API函數,GIO不需要額外的適配模塊,可直接與IOM進行交互。GIO的這些優點使得通過GIO模塊與外部設備進行數據流傳輸,操作簡單、穩定,所以在視頻采集的類驅動中采用了通用輸入輸出模塊GIO。
GIO模塊實現GIO的類驅動,用于提供一個模塊化的讀寫應用程序接口到應用程序。通過封裝這部分代碼,應用程序可以通過GIO提供的應用程序接口間接調用各種IOM微驅動來減小整體的代碼大小,如圖2所示。
傳統的文件系統用讀寫應用程序接口來完成應用程序與文件之間的數據傳輸,需要由GIO類驅動和IOM微驅動來完成所需的雙向通道。對GIO接口模塊的擴展可以更加友好和高效地實現視頻抓取和視頻顯示。這種擴展特別滿足了視頻設備存儲空間(例如指定的幀緩存)的分配,而且通過簡單的應用程序調用來更新視頻幀緩存,提供視頻驅動與應用程序之間的視頻數據的更新。GIO類驅動具有如下接口,在函數表中指定設備的操作模式:
2 DM642芯片視頻驅動程序設計
視頻驅動程序的設計主要包括微驅動、類驅動和中間接口3方面的設計。為了的提高視頻驅動代碼的復用性和通用性,在視頻采集驅動程序實例中,在GIO類驅動程序基礎上進一步封裝成FVID類。將微驅動細分為視頻端口類和指定的編解碼芯片微驅動,二者之間通過外部設備控制接口(EDC)實現對外圍芯片的打開、控制和關閉等操作。這樣一來,即使所使用的板長上集成了不同的視頻編解碼芯片,也只需改變特定編解碼芯片的微驅動。視頻采集驅動程序的類/微驅動模型如圖4所示。
例如,對VPORT_PortParams接口的說明屬于對VPORT端口類的說明,而對SAA7121接口的說明則屬于對特定編碼芯片的說明。如果把VPORT類用于不同的芯片,則只需對SAA712l進行修改。對EDC的接口說明如下(指定要對外圍設備進行打開、關閉等的操作):
下面舉例說明對FVID類驅動的視頻應用程序接口(video API)的操作。就應用程序而言,對設備驅動程序的操作可分為3個階段:創建、處理和刪除。創建是在應用程序與外部設備之間建立一個數據輸入/輸出的邏輯通道,對應于FVID_create;處理是在應用程序與外部設備之間進行數據的傳送,并對外設進行相應的控制,對應于FVID_control和FVID_alloc;外設使用完畢后,相應地刪除原先所建立的通道,對應于FVTD_delete。具體的調用函數如下:
結 語
本文介紹了TI公司開發的類/微驅動模型和改進后DM642的視頻類/微驅動模型。實踐表明,DM642的視頻類/微驅動模型降低了系統中軟硬件之間的耦合性,提高了驅動程序的可重用性和可移植性,簡化了視頻驅動程序的開發。