基于DSP的嵌入式視覺(jué)客流檢測(cè)系統(tǒng)
2.2 DSP與FIFO存儲(chǔ)器的無(wú)縫連接與圖像采集的實(shí)現(xiàn)
FIFO與DSP和OV7141的無(wú)縫連接如圖2所示。OV7141的工作頻率是27 MHz,每秒鐘能輸出30幀(VGA模式)或者60幀(QVGA模式)。由于DSP性能有限,而且實(shí)際上很多情況下也不需要如此高的幀率,因此并不是所有采集到的圖像數(shù)據(jù)都需要DSP進(jìn)行處理(例如在視覺(jué)客流檢測(cè)系統(tǒng)的實(shí)際應(yīng)用中只要求每秒鐘能處理5幀即可),但是必須保證DSF進(jìn)行處理的圖像為一幅完整的圖像??梢岳肙V7141的3個(gè)輸出信號(hào)來(lái)完成這個(gè)功能,分別是PCLK(像素時(shí)鐘信號(hào))、VSYNC(場(chǎng)同步信號(hào))和HREF(行有效信號(hào))。并且OV7141可通過(guò)改變片內(nèi)控制寄存器的值來(lái)調(diào)整輸出圖像的窗口大小,窗口可在4×2到652×482像素之間任意選擇。HREF、只在所選擇窗口內(nèi)的像素信號(hào)輸出時(shí)才置高電平,這使得圖像的非完整模式下的處理也變?yōu)榱丝赡?。另外?V7141的片內(nèi)控制寄存器配置功能由SCCB總線實(shí)現(xiàn),由于DSP不具有SCCB總線接口,因而為了通過(guò)DSP實(shí)現(xiàn)對(duì)0V7141的寄存器配置,利用DSP的2根數(shù)據(jù)線DO和D1借助CPLD實(shí)現(xiàn)sCcB總線時(shí)鐘線SCL和數(shù)據(jù)線SDA的模擬以實(shí)現(xiàn)虛擬SCCB總線。
控制FIF0的信號(hào)主要是寫(xiě)信號(hào)和讀信號(hào),它們都由DSP根據(jù)FIF0的狀態(tài)信號(hào)及DSP對(duì)圖像的處理結(jié)果來(lái)控制對(duì)FIFO的讀/寫(xiě)。讀/寫(xiě)操作時(shí)序如圖3所示。CM0s圖像傳感器采集獲得的圖像數(shù)據(jù)在CPLD控制下逐行寫(xiě)入FIFO,當(dāng)FIFO的存儲(chǔ)容量達(dá)到半滿(mǎn)時(shí),F(xiàn)IFO的半滿(mǎn)標(biāo)志位以外部中斷方式通知DSP,DSP,檢測(cè)到外部中斷后開(kāi)啟DMA,利用DMA通道將FIFo中的圖像數(shù)據(jù)搬移到DSP的片內(nèi)圖像緩沖區(qū)中。需要注意的是,在DMA從FIFO搬運(yùn)圖像數(shù)據(jù)的過(guò)程中CMOS圖像傳感器并沒(méi)有停止向FIFO寫(xiě)入圖像數(shù)據(jù),由于CMOS寫(xiě)入FIFO速度Vw。比DMA從FIFO中讀出數(shù)據(jù)的速度Vr慢(Vw=(1/2)Vr),使得CMOS和DMA在對(duì)FIFO進(jìn)行雙向訪問(wèn)時(shí)FIFO的實(shí)際存儲(chǔ)容量始終保持在0和最大存儲(chǔ)量之間,既不會(huì)上溢也不會(huì)下溢;從而保證一幀完整的圖像可以被DMA控制器順利的轉(zhuǎn)移至DSP的片內(nèi)圖像緩沖區(qū)中。當(dāng)一幀完整的圖像搬運(yùn)完成后,DMA會(huì)開(kāi)啟處理使能標(biāo)志,當(dāng)DSP發(fā)現(xiàn)處理使能標(biāo)志開(kāi)啟后將從片內(nèi)圖像緩沖區(qū)中獲得圖像數(shù)據(jù)以完成圖像處理算法,在DSP進(jìn)行圖像處理的同時(shí),DMA控制器可以同時(shí)進(jìn)行下一幀圖像數(shù)據(jù)的搬移工作以提升系統(tǒng)的并行處理能力。DSP對(duì)于當(dāng)前幀圖像處理完成后將等待處理使能標(biāo)志的再次開(kāi)啟以繼續(xù)下一幀圖像的處理。DSP對(duì)于當(dāng)前幀圖像的處理結(jié)果將在當(dāng)前幀處理完成后采用以太網(wǎng)傳輸至接收終端。
此外,DMA在執(zhí)行圖像數(shù)據(jù)搬移功能時(shí),為了保證數(shù)據(jù)搬移過(guò)程與DSP圖像處理的并行性,通常需要在DSP片內(nèi)開(kāi)辟2塊圖像數(shù)據(jù)緩沖區(qū)。由于5416DSP片內(nèi)DARAM在速度上優(yōu)于SARAM,因而通常重要的程序代碼以及算法的堆棧都放在DARAM中,為了節(jié)省DARAM資源并充分利用SARAM,在DSP程序空間所在的SARAM和數(shù)據(jù)空間所在的DARAM中各開(kāi)辟1塊作為圖像數(shù)據(jù)緩沖區(qū)。SARAM中的緩沖區(qū)用于DMA通道0從FIF0中讀取當(dāng)前幀圖像數(shù)據(jù),DMA通道1從SARAM緩沖區(qū)中讀取上一幀圖像數(shù)據(jù),兩個(gè)DMA通道的數(shù)據(jù)搬移功能都可以在DSP完成某個(gè)子算法的過(guò)程中并行實(shí)現(xiàn)。
2.3 基于TCP/IP協(xié)議的以太網(wǎng)傳輸?shù)膶?shí)現(xiàn)與圖像的實(shí)時(shí)傳輸
考慮到實(shí)際情況中通常采用圖像處理系統(tǒng)與接收終端采用雙絞線直連的方式傳輸圖像數(shù)據(jù),因而直接采取TCP/IP協(xié)議族中傳輸效率更高的用戶(hù)數(shù)據(jù)包協(xié)議(UDP)完成系統(tǒng)與接收終端的數(shù)據(jù)交互。接收終端可采用套接字(Socket)獲取UDP數(shù)據(jù)包,并從UDP數(shù)據(jù)包中還原出圖像數(shù)據(jù)或其他系統(tǒng)參數(shù)。而在圖像處理系統(tǒng)中,UDP數(shù)據(jù)包的發(fā)送主要通過(guò)DSP讀寫(xiě)LAN9115的片內(nèi)寄存器以及FIF0的方式實(shí)現(xiàn),具體有以下幾個(gè)步驟:
(1)初始化。完成LAN9115的喚醒工作,判別其工作狀態(tài),通過(guò)讀寫(xiě)指定內(nèi)部寄存器,激活他的各項(xiàng)功能。
(2)設(shè)置MAC地址。初始化時(shí)DSP通過(guò)更改LAN9115內(nèi)部寄存器ADDRH和ADDRL的值,完成對(duì)網(wǎng)絡(luò)MAC地址的設(shè)置。
(3)發(fā)送ARP數(shù)據(jù)包。根據(jù)UDP協(xié)議,發(fā)送數(shù)據(jù)時(shí)要獲取對(duì)方機(jī)器的IP地址和MAC地址。該程序根據(jù)ARP協(xié)議,發(fā)送ARP數(shù)據(jù),再接收?qǐng)D像接收端發(fā)回的RARP數(shù)據(jù)包,分析里面的數(shù)據(jù),即可生成符合要求的UDP數(shù)據(jù)。
(4)發(fā)送圖像數(shù)據(jù)。在發(fā)送數(shù)據(jù)包(Packet)過(guò)程中,DSP先更改LAN9115的寄存器TX_CMD_A和Tx_CMD_B的值,其中包含了要發(fā)送的數(shù)據(jù)大小,數(shù)據(jù)包(Packet)長(zhǎng)度等信息,該系統(tǒng)目前采取的圖像大小為320×240像素。在實(shí)際傳輸中,每幀圖像分20塊(1 Frame=20 Block),每塊又分6個(gè)數(shù)據(jù)報(bào)傳輸(1 Block=6 Slice),每個(gè)數(shù)據(jù)包中圖像數(shù)據(jù)為1 280 B(1 Slice=1 280 B)。這樣做是因?yàn)橐蕴W(wǎng)協(xié)議里規(guī)定每個(gè)數(shù)據(jù)包大小不能超過(guò)1 514 B,Windows系統(tǒng)中Socket套接字的緩沖區(qū)是8 KB。然后DSP利用I/0端口訪問(wèn)模式將數(shù)據(jù)依次寫(xiě)入LAN9115中。要中斷當(dāng)前傳輸過(guò)程,可設(shè)置寄存器TX―CFG中sTOP―Tx比特為1。這個(gè)傳輸過(guò)程就將立即結(jié)束。LAN9115與DSP的接口如圖4所示。
評(píng)論