嵌入式機(jī)器視覺(jué)系統(tǒng)中ARM與DSP的數(shù)據(jù)通信設(shè)計(jì)方案
出處:互聯(lián)網(wǎng) 發(fā)布于:2011-06-06 13:19:37
隨著Internet技術(shù)與工業(yè)、航空電子控制、視覺(jué)應(yīng)用等的結(jié)合日益緊密,嵌入式設(shè)備與Internet的結(jié)合已成為大勢(shì)所趨。目前新的微處理器層出不窮,要求嵌入式操作系統(tǒng)的設(shè)計(jì)更加便于移植,支持更多的微處理器。DSP對(duì)數(shù)字信號(hào)和數(shù)值算法具有強(qiáng)大的運(yùn)算處理能力,ARM微控制器則控制功能強(qiáng)大,可以加載嵌入式操作系統(tǒng),且能提供良好的人機(jī)交互、任務(wù)管理、網(wǎng)絡(luò)通信等方面功能。發(fā)揮DSP和ARM處理器各自的優(yōu)勢(shì),采用ARM+DSP結(jié)構(gòu)的設(shè)計(jì)方案已成為嵌入式系統(tǒng)研究的熱點(diǎn)。
1 嵌入式機(jī)器視覺(jué)系統(tǒng)總體方案
采用ARM+DSP結(jié)構(gòu)的機(jī)器視覺(jué)系統(tǒng)總體結(jié)構(gòu)如圖l所示。以三星公司高性能ARM處理器S3C2440作為主控制器,配置并移植Linux操作系統(tǒng),以TI公司的DSP芯片TMS320C5402為圖像處理的協(xié)處理器,通過(guò)對(duì)DSP芯片自帶的HPI接口的硬件連接方案和驅(qū)動(dòng)程序設(shè)計(jì)。

由智能攝像機(jī)采集現(xiàn)場(chǎng)運(yùn)動(dòng)目標(biāo)的圖像,由ARM控制將數(shù)據(jù)存放在ARM與DSP的公共存儲(chǔ)區(qū)域中,并通知信號(hào)處理模塊DSP調(diào)用各種算法對(duì)視頻圖像進(jìn)行處理,并將結(jié)果信息傳給ARM處理器,由ARM控制步進(jìn)電機(jī),調(diào)整PTZ攝像機(jī)位姿使其對(duì)準(zhǔn)運(yùn)動(dòng)目標(biāo),實(shí)現(xiàn)實(shí)時(shí)跟蹤。ARM處理器還負(fù)責(zé)多任務(wù)管理、人機(jī)交互及中斷報(bào)警等。雙核系統(tǒng)的雙核各自擁有很好的性能,主機(jī)ARM與協(xié)處理器DSP之間能否進(jìn)行快速可靠的數(shù)據(jù)交換,直接決定機(jī)器視覺(jué)系統(tǒng)的運(yùn)行效率。
2 雙機(jī)通信硬件設(shè)計(jì)
2.1 HPI接口簡(jiǎn)介
主機(jī)接口(HPI)是TI公司C54x系列定點(diǎn)信號(hào)處理器(DSP)內(nèi)部自帶的接口部件,通過(guò)它可以方便地實(shí)現(xiàn)DSP與其他主機(jī)連接。增強(qiáng)型的HPI可以允許主機(jī)訪問(wèn)DSP所有的片上RAM單元,而標(biāo)準(zhǔn)主機(jī)接口只允許訪問(wèn)固定的2 K片上RAM。這里用到的TMS320C5402擁有增強(qiáng)HPI-16主機(jī)接口。由以下5部分組成:
1)HPI存儲(chǔ)器(DARAM) 傳送主機(jī)與DSP之間的數(shù)據(jù),在一個(gè)機(jī)器周期內(nèi)能被訪問(wèn)2次;
2)HPI地址寄存器(HPIA) 只有主機(jī)能對(duì)其進(jìn)行直接訪問(wèn)。該寄存器中存放著當(dāng)前尋址的HPI存儲(chǔ)單元的地址;
3)HPI控制寄存器(HPIC) 地址002CH,主機(jī)和DSP都能對(duì)他直接訪問(wèn),用來(lái)保存HPI操作的控制和狀態(tài)位;
4)HPI數(shù)據(jù)鎖存器(HPID) 只有主機(jī)能對(duì)它進(jìn)行直接訪問(wèn);
5)HPI控制邏輯 處理HPI與主機(jī)之間的接口信號(hào)。


2.2 接口電路及其工作原理


