发信人: champaign (原野), 信区: ECE
标 题: 一种先进的DSP主机接口技术 - HPI
发信站: 紫 丁 香 (Thu Jan 20 22:27:51 2000), 转信
引言:当前,数字信号处理(DSP)芯片以其高效的运算能力在通信、电子、图象处理
等各个领域得到了广泛的应用。使用DSP设计的系统可以按处理器使用的数目分为单处理
器系统和多处理器系统。单DSP的系统尽管结构简单,但系统的功能不可避免地将有所限
制。而且,由于DSP的控制功能往往不是非常强大(对于TMS320系列的DSP而言,往往只
有通用I/O引脚 和 ),在应用中往往不得不把DSP作为目标系统专门负责复杂的运算,
而另外使用一个主机(PC或是单片机)对整个系统的运行实行控制。另一方面,在一些
运算量过大的系统中又不得不采用多DSP的方法将运算分别处理。所以,在使用DSP的多
处理器系统中,主机(单片机、PC、另一个DSP芯片)与目标系统DSP的数据交换就成为
应用系统设计中必须考虑的重要问题。本文将对该问题作一定的讨论,并结合一个实例
重点介绍一下德州仪器公司(TI)生产的化时代的定点DSP芯片TMS320C54x对该问题所提
出的解决方案--HPI(Host Port Interface).
1. 主机接口的传统解决方案
解决主机与目标系统的数据交换是一个非常复杂的问题。传统地方式是采用DMA(direc
t memory access)或全局存储器(Global Memory)完成多机系统中的数据共享。但是
在DMA方式下,读写共享内存必须要求另一个处理器处于停止工作的状态。所以DMA的共
享存储器方式往往不为人所用。TMS320C5x是传统DSP芯片,不但有传统的DMA接口,而且
使用了全局存储器(Global Memory)的方法为解决该问题提供了2种选择。
所谓全局存储器即是由多个处理器所共享的存储器。在使用全局存储器的应用系统中,
DSP处理器的地址空间被分成局部块(local section)和全局块(global section)。
局部块用于完成处理器自己的工作,而全局块则用来完成与其他处理器的通信工作。在
TMS320C5x器件中,使用全局存储器分配寄存器GREG完成对全局内存的管理工作。GREG指
定部分DSP内存为全局内存(范围从256~32K)。TMS320C5x器件能够分配全局数据内存空
间并通过 (Bus Request)和 控制信号实现与该内存的通信。当需要寻址全局内存空间
时, 和 信号变低电平。外部逻辑于是进行全局内存控制权的裁决,裁决的结果将通过
信号通知某个'5x,于是该DSP现在就拥有对全局内存的控制权。
显然,使用全局内存的方式来完成多DSP的共享数据通信是非常方便的。但是,应用系统
中往往使用单片机作为主机,DSP作为目标系统构成。而当前使用最多的单片机往往是8
位机。于是,使用16位的共享内存完成主机与DSP的数据交换不是处理太复杂就是资源利
用不充分。为了解决DSP与低档8位主机的数据交换问题,德州仪器公司在TMS320C5x系列
中的'LC57和'C57S中使用了HPI端口。而且该HPI端口在德州仪器公司最新推出的TMS320
C54x系列的器件中得到了保持。
2. TMS320C54x的HPI端口
HPI(Host Port Interface)为8位的主机与DSP的数据交换提供了最简便而有效的方案
。主机与DSP通过HPI接口不需要任何附加硬件,由于使用DSP的片内内存的一部分实现主
机与DSP的数据交换,所以也不需要提供外部RAM。DSP完全可以作为主机的外设进行工作
。主机的8位数据由HPI自动转化成16位的DSP数据,主机对HPI内存的访问是通过几个专
用的DSP寄存器来实现的,而DSP对这些寄存器则没有完全的访问权。
HPI有2种操作模式,共享模式SAM(shared-access mode)和HOM(host-only mode)。
一般操作选择共享模式SAM模式,在这种模式下,'54x和主机都可以寻址HPI内存,主机
的异步寻址在DSP内部实现同步;当发生'54x和主机寻址冲突(conflict)时,主机具有
寻址优先权,'54x将等待1个时钟周期。当'54x运行于40MHz的CLKOUT的条件下,使用共
寻址优先权,'54x将等待1个时钟周期。当'54x运行于40MHz的CLKOUT的条件下,使用共
享模式SAM可以达到64Mbps的数据速率。在HOM模式下,则HPI支持更高的数据传输速率(
同样在40MHz的CLKOUT的条件下可达160Mbps)。
2.1 HPI的结构
在TMS320C54x中,HPI内存是一块2K word的片内DARAM(Dual-Access RAM),该内存块
位于'54x的数据内存空间的1000h~17FFh处(也可以通过设置OVIL比特使该内存块位于'
54x的程序内存空间)。TMS320C54x对该HPI内存的访问完全就同访问其他一般内存一样
,而主机访问该HPI内存则必须通过HPI的寄存器来实现。
下表是HPI寄存器的说明:
Table 2-1. HPI寄存器说明
Name DSP地址 说明
HPIA - HPI地址寄存器。只可以由主机直接访问。包含当前寻址操作针对的HPI内存地址
。
HPID - HPI数据锁存器。只可以由主机直接访问。其内容即主机通过HPI与DSP通信的数
据。
HPIC 002Ch HPI控制寄存器。可以由'54x和主机直接访问。包含HPI操作的控制和状态比
特。
对于主机方面而言,该2K word的HPI内存可使用地址0~07FFh来寻址。实际上,由于HPI
内存只有2K word,而HPIA是一个16位寄存器,所以只有HPIA的11LSBs在主机寻址HPI内
存时是起作用的。因此,对于主机而言,地址0000h,1000h,1800h,….,F800h其实都是寻
址HPI内存位置1000h处。
图1 HPI结构框图
在图1中的数据锁存(Data Latch)即为HPID寄存器;HPI控制寄存器(HPI control re
gister)即为HPIC;地址寄存器(Address register)即为HPIA寄存器。
为了与各种8位主机都能够很好地协同工作,HPI接口提供了各种与主机握手的控制引脚
。具体地说,HPI接口由8-bit的HPI数据总线(HD0~HD7)和一些控制单元构成。使用HP
I端口与主机接口可以参考图2。以下分别介绍一下HPI端口各个控制引脚的功能:
:Byte指示输入,可与主机的地址或控制信号连接。由于主机使用8位数据总线,而D
SP内处理的是16位数据和16位寄存器。HPI端口自动将主机的2个连续的byte组合成DSP的
16位word时必须知道当前byte是16位word中的第1还是第2个byte。 既完成这个功能。
:主机控制输入,可以与主机的地址线或控制线相连接。主机通过控制 信号来寻址 、
、 寄存器。
:读/写输入,与主机的R/W选通脉冲、地址线或复用的地址/数据线相连接。为了确定
数据传输的方向,该输入信号是必须提供的。
:片选信号,与主机的地址或控制信号连接。
, :数据选通输入,与主机的读选通脉冲、写选通脉冲或数据选通脉冲相连接。如果主
机有分离的读、写选通脉冲,则可以分别与 和 相连接;如果主机只有数据选通脉冲,
则可以与 和 中的一个相连接,另一个则连高电平。由于在寻址HPI内存前须初始化地址
与寻址方式,所以主机对HPI的控制信号 、 和 必须在访问HPI内存前由TMS320C54x的内
部选通脉冲(图1-2中的internal strobe)进行锁存、采样。 , 和 3者实现该内部选通
脉冲的生成。
:地址选通输入,对于有复用地址和数据总线的主机(例如MSC-51系列单片机)可以把
该信号与主机的地址锁存使能信号ALE相连接。如果主机有分离的地址或数据总线,该输
入也可以不用(连接电平1)。
HD0~HD7:并行双向的三态数据总线,直接与主机的8位数据总线相连接。未输出的情况
HD0~HD7:并行双向的三态数据总线,直接与主机的8位数据总线相连接。未输出的情况
下为高阻态。
:主机中断输出, TMS320C54x可以通过写HPIC寄存器改变该引脚的输出,进而中断主
机的工作。该引脚可以与主机的外部中断输入相连接,对于主机和DSP的协同工作是非常
重要的。
图2-2 通用系统框图
主机对HPI内存的寻址
在讨论HPI内存的寻址工作之前首先必须对主机访问HPI寄存器的过程及HPI的控制寄存器
HPIC有所了解。
表2-2 HPI输入控制信号功能选择说明
HCNTL0 HCNTL1 说明
0 0 主机读/写HPIC
0 1 主机读/写HPI数据锁存器HPID。每次读操作后HPIA自动增量,每次写操作前,HPIA
自动增量。
1 0 主机读/写HPIA(地址寄存器)。
1 1 主机读/写HPI数据锁存器HPID。HPIA不受影响。
从表2-2可以看到,主机控制HCNTL0/1来访问各个HPI寄存器。主机对HPI内存的寻址可以
采用自动增量方式(HCNTL0/1=01),在这种方式下,每次读HPI内存操作后HPIA自动增
量,每次写HPI内存操作前,HPIA自动增量。自动增量寻址方式为主机访问连续地址的共
享内存提供了便利。
Table 2-3 HPI Control Register(HPIC)Bit Description
Bit Host
Access '54x
Access '54x
Access Description
BOB 读/写 - 该比特配合HBIL工作,如果BOB=1,则第1个进入HPI端口的byte将位于DSP
内部16位word的LSB;反之,则第1个byte 位于MSB。由于BOB影响HPIA,所以主机访问H
PI内存时,必须首先初始化HPIC,然后再初始化HPIA。只有主机可以改变BOB比特。
SMOD 读 读/写 SMOD选择HPI接口的工作方式。
SMOD=1, SAM方式;SMOD=0, HOM方式
当复位(Reset)操作过程中,SMOD=0;复位操作完成后,SMOD=1。'54x可以改变SMOD,
而Host则只可以读该比特。
DSPINT 写 - 主机中断DSP的信号;当主机对该比特写1,则'54x产生一次中断。无论是
DSP还是主机去读,总是读到0。
HINT 读/写 读/写 本比特决定'54x的 输出,而 可以用来产生主机的中断。复位后HIN
T=0,使外部 输出无效(高电平)。该比特只可以由'54x设置,也只可以由主机来清除
。'54x向HINT写1,导致引脚 有效。当外部引脚 无效(高)的情况下,'54x和主机读H
INT,读到的是0;而当 有效的情况下,读到的是1。对于主机而言,要清除HINT,只有
向HINT写1。无论是主机还是'54x,向HINT写0都无效。
主机对HPI内存的寻址必须通过HPI的寄存器( 、 和 )来实现,一般的步骤是:
1. 初始化HPIC
2. 初始化HPIA为主机希望寻址的HPI内存地址。
实现以上第1步初始化后,本次HPI内存访问的方式(SAM还是HOM、读还是写…)都已经
确定了;完成第2步初始化后,访问的地址也已经确定,该HPI内存地址处的数据自动进
入HPID寄存器;实现了以上2步之后,主机便可以通过读/写HPID来访问该HPI内存了。
3. HPI端口的应用实例
以下,我们通过一个具体实例的分析,说明一下HPI端口的具体使用方法。
在本例中,我们使用MSC-51系列的单片机87C51作为主机,使用TMS320C548完成数据的处
理工作。一般情况下,可以把DSP作为主机的外设挂于主机的地址总线上,但由于87C51
的控制引脚较多,所以我们采用了更简便的方法,使用87C51的控制引脚控制DSP的HPI端
口实现一个双机系统。系统框图如下:
从图中可以看到,本系统中,主机(87C51)对DSP的HPI接口的控制是通过单片机87C51
的控制端口Port1来实现的。P1.0~P1.3分别控制HPI端口的 、HBIL和 信号。单片机的端
口0是复用数据、地址总线,在本应用中只起到了数据总线的作用;端口2是地址总线的
高8位,在本系统中没有使用Port2。HPI接口的 , 分别接单片机的 和 引脚。本系统没
有使用 和 信号。TMS320C548用来锁存HBIL、 和 的内部选通脉冲由 , 生成。
由于本系统采用的连接方法丝毫没有使用单片机的地址线,所以事实上HPI中的各个寄存
器在单片机系统中并没有确定的地址。但是由于主机寻址HPI内存又必须写HPI寄存器,
所以可以为各个HPI寄存器假设一个单片机的地址。
以下,我们通过一个单片机读写HPI内存的例子来具体说明使用的方式。
o 首先,我们初始化HPIC为0000h。假设HPIC在单片机系统中的地址是0fffdh。
MOV A,#0F0H ;11110000[HCNTL1/0=(00)说明寻址HPIC,HBIL=0说明是构成HPIC
;的第1个byte, =0说明写操作]
ANL P1,A ;P1&A=>P1,控制信号已经输出,还需要选通脉冲进行采样
MOV DPH,0FFH ;为写HPIC初始化地址0fffdh
MOV DPL,0FDH
MOVX @DPTR,00H ;把00h写入HPIC的第一个byte;BOB=0、DSPINT和HINT=0
MOV A,#0F2H ;写HPIC的第2个Byte.
MOV A,#0F2H ;写HPIC的第2个Byte.
ANL P1,A
MOVX @DPTR,00H
o 初始化HPIA(希望读/写的HPI RAM的地址)为1000h,假设HPIA的地址为0fffeh,而且
HPI内存1000h、1001h处的数据分别是6ABCh、0ED23h。
MOV A,0F8H ;向HPIA写第1个byte。HCNTL0/1=(01)表示寻址HPIA,HBIL=0
;表示是第1个byte, =0表示写操作。
ANL P1,A
MOV DPH,0FFH
MOV DPL,0FEH
MOVX @DPTR,10H ;由于初始化HPIC时令BOB=0,所以写入HPIA的第1个byte 10h是HPI
A
;的MSB。
MOV A,#0FAH
ANL P1, A ;向HPIA写第2个Byte.
MOVX @DPTR,00H ;HPIA的LSB是00h
以上完成了对HPIC和HPIA的初始化工作,完成了HPIA的初始化后,DSP内部自动将HPIA所
指示地址处的数据送入HPID,在本例中,HPID中的数据是6ABCh。
o 采用自动地址增量的方式从当前HPIA位置处读入一数据至单片机。假设HPID的地
址是0ffffh。由于当前HPIA=1000h,也就是将HPI内存位置1000h处的数据6ABCh读入单片
机。
MOV A,0F5H ;采用自动地址增量方式读HPID。
ANL P1,A
ANL P1,A
MOV DPH,0FFH
MOV DPL,0FFH
MOVX A,@DPTR ;由于BOB=0,所以先读入的是'548的HPI RAM地址1000处的高8-bit,
06Ah.
;...可以在这里把读入的数据的高8_bit保存。
MOV A,0F7H ;采用自动地址增量方式读HPID的第2个byte
ANL P1,A
MOVX A,@DPTR ;现在累加器A中是0BCh,并且由于采用了自动地址增量模式
;HPIA是1001h。
o 采用非自动地址增量的方式从当前HPIA位置处读入一数据至单片机。由于当前HPIA=1
001h,所以即从HPI内存地址1001h处读一word到单片机。
MOV DPH,0FFH
MOV DPL,0FFH
MOV A,0FDH ;采用不改变HPIA的方式读HPID.第1个byte.
ANL P1,A
MOVX A,@DPTR ;由0ffffh处读入数据送A
;... 处理数据.
MOV A,0FFH ;采用不改变HPIA的方式读HPID.第2个byte
ANL P1,A
MOVX A,@DPTR
读操作结束后HPIA的值仍为1001h。
o 不使用自动地址预增量的方式下,使用当前的HPIA写数据入HPI RAM。写入的数据保存
在由30h、31h为指针的MSC_51的外部 RAM中(假设该位置的数据为0EE67h)。现在的HP
IA=1001h,由于不使用自动模式,所以写入HPI RAM的数据即写入地址(C'54x内地址)
1001h处。所谓不使用自动地址增量模式即执行写HPID操作时HCNTL1/0是11。
MOV R0,#30H
MOV R1,#31H ;需要使用R0和R1作为指针,如果是函数调用,则需保护现场。
MOV DPH,0FFH
MOV DPL,0FFH ;访问HPID.在写操作之前,HPID内是当前HPIA处的数据6ABCh。
MOV A,0FCH
ANL P1,A ;不使用自动地址预增量的方式下,使用当前的HPIA写数据入HPI RAM。
把需要输出到HPI RAM的数据送累加器A。
MOV A,@R1 ;先送MSB,A=0EEh
MOVX @DPTR,A ;A的内容送HPID
MOV A,0FEH
ANL P1,A
MOV A,@RO ;送LSB,A=067h
MOVX @DPTR,A
o 使用自动地址预增量的方式下,使用当前的HPIA写数据入HPI RAM。当前的HPIA是100
1h,由于使用了自动预地址增量模式,所以写入的数据其实是写在HPI RAM的地址1002h处
数据指针仍使用30h,31h。
MOV R0,#30H
MOV R1,#31H ;需要使用R0和R1作为指针,如果是函数调用,则需保护现场。
MOV DPH,0FFH
MOV DPH,0FFH
MOV DPL,0FFH ;访问HPID.
MOV A,0F4H
ANL P1,A ;使用自动地址预增量的方式下,使用当前的HPIA(1001h)写数据入HPI 内
;存(1002h)。
;把需要输出到HPI RAM的数据送累加器A.
MOV A,@R1 ;先送MSB
MOVX @DPTR,A ;A的内容送HPID
MOV A,0F6H
ANL P1,A
MOV A,@RO ;送LSB
MOVX @DPTR,A
结论:本文介绍了在多处理器系统中DSP与主机间通信所采用的各种方案,包括DMA、全
局存储器(Global Memory)和主机接口HPI。并对各种方案的特点做了一个比较。具体
地通过了一个实例介绍了TMS320C54x所提出的HPI接口的硬件实现与编程。
--
感情是一个难以驯服的野马
理智却是一个严厉的马夫
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.228.139]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.250毫秒