网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术信息 > 正文
  • RSS
  • 利用ST16C554D实现DSP多路串行通讯
    http://www.ic72.com 发布时间:2007/4/23 9:54:28

    摘 要: 给出了DSP多路串行通信系统的构成及相关程序代码。
    关键词: DSP;串行通讯;ST16C554D;TMS320VC33
    引言
    DSP是数字信号处理理论与超大规模集成电路技术融合的结晶。目前,DSP技术正广泛地应用于通信、语音、图像、航空航天、仪器仪表等领域,在推动信息处理数字化方面发挥着越来越大的作用。随着应用领域越来越广,应用环境也越来越复杂,如何实现DSP与外设的可靠数据交换就变得至关重要。串行通讯成本低,结构简单,控制方便,DSP和外设的通讯通常都采用这种方式。
    TMS320VC33是TI公司一种浮点DSP芯片,性价比高,指令执行速度可达150 MFLOPS。但是为了不使其强大的计算能力受到影响,TMS320VC33仅提供了一个串口,要实现多路串行通讯,就必须通过外部器件来扩展。

    ST16C554D
    ST16C554D是EXAR公司生产的通用异步通信芯片,可支持4路独立的串行通讯。芯片的每路传输和接收单元都提供了独立的串并转换和并串转换,以实现串行异步数据接收同步。串行数据流的同步通过添加起始位和停止位实现,而数据的完整性通过校验位来确认,在同一块芯片上要集成这种多路串行通讯是较为复杂的,ST16C554D采用了先进的CMOS处理技术,达到了低损耗和高速率的要求。
    与普通处理器相比,ST16C554D提供了16字节的接收和发送FIFO,这就允许外部CPU在给定的时间内处理更多的在线任务,并减少了全局的UART中断服务时间。
    另外,ST16C554D将16C554D和68C554D的两种封装集成在同一个芯片上,使用方便。16模式用于与INTEL系列芯片接口,而68模式用于与MOTOROLA和其他通用接口。
    ST16C554D特性有:

    TMS320VC33多路通讯系统的实现
    图1是某捷联惯性导航系统的部分原理框图,通过ST16C554D实现了DSP芯片TMS320VC33的多路串行通讯。图中三个陀螺为光纤陀螺,陀螺数据采用RS-422串行输出,输出周期为1ms。
    图中,ST16C554D的读写信号和通道片选由DSP的选通信号STRB、地址信号A3-A6及读写信号R/W产生。为了使整个系统成为完全可编程系统,采用了一片可编程逻辑器件GAL20V8B来实现逻辑控制,从而增加了系统的灵活性。GAL芯片采用ABEL语言编程。ST16C554D译码电路的逻辑方程如下:
    EQUATIONS
    !CSA=!PAGE3&!AR6&!AR5&!AR4!&!AR3;
    !CSB=!PAGE3&!AR6&!AR5&!AR4&AR3;


    !CSC=!PAGE3&!AR6&!AR5&AR4&!AR3;
    !CSD=!PAGE3&!AR6&!AR5&AR4&AR3;
    !IOR=!PAGE3&RW&!STRB;
    !IOW=!PAGE3&!RW&!STRB;
    本系统中,ST16C554D的通道D用作监控口和PC机接连,通道A、B、C的接收端用于接收陀螺数据,通道C的发送端也与PC机相连,可在通道D的监控下高速发送各陀螺的原始数据。例如,PC机向通道D发送指令“$A#”,DSP接收到该指令后将X陀螺的原始采样数据从通道C高速发送至PC机。
    通道D采用RS-232方式,波特率为19.2Kbps,用MAX232实现电平转换后可直接和PC机串口连接。通道A、B、C采用RS-422方式,波特率为460.8Kbps,可用MAX3095芯片做接收电平转换,用MAX3045芯片做发送电平驱动。考虑通道C发送端要和PC机相连,而PC机串口仅支持RS-232协议,故系统使用了PCI1601转换卡。PCI1601带有两个9针的RS-422串口,采用PCI总线和PC机相连,安装驱动后使用方法和普通PC机串口一致,波特率可达921.6Kbps。
    在串行通讯中,为了保证传输可靠性和数据实时性,发送常采用查询方式,接收常采用中断方式。但在本系统中,TMS320VC33要执行导航解算程序,若4路接收均采用中断方式会严重影响它的计算能力。考虑A、B、C口陀螺数据爆发周期固定为1ms,且D口由PC机发来的监控指令数据量不大,接收可采用定时查询方式。
    系统中三个陀螺通过1KHz时钟实现同步。陀螺数据每帧包含7个字节,传输波特率460.8Kbps,采用偶校验,8位数据位,1位停止位,故可以算出每次传输时间需要为(8+3)*7/460.8=0.167ms。所以系统将1KHz时钟经SN54HC174J芯片延时0.2ms后作为TMS320VC33外接的定时时钟。这样,TMS320VC33在INT0产生1ms中断时,数据已传输完成,可以在中断服务函数中将所有通道的寄存器查询一遍并读空数据。由于ST16C554D的每路串口有16字长的接收FIFO,该方法不会产生数据丢失,并且延迟很小。

    程序设计
    在异步串行通讯中,收发双方必须事先规定两件事:一是字符格式,即规定传送中每个字符的具体格式;二是波特率。这些规定是通过设置相关寄存器来实现的。
    本系统中,ST16C554D外接晶振7.3728MHz,基地址为0xC00000,由TMS320VC33编程实现它的初始化设置。TMS320VC33的程序在Code Composer C3X 下用C语言编写,下面仅给出通道C的初始化代码及收发程序,其他通道与此类似。
    #define C_rx_buf_size 100 //接收缓冲区大小
    #define C_tx_buf_size 100 //发送缓冲区大小
    unsigned char C_rx_buf[C_rx_buf_size]; //接收缓冲区
    unsigned char C_tx_buf[C_tx_buf_size]; //发送缓冲区
    unsigned int p_C_rx_w=0; //接收缓冲区写指针
    unsigned int p_C_tx_w=0, p_C_tx_r=0; //发送缓冲区读写指针
    volatile int *Add_C_RHR = (volatile int *)0xC00010; //C口基地址
    volatile int *Add_C_THR = (volatile int *)0xC00010;
    volatile int *Add_C_DLL = (volatile int *)0xC00010;
    volatile int *Add_C_IER = (volatile int *)0xC00011;
    volatile int *Add_C_DLM = (volatile int *)0xC00011;
    volatile int *Add_C_ISR = (volatile int *)0xC00012;
    volatile int *Add_C_FCR = (volatile int *)0xC00012;
    volatile int *Add_C_LCR = (volatile int *)0xC00013;
    volatile int *Add_C_MCR = (volatile int *)0xC00014;
    volatile int *Add_C_LSR = (volatile int *)0xC00015;
    volatile int *Add_C_MSR = (volatile int *)0xC00016;
    void init_ST16C554D_C( ) //串口C口的初始化函数
    { *Add_C_LCR = 0x80; //使能波特率因子寄存器
    *Add_C_DLM = 0x00;
    *Add_C_DLL = 0x01; //设置波特率为460800
    (主频7.3728M)
    *Add_C_LCR = 0x1b; //选择字长为8位,停止位为
    1位,偶校验
    *Add_C_FCR = 0x07; //选择FIFO MODE
    *Add_C_IER = 0x00; //禁止中断
    *Add_C_MCR = 0x08; //选择NORMAL MODE
    }
    void Read_ST16C554D_C( )//串口C口的接收函数,置于INT0中断函数中
    { while( (*Add_C_LSR) & 0x01 ) //判C口线状态寄存器
    { *( C_rx_buf + p_C_rx_w) = (*Add_C_RHR) & 0x0ff; //接收数据送接收缓冲区
    p_C_rx_w ++; //接收缓冲区指针加1
    if(p_C_rx_w == C_rx_buf_size) p_C_rx_w = 0; //接收缓冲区指针回零
    }
    }
    void C_tx_handle() //串口C口的发送函数
    { while(p_C_tx_r != p_C_tx_w)
    { if( *Add_C_LSR & 0x20 ) //判C口线状态寄存器
    { *Add_C_THR = *(C_tx_buf + p_C_tx_r); //发送
    p_C_tx_r ++; //发送缓冲区指针加1
    if( p_C_tx_r == C_tx_buf_size ) p_C_tx_r = 0; //发送缓冲区指针回零
    }
    }
    }

    结语
    在笔者开发的光纤陀螺捷联式惯性导航系统中,通过使用ST16C554D扩展了4路串口,电路简单,传输速率高,延时小,并且极大地减轻了主控计算机TMS320VC33的负担。本设计,在通讯中各通道长期工作正常,完全达到了预期目的。

    参考文献:
    1. ST16C554D data manual. EXAR Corporation
    2. TMS320VC33 Digital Signal Processor. Texas Instruments.2002

     




    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质