3 軟件設(shè)計(jì)
3.1 Linux驅(qū)動(dòng)程序
在Linux操作系統(tǒng)下,設(shè)備文件有3種類型:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備,各自對(duì)應(yīng)一種類型的設(shè)備驅(qū)動(dòng)程序。這里的HPI接口的驅(qū)動(dòng)程序?qū)儆谧址O(shè)備驅(qū)動(dòng)程序。
Linux下的驅(qū)動(dòng)程序是為相應(yīng)的設(shè)備編寫多個(gè)基本函數(shù),填充file_operations結(jié)構(gòu)體。其中定義了實(shí)現(xiàn)各種操作函數(shù)。如下所示:

open和release完成設(shè)備的打開(kāi)和關(guān)閉。mmap為內(nèi)存地址映射操作。下面是本文中的HPI接口的驅(qū)動(dòng)程序的設(shè)備入口hpi_open函數(shù),它負(fù)責(zé)打開(kāi)、準(zhǔn)備設(shè)備。

任何時(shí)候?qū)ψ址O(shè)備(HPI)接口進(jìn)行打開(kāi)操作,都會(huì)調(diào)用設(shè)備的open入口點(diǎn)(hpi_open)。所以open函數(shù)(hpi_open)必須對(duì)將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,例如設(shè)備是獨(dú)占的,則open函數(shù)必須將設(shè)備標(biāo)記成忙狀態(tài),如上面例程中的①處兩行所示。
3.2 驅(qū)動(dòng)程序中映射的實(shí)現(xiàn)
由于在Linux系統(tǒng)中,用戶應(yīng)用程序不能直接對(duì)驅(qū)動(dòng)程序的內(nèi)存空間進(jìn)行操作,因此必須用到內(nèi)存映射機(jī)制。內(nèi)存映射是指把內(nèi)核中的特定的內(nèi)存空間映射到用戶空間的內(nèi)存中去。
mmap系統(tǒng)調(diào)用映射一個(gè)設(shè)備,意味著使用戶空間的一段地址關(guān)聯(lián)到設(shè)備內(nèi)存上,實(shí)際上就是對(duì)設(shè)備的訪問(wèn)。
mmap方法是file_operations結(jié)構(gòu)的一部分,要實(shí)現(xiàn)映射必須分兩步:
1)調(diào)用內(nèi)核中的remap_page_range函數(shù),它的功能是:構(gòu)造用于映射一段物理地址的新頁(yè)表,實(shí)現(xiàn)了內(nèi)核空間與用戶空間的映射,其原型如下:

函數(shù)參數(shù)的確切含義如下:unsigned long virt_add為重映射開(kāi)始處的虛擬地址。這個(gè)函數(shù)為虛地址空間virt_add和virt_add+size之間的范圍構(gòu)造頁(yè)表。unsigned long phys_add為虛擬地址應(yīng)該映射到的物理地址。unsigned long size為被重映射的區(qū)域的大小,以字節(jié)為單位。pgprot_t prot為新VMA所請(qǐng)求的“保護(hù)”屬性。驅(qū)動(dòng)程序不必修改保護(hù),在vma->vma_page_prot中找到的參數(shù)可不加改變地使用。
本課題中使用mmap調(diào)用的代碼如下:

這樣就為DSP的HPI接口所對(duì)應(yīng)的總線物理地址:0x10000000(對(duì)應(yīng)nGCS2)在vma->vm_start和vma->vm_end之間構(gòu)造了新的頁(yè)表。

hpi_mmap_add=mmap(NULL,length,PROT_READ|PROT_WRITE,MAP_SHARED,hpi_fd,0)其中參數(shù)start指明描述字fd對(duì)應(yīng)的“文件”在進(jìn)程地址空間內(nèi)的映射區(qū)的開(kāi)始地址,必須是頁(yè)面對(duì)齊的地址,通常設(shè)為NULL,讓內(nèi)核去自動(dòng)選擇開(kāi)始地址。任何情況下,mmap的返回值為內(nèi)存映射區(qū)的開(kāi)始地址。這樣通過(guò)對(duì)hpi_mmap_add操作,實(shí)現(xiàn)對(duì)起始地址為0x10000000的內(nèi)存段操作。

