利用ST16C554D实现DSP多路串行通讯

出处:tage 发布于:2007-04-23 10:16: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]. TMS320VC33 datasheet https://www.dzsc.com/datasheet/TMS320VC33_688528.html.
[2]. RS-422 datasheet https://www.dzsc.com/datasheet/RS-422_584820.html.
[3]. RS-232 datasheet https://www.dzsc.com/datasheet/RS-232_584855.html.
[4]. MAX232 datasheet https://www.dzsc.com/datasheet/MAX232_1074207.html.
[5]. MAX3095 datasheet https://www.dzsc.com/datasheet/MAX3095_1058624.html.
[6]. MAX3045 datasheet https://www.dzsc.com/datasheet/MAX3045_1089750.html.
[7]. PCI datasheet https://www.dzsc.com/datasheet/PCI_1201469.html.


关键词:DSP

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!