軟件開發(fā)總結(jié)_第1頁
軟件開發(fā)總結(jié)_第2頁
軟件開發(fā)總結(jié)_第3頁
軟件開發(fā)總結(jié)_第4頁
軟件開發(fā)總結(jié)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 內(nèi)部648軟件開發(fā)介紹一 DM648介紹DM648屬于TI達(dá)芬奇系列,采用單核C64X+定點(diǎn)CPU,支持最高頻率1.1GHz,有兩個乘法器支持四個16bits*16bits(結(jié)果32bits)單個clock cycle或者八個8bits*8bits(結(jié)果16bits)單個clock cycle。還有6個ALU。648的片上存儲器有L1P(32KB),L1D(32KB),L2(512KB)648集成了五個視頻口VPORT,省去FPGA做FIFO,可以節(jié)省產(chǎn)品成本。648集成了豐富的外設(shè),包括edma(64個通道),SPI,I2C,UART,EMIF,DDR2,Ethernet,gpio(32個

2、),McASP,PCI。二 搭建軟件開發(fā)環(huán)境2.1操作系統(tǒng)環(huán)境 Win7 32位或win-XP環(huán)境2.2軟件安裝和配置 需準(zhǔn)備的安裝軟件Ccs3.3 bios3.08 648dvsdk perlBios是TI針對DSP開發(fā)的實時嵌入式操作系統(tǒng)。Dvsdk是基于BIOS系統(tǒng)的視頻開發(fā)包。Perl是腳本工具,燒寫程序時將out文件轉(zhuǎn)換為ais文件。建議所有軟件安裝到默認(rèn)目錄下,安裝完后配置操作系統(tǒng)環(huán)境變量修改BIOS_INSTALL_DIR變量為C:/CCStudio_v3.3/bios_5_31_08配置CCS的組件管理器,如圖2-1 點(diǎn)“開始->所有程序->TI->compo

3、nent manager,修改Target Content(DSP/BIOS)->TMS320C64XX為當(dāng)前版本的DSP/BIOS 圖 2-12.3 DVSDK目錄文件介紹 默認(rèn)安裝到C:dvsdk_1_11_00_00_DM648目錄下,其中edma3_lld_1_05_00是edma3驅(qū)動包examples 包含很多基于BIOS的示例應(yīng)用工程,我們參考video_preview示例程序作為框架,添加圖像處理算法和通訊驅(qū)動。flashutil 包含flash燒寫工程norwriter,bootloader程序ubl,ais文件生成腳本ndk_1_92_00_22_eval 網(wǎng)絡(luò)開發(fā)軟

4、件包pspdrivers_1_10_00 包含了TI提供的很多基于BIOS系統(tǒng)的驅(qū)動,我們參考其中VPORT的驅(qū)動,將按幀采集修改為按場采集的功能xdc_2_95_02 xdc工具安裝路徑,xdc是ccs的子工具,是一個javascript編譯工具,用于編譯cfg文件,cfg文件在后面講。如圖2-2安裝XDC后,會在工程的編譯選項界面增加XDC選項。圖2-22.4仿真器 TDS560USB PLUS 在CCS setup界面選擇TDS560USB PLUS platform和C64x+ family的DM648。如圖2-3.圖2-3三 VPORT+EDMA工作原理3.1 VPORT介紹 DM6

5、48集成了五個VPORT口,用于視頻輸入輸出,每個VPORT可以配置為capture或display模式。Capture模式又分為雙通道8bit BT656,單通道16 bit Y/C模式。Display模式又分為單通道8bit BT656, 單通道16 bit Y/C模式。目前,capture和display模式都采用8bit BT656子模式,PAL視頻編碼芯片和解碼芯片也設(shè)置為BT656模式。3.2 BT656標(biāo)準(zhǔn)簡介 BT656標(biāo)準(zhǔn)將4:2:2格式Y(jié)CbCr數(shù)據(jù)統(tǒng)一封裝在一個數(shù)據(jù)流中,按照CbYCrY順序排列,Y的數(shù)據(jù)數(shù)量是Cb,Cr的2倍,。BT656數(shù)據(jù)流中,ffh和00h保留用于

