新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 基于GIO/FVID的DSP視頻驅動程序

        基于GIO/FVID的DSP視頻驅動程序

        ——
        作者:臧博 吳裕斌 曹丹華 時間:2007-08-14 來源:華中科技大學 收藏
            引言

          隨著時代的發展,技術在遠程監控、可視電話、工業檢測等視頻處理領域得到了廣泛的應用,對于不同的視頻處理系統,會使用不同的視頻設備,所以有必要為視頻沒備設計,為高層應用程序提供統一的接口來操作底層硬件。只要是遵循此接口標準開發的高層應用程序,都可以在具有相同接口的不同硬件平臺上運行,具有很好的通用性和可移植性。同時高層應用程序設計人員只要會使用設備提供的API接口,就不必了解底層硬件的具體實現,可以大大提高整個視頻系統的開發效率。

          對于視頻設備,TI公司也提出了對應的視頻設備驅動程序模型,但這些模型主要是針對6000系列高端,甚至是DM64X這樣的視頻處理專用設計的。而TMS320F2812(簡稱F2812)DSP這樣的低端處理器,內部存儲空間較小,且沒有DM64X那樣專用的視頻接口。本文針對這類問題,提出了對TI視頻驅動模型進行簡化和改造的方法,使視頻設備驅動程序占用盡量少的系統資源,來完成對視頻硬件設備的操作。這種視頻驅動模型的裁減方法,對于使用低端處理器的視頻處理系統具有借可鑒性。

          1、基于DSP/BIOS的外設

        驅動開發模型

          TI公司為開發DsP的外設驅動程序,推出了DSP/BIOS Device Driver kit,定義了標準的設備驅動模型,并提供了一系列的API接口。如圖1所示,外設驅動程序分為兩層:

          ①類驅動(class driver)。類驅動程序用來為應用程序提供接口。這部分程序與設備無關,主要功能包括維護設備數據緩沖區,向上提供API接口供應用層程序調用,并協調應用程序對外設操作的同步和阻塞;向下提供適配層與迷你驅動層相連,實現API接口函數到迷你驅動層程序的映射。類驅動程序與硬件無關,只要外設驅動模型選定了,類驅動程序就定下來了,不需要做多少修改。

          ②迷你驅動(mini driver)。迷你驅動程序與設備相關,所以設計迷你驅動程序是外設驅動開發中的重點。迷你驅動程序與類驅動層的接口格式是統一的,但迷你驅動程序對底層硬件的操作是根據硬件平臺的不同而變化的。迷你驅動接收類驅動層發出的IOM_Packet命令包,決定對底層硬件進行什么樣的操作。

          外設驅動程序模型又可以分為以下3類:

          ①PIP/PI0模型。基于數據管道的I/O模型,每個管道都在維護自己的一個緩沖區。當數據寫入緩沖區,或從緩沖區取出數據時,便會激發notifyReader和notifyWriter函數實現數據的同步。

          ②SIO/DIO模型。基于數據流的I/O模型,一個數據流是單向的,要么是輸入,要么是輸出,而且SIO/DIO模瓔使用異步方式來操作I/0,對于數據的讀寫、處理可以同時進行。

          ③GI0模型。通用的I/O模型,靈活性很強,且沒有適配層,直接操作迷你驅動程序,主要用來設計新型的設備驅動模型。

        基于DSP/BIOS 外設驅動模型

          2、視頻處理系統硬件平臺

          硬件平臺如圖2所示。系統以TI公司的F2812 DSP作為中心處理器,以模擬攝像機進行視頻信號采集,再使用SAA7111視頻解碼芯片將其轉換為BT601格式的數字視頻信號。DSP將數字視頻信號處理后,再寫入輸出幀緩存AL422中,并控制視頻編碼芯片ADV7177,將其轉換為模擬電視信號輸出。整個系統以l片CPLD——IspMachLC4128來協調各個芯片之間的時序關系。

        硬件平臺

          3、視頻設備驅動程序開發

          3.1 設備驅動程序模型的選擇

          如上文介紹,常用的驅動程序模型包括3類:PIO、SIO和GIO。比較這3種模型可以知道:PIO支持更底層的通信,適合設計比較簡單的外設驅動程序。例如在TI公司的6X11DSK板上實現的音頻采集和回放,一般都是基于PIO模型的。而SIO模型具有很好的緩沖器分配回收機制,比較適合描述視頻設備,但是SIO的很多功能在本系統中使用不到,而且GIO模型設計的目的就是針對特殊硬件的新型設備,所以最終考慮使用GIO設備驅動模型。

          TI公司最初設計的GIO模型其實是有缺陷的,主要在數據緩沖區管理的問題上,應用程序在取得緩沖區進行數據處理之后,卻無法將緩沖區返回設備驅動程序。于是TI公司在推出DM6北這一款主要用于視頻處理的DSP芯片的同時,對GIO模型進行了改進,提出了專門針對視頻設備的模型。模型是建立在GIO模型之上的,以_alloc、FVID_exchangc、FVID_free函數對GIO模型中的GIO_submit函數進行封裝,解決了GIO模型中驅動程序不能回收緩沖區的問題。

          此外FVID模型還專門設計了FVID_frame結構。此結構中包含了常用的視頻信號的信息,如行數、列數、YUV結構、場頻等,很適合描述視頻數據幀。但FVID主要是針對DM64X系統設計的,DM64X的很多功能在F2812 DSP上都不具備。所以本設計針對F2812 DSP視頻處理系統,對FVID模型進行了一定的簡化,保留類驅動程序,而重寫了迷你驅動層程序。

            3.2 視頻處理程序運行流程

          在設計完成的視頻驅動程序基礎上,開發一個典型的視頻處理應用程序,其運行流程如圖3所示。首先使用FVID_create函數建立GIO_capture和GIO_play兩個視頻通道.再以GIO_capture通道的FVID_control函數發出cmd_start,采集到1幀視頻數據。應用程序以GIO_capture通道的FVID_alloc函數向驅動程序申請采集到的數據幀,進行處理后再以FVID_exchange函數將修改后的數據幀返回驅動程序,最后再調用GI0_play通道的FVID_control函數發出cmd_display命令將數據幀輸出。由圖3可以看到,應用程序調用的這些FVID_XXX接口函數會自動由類驅動程序層層向下映射,到達迷你驅動層程序;而迷你層程序可以直接操縱底層硬件設備,來完成整個視頻的采集、處理和顯示的過程。

        運行流程圖

           3.3 迷你驅動程序的設計

          迷你層驅動程序足整個設計的重點所在,下面詳細介紹其實現方法。迷你層驅動程序主要由表1所列的幾個函數組成。

        迷你層驅動程序

          對各個函數的具體實現如下:

          ①mdBindDev函數。在應用程序建立設備接口(如FVID_create函數)時被調用,完成對外部設備的初始化。而與其對應的是md_UBindDev函數,使用nadUBindDev函數會使設備處于無效狀態,不能再使用。

          ②mdCreateChan函數。使用此函數為應用程序和驅動程序建立通信通道,同時為每個通道申請緩沖區。在TI公司發

        布的FVID模型中,為每個通道都分配了3個緩沖區,輪流與外部設備交換數據,每個緩沖區對應1幀視頻數據,這樣的設計在DM642這樣可以外擴大容量SDRAM的系統中是完全可行的。但是對于本系統,F2812DSP外部只擴展了512K
        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 铜山县| 高碑店市| 荆州市| 星子县| 彩票| 富源县| 五指山市| 宁波市| 中西区| 漳浦县| 大方县| 伊金霍洛旗| 镇巴县| 镇雄县| 墨竹工卡县| 元江| 女性| 天台县| 共和县| 惠州市| 承德市| 安平县| 策勒县| 炎陵县| 镇康县| 凤凰县| 油尖旺区| 比如县| 云浮市| 绥棱县| 张家港市| 陇西县| 宁武县| 宿迁市| 三明市| 无棣县| 莒南县| 平原县| 宁阳县| 平江县| 临武县|