国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ARM和FPGA的紅外系統(tǒng)數(shù)據(jù)交換驅(qū)動(dòng)設(shè)計(jì)

2014-12-02 02:43:26王小平
電視技術(shù) 2014年11期
關(guān)鍵詞:驅(qū)動(dòng)程序寄存器隊(duì)列

王小平,吳 偉

(1.重慶城市管理職業(yè)學(xué)院,重慶401331;2.重慶郵電大學(xué)信號(hào)與信息處理重慶市重點(diǎn)實(shí)驗(yàn)室,重慶400065)

責(zé)任編輯:薛 京

紅外輻射測(cè)溫技術(shù)作為一種非接觸溫度測(cè)量方法,廣泛應(yīng)用于軍事和民用領(lǐng)域。紅外成像儀通過該技術(shù)將溫度的差異轉(zhuǎn)換成實(shí)時(shí)的視頻顯示在監(jiān)視器上[1]。它能全天24 h工作,即使在最黑的夜晚、濃霧、下雪和煙霧條件下也能進(jìn)行觀看,它能快速探測(cè)所存在的威脅并快速做出反應(yīng)以保護(hù)人員、財(cái)產(chǎn)和基礎(chǔ)設(shè)施的安全。同時(shí),本文關(guān)于數(shù)據(jù)采集的方法具有一般性,在電視信號(hào)的數(shù)字化、視頻監(jiān)控、交互式網(wǎng)絡(luò)電視數(shù)據(jù)采集等方面都具有廣泛的應(yīng)用。

1 系統(tǒng)設(shè)計(jì)整體架構(gòu)

本文主要介紹一種基于ARM(Advanced RISC Machines)和FPGA(Field Programmable Gata Array)的紅外監(jiān)控系統(tǒng)。ARM模塊實(shí)現(xiàn)對(duì)各個(gè)單元模塊的初始化、控制和管理,F(xiàn)PGA模塊為前端圖像采集模塊提供驅(qū)動(dòng)時(shí)序,對(duì)圖像數(shù)據(jù)進(jìn)行處理,為ARM系統(tǒng)進(jìn)行數(shù)據(jù)交互。本系統(tǒng)FPGA芯片選用ACTEL公司推出的ProASIC3系列芯片,它具有百萬(wàn)系統(tǒng)門,采用1.2 V直流電壓供電,0.5 nm COMS工藝[2];ARM處理芯片選用SAMSUNG公司推出的16/32位RISC微處理器S3C2440A,功耗低、外圍接口豐富,具有32根地址線,支持4 Gbyte存儲(chǔ)空間。設(shè)計(jì)時(shí)充分利用ARM易操控性和FPGA處理數(shù)據(jù)的并行性。

系統(tǒng)中FPGA模塊首先為前端圖像數(shù)據(jù)采集模塊提供時(shí)序控制,將輸出的模擬圖像信號(hào)通過模數(shù)轉(zhuǎn)化變?yōu)閿?shù)字信號(hào),為彌補(bǔ)探測(cè)器硬件的缺陷,F(xiàn)PGA對(duì)圖像數(shù)據(jù)進(jìn)行盲元補(bǔ)償、非均勻性校正、濾波等算法處理,通過乒乓的操作方式,對(duì)數(shù)據(jù)進(jìn)行內(nèi)存映射,將數(shù)據(jù)通過4路FIFO緩存到SRAM內(nèi),當(dāng)采集一幀數(shù)據(jù)后向ARM模塊發(fā)出中斷信號(hào)。ARM模塊通過驅(qū)動(dòng)程序響應(yīng)FPGA發(fā)出的中斷信號(hào),觸發(fā)片選信號(hào),將ARM的地址總線映射到該SRAM芯片內(nèi),觸發(fā)DMA中斷,通過DMA方式將數(shù)據(jù)映射到內(nèi)存空間,最后通過網(wǎng)口將圖像數(shù)據(jù)上傳到PC。系統(tǒng)整體設(shè)計(jì)框圖如圖1所示[3]。

