雙端口RAM在ARM 與DSP通信系統(tǒng)中的應(yīng)用
3 數(shù)據(jù)通信的軟件實(shí)現(xiàn)
本系統(tǒng)采用中斷控制方式來實(shí)現(xiàn)對(duì)雙端口RAM的讀寫操作。DSP 主要負(fù)責(zé)圖像數(shù)據(jù)壓縮工作,壓縮后的數(shù)據(jù)傳送給雙端口RAM.傳送數(shù)據(jù)時(shí),DSP 向信令字單元3FFF 寫入'55H',在ARM 方產(chǎn)生中斷后,ARM 讀信令字單元3FFF,如果是'55H',說明數(shù)據(jù)正在傳輸,讀完數(shù)據(jù)后,向信令字單元3FFE 寫入'AAH',代表讀完數(shù)據(jù)。DSP 接收到中斷后,讀信令字單元3FFEH,如果為'AAH',表示傳輸數(shù)據(jù)成功。
ARM完成整個(gè)系統(tǒng)的實(shí)時(shí)控制,對(duì)雙端口RAM的圖像數(shù)據(jù)進(jìn)行讀取然后經(jīng)過網(wǎng)絡(luò)傳遞給PC 機(jī),因此需要驅(qū)動(dòng)程序來實(shí)現(xiàn)雙端口RAM與ARM之間的數(shù)據(jù)通信。驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的接口,用戶可以通過驅(qū)動(dòng)程序來間接的實(shí)現(xiàn)對(duì)硬件的讀寫控制操作。雙端口RAM 的驅(qū)動(dòng)程序主要任務(wù)是讀雙端口RAM 數(shù)據(jù)到用戶空間、把用戶空間命令寫入雙端口RAM 相應(yīng)地址以及相應(yīng)雙端口RAM 產(chǎn)生的中斷。在驅(qū)動(dòng)程序中,最主要的結(jié)構(gòu)便是file_operation,在里面包含了對(duì)文件的打開、關(guān)閉、讀寫和其他控制函數(shù),file_operation 結(jié)構(gòu)如下:
在使用設(shè)備之前需要對(duì)設(shè)備進(jìn)行初始化,包括配置ARM 接口寄存器、注冊(cè)設(shè)備、申請(qǐng)中斷和分配虛擬地址空間等。配置寄存器和注冊(cè)申請(qǐng)工作在加載模塊時(shí)實(shí)現(xiàn),分配資源工作在dualram_open 函數(shù)內(nèi)實(shí)現(xiàn)。
配置接口寄存器,AT91RM9200 具有一個(gè)EBI 接口,可以方便的連接各種存儲(chǔ)設(shè)備,可以使用EBI 接口中的SMC 來控制讀寫,由CS4 接口來控制雙端口RAM 的使能信號(hào),通過向相應(yīng)寄存器內(nèi)寫入控制字來實(shí)現(xiàn)ARM 對(duì)雙端口RAM 的端口初始化工作。
在初始化函數(shù)init_dualram 中,用register_chrdev將雙端口RAM 注冊(cè)為一個(gè)字符型設(shè)備,用request_irq為設(shè)備申請(qǐng)相應(yīng)的中斷資源,函數(shù)如下:
myirq=request_irq(AT91RM_IRQ1,dualport_inter,SA_INTERRUPT,"dualram",NULL)
在裝載驅(qū)動(dòng)時(shí)進(jìn)行注冊(cè)和申請(qǐng),在卸載模塊時(shí)必須進(jìn)行注銷,即在dualram_exit 內(nèi)執(zhí)行unregister_chrdev 和free_irq 來釋放資源。
Linux 無法直接訪問某一物理地址空間,必須通過虛擬地址空間的映射機(jī)制來完成訪問。映射工作在dualram_open 函數(shù)內(nèi)完成,因此每次打開設(shè)備都會(huì)完成此工作。所要用到的地址資源和數(shù)據(jù)結(jié)構(gòu)定義如下:
#define dualram_base_addr 0x60000000
#define dualram_size ox3fff
u16 *remaddr
通過使用函數(shù)remaddr = ioremap (dualram_base_addr ,dualram_size);進(jìn)行虛擬地址映射,此后就可以使用remaddr 來完成對(duì)實(shí)際雙端口RAM 空間的訪問了。
為了有效的提高數(shù)據(jù)傳輸效率,驅(qū)動(dòng)程序與應(yīng)用程序之間采用異步通知的機(jī)制,這樣上層應(yīng)用程序便可以知道RAM 中的數(shù)據(jù)量是否達(dá)到閾值,而不用采用輪詢的方式,占用處理器資源。異步通知機(jī)制分三步完成,首先需要讓內(nèi)核知道驅(qū)動(dòng)程序與哪個(gè)進(jìn)程通信,當(dāng)進(jìn)程使用系統(tǒng)函數(shù)fcntl 執(zhí)行F_SETOWN 命令時(shí),設(shè)備文件擁有者(owner)的ID 號(hào)會(huì)被記錄在flip->f_owner 中,此時(shí)內(nèi)核知道了與驅(qū)動(dòng)進(jìn)行通信的進(jìn)程,然后應(yīng)用程序調(diào)用fcntl 的F_SETFL 命令來激活異步通知機(jī)制,這樣新數(shù)據(jù)到達(dá)時(shí)輸入文件便可發(fā)送一個(gè)SIGIO 信號(hào)到flip->f_owner 中指定的進(jìn)程。
圖像數(shù)據(jù)到達(dá)后,Linux 內(nèi)的應(yīng)用程序完成對(duì)數(shù)據(jù)的讀寫操作,寫操作函數(shù)為:dualram_write,就是利用copy_from_user 把用戶空間的數(shù)據(jù)寫入到雙端口RAM中,讀操作函數(shù):dualram_read,就是利用copy_to_user把雙端口RAM 中的數(shù)據(jù)讀入到用戶空間中[5,7].
4 測(cè)試結(jié)果
視頻監(jiān)控系統(tǒng)的測(cè)試環(huán)境是ARM 920T 與TMS320C6211 通過網(wǎng)絡(luò)與PC 互連構(gòu)成一個(gè)簡(jiǎn)單的局域網(wǎng)。通過網(wǎng)絡(luò)抓包軟件可以統(tǒng)計(jì)網(wǎng)絡(luò)的數(shù)據(jù)流量,通過CCS 分析工具分析系統(tǒng)的實(shí)時(shí)性。系統(tǒng)的量化階距越高,圖像的壓縮比率越大,所獲得的圖像質(zhì)量越差,本系統(tǒng)設(shè)置的量化階距設(shè)置為75.經(jīng)測(cè)試本系統(tǒng)的主要參數(shù)如下:圖像的壓縮格式為JPEG,分辨率為BMP(240×160),最大編碼速度為15 幀/秒,數(shù)據(jù)流量為50-200kbps,網(wǎng)絡(luò)采用UDP/IP 協(xié)議,網(wǎng)絡(luò)接口為RJ-45 100Mbps.
5 結(jié)語(yǔ)
本文結(jié)合了嵌入式圖像數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì),介紹了通過雙端口RAM 實(shí)現(xiàn)ARM920T 與 TMS320C6211 DSP 之間的通信。利用雙端口RAM 的強(qiáng)大功能可以實(shí)現(xiàn)各種形式的處理器之間的高速數(shù)據(jù)通信。在信號(hào)處理領(lǐng)域和高速數(shù)據(jù)采集中,利用雙端口RAM的幾種不同仲裁機(jī)制,可以完成不同的數(shù)據(jù)傳送要求。
用它構(gòu)成的接口電路具有傳送速率高、實(shí)時(shí)性好、可靠性高、電路簡(jiǎn)單等優(yōu)點(diǎn)。
通信相關(guān)文章:通信原理
評(píng)論