- 相關推薦
基于DM642的多路視頻采集系統
引言
隨著數字信號處理器 DPS 芯片集成度,運算速度,數據吞吐率等性能的不斷提高,己被廣泛應用于許多實時視頻處理和傳輸領域。一般圖像處理系統由攝像機、圖像采集卡、計算機構成,圖像理解和處理算法全部以軟件方式實現。這是因為實時數字圖像處理信息量和計算量大,而大多數圖像采集卡基于成本考慮沒有處理器和大容量的存儲器,絕大部分任務必須依靠計算機才能勝任。這種計算機參與的系統的應用場合受到很大限制,在工業或軍事等復雜環境下應用極為不便,因此許多專用圖像處理系統應運而生。脫離計算機獨立運行的實時專用圖像處理系統,由于集圖像采集、處理等功能于一體,并易于滿足圖像處理中數據量大、運算復雜、實時性強等要求而受到眾多研究人員的關注。
TI 公司推出的TMS320DM642 型數字信號處理器可實時處理4 路模擬視頻和音頻輸入、1 路模擬/數字視頻和1 路模擬音頻信號輸出[1-2]。適應PAL/NTSC 標準復合視頻CVBS 或分量視頻Y/C 格式的模擬信號輸入,可適于PAL/NTSC 標準S 端子或數字RGB 模擬/數字信號輸出,也可適應標準麥克風或立體聲音頻模擬輸入及標準立體聲音頻模擬輸出,并進采用EDMA 的數字視頻圖像信號的實時傳輸,具有對多路采集數據進行實時處理和分析的功能。
1 系統設計
TMS320DM642 是32 位定點高性能處理器,最高工作頻率可以達到720MHz,處理能力可以達到5760MIPS,因此可以實現對多路圖像的實時處理[3-5]。DM642 在TI 的C64x DSP內核基礎上進一步集成了完備的視頻接口、音頻接口、以太網接口、PCI-66 總線等片上外設。用戶可以方便地對音頻、視頻等各種復雜的運算進行高速處理,因此DM642 已經廣泛的應用于數字視頻服務器、多通道數字視頻錄像機、多通道數字視頻監控等領域。
本系統配置了 4M 的Flash 和32M 的SDRAM,可以滿足一般應用的需要。DM642 有三個視頻口,分別為VP0、VP1 和VP2。其中VP2 為單一功能的視頻口。VP0 和VP1 是與McBSP、McASP 復用引腳。DM642 上集成了一條I2C 總線,本系統中一共有4 個視頻輸入口,而一個I2C 中線能只能接兩個SAA7113 視解編碼器,因此需要在I2C 總線上做總線切換,分成I2C0 和I2C1,這樣就可以接4 個SAA7113 視解編碼器。I2C 總線切換電路見圖1。
整個系統是DM642 為核心,主要包括視頻模塊、存儲模塊、通信模塊以及其他外圍電路部分。視頻模塊由四塊編碼器芯片和一塊解碼器芯片組成,采用切換方式以支持四路復合視頻輸入和一路視頻輸出顯示;以存儲模塊通過DM642 的EMIF 接口擴展片外存儲器SDRAM 和FLASH,并通過CPLD 控制FLASH 片內分頁寄存器的讀寫;通信模塊部分利用CPLD 控制并口傳輸模式,實現時序邏輯以及數據傳輸,使整個系統作為從設備接受主設備控制以完成特定的圖像處理運算等。整個系統的框圖。
2 軟件設計
本設計的驅動程序是按照TI 公司的DDK 驅動模型設計的,具有很好的復用性、移植性和借鑒性。DDK 是TI 公司為簡化驅動開發復雜度,而定義的一個標準的驅動模型和一套API 函數[6-7]。該驅動模型主要分為兩層:類驅動和微型驅動。其中類驅動通過每個外部設備獨有的微型驅動對設備進行操作。微型驅動通過控制外設的寄存器、內存和中斷資源對外部設備實現控制。微型驅動程序必須將特定的外部設備有效地表示給類驅動。
根據 DDK 驅動模型,本驅動程序設計主要包括三個部分: I2C 總線控制部分,就是I2C總線讀寫操作的實現部分;類驅動部分,主要是為應用程序提供API 接口,它的設計在DDK模型里是通用的,可以不修改地直接采用,所以這里就不作具體介紹了;微型驅動部分是與硬件有關的,是驅動程序設計的重點。
2.1 I2C 總線控制驅動程序設計
該部分是實現 DM642 通過I2C 總線對SAA7113H 和SAA7121H 的控制,使用了底層函數。在TI 的CSL(Ship Support Library)中都有,只要包含相應的頭文件即可直接調用。如I2C配置結構體(I2C_config)、I2C 寫數據函數(I2C_writeByte)、I2C 配置操作函數(I2C_RSETH)等。
要是實現對SAA7113H 和SAA7121H 的控制,就要先對其進行配置。
對 SAA7113H 進行配置:
SA7113H_ConfParams sa7113hPAL[28] = {{0x01,0x08},{0x02,0xC3},{0x03,0x33},{0x04,0x00},{0x05,0x00},{0x06,0xE9},{0x07,0x0D},{0x08,0x00},{0x09,0x01},{0x0A,0x80},{0x0B,0x47},{0x0C,0x40},{0x0D,0x00},{0x0E,0x01},{0x0F,0x24},{0x10,0x08},{0x11,0x0C},{0x12,0x7E},{0x13,0x02},{0x15,0x17},{0x16,0x35},{0x17,0x02},{0x40,0x02},{0x58,0x00},{0x59,0x54},{0x5A,0x07},{0x5B,0x80},{0x5E,0x00}
};對SAA7121H 進行配置:
SA7121H_ConfParams sa7121hPAL[45] = {{0x26,0x00},{0x27,0x00},{0x28,0x21},{0x29,0x1d},{0x3A,0x13},{0x5A,0x0c},{0x5B,0x21},{0x5c,0xAF},{0x5d,0x23},{0x5e,0x35},{0x5f,0x35},{0x60,0x00},{0x61,0x06},{0x62,0x2F},{0x63,0xcb},{0x64,0x8a},{0x65,0x09},{0x66,0x2a},{0x67,0x55},{0x68,0x56},{0x69,0x67},{0x6a,0x58},{0x6b,0x20},{0x6c,0x05},{0x6d,0x20},{0x6e,0xA0},{0x6f,0x14},{0x70,0x80},{0x71,0xe8},{0x72,0x10},{0x73,0x42},{0x74,0x03},{0x75,0x03},{0x76,0x05},{0x77,0x16},{0x78,0x04},{0x79,0x16},{0x7a,0x18},{0x7b,0x38},{0x7c,0x40},{0x7d,0x00},{0x7e,0x00},{0x7F,0x00}
};
2.2 多路視頻采集的驅動程序設計
本驅動程序是基于 DDK 驅動模型設計的,通過 DSP/BIOS 配置工具在DSP/BIOS 應用程序中注冊并使用一個微型驅動,配置應用程序使用該微型驅動。創建一個新的設備對象后,對其屬性主要設置設備號、設備參數指針、設備實例的驅動函數表以及該驅動函數表的類型。
FVID 模型是建立在GIO 模型之上的,并對GIO 模型進行了改進。典型的有FVID_create()、FVID_control()、FVID_alloc()、FVID_exchange()、FVID_free()函數。FVID 函數會在設備表中查找已注冊的微型驅動,并調用微型驅動函數完成對外部設備的操作。然后創建FVID 采集、顯示通道,配置 SAA7121, SAA7113,分配相應的緩沖區,對得到的視頻幀進行處理等操作。
本設計是對兩路視頻信號同時采集,通過三個任務來完成:兩個視頻采集任務任務、一個視頻輸出任務。任務間是通過SCOM 模塊進行通信的,SCOM 模塊管理SCOM 隊列對象。
每一個SCOM 隊列內部使用一個隊列對象(QUE)和一個旗語對象(SEM)。在SCOM 隊列的結構在SCOM 模塊中是私有的。應用程序不應該涉及到SCOM 隊列的對象。
視頻采集任務的程序:
void tskVideoCaptureVp1(){FVID_Frame *capFrameBuf;SCOM_Handle fromInput1toDIS,fromDIStoInput1;fromInput1toDIS = SCOM_open("IN1TODIS"); /*打開SCOM 模塊*/fromDIStoInput1 = SCOM_open("DISTOIN1");FVID_alloc(capChan, &capFrameBuf); /*申請一個空間*/while(1){SCOM_putMsg(fromInput1toDIS, (FVID_Frame *)capFrameBuf);//向隊列中寫消息SCOM_getMsg(fromDIStoInput1, SYS_FOREVER); //重隊列中讀消息FVID_exchange(capChan, &capFrameBuf);}
}
這是其中的一路視頻采集程序,通過同樣的方法可以寫出第二路的采集程序。視頻輸出的任務中完成了兩路視頻的輸出,主要在循環中完成,程序如下:
while(1){capFrameBuf=(FVID_Frame*)SCOM_getMsg(fromInput1toDIS,SYS_FOREVER);for(i = 0; i < numLines; i ++){DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,disFrameBuf->frame.iFrm.y1 + i * disLinePitch, numPixels);}
capFrameBuf = (FVID_Frame *)SCOM_getMsg(fromInput1btoDIS, SYS_FOREVER);for(i = 0; i < numLines; i ++){DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,disFrameBuf->frame.iFrm.y1 + i * disLinePitch+352, numPixels);}
DAT_wait(DAT_XFRID_WAITALL);CACHE_clean(CACHE_L2ALL,NULL,NULL);FVID_exchange(disChan, &disFrameBuf);SCOM_putMsg(fromDIStoInput1, NULL);/* loop forever */SCOM_putMsg(fromDIStoInput1b, NULL);/* loop forever */}
整個軟件設計的流程圖見:
3 系統調試
本系統是一個多路視頻采集系統,通過巧妙的硬件設計和精簡的軟件設計,可以實時輸出各路圖像。以兩路為例,通過兩個CCD 攝像頭,分別接到四個視頻采集口中的兩個,然后通過把視頻輸出端口接到VGA 顯示器上。顯示器分左半邊顯示攝像頭A 的圖像,右半邊顯示攝像頭B 的圖像。實際效果圖見。
4 結論
本系統通過 I2C 總線上切換的方法完成了多路視頻采集系統的硬件設計,以 DDK 驅動模型做視頻驅動開發,可提高驅動程序的可重用性和可移植性,簡化視頻驅動程序的開發,從而極大地提高驅動程序的開發效率。實踐證明:基于 DDK 的視頻驅動程序運行穩定,與應用程序實現了無縫連接,是一種高效可靠的開發方法。多路視頻采集系統成功研制為多路視頻實時處理系統的實現提供了軟硬件支持。
中國碩士論文網提供大量免費碩士畢業論文,如有業務需求請咨詢網站客服人員!
[參考文獻] (References)
[1] Texas Instruments Incorporated.The DSP/BIOS Driver Developer’s Guide[Z].2002.
[2] Texas Instruments Incorporated.TMS320DM64x DSP Video Port/VCXO Interpolated Control(VIC) Portreference Guide[Z].2003.
[3] 劉瓊,安濤,金鋼等.基于 DM642 視頻采集處理系統硬件設計[J].微計算機信息,2007,11—2.
[4] 徐婉瑩,劉建軍,黃新生.基于CPLD 和DSP 的高速圖像采集技術研究[J].電子工程師,2004,30(6):48-50.
[5] 薛長松,楊國勝,李志強.基于DM642 的的雙CCD 同步運動研究[J].計算技術與自動化,2006, 25(4):24-27.
[6] T1 DSP/BIOS 用戶手冊與驅動開發[M].北京:清華大學出版社, 2007.
[7] 吳江,遲學芬,劉娜等.基于DDK 的音視頻編碼器驅動的設計[J].吉林大學學報(信息科學版),2007,25(3):246-250.
【基于DM642的多路視頻采集系統】相關文章:
基于PCI總線的雷達視頻采集方案03-19
基于USB接口的數據采集系統設計03-18
基于USB總線的高速數據采集系統03-26
基于ADSL傳輸的網絡視頻應用系統03-18
基于DSP的USB口數據采集分析系統03-18
基于用電采集系統的計量異常監測與分析03-16