2 數(shù)據(jù)接口硬件設(shè)計(jì)

圖1 高速紅外監(jiān)控系統(tǒng)設(shè)計(jì)框圖

對(duì)于高速圖像采集系統(tǒng),兩個(gè)模塊的數(shù)據(jù)交互接口非常重要,極有可能成為高速圖像傳輸性能的瓶頸。根據(jù)系統(tǒng)對(duì)處理數(shù)據(jù)的分析,考慮到系統(tǒng)向上和向下的兼容性,SRAM選型時(shí)均考慮處理數(shù)據(jù)的最大值情況,前端非制冷焦平面微熱輻射計(jì)型探測(cè)器選用系統(tǒng)兼容最大可能的384×288像素,處理后的圖像數(shù)據(jù)16位寬度,得到未經(jīng)過壓縮的單幀圖像數(shù)據(jù)量為2.16 Mbyte??紤]到圖像處理運(yùn)算過程中需要大約10幀的圖像緩存空間。

鑒于以上對(duì)系統(tǒng)中傳輸數(shù)據(jù)的分析,本系統(tǒng)選用ISSI公司的IS61LV51216,高性能CMOS制造工藝,存儲(chǔ)容量為512×16 kbit,內(nèi)部8 Mbyte容量,存取時(shí)間最低可達(dá)8 ns,全靜態(tài)操作不需要時(shí)鐘或刷新,輸入輸出兼容TTL標(biāo)準(zhǔn),高字節(jié)數(shù)據(jù)和低字節(jié)數(shù)據(jù)可分別控制,最高運(yùn)行頻率為133 MHz,常見的封裝為44腳TSOP,兼容LVTTL接口。具有簡(jiǎn)單的讀寫和片選控制引腳,在與FPGA和ARM連接時(shí),只需將SRAM的控制端、數(shù)據(jù)端及地址端直接與FPGA和ARM分配的相應(yīng)端口連接,并在FPGA和ARM中設(shè)計(jì)SRAM接口控制模塊,便可實(shí)現(xiàn)SRAM的讀寫操作[4]。ARM與 FPGA接口電路設(shè)計(jì)框圖如圖2所示。

圖2 ARM與FPGA接口電路設(shè)計(jì)框圖

FPGA模塊首先將前端處理后的高速數(shù)據(jù)分為4路低速數(shù)據(jù)寫到構(gòu)建的4個(gè)FIFO中,采用乒乓操作的方式將經(jīng)過算法處理的32 bit數(shù)據(jù)存到4個(gè)FIFO中[5]。經(jīng)過對(duì)SRAM的時(shí)鐘控制,將4個(gè)FIFO的數(shù)據(jù)分別存儲(chǔ)到4個(gè)地址區(qū)域,將8 Mbyte的SRAM分為4個(gè)地址空間,由于SRAM的寫時(shí)鐘信號(hào)和FIFO的時(shí)鐘信號(hào)為同頻,所以FIFO時(shí)鐘與輸出之間必然會(huì)產(chǎn)生時(shí)間延時(shí),本文采用將FIFO的時(shí)鐘相位做相應(yīng)的偏移,然后作為SRAM的寫時(shí)鐘信號(hào)方法,有效地避免了競(jìng)爭(zhēng)冒險(xiǎn)。

存入的數(shù)據(jù)采用小端存儲(chǔ)方式,數(shù)據(jù)存儲(chǔ)的控制模塊采用中斷控制方式對(duì)數(shù)據(jù)流進(jìn)行相應(yīng)控制,當(dāng)FIFO中的數(shù)據(jù)達(dá)到系統(tǒng)設(shè)計(jì)的一幀閾值時(shí),控制模塊將FIFO中的數(shù)據(jù)存儲(chǔ)到SRAM中,當(dāng)SRAM中的數(shù)據(jù)達(dá)到一幀數(shù)據(jù)時(shí),控制模塊向ARM端口發(fā)出中斷信號(hào),ARM通過片選總線獲取數(shù)據(jù)。

3 驅(qū)動(dòng)程序設(shè)計(jì)

