DSP/ARM雙核系統的通信接口設計
在Linux中,設備驅動(dòng)程序是一組相關(guān)函數的集合。它包含設備服務(wù)子程序和中斷處理程序,每個(gè)設備服務(wù)子程序只處理一種設備或者緊密相關(guān)的設備。其目的就是從與設備無(wú)關(guān)的軟件中接受抽象的命令并執行。當執行一條請求時(shí),具體操作是根據控制器驅動(dòng)程序提供的接口,并利用中斷機制去調用中斷服務(wù)子程序配合設備來(lái)完成這個(gè)請求。設備程序利用結構file_operations與文件系統聯(lián)系起來(lái)。在Linux下驅動(dòng)程序裝載如圖4所示。
(2) HPI驅動(dòng)程序
HPI接口可用I/O端口方式,也可以用I/O存取方式。系統平臺采用I/O存取方式,將HPI訪(fǎng)問(wèn)控制寄存器、數據寄存器、地址寄存器,映射到內存物理地址為0X0C000000開(kāi)始的空間,通過(guò)訪(fǎng)問(wèn)存儲器指令對HPI進(jìn)行操作。HPI具體物理地址定義如下:
#defineHPI_BASE0X0C000000//HPI基地址
#define HPD_READ_LOWHPI_BASE+0X0012
//讀數據寄存器第一字節
#define HPA_WRITE_HIGHHPI_BASE+0X000C
//寫(xiě)地址寄存器第二字節
在Linux下,類(lèi)似Windows,程序不能直接訪(fǎng)問(wèn)物理地址。設備驅動(dòng)程序是內核的一部分,它像內核中其他代碼一樣運行在內核模式,驅動(dòng)程序如果出錯就會(huì )使系統受到嚴重破壞,因此需要將物理地址映射到內核空間。在Linux下通過(guò)virtul_address=(u32)ioremap (HPI_BASE,HPI_LENGTH)實(shí)現。驅動(dòng)程序主要結構如下:
struct file_operations hpi_fops={
owner:THIS_MODULE,
read: hpi_read,
write: hpi_write,
poll : hpi_poll,
open: hpi_open,
release: hpi_release,
};
HPI通信協(xié)議采用幀結構,由于增強型HPI接口允許訪(fǎng)問(wèn)DSP內部RAM所有空間,系統通信在DSP內部分配2 K字(16位)作為幀緩沖區,讀寫(xiě)各1 K字,協(xié)議采用一位滑動(dòng)窗口協(xié)議。幀格式如表1所列。
結語(yǔ)
本文介紹了使用ARM和DSP雙CPU構成的雙核嵌入式系統的硬件平臺,以及源代碼開(kāi)放的Linux作為嵌入式系統中操作系統的方法,給出了系統設計的總體框圖,詳細介紹了ARM和DSP通信接口的設計。這一設計方法可以適用于大多數現代嵌入式系統的設計,有一定的實(shí)用價(jià)值。
評論