圖1 通過HPI 可以訪問的DSP 存儲區(qū)圖
CS89712 與C5510 DSP 的接口設計
硬件連線
TMS320VC5510 與CS89712 連接的接口電路如圖3 所示。由圖2 可見,C5510 通過EHPI 與主機設備相連時,除了EHPI 數據總線及控制信號線外,不需要附加其它的邏輯電路,非常方便。

圖2 EHPI接口非復用模式下的連接圖
從EHPI 寄存器的編址方式可以看出,將HPI16接口安排在CS89712 的BANK3(即地址范圍0X03000000~0X03FFFFFF),而且CS89712 具有內部譯碼器,直接產生片選信號CS3。
由于C55X HPI16 是一個16 位的并行端口,而C5510 的內部結構為16 位,所以在非復用模式下,只需將數據和地址總線分別連接即可。
另外,還有幾個關鍵的控制信號需要連接。一個就是HR/W信號,由于CS89712 沒有此信號,使用端口A 的PA3 來代替。當PA3=1 時,代表讀操作,反之為寫操作。
由于CS89712 和C5510 EHPI 接口的控制邏輯不盡相同,需要使用其它的一些信號線來進行模擬,此時要嚴格遵循EHPI 的讀寫時序。
軟件設計
在硬件連接設計好的基礎上,我們還需要通過正確的編程才能實現我們預想的時序。因為我們在ARM CS89712 上運行嵌入式操作系統(tǒng)uCOS-II ,所以在寫程序對HPI 接口進行讀/寫操作時將HPI 接口看作一個外部設備,將完成讀/寫操作的程序看成在uCOS-II 下面的一個字符型驅動。這樣軟件的設計就變成了在uCOS-II 下面驅動程序的開發(fā)??紤]到CS89712 不光要將DSP 的數據取過來,而且還要將這些數據處理后再發(fā)送出去,這就需要這兩者之間有很好的配合。
CS89712 與DSP5510 之間的EHPI 接口讀/寫程序主要由兩個部分組成: 11ARM 自身的初始化;21HPI 接口讀寫程序。
ARM 處理器自身的初始化
ARM處理器首先要完成自身工作模式等一系列的初始化,才能正常進行EHPI 接口的讀/寫,源代碼如下所示。
//為了配合EHPI 口的時序,關掉MMU 頁表中
bank3 的Cache
Xcount SETA 0x30000c1e
WHILE Xcount < 0x31000000
DCD Xcount
Xcount SETA Xcount + 0x00100000
WEND
rMEMCFG1&=0x00ffffff;//設置與DSP 連接的nCS3 :16 位總線寬度、8 個隨機狀態(tài)
rMEMCFG1|=0x01000000;//3 個順序等待狀態(tài)、禁止順序訪問、禁止擴展時鐘上面這段代碼主要是對幾個寄存器進行配置。
在配置好ARM 處理器的工作模式后,對外部I/O 接口BANK3 的對應地址進行讀/寫操作,就可以完成對HPI 接口的相應操作了。
HPI 接口讀寫程序
以下的第一句代碼是宏定義,定義了C5510 的EHPI 接口寄存器的地址。在本設計中,已經將HPI口與外部I/O 接口的BANK3 相接,這樣HPI 口將占用外部I/O 接口BANK3 的地址。由于是使用PA3來模擬HPI16 接口的HR/W,所以對DSP 進行讀/寫操作時, 應先將該信號置為相應的讀/寫有效狀態(tài)。
//ARM向DSP 寫數據時
# define EHPI-BASE 0x3208000
int t ;
rPADDR=0x08 ; //PA3 方向定義為輸出
rPADR=0x00 ; //PA3 為低電平
t=*(volatile U16* )( EHPI-BASE + Add-offset);//ARM從DSP 讀取數據時
rPADDR=0x08 ; //PA3 方向定義為輸出
rPADR=0x08 ; //PA3 為高電平
(volatile U16*)( EHPI-BASE+Add-offset)=t
結束語
以ARM芯片作為主控制器,用DSP 芯片進行運算,然后通過HPI 接口進行通信和交換數據的嵌入式系統(tǒng)設計應用模式的得到越來越廣泛的應用,而這兩者之間能夠高效、快速并且穩(wěn)定的進行數據交換將是影響系統(tǒng)性能的關鍵部分之一。文中給出的CS89712 和C5510 之間的硬件連接方法和軟件設計經過實踐的驗證,是可行的和滿足要求的。