基于BF533的圖像采集與顯示
0 引言
在嵌入式圖像處理系統(tǒng)中,經(jīng)常需要對圖像進(jìn)行采集,并將采集圖像的處理結(jié)果顯示在嵌入式系統(tǒng)的彩色LCD之上,以使人能夠?qū)μ幚砗蟮膱D像結(jié)果進(jìn)行直觀的觀察,進(jìn)一步對圖像識別的正確與否進(jìn)行人工判斷。本設(shè)計(jì)主要是將嵌入式系統(tǒng)應(yīng)用到智能飲水控制系統(tǒng)之中,從而實(shí)現(xiàn)對水位狀況的檢測。本系統(tǒng)可對所采集的圖像進(jìn)行邊緣提取,并將結(jié)果顯示在TFTLCD上。該設(shè)計(jì)將BF533提供的PPI接口同時(shí)連接到CMOS圖像傳感器MT9Vlll和TFTLCD顯示器TS35NDl50l上,并采用分時(shí)工作方式來實(shí)現(xiàn)對圖像的采集和顯示。
Blackfin處理器的PPI(并行外設(shè)接口)是一種多功能的并行接口,它可以配置為8 bit和16 bit兩種帶寬,并可支持雙向數(shù)據(jù)流,同時(shí)包含了3條同步線以及一個(gè)與外部時(shí)鐘相連的時(shí)鐘引腳。PPI可以對ITU—R BT.656數(shù)據(jù)進(jìn)行無縫解碼,可實(shí)現(xiàn)對輸入視頻流進(jìn)行解碼,并能自動(dòng)忽略有效視頻之外的任何信號。
1 系統(tǒng)結(jié)構(gòu)
Blackfin系列處理器是ADI公司研制的一款嵌入式處理器,它集微控制器、DSP和媒體處理器的優(yōu)勢于身,可廣泛應(yīng)用于消費(fèi)類多媒體、網(wǎng)絡(luò)通信等多個(gè)領(lǐng)域。
MT9V111是Micron Technology公司推出的一款l/4英寸圖像傳感器,它能夠輸出分辨率為640x480的數(shù)碼圖像信號。通過以I2C總線對其IFP(Image Flow Processor)寄存器進(jìn)行配置,即可輸出ITU_R BT.656 (YCbCr)、YUV、565RGB、555RGB和444RGB等數(shù)據(jù)格式的視頻信號。
TS35NDl50l是臺灣臺盛公司生產(chǎn)的一款以薄膜場效應(yīng)晶體管為開關(guān)器件,能顯示彩色圖像的矩陣型液晶顯示器。使用時(shí)可通過SPI總線對其內(nèi)部的寄存器進(jìn)行配置,如果沒有對這些寄存器進(jìn)行配置,該LCD將會(huì)自動(dòng)運(yùn)行在默認(rèn)模式。在應(yīng)用中,可將圖像傳感器MT9V111與TFTLCD TS35ND1501同時(shí)連接在BF533的PPI總線上,并采用分時(shí)方式完成圖像的采集與顯示,其系統(tǒng)硬件框圖如圖1所示。圖中,ADG704為4選1的四通多路復(fù)用器,用以選擇圖像傳感器和TFTLCD時(shí)對PPI總線提供的時(shí)鐘進(jìn)行切換。在圖像采集方面,可將BF533的可編程I/O接口PF4與圖像傳感器的SCLK端口相連,并將PF2與SDATA相連,同時(shí)采用I2C總線方式實(shí)現(xiàn)對圖像傳感器MT9Vlll的配置。將PF0置l,PFI清0,可使FTFLCD處于復(fù)位狀態(tài),圖像傳感器處于工作狀態(tài)。這時(shí),ADG704的接口S2與接口D處于連通狀態(tài)。而將圖像傳感器MT9V111提供的PIXCLK時(shí)鐘信號提供給BF533的PPI_CLK接口,則可實(shí)現(xiàn)BF533對圖像傳感器傳來數(shù)據(jù)的正確接收。圖像顯示可采用BF533內(nèi)部提供的TIMERl作為幀同步信號,TIMER2作為行同步信號來控制圖像的顯示,不對TS35NDl501進(jìn)行配置,系統(tǒng)將采用默認(rèn)工作方式。進(jìn)行圖像顯示時(shí),可將可編程I/O接口PF0清0,以使圖像傳感器處于復(fù)位狀態(tài),將PFl置1使TFTLCD處于工作狀態(tài),這時(shí),ADG704的接口S3與接口D處于連通狀態(tài),從而為BF533的PPI_CLK接口提供數(shù)據(jù)輸出的20MHz時(shí)鐘信號。需要指出,當(dāng)有更多的外設(shè)需要和BF533通信時(shí),采用CPLD進(jìn)行邏輯擴(kuò)展,可以解決GPIO接口不足的問題。
2 圖像的采集
在首次進(jìn)行圖形采集和圖像顯示之前,首先應(yīng)對BF533的PLL、EBIU和系統(tǒng)的SDRAM進(jìn)行設(shè)置,以使BF533能夠正常穩(wěn)定的工作。
圖2所示是圖像采集的軟件流程。通過設(shè)置BF533的FIO_DIR,F(xiàn)IO_FLAG_C,F(xiàn)IO_LAG_S寄存器,可使可編程I/O接口PFO為高電平,PF1為低電平,從而使圖像傳感器處于工作狀態(tài),TFTLCD處于復(fù)位狀態(tài)。然后,就可以采用如下代碼來實(shí)現(xiàn)對BF533的PPI接口初始化。[!--empirenews.page--]
*pPPI_CONTROL=Ox001c;
*pPPI_FRAME=240;//240行
*pPPI_COUNT=639;//每行傳輸640個(gè)采樣點(diǎn)
*pPPI_DELAY=0;
之后,再以如下代碼對DMA控制器進(jìn)行配置,便可使DMAO控制器映射為PPI接口,以便使DAMO通過PPI讀取的數(shù)據(jù)的存儲地址指向二維數(shù)組ImagelnBuffer[240][640],并將DMA設(shè)置為二維傳輸模式。其代碼為:
*pDMAO_CONFIG=0x00b2;
*pDMAO_PERIPHERAL_MAP=0x0;//配置為PPI
*pDMAO_START_ADDR=&ImageInBuffer[0][0];//指向要存放的首地址
*pDMAO_X_COUNT=640;//二維傳送,內(nèi)層計(jì)數(shù)
*pDMAO_X_MODIFY=0x1;//每次傳送一個(gè)字節(jié)
*pDMAO_Y_COUNT=240;//外層計(jì)數(shù)
*pDMAO_Y_MODIFY=0x1;
然后再初始化定時(shí)器,使其能從圖像顯示模式恢復(fù)為默認(rèn)模式。再通過可編程邏輯接口PF2,并通過PF3采用I2C總線工作方式對圖像傳感器MTOVlll進(jìn)行配置,以將圖像傳感器MT9V111設(shè)置為ITU_R BT.656(YCbCr)的數(shù)據(jù)輸出方式。最后,再將BF533的寄存器DMA0_CONFIG中的標(biāo)志位DMA_EN和PPI_CONTROL中的標(biāo)志位PORT_EN置1,同時(shí)開啟DMA0和PPI接口,并將寄存器TIMER_ENABLE中相應(yīng)的標(biāo)志位置1以開啟相應(yīng)的定時(shí)器。最后等待DAM0接收完一幀圖像數(shù)據(jù)后的中斷。
3 圖像的顯示
圖像顯示中的TS35NDl501 TFTLCD是一款RGB數(shù)據(jù)接口的彩色圖形點(diǎn)陣顯示器,它的數(shù)據(jù)傳輸時(shí)序如圖3所示。信號VSYNC與HSYNC分別為LCD的幀同步信號和行同步信號,DCLK為點(diǎn)陣數(shù)據(jù)傳輸時(shí)鐘信號。其中TVP為幀同步信號的脈沖寬度,典型值為3倍行同步信號寬度(TH)。TVB為幀同步信號后沿時(shí)間,典型值為15個(gè)行脈沖寬度。TVF為幀同步信號的后沿時(shí)間,典型值為4個(gè)行脈沖寬度。在以上這三個(gè)信號時(shí)間內(nèi)TFTLCD是不會(huì)接收要顯示的數(shù)據(jù)的,故不顯示的行數(shù)為3+4+15=22,也就是說,傳輸?shù)膱D像數(shù)據(jù)中有22行的數(shù)據(jù)不會(huì)被顯示到LCD上。所以定義一個(gè)無符號字符型二維數(shù)組DisplayBuffer[262][960]作為要顯示數(shù)據(jù)的緩沖區(qū),其中所定義數(shù)組的前22行是無用數(shù)據(jù),后240行數(shù)據(jù)為要顯示在TFTLCD上的圖像數(shù)據(jù)。將從圖像傳感器獲取的、存放在ImagelnBuffer中的UYVY (4:2:2)圖像數(shù)據(jù)轉(zhuǎn)換成LCD要顯示的灰度圖像數(shù)據(jù)格式(RGB24),并存儲在二維數(shù)DisplayBuffer[262][960]中。[!--empirenews.page--]
通過設(shè)置BF533的FIO_DIR,F(xiàn)IO_FIAG_C,F(xiàn)IO_FLAG_S寄存器可使可編程I/O接口PF0為低電平,PF1為高電平,從而使LCD處于工作狀態(tài),圖像傳感器處于復(fù)位狀態(tài)。之后,可以用如下代碼對PPI接口進(jìn)行配置。
*pPPI_CONTROL=0x009e;//POLSIPACK_EN |Ox0010 | XFR_TYPE | PORT_DIR;
*pPPI_DELAY=0xcb;//在進(jìn)行寫操作前延時(shí)106個(gè)時(shí)鐘周期
*pPPI_COUNT=959;//每行傳輸960個(gè)數(shù)據(jù)點(diǎn)然后,可采用如下代碼對DMA0控制器進(jìn)行配置,以將DAM0控制器配置為RESTART和FLOW_AUTO模式,從而使它能夠循環(huán)實(shí)現(xiàn)對緩沖區(qū)DisplavBuffer中的數(shù)據(jù)的輸出。
*pDMA0_PERIPHERAL_MAP=Ox0;//映射為PPI接口
*pDMA0_CONFIG=0x1030;//FLOW_AUTO |RESTART | DMA2D | WDSIZE_8;
*pDMA0_START_ADDR=&DisplayBuffer[0][0];//要顯示數(shù)據(jù)的首地址
*pDMA0_X_COUNT=960;
*pDMA0_X_MODIFY=1;
*pDMA0_Y_COUNT=262;
*pDMA0_Y_MODIFY=1;
對定時(shí)器TIMER1,TIMER2進(jìn)行配置,可以使其對TFTLCD提供行同步和幀同步信號,以將其設(shè)置為PWM_OUT輸出模式,并將定時(shí)時(shí)鐘設(shè)置為采用PPI_CLK接口輸入的20 MHz時(shí)鐘信號,其代碼如下:
*pTIMER1_PERIOD=1224;//TH
*pTIMER1_WIDTH=5;//THP,最小值
*pTIMER1_CONFIG=0x02a9;//EMU_RUN |CLK_SEL|TIN_SELIPERIOD_CNTlPWM_OUT
*pTIMER2 PERl0D=320688;//TV=262*TH=262*1224=320668
*pTIMER2_WIDTH=3672;//TVP=3*TH=3*1224=3672
*pTIMER2_CONFIG=0x02a9;
最后,再啟動(dòng)PPI接口、DAM0控制器和相應(yīng)的定時(shí)器,開始圖像的顯示,并延時(shí)5秒,以使圖像在LCD上穩(wěn)定的顯示5秒鐘。其顯示軟件流程圖如圖4所示。
4 結(jié)束語
經(jīng)過調(diào)試和修改,該系統(tǒng)能夠?qū)崿F(xiàn)對圖像的采集并正確顯示圖像的處理結(jié)果,本設(shè)計(jì)可以滿足預(yù)期的數(shù)據(jù)顯示需求。本文經(jīng)過對BF533的PPI接口進(jìn)行合理應(yīng)用,實(shí)現(xiàn)了對圖像采集和顯示的分時(shí)工作,能夠滿足一些情況下的應(yīng)用。因?yàn)锽F533只有一路PPI接口,所以無法實(shí)現(xiàn)對采集圖像的實(shí)時(shí)顯示。而要實(shí)現(xiàn)的對所采集數(shù)據(jù)的實(shí)時(shí)顯示,則可采用BF561DSP,該DSP可提供兩路PPI接口,因而能夠滿足圖像的采集與實(shí)時(shí)顯示。