3.3 驅(qū)動(dòng)程序的內(nèi)核加載方式
將編寫好的驅(qū)動(dòng)程序加載到系統(tǒng)內(nèi)核,完成驅(qū)動(dòng)硬件的工作。
1)驅(qū)動(dòng)程序直接編譯入內(nèi)核采用這種方式編譯的驅(qū)動(dòng)程序在內(nèi)核啟動(dòng)時(shí)就已經(jīng)在內(nèi)存中,運(yùn)行時(shí)不需要再自行加載驅(qū)動(dòng),可以保留專用的存儲(chǔ)器空間。
2)驅(qū)動(dòng)程序的模塊加載采用模塊加載方式的驅(qū)動(dòng)程序?qū)?huì)以模塊形式存儲(chǔ)在文件系統(tǒng)里。這里就采用此種方式。
因采用的是模塊加載方式,所以還需要借助兩個(gè)重要的函數(shù)init_module()和cleanup_module(),完成模塊的注冊(cè)和卸載。具體源碼可以參見(jiàn)/usr/src/linux/kemel/module.c。在2.3版本以后采用了新的方法命名這兩個(gè)函數(shù),定義exampie_init()代替init_module(),example_cleanup()代替cleanup_module()。在程序的用下面兩行代碼進(jìn)行聲明:
module_init(S3C2440_HPI_init);
module_exit(S3C2440_HPI_exit);
3.4 接口具體應(yīng)用的設(shè)計(jì)方法
利用編寫好的驅(qū)動(dòng)程序,用戶可以編寫出不同的應(yīng)用接口程序。下面給出自增寫的方法:
根據(jù)圖2的接口電路,A2,A3,A4,A5對(duì)應(yīng)的接口分別是HCNTI0,HCNTL1,HHWIL,當(dāng)自增模式寫低半字時(shí),它們的值分別是:HCNTL0=0,HCNTL1=1,HHWIL=O。所以自增寫半字時(shí),加00000100即:0x04,當(dāng)自增模式寫高字節(jié)時(shí),它們的值應(yīng)該是HCNTL0=0,HCNTL1=1,HHWIL=1,即A[5:2]=1010。所以自增寫第二半字時(shí),加00101000即:0x28。對(duì)HPI控制寄存器寫地址用如下宏定義:

對(duì)于作為接收端的DSP處理器,需要明確:
1)是否準(zhǔn)備就緒,可以進(jìn)行寫入數(shù)據(jù),HPI-16中可以通過(guò)HPIC寄存器查詢HRDY的狀態(tài),當(dāng)HRDY為1時(shí),表明HPI已經(jīng)準(zhǔn)備就緒;
2)指明要寫數(shù)據(jù)的區(qū)域址,即dsp_add_w=(hpi.hpi_dsp_add),這是從應(yīng)用程序傳過(guò)來(lái)的參數(shù),以確定寫數(shù)據(jù)區(qū)域的起始地址。自增寫的代碼和注釋如下:

4 結(jié)束語(yǔ)
ARM+DSP的雙核系統(tǒng)是新型的嵌入式機(jī)器視覺(jué)系統(tǒng)構(gòu)建方法,這里設(shè)計(jì)的通過(guò)HPI接口交換數(shù)據(jù)的雙機(jī)通信方法,在機(jī)器視覺(jué)系統(tǒng)項(xiàng)目中被成功地應(yīng)用證明,傳輸數(shù)據(jù)速度達(dá)到10 Mb/s,能夠滿足嵌入式系統(tǒng)對(duì)實(shí)時(shí)性的要求,具有廣闊的應(yīng)用前景。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 掌握 DSP:原理剖析與應(yīng)用實(shí)踐2025/5/8 14:03:24
- 模糊邏輯在 DSP 上實(shí)時(shí)執(zhí)行2023/7/25 17:13:30
- 多速率DSP及其在數(shù)模轉(zhuǎn)換中的應(yīng)用2023/6/12 15:28:52
- 使用 DSP 加速 CORDIC 算法2023/3/29 15:46:30
- 高速DSP系統(tǒng)的信號(hào)完整性2022/9/26 16:45:38
- PCB測(cè)試點(diǎn)設(shè)計(jì)核心規(guī)范
- 高速連接器串?dāng)_問(wèn)題及解決方案
- 電源電路啟動(dòng)異常原因分析
- 降低DC-DC噪聲的PCB設(shè)計(jì)方法
- MOSFET在電池保護(hù)電路中的作用
- PCBDFM可制造性設(shè)計(jì)核心指南
- 二極管的種類及主要應(yīng)用場(chǎng)景
- 信號(hào)處理經(jīng)典問(wèn)題:如何設(shè)計(jì)和實(shí)現(xiàn)自適應(yīng)濾波器?
- 連接器安裝與維護(hù)注意事項(xiàng)
- 電源IC調(diào)試過(guò)程中常見(jiàn)問(wèn)題