6、時序標(biāo)示。在視頻數(shù)據(jù)每行的開頭和結(jié)尾有標(biāo)示SAV(start of video),EAV(end of video)。SAV和EAV的格式是ffh,00h,00h,XYh,前三個字節(jié)固定,第四個字節(jié)包含場標(biāo)示,場消隱狀態(tài)和行消隱狀態(tài),如圖3-1。 圖3-13.3 VPORT FIFO每個VPORT有一個FIFO存儲進(jìn)入的數(shù)據(jù)或者從FIFO輸出。BT656 capture模式中,F(xiàn)IFO分成A、B兩個通道,如圖3-2,A通道接收VDIN9-2管腳的數(shù)據(jù),B通道接收VDIN19-12管腳的數(shù)據(jù)。每個通道又分Y,Cb,Cr三個緩存,每個緩存區(qū)有獨(dú)立的讀寄存器。 圖3-2BT656 display模式

7、中,如圖3-3,只有一路輸出,F(xiàn)IFO分為Y,Cb,Cr三個緩存區(qū),每個緩存區(qū)有獨(dú)立的寫寄存器。 圖3-3VPORT和EDMA配合在FIFO和外部或片上存儲器之間移數(shù)。我們可以編程FIFO的閾值寄存器,當(dāng)FIFO達(dá)到設(shè)置滿度(fullness)(對于捕獲模式)或者低于設(shè)置滿度(對于顯示模式)時,生成EDMA事件,觸發(fā)相應(yīng)EDMA通道移數(shù)。每個VPORT對應(yīng)6個EDMA事件,分別是VPxYEVTA,VPxCbEVTA,VPxCrEVTA,VPxYEVTB,VPxCbEVTB,VPxCrEVTB例如,我們用VP0口的A通道做為BT656視頻輸入,VP1口做為BT656視頻輸出。設(shè)置VP0口A通道Y

8、,Cb,Cr三個緩存區(qū)的閾值為720,360,360。當(dāng)PAL圖像數(shù)據(jù)傳輸完一行后,三個緩存區(qū)都達(dá)到閾值,生成VP0YEVTA,VP0CbEVTA,VP0CrEVTA三個事件,觸發(fā)對應(yīng)的三個EDMA通道將三個FIFO緩存區(qū)的一行圖像數(shù)據(jù)移入DDR2緩存區(qū)。設(shè)置VP1口Y,Cb,Cr三個緩存區(qū)的閾值為720,360,360。當(dāng)三個緩存區(qū)數(shù)據(jù)數(shù)量低于閾值時,生成VP1YEVTA,VP1CbEVTA,VP1CrEVTA三個事件,觸發(fā)對應(yīng)的三個EDMA通道將DDR2緩存區(qū)的一行圖像數(shù)據(jù)移入三個FIFO緩存區(qū)。四 應(yīng)用程序及驅(qū)動解析4.1兩個重要文件 基于BIOS/DSP系統(tǒng)開發(fā)軟件,有兩個重要工程文件

9、tcf和cfg文件,如圖4-1中紅圈1和2。 圖4-1 tcf文件包含了DSP/BIOS的配置信息。紅圈3的global settings設(shè)置DSP工作頻率,L1,L2 cache size,大小端,L2 cache 128kB。Memory section設(shè)置程序和數(shù)據(jù)各部分在存儲器中的段地址。紅圈4 HWI(hardware interrupt)處,添加硬件中斷處理函數(shù)紅圈5 添加BIOS/DSP的線程cfg文件包含了庫鏈接路徑信息,使用javascript語言,如圖紅圈6。使用XDC工具編譯cfg文件,生成庫鏈接信息,供C編譯器鏈接庫時使用。cfg文件常鏈接的庫有vport驅(qū)動,edma