系統(tǒng)以ARM模塊為核心對(duì)各個(gè)模塊進(jìn)行控制,其操作系統(tǒng)選用具有開源、免費(fèi)、安全、穩(wěn)定、高性能等優(yōu)點(diǎn)的Linux系統(tǒng),應(yīng)開發(fā)商要求本系統(tǒng)選用Linux-2.6.30穩(wěn)定版本。

在整個(gè)系統(tǒng)中,驅(qū)動(dòng)程序主要工作為:消息隊(duì)列函數(shù)等待響應(yīng)中斷信號(hào),軟件觸發(fā)DMA中斷,數(shù)據(jù)進(jìn)行內(nèi)部映射,DMA方式獲取紅外圖像信號(hào)。驅(qū)動(dòng)程序主要處理過程為:

1)初始化前端SRAM模塊,注冊(cè)設(shè)備號(hào),申請(qǐng)外部中斷和DMA中斷,申請(qǐng)兩個(gè)阻塞等待隊(duì)列;

2)判斷FPGA模塊發(fā)出的中斷信號(hào),喚醒等待隊(duì)列1,并進(jìn)行中斷響應(yīng);

3)通過片選nGCS1,將地址線、數(shù)據(jù)線獲取片外SRAM數(shù)據(jù);

4)喚醒等待隊(duì)列2,響應(yīng)DMA中斷,通過DMA方式對(duì)數(shù)據(jù)進(jìn)行內(nèi)存映射;

5)將SRAM的存儲(chǔ)空間映射到用戶進(jìn)程空間。

驅(qū)動(dòng)設(shè)計(jì)的主要流程如圖3所示,驅(qū)動(dòng)程序主要分為下面幾個(gè)部分進(jìn)行介紹。

圖3 ARM驅(qū)動(dòng)設(shè)計(jì)流程圖

3.1 模塊初始化

每個(gè)字符設(shè)備驅(qū)動(dòng)中都需要一個(gè)file_operations結(jié)構(gòu),便于內(nèi)核與驅(qū)動(dòng)程序的操作對(duì)應(yīng),file_operations結(jié)構(gòu)是定義在<Linux/fs.h>中的函數(shù)指針數(shù)組,結(jié)構(gòu)體中的每一個(gè)域?qū)?yīng)著驅(qū)動(dòng)內(nèi)核模塊用來(lái)處理某個(gè)被請(qǐng)求事件的函數(shù)首地址,在驅(qū)動(dòng)編寫時(shí)均用dma作為函數(shù)名[6]。

本次設(shè)計(jì)中SRAM驅(qū)動(dòng)模塊初始化定義如下:

在該結(jié)構(gòu)體中,每個(gè)函數(shù)的參數(shù)都有1個(gè)指向特定file結(jié)構(gòu)的指針,第2個(gè)參數(shù)在驅(qū)動(dòng)程序中都有對(duì)應(yīng)的硬件操作程序,每個(gè)參數(shù)都有特定的功能。

對(duì)驅(qū)動(dòng)程序的初始化是在dma_init()函數(shù)中完成的,其中包括設(shè)備號(hào)的申請(qǐng)、外部中斷的初始化、對(duì)外部地址映射空間的初始化等。

3.2 驅(qū)動(dòng)設(shè)備號(hào)申請(qǐng)函數(shù)

本文設(shè)計(jì)的驅(qū)動(dòng)函數(shù)采用動(dòng)態(tài)分配設(shè)備號(hào),調(diào)用函數(shù) alloc_chrdev_region(dev_t*dev,unsigned int-firstminor,unsigned int-count,char*name),其中 dev 為手動(dòng)給定的設(shè)備號(hào),count為所請(qǐng)求的連續(xù)設(shè)備號(hào)的個(gè)數(shù),而name為與該設(shè)備號(hào)范圍關(guān)聯(lián)的設(shè)備名稱,它將出現(xiàn)在/proc/devices和sysfs中。采用動(dòng)態(tài)申請(qǐng)可以避免手動(dòng)指定設(shè)備號(hào)帶來(lái)的缺點(diǎn),即:

