TI 54xxDSP与51单片机的接口技术_DSP论文
关键词:dsp hpi 单片机
tms320c54xx是ti公司针对音频信号处理领域推出的一种定点dsp系列芯片,已经在很多语音信号处理系统中得到了广泛的应用。在这些系统中,通常包含dsp和单片机两个子系统。dsp系统作为从设备,完成采样、计算等功能;单片机系统作为主设备,完成交互界面的控制。主从设备之间也要以一定的方式接口,来进行数据通信。下面就介绍dsp和单片机之间的接口技术。
这里单片机选择的是mcs-51系列。51系列是一种很经典的单片机,20多年来一直久盛不衰。而且intel通过授权51内核,出现很多第三方生产的51系列产品。这些产品一般都具有较高的时钟频率和较大的存储空间,而且还能运动嵌入式操作系统。这些都极大地提高了它的性能,扩大了它的应用范围。
dsp芯片中的hpi(主机接口)是为了满足dsp与其它的微处理器接口而专门设计的。它分为hpi-8和hpi-16,分别针对具有8位和16位数据线的单片机。每一种又分为标准型和增强型。两值得的区别在于标准型只可以访问固定的地址空间,而增强型可以访问整个dsp的片内存储器。这里以增强型的hpi8为例为说明。
1 硬件设计
1.1 时序匹配
hpi8总共有18根信号线。其中数据线8根(hd0~hd7),其余10根都是控制线,如表1所列。(详细情况查看参考文献[1]。)
表1 hpi接口信号及功能
has | 锁存信号,用来锁存hbil、hcntl0/1,hr/w |
hbil | 字节控制信号,0表示传输第1个字节,1表示传输第2个字节 |
hcntl0/1 | 与hcntl1配合选择hpi寄存器 |
hd0~hd7 | 数据线 |
hcs | 片选信号 |
hds1 | 传输时序控制信号 |
hds2 | 传输时序控制信号 |
hint | 主机中断信号 |
hrdy | 准备就绪信号 |
hr/w | 读或写控制信号 |
①has:在数据线和地址复用的mcu中,与ale信号连接,在下降沿锁存hbil、hcntl0/1、hr/w,因数这些信号通常与地址线连接。如果mcu的数据线和地址线没有复用,则应该接高电平。
②hds1、hds2:数据传输的时序控制。时序见图1,即下降沿传输开始,上升沿传输结束。另外如果不使用has(即接高电平),也可以配合hcs对hbil、hcntl0/1、hr/w进行锁存。
③hcntl0/:选择hpi内部寄存器,如表2所列。
表2 hpi内部寄存器的选择方式
hcntl1 | hcntl0 | |
0 | 0 | 控制寄存器hpc |
0 | 1 | 数据寄存器hpid,并且使地址寄存器hpia为自动增加模式 |
1 | 0 | 地址寄存器hpia |
1 | 1 | hpid,并且hpia不自动增加 |
1.2 电平匹配
54xxdsp的外部i/p引脚用的是3.3v的逻辑电平,而大部分51郑易里片机用的是5v的逻辑电平。前者输出高电平,最小值为2.4v;后者输入高电平,最小值为2.0v。所以前者的输出可以直接接到才者的输入。但是前者允许输入高电平最大值为3.6v,而后者的输出高电平一般都在4.6v以上。所以前者的输入和后者的输出不能直接连接,需要做电平转换。如果引脚数量少,可以直接用三极管电阻来转换。这里由于引脚较多,所以选用ti74lvc16245a芯片来进行电平转换。
图1
74lvc16245a是ti公司的一种16位双向总线收发器。它可以接收高达5.5v的高电平,而输出的高电平可以达到3.3v左右,内部包括16路如图2所示的结构单元。
图2中g为使能端,低电平有效;dir为方向控制端,高电平a→b,低电平b→a。另外要注意,74lvc 16245a的操作电压引脚vcc应该接3.3v。
整个硬件连接如图3所示。
2 软件设计
hpi的数据传输分为两部分:外部传输和内部传输。外部传输是指主机和hpi寄存器之间的传输,由主机发出指令完成。内部传输是指hpi寄存器和dsp内部ram之间的传输,由dsp内部的dma控制器自动完成。主机在进行外部传输时,要先检查内部传输是否完成,这是通过检测hrdy信号实现的。外部传输操作的一般步骤是:
*检查hrdy信号的电平。为高,表示可以进行传输;为低,表示dsp正在进行内部传输,此时不能进行外部传输。
*主机发出指令,设置hcntl0、hcntl1、bhil、hr/w信号的状态,以确定读或写的寄存器以及字节的选择。
*主机发出时序控制信号,按照图1所示的时序进行操作,从而完成一次外部传输。
编程时还要注意以下问题。
①由于dsp的数据是16位,而单片机的数据是8位,所以单片机要分两次将数据传给dsp,即将16位的数据分成两个字节来传输。这时,可以通过控制hpi口的hbil信号来指定此次传输的是第1个还是第2个字节。另外,还要通过hpi的控制寄存器(hpic)中的bob位来指定第1个字节作为高8位还是低8位,所以主机在访问hpi1时,应首先对hpic进行初始化,并注意对bob位的设置。hpic的各位设置如下:
x | x | x | xhpia | hint | dspint | x | bob |
②主机对地址寄存器(hpia)的写操作会初始化一次内部传输。当主机通过两次对hpia的写操作后,hpia就得到了主机要访问的地址。这时内部的dma控制器就会根据这个地址将相应单元的内容读到hpi内部的数据锁存器中,再对hpid进行两次读操作就可以将数据读出。如果将hpia设置成自动递增模式,就会在数据传输的同时完成hpia加1,于是又启动了一次内部传输。这样有利于数据的连续转移。
③注意设置hpic中的xhpia位。xhpia=1时,表示对dsp的7位扩展地址进行操作;xhpia=0时,表示对dsp的低16位地址进行操作。由于dsp复位后,xhipa的状态是不确定的,所以必须首先对hxpia进行设置。
④主机和dsp可以互相中断。主机通过向hpic中的位dspint写入1来中断dsp。该痊总是被读出为0,而且dsp对该位的写操作是无用的。而dsp要中断主机时,向hpic中的位hint写入1,这时hpi的接口引脚hint被置低,从而使主机产生中断。该位总是读出为1,主机可以对该位写1来清除中断,这时hint引脚就恢复高电平。
下面给出一段程序实例:单片机将dsp内部ram1000h单元的内容读出。硬件按照图1所示连接。
;设置hpic,xhpia=1
setb p1.1
mov dptr,#0000h
mov a,#18h
movx @dptr,a
mov dptr,#0004h
mov a,#18h
movx @dptr,a ;完成初始化
mov dptr,#0002h
mov a,#00h
movx @dtpr,a
mov dptr,#0006h
mov a,#00h
movx @dptr,a ;置扩展地址为0
;设置hpic,xhipa=0
mov dptr,#0000h
mov a,#08h
movx @dptr,a
mov dptr,#0004h
mov @dptr,a
mov dptr,#0002h
mov a,#10h
movx @dptr,a ;写地址高8位
mov dptr,#0006h
mov a,#00h
movx @dptr,a ;写地址低8位
wait:jnb p1.0,wait ;判断内部传输是否完成
clrb p1.1
mov dptr,#000bh
movx a,@dptr ;读高8位
mov b,a
mov dptr,#000fh
movx a,@dptr ;读低8位
;读操作完成
3
当然dsp与单片机之间还有许多其它的连接方式,例如利用双口ram,或者是通过串口,但是它们都占用dsp的处理时间,在要求苛刻的场合可能会影响到系统的实时性。而hpi接口是通过dsp片内的dma控制器来访问片内存储器的,不需要dsp的干预。可以说,hpi接口是dsp的一个“后门”,单片机通过这个“后门”可以访问到dsp的片内存储器。只有当hpi接口和dsp同时对同一地址进行访问时,由于hpi具有访问优先权,这时dsp的执行会被延迟一个周期,而这种情况对系统实时性的影响是非常小的。
------------------
【今年17城市巡回 ti dsp技术开发讲座】 点这里获得免费参加资格