10、驅(qū)動程序。4.2圖像緩存分配和管理 Edma在VPORT和SDRAM之間搬數(shù),CPU要訪問SDRAM最新的圖像數(shù)據(jù),程序采用多個圖像緩存區(qū)循環(huán)的方式將這兩個過程并行化。應(yīng)用層創(chuàng)建捕獲或顯示通道時,調(diào)用驅(qū)動層程序在DDR2分配存放圖像數(shù)據(jù)的緩存區(qū)。分配之前,驅(qū)動根據(jù)通道的配置參數(shù)計算每個緩存區(qū)的大小。例如,vp0按場采集,vp1按幀顯示。Vp0的每個緩存區(qū)的大小是720*288*2,vp1的每個緩存區(qū)的大小是720*576*2。應(yīng)用程序使用FVID_dequeue()出隊函數(shù)和FVID_queue()入隊函數(shù)或FVID_exchange()交換函數(shù),在應(yīng)用程序和驅(qū)動程序之間交換圖像緩存區(qū)。捕獲和

11、顯示驅(qū)動的緩存管理方法不同,如下面兩圖4-2和4-3:圖中藍(lán)塊表示應(yīng)用程序的圖像緩存區(qū),白塊表示驅(qū)動程序的圖像緩存區(qū)。圖像捕獲緩存區(qū),初始時所有的緩存區(qū)都在捕獲隊列里,捕獲驅(qū)動程序以循環(huán)的方式填充每個緩存區(qū)。當(dāng)應(yīng)用程序調(diào)用FVID_dequeue()函數(shù)時,將放有最新圖像數(shù)據(jù)的緩存區(qū)出隊并返回給應(yīng)用程序,驅(qū)動在余下的隊列里循環(huán)填充,如(a)到(b)和(b)到(e)。當(dāng)應(yīng)用程序調(diào)用FVID_queue()函數(shù)時,將一個空的緩存區(qū)交給驅(qū)動程序并加入隊列,如圖(b)到(a)和(e)到(b)。當(dāng)應(yīng)用程序調(diào)用FVID_exchange()函數(shù)時,應(yīng)用程序交給驅(qū)動一個空的緩存區(qū),驅(qū)動交給應(yīng)用程序放有最新圖

12、像的緩存區(qū),相當(dāng)于同時調(diào)用FVID_dequeue()和FVID_queue()兩個函數(shù),如圖(b)到(c)和(c)到(d)。 圖4-2 圖像顯示緩存區(qū),初始時只有一個緩沖區(qū)用于顯示,其它緩存區(qū)等待出隊,如圖(a),黃塊表示顯示驅(qū)動隊列里準(zhǔn)備出隊的緩存區(qū)。顯示驅(qū)動程序重復(fù)顯示一個緩存區(qū)的圖像。當(dāng)應(yīng)用程序調(diào)用FVID_dequeue()函數(shù)時,從驅(qū)動獲得一個緩存區(qū),應(yīng)用程序向它填充顯示數(shù)據(jù),同時驅(qū)動仍然顯示之前的緩存區(qū),如圖(b) 和(d)。當(dāng)應(yīng)用程序調(diào)用FVID_queue()函數(shù)時,應(yīng)用程序給驅(qū)動程序一個準(zhǔn)備顯示的緩存區(qū),同時驅(qū)動將它設(shè)置為當(dāng)前的緩存區(qū),如圖(b)到(c)到(d)。當(dāng)應(yīng)用程序

13、調(diào)用FVID_exchange()函數(shù)時,應(yīng)用程序給驅(qū)動一個準(zhǔn)備顯示的緩存區(qū),從驅(qū)動得到一個空的緩存區(qū),相當(dāng)于同時調(diào)用FVID_dequeue()和FVID_queue()函數(shù),如圖(d)到(e)。 圖4-34.3 應(yīng)用程序框架介紹基于dvsdk_install_dir/example目錄下的video_preview示例程序,做為項目軟件框架應(yīng)用程序主要包含三部分: Main函數(shù) Video_preview線程 自添加的中斷處理函數(shù)許多實時DSP應(yīng)用都需要同時執(zhí)行很多不相關(guān)的功能,這些功能一般是對外部事件的響應(yīng),這些功能就加線程。DSP/BIOS支持4種線程:(1) 硬件中斷(HWI):頻率