3.3 中斷申請(qǐng)初始化

由于Linux內(nèi)核要與外部硬件設(shè)備進(jìn)行通信管理,但處理器的處理速度與外圍設(shè)備速度不處于一個(gè)等級(jí),不能采用浪費(fèi)處理器資源的輪詢方式進(jìn)行處理,因此驅(qū)動(dòng)程序中通過注冊(cè)中斷號(hào)并且激活一個(gè)中斷處理函數(shù)來(lái)對(duì)數(shù)據(jù)進(jìn)行處理。中斷注冊(cè)函數(shù)如下所示:

request_irq(unsigned int irq,irq_handler_t handler,unsigned long flags,const char* name,void* dev)

其中第1個(gè)參數(shù)irq表示分配的中斷號(hào),第2個(gè)參數(shù)handler是指向中斷處理函數(shù)的指針,中斷一旦來(lái)臨轉(zhuǎn)到處理中斷處理函數(shù),第3個(gè)參數(shù)flags指定了快速中斷或中斷共享等中斷處理屬性,第4個(gè)是設(shè)備驅(qū)動(dòng)程序的名稱,第5個(gè)是中斷名稱。與之對(duì)應(yīng)的中斷注銷函數(shù)為free_irq(unsigned int irq,void*dev_id),一般在退出和出現(xiàn)特殊情況時(shí)調(diào)用。

本系統(tǒng)選用的是外部中斷4(IRQ_EINT4)與DMA中斷,選用軟件觸發(fā)的DMA3通道(IRQ_DMA3)。具體程序代碼如下:

s3c2410_gpio_cfgpin(S3C2410_GPF4,S3C2410_GPF4_EINT4);//定義I/O口為中斷

set_irq_type(IRQ_EINT4,IRQF_TRIGGER_RISING);//設(shè)置中斷4觸發(fā)方式

ret=request_irq(IRQ_EINT4,irq_int4_handler,IRQF_SHARED,"irq_int4",1);//中斷 4

request_irq(IRQ_DMA3,dma_finish_handler,0,"dma_irq",NULL);//DMA3中斷

3.4 等待隊(duì)列

等待隊(duì)列屬于阻塞式的訪問模式,阻塞方式是驅(qū)動(dòng)在對(duì)設(shè)備進(jìn)行操作時(shí),如果始終沒有獲取中斷信號(hào),進(jìn)程將會(huì)被掛起直到中斷信號(hào)來(lái)臨滿足條件后再進(jìn)行操作;非阻塞式是不對(duì)設(shè)備進(jìn)行操作時(shí),不斷地查詢或者放棄控制設(shè)備,這樣將大大降低系統(tǒng)性能。本驅(qū)動(dòng)選用阻塞式等待隊(duì)列,當(dāng)應(yīng)用程序?qū)υO(shè)備進(jìn)行讀操作時(shí),會(huì)調(diào)用一個(gè)程序,將系統(tǒng)的控制權(quán)交給內(nèi)核并進(jìn)入等待狀態(tài),當(dāng)系統(tǒng)執(zhí)行程序完畢后向應(yīng)用程序返回響應(yīng),得到響應(yīng)后系統(tǒng)將退出阻塞狀態(tài)繼續(xù)后面的工作。

下面簡(jiǎn)要介紹等待隊(duì)列的基本操作。

1)定義等待隊(duì)列頭并初始化

DECLARE_WAIT_QUEUE_HEAD(dma_waitq);

DECLARE_WAIT_QUEUE_HEAD(int4_comeq);

系統(tǒng)主要是在等待兩個(gè)中斷時(shí)進(jìn)行阻塞,分別取名為 dma_waitq,int4_comeq。

2)等待事件函數(shù)

wait_event_interruptible(int4_comeq,int4_come==1);

wait_event_interruptible(dma_waitq,dma_finish==1);

