学海荡舟手机网

主页 > 实用文摘 > 教育文摘_22 > > 详细内容

TI 54xxDSP与51单片机的接口技术_DSP论文

摘要:ti的54xxdsp是一种定点dsp系列芯片,产生应用于各种信号处理系统,特别是语音信号处理系统。在这些系统中,通常由两部分组成。一部分为dsp子系统,这是整个系统的核心,主要完成采样、数字信号处理以及输出等功能;另一部分为单片机子系统,进行交互界面的控制,如键盘和显示。两个子系统不是各自孤立的,需要进行必要的数据交换。本文主要讨论dsp和51单片机之间通过hpi接口进行连接的设计方法,给出硬件连接以及软件编程方法。

    关键词: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内部寄存器的选择方式

hcntl1hcntl0 
00控制寄存器hpc
01数据寄存器hpid,并且使地址寄存器hpia为自动增加模式
10地址寄存器hpia
11hpid,并且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的各位设置如下:

xxxxhpiahintdspintxbob

②主机对地址寄存器(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技术开发讲座】 点这里获得免费参加资格