14、可達(dá)200KHz(5us)(2) 軟件中斷(SWI):SWI允許HWI將一些非關(guān)鍵處理在低優(yōu)先級上延遲執(zhí)行,這樣可以減少在中斷服務(wù)程序中的駐留時間。(3) 任務(wù)(TSK):任務(wù)與中斷不同點(diǎn)在于,任務(wù)在執(zhí)行過程中可以被掛起。(4) 后臺線程(IDL):空閑循環(huán),運(yùn)行那些沒有執(zhí)行時間限制的函數(shù)。 上電加載完操作系統(tǒng)內(nèi)核后,首先執(zhí)行main函數(shù)。 Main函數(shù)執(zhí)行完后,啟動video_preview線程,線程生命期直到執(zhí)行結(jié)束后。此線程主要功能有圖像采集,處理,字符疊加,顯示。 Video_preview線程第一步調(diào)用FVID_create()函數(shù)為vp0口創(chuàng)建捕獲通道對象capChan,初始化vp

15、0寄存器,為vp1口創(chuàng)建顯示通道對象disChan,初始化vp1寄存器。第二步調(diào)用FVID_allocBuffer() 為capChan和disChan分別分配三個圖像緩存區(qū),然后調(diào)用FVID_queue()將三個緩存區(qū)組成隊列,同時為capChan和disChan分配edma通道,設(shè)置edma參數(shù)表。第三步調(diào)用FVID_control()函數(shù)使能vp0,vp1口,vp0開始捕獲,vp1開始輸出顯示。第四步調(diào)用FVID_dequeue()從capChan和disChan的緩存隊列中各出一個緩存。第五步 進(jìn)入while(1)循環(huán),在循環(huán)中執(zhí)行兩次FVID_exchange()。FVID_exch

16、ange(capChan,pImg1)捕獲新的一場圖像數(shù)據(jù),F(xiàn)VID_exchange(disChan,pImg)顯示新的一幀圖像。捕獲兩次,顯示一次。 FVID_exchange(capChan,pImg1)后面添加圖像處理算法和疊加字符。 4.4添加圖像處理算法 在FVID_exchange(capChan,img)函數(shù)捕獲圖像后添加圖像處理算法。為了減少CPU訪問圖像數(shù)據(jù)時間,將圖像數(shù)據(jù)和訪問頻率高的中間數(shù)組放在L2 RAM里。DM648 L2的大小512KB,其中128KB用于cache,剩余384KB可用于應(yīng)用程序存放圖像數(shù)據(jù)。4.5 VPORT驅(qū)動調(diào)試方法 VPORT驅(qū)動采用BIO

17、S的兩層驅(qū)動模型class/mini-driver,BIOS現(xiàn)在抽象定義了三種class驅(qū)動,PIP/PIO,SIO/DIO,GIO,應(yīng)用程序通過這三類BIOS API接口與mini driver通訊,在一個應(yīng)用工程中可以同時使用這三種API 接口。Mini層通過CSL層訪問外圍硬件的寄存器,存儲器,中斷資源,如圖4-6。 圖4-6Video_preview應(yīng)用工程中使用了BIOS GIO接口API,如圖4-7是GIO和mini diver層包含的API,F(xiàn)VID函數(shù)是GIO API的宏定義,如下:#define FVID_create(name, mode, status, optArgs,

18、 attrs) GIO_create(name, mode, status, optArgs, attrs)#define FVID_exchange(gioChan, bufp) GIO_submit(gioChan, FVID_EXCHANGE, bufp, NULL, NULL)#define FVID_control(gioChan, cmd, args) GIO_control(gioChan, cmd, args) 圖4-7VPORT的mini driver層實現(xiàn)工程vport_bios_dm648_drv_lib.pjt在dvsdk_install_dir/pspdriver目錄下,將其設(shè)置為video_preview_PAL.pjt的依賴工程(Dependent Projects),如圖4-8,這樣應(yīng)用工程重新編譯之后就可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論