首先wait_event_interruptible將當(dāng)前進(jìn)程的狀態(tài)設(shè)置為TASK_INTERRUPTIBLE(可中斷的睡眠狀態(tài)),然后調(diào)用schedule()(進(jìn)程調(diào)度)函數(shù),schedule()會(huì)將位于TASK_INTERRUPTIBLE狀態(tài)的當(dāng)前進(jìn)程從運(yùn)行的等待隊(duì)列中刪除,當(dāng)前進(jìn)程不再參與調(diào)度,最后調(diào)用wake_up_interruptible()函數(shù)將當(dāng)前進(jìn)程重新放入到運(yùn)行的等待隊(duì)列中。

3)響應(yīng)函數(shù)

當(dāng)變量int4_come1和dma_finish1的值不等于1,進(jìn)程將自動(dòng)再次被設(shè)置為TASK_INTERRUPTIBLE狀態(tài),然后執(zhí)行schedule()函數(shù),進(jìn)程將從正在運(yùn)行的隊(duì)列中刪除,這時(shí)就需要再次通過wake_up_interruptible()函數(shù)將當(dāng)前進(jìn)程重新放入到運(yùn)行的等待隊(duì)列中。兩個(gè)等待時(shí)間響應(yīng)節(jié)點(diǎn)函數(shù)設(shè)置在對(duì)設(shè)備的讀操作(read()函數(shù))中,只有當(dāng)變量int4_come1和dma_finish1的值等于1時(shí)才退出阻塞,進(jìn)行下面的動(dòng)作。設(shè)置滿足變量條件的函數(shù)即int4_come1=1;dma_finish1=1和wake_up_interruptible()在中斷響應(yīng)函數(shù)中實(shí)現(xiàn)。中斷響應(yīng)函數(shù)代碼如下:

3.5 存儲(chǔ)器控制初始化

S3C2440A存儲(chǔ)器控制器為訪問外部存儲(chǔ)器提供控制信號(hào),控制器包括以下特性:支持軟件大/小端控制,共1 Gbyte的存儲(chǔ)空間分為8個(gè)Bank,每個(gè)Bank有128 Mbyte的空間,其中 Bank6~Bank7存儲(chǔ)器為 ROM,SRAM,SDRAM提供控制,Bank0~Bank5為ROM,SRAM提供控制。具有7個(gè)固定的Bank地址,1個(gè)可變的存儲(chǔ)器Bank地址,所有的存儲(chǔ)器訪問周期都可以編程控制,并且支持SDRAM自刷新和掉電模式。S3C2440A內(nèi)部存儲(chǔ)空間地址分配如圖4所示。

系統(tǒng)選用的SRAM芯片為IS61LV51216,芯片總線寬度為16位。該外部存儲(chǔ)器SRAM映射到Bank1上,物理地址0x08000000上,需要對(duì)控制寄存器進(jìn)行相應(yīng)的設(shè)置,首先是總線寬度和等待控制寄存器BWSCON,該寄存器的物理地址為0x48000000,只需對(duì)Bank1的控制位進(jìn)行相應(yīng)設(shè)置。SRAM不使用UB/LB,禁止WAIT狀態(tài),數(shù)據(jù)總線寬度根據(jù)芯片所知為16位,BWSCON中Bank1的控制信息詳見S3C2440A芯片手冊(cè)。

圖4 S3C2440A內(nèi)部存儲(chǔ)空間地址分配

由于采用的是 Bank1,對(duì) Bank1的控制寄存器(BANKCON1)進(jìn)行相應(yīng)設(shè)置。根據(jù)S3C2440A芯片手冊(cè),該寄存器物理地址為0x48000008,對(duì)寄存器每一位進(jìn)行相應(yīng)設(shè)置,根據(jù)圖5對(duì)SRAM控制時(shí)序?qū)拇嫫鬟M(jìn)行相應(yīng)配置。

圖5 SRAM控制時(shí)序圖

