图1 通过HPI 可以访问的DSP 存储区图
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 上运行嵌入式操作系统uCOS-II ,所以在写程序对HPI 接口进行读/写操作时将HPI 接口看作一个外部设备,将完成读/写操作的程序看成在uCOS-II 下面的一个字符型驱动。这样软件的设计就变成了在uCOS-II 下面驱动程序的开发。考虑到CS89712 不光要将DSP 的数据取过来,而且还要将这些数据处理后再发送出去,这就需要这两者之间有很好的配合。
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 个随机状态
rMEMCFG1|=0x01000000;//3 个顺序等待状态、禁止顺序访问、禁止扩展时钟上面这段代码主要是对几个寄存器进行配置。
在配置好ARM 处理器的工作模式后,对外部I/O 接口BANK3 的对应地址进行读/写操作,就可以完成对HPI 接口的相应操作了。
HPI 接口读写程序
以下的第一句代码是宏定义,定义了C5510 的EHPI 接口寄存器的地址。在本设计中,已经将HPI口与外部I/O 接口的BANK3 相接,这样HPI 口将占用外部I/O 接口BANK3 的地址。由于是使用PA3来模拟HPI16 接口的HR/W,所以对DSP 进行读/写操作时, 应先将该信号置为相应的读/写有效状态。
//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 接口进行通信和交换数据的嵌入式系统设计应用模式的得到越来越广泛的应用,而这两者之间能够高效、快速并且稳定的进行数据交换将是影响系统性能的关键部分之一。文中给出的CS89712 和C5510 之间的硬件连接方法和软件设计经过实践的验证,是可行的和满足要求的。