查看: 3527|回复: 0

DSP与计算机并口通讯的设计

[复制链接]

该用户从未签到

发表于 2011-5-10 16:49:19 | 显示全部楼层 |阅读模式
分享到:
    '54x中的主机接口(HPI)主要有三种:标准8位HPI-8接口、增强型8位HPI-8接口和16位HPI-16接口。其中'542~'549包含为 标准型HPI-8, '5402、'5410包含为增强型HPI-8,  '5420以上为HPI-16,而'5409、'5416的HPI可以由用户设置为增强型HPI-8或HPI-16。增强型比标准型更优越之处主要在于增 强型允许主机访问DSP内部的所有片内RAM,而标准型只能访问RAM区中指定的2K字。
         以TMS320VC5410(简称为'5410)包含的增强型HPI-8接口为例,它与外部主机或微处理器的连接如图13-10所示,其具有单独的8根数 据线HD0~HD7和10根控制线。控制信号的时序逻辑如图13-11。主机主动通过HPI口访问DSP,除了对主机发中断(通过置HPIC寄存器的 HINT位可以使HINT线有效)或清除主机发来的中断(通过清HPIC寄存器的DSPINT标志)需要DSP干涉外,'5410的CPU几乎不用进行其 它操作,片内的DMA通道会自动辅助完成RAM区和HPI数据寄存器的数据传输。主机由HCNTL0/1线来确定选择HPI的某个控制寄存器(如表 13-7)。通过对这四个寄存器的访问就可以在所设安全机制的允许范围下读/写DSP的所有或部分片内RAM。


图13-10  DSP主机接口HPI8与外部处理器的连接示意图


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

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



图13-11  HPI-8控制信号的时序

表13-7  HCNTL0/1的选择功能描述


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

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

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

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

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



图13-12  HPI-8与并口的接口电路设计


图13-13  HCNTL0/1 状态变化规则


13.3.2  程序设计
1.主机程序

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


/* 读/写HPI寄存器,读/写的'字'存放在*data和*(data+1),r_w 为 0时代表写,为1时代表读。*/

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

{

    BYTE test;

    BYTE CRW=0x00|(r_w1; latch the 1st byte, then HBIL =1

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

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

        ChangeCONTROL(2,0);

        _outp(p_CONTROL,CONTROL);

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

        ChangeCONTROL(2,1);

        _outp(p_CONTROL,CONTROL);

        ChangeCONTROL(0,0);

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

        while((_inp(p_STATUS) & 0x10) == 0);    //wait if HDRY=0, continue if HDRY=1

        ChangeCONTROL(0,1);

    _outp(p_CONTROL,CONTROL);    // HDS1: 0 -> 1; latch the 2nd byte,  then HBIL =0

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

        while((_inp(p_STATUS) & 0x08) != 0); //wait for HBIL=0(1st byte)

        ChangeCONTROL(2,0);

        _outp(p_CONTROL,CONTROL);

    }

    else    //写{(略)}

}



void main(void)

{

/* HPI初始化 */ …

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

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

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


    for(i=0;i
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-22 11:13 , Processed in 0.115385 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.