圖5中,Tacs為nGCS n前的地址建立時(shí)間選擇0個(gè)時(shí)鐘;Tcos為nOE前的片選建立時(shí)間選擇0個(gè)時(shí)鐘;Tacc為訪問周期選擇14個(gè)時(shí)鐘;Tcoh為nOE后的片選保持時(shí)間選擇0個(gè)時(shí)鐘;Tcah為片選信號(hào)nGCS1后的地址保持時(shí)間選擇0個(gè)時(shí)鐘;Tacp為Page模式下的訪問周期選擇0時(shí)鐘;PMC為Page模式配置選擇正常模式一個(gè)數(shù)據(jù)。這些參數(shù)都在BANKCON1寄存器中進(jìn)行配置。具體代碼如下:

#define BWSCON 0x48000000

#define BANKCON1 0X48000008

rBWSCON=ioremap_nocache(BWSCON,4);

r BANKCON1=ioremap_nocache(BANKCON1,4);

3.2 量表信度 Cronbach′s α系數(shù) 它用于評(píng)價(jià)問卷的內(nèi)部一致性,其取值范圍為0~1,取值越大,問卷的內(nèi)部一致性越好。一般而言,系數(shù)為0.7以上表明問卷的信度較好[12]。本研究顯示,中文版N-QOL兩個(gè)維度及總量表的Cronbach′s α系數(shù)分別為0.763、0.734、0.782,表明本量表具有較高的內(nèi)部一致性信度。2個(gè)維度與總量表的相關(guān)性分析結(jié)果提示,量表各維度與總量表的相關(guān)性均較好。

*rBWSCON =(*rBWSCON&~(0xf<<4))|(2<<4);

*rBANKCON1=*BANKCON1& ~(0x7f< <4)|(7< <8);

3.6 DMA寄存器初始化

S3C2440A支持處于系統(tǒng)總線和外設(shè)總線的4個(gè)DMA通道,DMA控制器的每個(gè)通道都可以無(wú)限制地執(zhí)行系統(tǒng)總線和外設(shè)總線之間設(shè)備的數(shù)據(jù)移動(dòng),每個(gè)DMA通道都可以執(zhí)行下面4種情況[7]:

1)源地址和目標(biāo)地址都在系統(tǒng)總線上;

2)源地址在系統(tǒng)總線上,目標(biāo)地址在外設(shè)總線上;

3)源地址在外設(shè)總線上,目標(biāo)地址在系統(tǒng)總線上;

4)源地址和目標(biāo)地址都在外設(shè)總線上。

DMA可以在沒有CPU的干擾之下進(jìn)行數(shù)據(jù)傳輸,大大提高處理器的效率,DMA的運(yùn)行還可以由軟件進(jìn)行控制,也可以由來(lái)自內(nèi)部或者外部的引腳請(qǐng)求進(jìn)行。本系統(tǒng)選用DMA3通道,采用軟件觸發(fā)的方式進(jìn)行,驅(qū)動(dòng)程序需要對(duì)DMA中的相關(guān)寄存器進(jìn)行配置。

源地址控制寄存器DISRCC3,物理地址為0x4B0000C4,源地址在系統(tǒng)總線(AHB)上,每次進(jìn)行單次和突發(fā)模式傳輸后數(shù)據(jù)大小選擇增加。

目的地址寄存器DIDST3,物理地址為0x4B0000C8,分配目的地址時(shí)要注意,由于采用DMA方式,內(nèi)存中獲取的目的虛擬地址數(shù)據(jù)與cache中數(shù)據(jù)不一致將會(huì)出現(xiàn)內(nèi)存錯(cuò)誤,所以在進(jìn)行地址申請(qǐng)時(shí)要禁止C(Cacheable)域,C域代表是否使用高速緩沖存儲(chǔ)器。也就是cache。所以在進(jìn)行目的地址申請(qǐng)時(shí)采用dma_alloc_writecombine()。

目的地址控制寄存器 DIDSTC3,物理地址為0x4B0000CC,因?yàn)镾RAM也外設(shè)在系統(tǒng)總線上,所以與源地址控制寄存器配置相同。

DMA控制寄存器DCON3,物理地址為0x4B0000D0,該寄存器有32位,配置非常重要,針對(duì)外接SRAM的特性,軟件觸發(fā)的方式。最后對(duì)DMA觸發(fā)屏蔽寄存器(DMASKTRIG3)進(jìn)行配置,主要設(shè)置為軟件觸發(fā)方式。如要詳細(xì)了解配置原因詳見芯片手冊(cè)。

