介绍了DSP(Digital signal processor) 芯片TMS 320VC5402 的HPI ( Host port interface) 主机接口原理,以一个简单的通信程序作为例子,详细说明通过HPI 口实现5402 芯片内部的16 kB 双端口RAM 与AT 89 C51单片机的通信过程. 采用C 语言与汇编语言混合编程的方式,实现了双端口通信.
引言
随着信息技术的发展,数字信号处理在通信、语音处理、图像处理、工业控制等方面得到了广泛的应用.TMS 320VC5402 是专门为快速实现各种数字信号处理算法而设计的常用定点DSP 芯片,广泛使用在各类数字信号中. 该芯片采用优化的哈佛结构,6 级流水线,片上含16 kB 零等待双端口SRAM ,增强型8 位HPI接口,主频可达到100 MHz ,3. 3 V 和1. 8 V 双电源供电[1 ] .作为信号采集处理及控制显示系统,传统的方法是采用来单片机实现[2 ] ,但单片机的实时处理功能较弱. DSP 芯片具有强大的数据处理能力,但在控制显示方面不如单片机灵活. 为此,本文采用A T89C51 单片机作为主机,DSP 作为高速数据处理器,通过HPI 实现了与TMS 320VC 5402 的并行高速通信. 编写TMS320 C54X 程序和HPI 中断程序,完成了系统软硬件设计的全过程,充分发挥了单片机和DSP 的优势.
1 HPI 端口结构及系统硬件电路设计
TMS 320VC5402 增强型8 位HPI 引脚功能:
HCS :端口使能. 当= 0 时,HPI 端口被选中,允许数据传输;
HAS :地址锁存信号,下降沿锁存;
HBIL :字节顺序指示, = 0 时表明当前传输的第1 字节, = 1 为第2 字节;
HRW:读或写信号, = 1 时表明主机从HPI 读走数据, = 0 时写入数据;
HDS1 ,HDS2 :数据锁存信号;
HRDY: HPI 准备好,外部设备读该信息,为1 时表明HPI 空闲状态,可以进行数据传输;为0 时, HPI忙于内部操作,数据还没有准备好;
HIN T :主机中断,输出到主机设备,由DSP 软件控制;
HCN TL1 ,HCN TL0 :控制信号,表明当前传输的数据类型;
00 :访问HPI 的控制寄存器HPIC ,对该寄存器进行读或写操作;
01 :访问HPI 的数据寄存器HPID ,并且地址寄存器HPIA 自动加1 或减1 ;
10 :访问HPI 的地址寄存器HPIA ,对该寄存器进行读或写操作;
11 :访问HPI 的数据寄存器HPID ,对地址寄存器HPIA 无影响;
HD0 - HD7 :数据/ 地址总线.
值得说明的是,外部设备接入HPI 并不需要使用所有的控制引脚,特别是锁存信号HAS、HDS1 和HDS2 ,一般只使用一个就够了. 系统硬件电路设计如图1 所示,图中16245 的作用是双向电平驱动转换,实现单片机5 V 信号与DSP 3. 3 V 电平信号的相互驱动转换,其中P1. 2 控制数据传输的方向.
图1 单片机与DSP 的HPI 接口电路
2 软件编程
HPI 通信软件的设计包括DSP 端和主机端(A T 89 C 51) 两部分. 通信通过双方的中断服务程序进行,单片机的中断服务程序中通过HPI 接收DSP 的发送帧进行处理,同时将一定格式的有关数据通过HPI 发送给DSP ,作为DSP 的接收帧,并通过HPI 发送中断给DSP. DSP 响应中断,在中断服务程序中处理数据,并按照单片机接收帧设置发送帧传输数据,向主机发送中断信号, 从而实现双向通信功能[ 3 ] .
在A T89 C51 的软件中,通过对P0 口和P1 口的控制来传输数据,从DSP 的0X0200 地址处读出数据,并同时给DSP 产生一个HPI 中断. 主机编程的流程如图2 所示,汇编语言主程序如下:
HRW EQU P1. 0
HCS EQU P1. 1
HPIDIR EQU P1. 2
HCN TL0 EQU P1. 3
HCN TL1 EQU P1. 4
HDS1 EQU P1. 5
HBIL EQU P1. 6
HRDY EQU P1. 7
MAIN : JB P3. 4 , $
; HPI 初始化
MOV R2 , # 08H
; HPI 控制寄存器清零,先高位,清中断
MOV R3 , # 08H
LCALL WHPIC ;写HPIC
MOV R2 , # 00H
MOV R3 , # 0FFH
LCALL WHPIA ;置地址
MOV R2 , # 00H ;写初始帧头
MOV R3 , # 0AA H
LCALL LWHPID
MOV R2 , # 00H ;写帧长
MOV R3 , # 01H
LCALL LWHPID
MOV R2 , # 00H ;写帧类型
MOV R3 , # 02H
LCALL LWHPID
MOV R2 , # 00H ;写DA TA[0 ]
MOV R3 , # 03H
LCALL LWHPID
MOV IE , # 81H ;主机中断允许
MOV R2 , # 04H ;DSP HPI 中断
MOV R3 , # 04H
LCALL WHPIC ;写HPIC
SJMP $ ;等待主机中断发生
在DSP 的软件中,用HPI 中断服务程序实现数据收发. DSP 的HPI 中断服务程序置位中断标志[4 ] ,C 语言主程序根据接收帧在地址0X200 处写入一个发送帧,并发送主机中断到A T 89 C 51. C 语言程序如下:
typedef st ruct
{ int head ; / 3 f ramehead 3 /
int length ; / 3 f ramelength 3 /
int f unc ; / 3 f unc type 3 /
int data [ 253 ] ; / 3 t he data 3 /
} HPIFRAME ;
HPIFRAME hpiinbuf ;
HPIFRAME hpiout buf ;
# pragma DA TA_SECTION (hpiinbuf ,
" . hpibuffer" )
# pragma DA TA_SECTION (hpioutbuf ,
" . hpibuffer" )
void main ()
{ char hpidatacnt ;
HPIFRAME 3 hpiinbufpt r = &hpiinbuf ;
HPIFRAME 3 hpiout bufpt r = &hpiout buf ;
c54_init () ;
ser0inwrcnt = 1 ;
ser0out rdcnt = 5 ;
ser0inrdcnt = 5 ;
ser0outwrcnt = 1 ;
ser0flag = 0 ;
for ( ; ;) {
if (hpirecflag > = 1) {
hpirecflag = 0 ;
if (hpiinbufpt r - > head = = 0xaa) {
hpiout bufpt r - > head = 0xaa00 + hpiinbufpt r
- > lengt h ;
hpiout bufpt r - > f unc = hpiinbufpt r - > f unc ;
for (hpidatacnt = 0 ;hpidatacnt < hpiinbufpt r
- > lengt h ;hpidatacnt + + )
hpiout bufpt r - > data[ hpidatacnt ] =
hpiinbufpt r - > data[ hpidatacnt ] ;
hpidsp_host () ; } } } }
图2 主机编程流程图
3 结束语
DSP 与单片机的混合系统设计,可实现双方优势互补,在信号处理及控制显示电路设计中是一款较佳的设计方案.
评论
查看更多