'54x系列DSP与计算机并口通信的设计方案

2006-05-07 15:50:07来源: 互联网

计算机之间的数据通信越来越受到重视。本文主要介绍TI公司'54x系列DSP通过主接口(HPI)与计算并口进行通信的简易设计方案。该方案以简单的电路设计实现了稳定的数据传输,并具有较高的通信速度。

数字信号微处理器(DSP)是近十几年来兴起的一项新技术。DSP以其速率快、功能强的特点,逐渐进入传统单片机所占据的工业和消费领域。TMS320C54x(简称为'54x)是德州仪器公司(TI Inc.)继TMS320C1x、TMS320C2x、TMS320C5x之后推出的新一代高性能DSP芯片。该系列芯片具有低功耗、高性能、性能价格比高等优点,广泛应用于图像处理、语音处理、仪器仪表、通信、多媒体及军事等领域。

在众多以PC机为终端的数据采集和控制系统中,由于通信协议的严格性导致外围的微处理器除需完成数据采集、控制等工作外,还需要担负起与PC主机通信、传递数据等任务。这种负担在高速的数据采集中显得就更为突出。解决的方法多数是增加专用于主机通信的器件。'54x由于集成了众多强大的功能,不仅可以实现高速数据采集和控制,几乎还可以完成不增加负担地与主机进行通信。

1 '54x的主要特点

以高速、低功耗为特征的'54x系列采用了先进的改进型哈佛结构,具有分离的数据总线和程序总线,片内集成了ROM、RAM和多个外设,如通用I/O口、定时器、时钟发生器、软件可编程等待状态发生器、可编程块切换逻辑、串行口、直接存储器存取控制器(DMA)和与外部处理器通信用的主机接口(HPI,Host Port Interface)。

2 '54x的主机接口(HPI)

'54x中的主机接口(HPI)主要有三种:标准8位HPI-8接口、增强型8位HPI-8接口和16位HPI-16接口。其中'542~'549内含标准型HPI-8,'5402、'5410内含增强型HPI-8,'5410以上为HPI-16;而'5409、'5416的HPI可以由用户设置为增强型HPI-8或HPI-16、增强型比标准型更优越之处主要在于,增强型允许主机访问DSP内部的所有片内RAM,而标准型只能访问RAM区中指定的2K字。

以TMS320VC5410(简称为'5410)包含的增强型HPI-8接口为例,它与外部主机或微处理器的连接如图1所示,其具有单独的8根数据线HD0~HD7和10根控制线。控制信号的时序逻辑如图2所示。主机主动通过HPI口访问DSP,除了对主机发中断(通过置HPIC寄存器的HINT位,可以使HINT线有效)或清除主机发来的中断(通过清HPIC寄存器的DSPINT标志)需要DSP干涉外,'5410的CPU几乎不用进行其他操作,片内的DMA通道会自动辅助完成RAM区和HPI数据寄存器的数据传输。主机由HCNTL0/1线来确定选择HPI的某个控制寄存器,如表1所列。通过对这4个寄存器的访问,就可以在所设安全机制的允许范围下读/写DSP的所有或部分片内RAM。

表1 HCNTL0/1的选择功能描述

HCNTL1 HCNTL0 描      述
0 0 主机读/写HPI控制寄存器--HPIC
0 1 主机以地址自动增的模式读/写HPI数据锁存器--HPID。若为读操作,则HPI地址寄存器HPIA每次自动读后增一单元;若为写操作,则HPIA自动写增1
1 0 主机读/写HPI地址寄存器--HPIA,该地址指向'54x的片内RAM地址
1 1 主机读/写HPI数据锁顾器--HPID,HPIA不变

由于DSP最小的存储单位是字(16位),因此对于HPI-8,每个的传递必须要有2个传递周期才能完成。HBLL信号用于区分传递的字节是当前字的第一字节还是第二字节。通过设置HPIC寄存器的BOB位,可以决定第一字节是这个字的高字节还是低字节。

通过HPI实现程序下载属于'5410程序加载的五种途径之一。在需要与主机连接的应用设计中,采用HPI程序加载方式可以使电路设计简化,省去外部并行或串行的ROM或FLASH程序存储器

3 增强型HPI-8与主机并口的连接

'5410具有C54x系列的大部分特点,它包括3个多通道缓冲串口(McBSP)六通道DMA、8位增强型主机接口HPI-8、增强型外部并行接口(XIO2)、16K字的片内ROM、56K字的片内RAM等,可以说是一个功能强大的微处理器。

在实现DSP与计算机主机的并口通信时,将主机并口的工作模式设置在扩展功能(ECP)模式下,在通信速率要求不高的场合,可以将其设置为PS/2模式。PS/2模式是在SPP基础上扩展的双向传输模式,以字节为单位读/写数据。

    在一些DSP与主机并口通信的设计中,采用了CPLD来产生接口时序,这种方式除了加大电路成本外,还给设计增加了复杂度。事实上,利用几个简单的逻辑门就可以实现DSP与主机的并口通信。

对于DB25的主机并口线,Data0~Data7作为双作为HDS1控制信号,AudoFd、SelechIn分别作为HCNTL0/1信号。Init作为HR/W控制信号。HBIL信号由Strobe信号触发J-K触发器翻转。考虑到HPI的程序加载功能,利用J-K触发器将SelectIn和AutoFd信号逻辑组合得到对DSP的RESET复位控制。另外,'5410的I/O口线为3.3V CMOS电压,而并口则通常为5 V TTL电压。因此,为达到电平匹配,在两级之间增加了电压转换的缓冲器SN74LVC245。具体电路设计如图5所示。

HCNTL0/1的状态变化规则如图4所示。可以看出,只有当HCNTL1为1,HCNTL0由0变1时,才会触发复位状态的翻转。所以,当需要从寄存器HPIA切换到非增HPID时,为避免触发复位状态翻转,HCNTL1/HCNTL0应以10-00-01-10的方式进行转换。

4 程序设计

4.1 主机程序

主机程序主要完成HPI寄存器的选择、时序的构建和数据读/写等。限于篇幅,此处只列举主机读DSP片内RAM存储区的时序构建及其与DSP间的通信握手。其中,p_DATA、p_STATUS、p_CONTROL分别代表LPT1的数据寄存器、状态寄存器和控制寄存器。ECP扩展控制寄存器ECR的bit7~5设置为'001'。HPI的HPIC寄存器BOB位设置为'0'(第一字节为高字节)。

/*读/写HPI寄存器,读/写的'字'存放在*data和*(data+),

r_w为0时代表写,为1时代表读。*/

void HPIregRW(char*reg,BYTE*data,BYTEr_w)

{

BYTE test;

BYTE CRW=0x00|(r_w<<5);

int i_HBIL=0;

/*切换选择HPIC、HPIA、HPID_I、HPID_n寄存器之一*/

if(strcmp(reg,"HPIC"==0)

{

ChangeCONTROL(0x0b|CRW);

//ChangeCONTROL(BYTE bValue)

    }

else if(strcmp(reg,"HPIA"= =0)

ChangeCONTROL(0x03|CRW);

else if(strcmp(reg,"HPID_I"= =0)//采用自增地址主机写

ChangeCONTROL(0x09|CRW);

else if(strcmp(reg,"HPID_n"= =0) //主机写

ChangeCONTROL(0x01|CRW);

else

{

printf("Wrong register for HPI write.";

exit(-1);

}

outp(p_CONTROL,CONTROL);

if((_inp(p_STATUS)&0x08)!=0) //如果HBIL!=0

{

ChangeCONTROL(0,0); //重载函数

//ChangCONTROL(BYTE bit,BYTE bValue)

_outp(p_CONTROL,CONTROL); //HDS1=0

ChangeCONTROL(0,1);

_outp(p_CONTROL,CONTROL); //HDS1=1

}

/*开始时序的准备*/

while((_inp(p_STATUS)&0x08)!=0); //等待HBIL=0

//(lst byte)

if(r_w)//读

{

//在HPIR/W的上升沿对数据线采样(第一字节)

ChangeCONTROL(2,1);

-outp(p_CONTROL,CONTROL);

ChangeCONTROL(0,0);

_outp(p_CONTROL,CONTROL);//HDS1:1->0, //采样HCNTL0/1,HR/W,HBIL

while(_inp(p_STATUS)&0x10= =0); //若HDRY=0,//等待;HDRY=1,继续

ChangeCONTROL(0,1);

outp(pCONTROL,CONTROL);//HDS1:0->1; //锁存第1字节,然后HBIL=1

*(data++)=_inp(p_DATA);

while((_inp(p_STATUS)& 0x08)= =0); //等待HBIL//=1(2nd byte)

ChangeCONTROL(2,0);

_outp(p_CONTROL,CONTROL);

//在HPIR/W的上升沿对数据线采样(第二字节)

ChangeCONTROL(2,1);

_outp(p_CONTROL,CONTROL);

ChangeCONT^ROL(0,0);

_outp(p_CONTROL,CONTROL);//HDS1:1->0,

//采样HCNTL0/1,HR/W,HBIL

while(_inp(p_STATUS)&0x10)= =0);//若HDRY=0//等待,HDRY=1继续

ChangeCONTROL(0,1);

_outp(p_CONTROL,CONTROL);//HDS1:0->1; //锁存第2字节,然后HBIL=0

*(data- -=_inp(p_DATA);

while((_inp(p_STATUS)&0x08)!=0); //等待HBIL=0

(lst byte)

ChangeCONTROL(2,0);

_outp(p_CONTROL,CONTROL);

}

else//写{(略)}

}

void main(void)

{

/*HPI初始化*/…

/*等待DSP给主机发中断HINT(查询方式)后,从DSP读数*/

WriteHPIreg("HPIC",0x0808); //清HINT中断

/*读取DSP片内RAM区数据*/

for(i=0;i

{

HPIA=resultAddr++;//resultAdd:要读取的RAM数//据区起始地址

WriteHPIreg("HPIA",HPIA);

while((_inp(p_STATUS)&0x40)!=0);//等待DSP发//送HINT有效信号(握手信号)

//调用读RAM区数据的函数,并写入创建的文件data.dat

WriteHPIreg("HPIC",0x0808); //清HINT中断

WriteHPIreg("HPIC",0x0404); //主机发送DSINT有//效给DSP(握手信号)

}

WriteHPIreg("HPIC",0x0808); //清NINT中断

}

试验证明,主机并口的读取速度远低于DSP的执行速度,因此,程序子函数中的一些等待查询指令可替略。在主函数main()中,如果读取的DSP数据是静态的,不需实时提供,则这样的指令也可以省略。

4.2 DSP的握手程序

在实际情况中,需要传递的数据大都由DSP实时处理得到。一边处理一边传输可以大大提高系统的整体效率,而且由于HPI工作的特点,传输几乎可以不占用DSP的时间。唯一需要DSP干预的是数据准备好后通知主机接收(通过HINT中断)。这项任务可以放大DSP的DSPINT中断服务程序中进行其程序简要如下:

.mmregs

.include "vectors.h"

dataarea .usect "COMMS",100h,1;所需传递的数据块区间

HOSTACK.macro

hack ldm hpic,a ;累加器A载入HPIC值

and #08h,a ;屏蔽HINT的其他位

bc hack,aneq ;判断HINT的状态,直到HINT

;位为0(即主机清HINT标志)

.endm

.text

start:stm #00a0h,pmst;设置IPTR寄存器

stm #0000h,st0 ;设置ST0、ST1寄存器

stm #2800h,stl

stm #0010,tcr ;关闭计时器

stm #0ffffh,ifr ;清除所有的中断标志位

stm #0300h,imr ;使能DSPINT中断

stm #280h,sp ;初始化堆栈指针SP为280h

HOSTACK ;检查主机是否清HINT标志

stm #0ah,hpic ;置HINT位,向主机发送

;HINT有效信号,告知第一个数已准备就绪

rsbx intm ;开启中断

wait: b wait ;主程序(此处为死循环)

hpi: stm #0ah,hpic ;当主机取完数后置DSPINT

;位,进入DSPINT中断服务程序

rete ;DSP向主机发送NINT握手

;信号,通知下一个数已准备好

.end

关键字:系列  计算  计算机  并口

编辑: 引用地址:http://www.eeworld.com.cn/wltx/qtjs/200605/2734.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
系列
计算
计算机
并口

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved