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