#define DMA3_REGS_BASE 0x4b0000c0

struct dma_regs{

volatile unsigned long disrc;

volatile unsigned long disrcc;

volatile unsigned long didst;

volatile unsigned long didstc;

volatile unsigned long dcon;

volatile unsigned long dstat;

volatile unsigned long dcsrc;

volatile unsigned long dcdst;

volatile unsigned long dmasktrig;

};

dma_regs=ioremap_nocache(DMA3_REGS_BASE,sizeof(struct dma_regs));

dest=dma_alloc_writecombine(NULL,BUSIZE,&dest_phy,GFP_KERNEL);

dma_finish=0;

dma_regs->disrc=FPGA_DATA_BASE;

dma_regs->disrcc=0;

dma_regs->didst=dest_phy;

dma_regs->didstc=0;

//AHB|interrupt|burst|holemode|reload

dma_regs->dcon=(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<22)|(BUSIZE/4);

dma_regs- >dmasktrig=(1<<1)|(1);

4 應(yīng)用程序設(shè)計(jì)

系統(tǒng)對(duì)實(shí)時(shí)性要求較高,以突出高性能為主,因此應(yīng)用程序規(guī)模較小,在設(shè)計(jì)時(shí)采用面向過程的開發(fā)方式。本系統(tǒng)的主要開發(fā)流程如圖6所示。

圖6 應(yīng)用程序流程

本系統(tǒng)的主要應(yīng)用程序較簡(jiǎn)單,主要是將圖像數(shù)據(jù)上傳到PC機(jī),本系統(tǒng)選用UDP的方式進(jìn)行數(shù)據(jù)傳輸。

上傳數(shù)據(jù)包括兩個(gè)部分,一個(gè)是圖像數(shù)據(jù),另一個(gè)是傳感器信息。由于傳輸數(shù)據(jù)中包括了實(shí)時(shí)媒體流數(shù)據(jù),因此該網(wǎng)絡(luò)傳輸協(xié)議采用了RTP/RTCP實(shí)時(shí)傳輸協(xié)議和實(shí)時(shí)傳輸控制協(xié)議。傳輸數(shù)據(jù)包括標(biāo)簽數(shù)據(jù)和視頻壓縮數(shù)據(jù),進(jìn)行分時(shí)傳輸,但由于標(biāo)簽數(shù)據(jù)重要性高,因此具有更高的優(yōu)先級(jí),即保證一個(gè)傳輸周期內(nèi)標(biāo)簽數(shù)據(jù)可靠傳輸完成后,再進(jìn)行視頻數(shù)據(jù)流的傳輸。

RTP/RTCP下層使用的網(wǎng)絡(luò)層協(xié)議為UDP,因?yàn)镽TP/RTC協(xié)議已經(jīng)完成了差錯(cuò)控制和擁塞控制等傳輸控制,不需要使用復(fù)雜的TCP協(xié)議來(lái)實(shí)現(xiàn),而是選擇簡(jiǎn)單的UDP 協(xié)議[7]。

數(shù)據(jù)按照RTP格式封裝完成后,使用UDP協(xié)議通信,UDP不要求保持一個(gè)連接,沒有因接收方認(rèn)可收到數(shù)據(jù)包而帶來(lái)的開銷,需要的網(wǎng)絡(luò)帶寬比TCP更小。UDP通信的程序設(shè)計(jì)流程圖如圖7所示。

圖7 網(wǎng)口數(shù)據(jù)傳輸協(xié)議

5 實(shí)驗(yàn)結(jié)果分析

