ARM CPU CS89712 与C5510 DSP 的接口设计
来源:电子资料网 作者:—— 时间:2012-06-19 13:58
1 引言
目前嵌入式系统已被广泛地应用到电子产品领域和无线通信、网络通信等高端设备领域。32 位ARM嵌入式处理器具有高性能、低功耗的特性,DSP芯片由于功能强大,加上接口方便、软件可用资源丰富、编程方便、稳定性好、精度高等优点,应用也越来越广泛。通常在嵌入式系统的设计中,由ARM嵌入式处理器实现整个系统的协调控制和网络功能,由DSP 芯片来执行复杂计算,因此需要实现ARM处理器和DSP 之间的数据交换。从某种程度上来说,ARM嵌入式处理器和DSP 之间数据交换的速度决定了整个系统的运行速度和性能。
2 ARM CPU CS89712 的特点
CS89712 是Cirrus Logic 公司一款基于ARM7TDMI的SOC 芯片。它一方面具有ARM 处理器的所有优点:低功耗、高性能;同时又具有非常丰富的片上资源,非常适合嵌入式产品的开发。其特点如下:
- 采用ARM7TDMI 内核,I/O 电压3.3 V ,内核电压2.5 V ;
- 内置锁相环(PLL) ,系统主频最高达74 MHz ;
- 3 种工作模式,可以实现电源管理以降低系统功耗;
- 8KB 的系统高速缓存(CACHE) ,极大地提高了系统运行速度;
- 支持8 个MEMORYBANK,最大外部存储空间达256 MB ,并支持SDRAM;
- 内置单色LCD 控制器;
- 2 路异步串口(UART) ;
- 27 个通用I/O 口;
- 实时时钟(RTC) 和看门狗电路(WATCHDOG) 。
- 3 C55X DSP 及其EHPI 接口
3.1 C5510 DSP 的特点
以高速、低功耗为特征的VC55X 系列DSP 采用先进的改进型哈佛结构,具有分离的数据总线和程序总线,片内集成了ROM、RAM和多个外设,如通用I/O 口、定时器、时钟发生器、软件可编程等待状态发生器、可编程块切换逻辑、串行口、直接存储器存取控制器(DMA) 和与外部处理器通信用的主机接口(HPI) 。
3.2 C55X的增强型主机接口( EHPI)
TI 的C5510 之前的DSP 系列(C54X 系列) 中的主机接口(HPI) 主要有三种:标准8 位HPI8 接口、增强型8 位HPI8 接口和16 位HPI16 接口。其中C542~C549 内含标准型HPI8 ;C5402、C5410 内含增强型HPI8 ;C5410 以上为HPI16 ;C5409、C5416 的HPI 可以由用户设置为增强型HPI8 或HPI16。C5510 其内部使用的是增强型主机接口,增强型比标准型更优越之处主要在于:增强型允许主机访问DSP 内部的所有片内RAM,而标准只能访问RAM 区中指定的2K字。 - C55X为主机提供增强型的16 位并行接口( EHPI) 具有以下特点 :
- 20 位主机地址总线
- 16 位主机数据总线
- 复用和非复用两种总线模式
- 主机可以访问C5510 的片内SARAM、片内DARAM和片外存储器
- 在高速传输数据时可以自增的20 位的地址寄存器(在复用模式下)
- 多地址、数据探头为各种主机提供紧密接口
- HRDY信号用来与主机进行握手
C5510 与外部主机或微处理器的连接具有单独的16 根数据线HD0 ~ HD15、20 根地址线HA0 ~HA19 和10 根控制线。主机主动通过EHPI 口能够直接访问DSP 的存储区。在图1 所示的HPI 能访问的地址范围内,主机和DSP 可以通过DSP 的内部和外部存储区来交换信息。除了对主机发中断(通过置HPIC 寄存器的HINT 位,可以使HINT 线有效)或清除主机发来的中断(通过清HPIC 寄存器的DSPINT标志) 需要DSP 干涉外,C5510 几乎不用进行其他操作。片内的DMA 通道会自动辅助完成RAM区与HPI 数据寄存器的数据传输。主机由HCNTL0/1 线来选择HPI 的某个控制寄存器,如表1 所列。通过对这4 个寄存器的访问,就可以在所设安全机制的允许范围下读/写DSP 的所有或部分片内RAM。
主机由HCNTL0/1 线来选择HPI 的某个控制寄存器。在非复用模式下,HCNTL0 决定HPI 是否访问控制其(HPIC) 寄存器或数据寄存器(HPID) ,如表1 所示(0 —低电平,1 —高电平) ,此时HCNTL1未被使用。
HCNTL0 | 访问类型(非复用模式下) |
0 | 主机读/写HPI 控制寄存器- HPIC |
1 | 主机读/写HPI 数据寄存器- HPID |
图1 通过HPI 可以访问的DSP 存储区图
4 CS89712 与C5510 DSP 的接口设计
4.1 硬件连线
TMS320VC5510 与CS89712 连接的接口电路如图2 所示。由图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 的读写时序。
4.2 软件设计
在硬件连接设计好的基础上,我们还需要通过正确的编程才能实现我们预想的时序。因为我们在ARM CS89712 上运行嵌入式操作系统uCOS-II ,所以在写程序对HPI 接口进行读/写操作时将HPI 接口看作一个外部设备,将完成读/写操作的程序看成在uCOS-II 下面的一个字符型驱动。这样软件的设计就变成了在uCOS-II 下面驱动程序的开发。
考虑到CS89712 不光要将DSP 的数据取过来,而且还要将这些数据处理后再发送出去,这就需要这两者之间有很好的配合。
CS89712 与DSP5510 之间的EHPI 接口读/写程序主要由两个部分组成: 1.ARM 自身的初始化;2.HPI 接口读写程序。
4.2.1 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 接口的相应操作了。
4.2.2 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
5 结束语
以ARM芯片作为主控制器,用DSP 芯片进行运算,然后通过HPI 接口进行通信和交换数据的嵌入式系统设计应用模式的得到越来越广泛的应用,而这两者之间能够高效、快速并且稳定的进行数据交换将是影响系统性能的关键部分之一。文中给出的CS89712 和C5510 之间的硬件连接方法和软件设计经过实践的验证,是可行的和满足要求的。