TMS320VC5402与单片机的HPI口通信设计

处理器/DSP

892人已加入

描述

介绍了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 控制数据传输的方向.

 HPI

  图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 () ;  }  }  }  }

 HPI

  图2  主机编程流程图

  3  结束语

  DSP 与单片机的混合系统设计,可实现双方优势互补,在信号处理及控制显示电路设计中是一款较佳的设计方案.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分