對(duì)采集的原始圖像,在FPGA做相應(yīng)的盲元補(bǔ)償、濾波、非均勻校正等算法處理。通過實(shí)驗(yàn)室中黑體映射進(jìn)行溫度標(biāo)定,建立溫度與灰度的映射表,ARM系統(tǒng)中采用DMA方式對(duì)圖像進(jìn)行傳輸存取,每幀圖像分辨率為384×288,每點(diǎn)的圖像數(shù)據(jù)位16 bit,在進(jìn)行圖像顯示時(shí)只需選取高8位輪廓進(jìn)行顯示就能達(dá)到要求,經(jīng)測(cè)試傳輸速度為15 f/s(幀/秒),網(wǎng)口模塊需要在系統(tǒng)中達(dá)到20 Mbit/s的帶寬,經(jīng)過測(cè)試本系統(tǒng)網(wǎng)口模塊能達(dá)到傳輸要求。最后PC機(jī)對(duì)上傳的灰度數(shù)據(jù)經(jīng)過編碼顯示。系統(tǒng)實(shí)物圖和PC機(jī)接收到烙鐵紅外圖像如圖8所示。測(cè)試表明本文設(shè)計(jì)的各組模塊均能達(dá)到紅外監(jiān)控系統(tǒng)的要求。

6 總結(jié)

本文設(shè)計(jì)出基于ARM和FPGA紅外系統(tǒng)數(shù)據(jù)交換驅(qū)動(dòng)程序,詳細(xì)介紹驅(qū)動(dòng)設(shè)計(jì)的流程,在傳統(tǒng)數(shù)據(jù)的內(nèi)存映射傳輸方式上,提出軟件觸發(fā)DMA方式實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的搬移,極大提高了系統(tǒng)傳輸效率。

圖8 系統(tǒng)實(shí)物圖和PC機(jī)接受到烙鐵紅外圖像

[1]周慶福,楊永軍,呂國(guó)義.紅外輻射測(cè)溫儀及校準(zhǔn)方法探討[J].計(jì)測(cè)技術(shù),2008,28(1):33-35.

[2]王劍飛.基于FPGA和DSP的多路信號(hào)采集系統(tǒng)的設(shè)計(jì)[J].電視技術(shù),2013,37(23):57-60.

[3]宋玲,裴志強(qiáng),劉寶娟.Actel FPGA芯片APA150研究與應(yīng)用[J].微處理機(jī),2008(3):22-23.

[4]許川佩,孫義軍,吳玉龍.基于ARM和FPGANoC資源網(wǎng)絡(luò)接口驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2013,32(13):83-86.

[5]吳華,謝禮瑩,徐澤宇.基于 ARM9的紅外熱像儀設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,36(16):234-236.

[6]楊柱,劉健.先入先出數(shù)據(jù)緩存的方法及全滿空間訪問先入先出存儲(chǔ)器,中國(guó):CN200510083155.7[P].2006-02-08.

[7]屈曉平,劉濤.嵌入式Linux操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序程序設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算技術(shù)與自動(dòng)化,2008(10):45-46.

[8]姚錫忠.基于S3C2440的FlexRay總線設(shè)計(jì)[J].淮海工學(xué)院學(xué)報(bào):自然科學(xué)版,2010,19(3):25-27.

猜你喜歡
驅(qū)動(dòng)程序寄存器隊(duì)列
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
隊(duì)列里的小秘密
基于多隊(duì)列切換的SDN擁塞控制*
軟件(2020年3期)2020-04-20 00:58:44
在隊(duì)列里
豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
分簇結(jié)構(gòu)向量寄存器分配策略研究*
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
驅(qū)動(dòng)程序更新與推薦
驅(qū)動(dòng)程序更新與推薦
宁阳县| 伊川县| 拜泉县| 兴和县| 波密县| 彭山县| 泗水县| 临猗县| 乌拉特中旗| 栾川县| 平塘县| 林芝县| 宁强县| 开远市| 喜德县| 开封市| 芜湖市| 农安县| 阿克苏市| 宿州市| 宝应县| 石棉县| 睢宁县| 永宁县| 诸暨市| 六盘水市| 宝山区| 天峻县| 崇明县| 榆树市| 株洲市| 独山县| 新竹市| 吴堡县| 灵台县| 保定市| 延寿县| 黔西| 米易县| 孝昌县| 右玉县|