您的位置 首页 制造

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

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

数字信号微处理器(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载入HP%&&&&&%值

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/225053.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部