| 网站首页 | 电源技术 | 电源资料 | 电源论坛 | 电源电路 | 电源人才 | 电源供求 | 留言本站 | 繁體中文 | 
[ ] 文章搜索:
您现在的位置: 电源开发网 >> 电源技术 >> 新手入门 >> 设计研究 >> 正文
PC机与DSP通讯方法研究
http://www.dykf.com  2008-11-8  电源开发网           ★★★

1 引言
  
  近年来,随着DSP应用的日益广泛,采用PC机与DSP构成控制系统越来越受到人们的青睐。这样做既利用了DSP控制方便、抗干扰性好、价格低廉等优点,又结合了PC机具有丰富的硬件和软件资源,为用户提供了非常友好的人机界面等特点,而且采用这种方法便于观察电路的工作状态和运行参数,为调试电路提供了指导方向,因此这种控制系统具有广阔的应用前景。

2 通讯的基本原理

  PC机的8250芯片是一个采用异步串行通讯方式的接口,通讯口采用的是RS—232标准,8250有一个通讯线路控制寄存器LCR,其各位定义如下:

  在本系统中,由于通信距离较短,为简便起见,可以采用以下的各种参数值:
  
  SB=0,SP=0,EPS=0,PEN=0,STB=1,WLS1 WLS0=11

  在传送数据时,由一个“0”电平的起始位开始,随后紧跟8位二进制数据位,没有奇偶校验位,最后两位是电平为“1”的停止位。起始位的下降沿用于触发接收器内的一个定时装置,然后,延时半个位的时间开始对信号采样。若此时采样获得的信号是高电平(而不是起始位后半位应有的低电平),则说明此前的下降沿是一个干扰信号,不予受理;若采样获得的信号是低电平,就确认是起始位的到来。此后,每隔一个位的时间便对信号采样一次,从而实现对数据位的接收。
  
  对DSP而言,数据的帧格式与DSP一致,当发送数据时,数据首先被写入SCITXBUF,然后送到TXSHF时将置位TXRDY,从而产生中断,表示可以向SCITXBUF发送另一个数据;当接收数据时,接收的数据从RXSHF移位到SCIRXBUF时,RXRDY位将置位,从而产生中断,表示RXSHF可以接收另一个数据。

3 通讯的方法研究

(一)PC机的异步通讯方式主要有以下几种:

1.查询方式的异步串行通讯
  
  查询方式下异步通讯编程一般有三个部分:初始化串行通讯口、发送一个字符以及接收一个字符。初始化时确定数据传输帧格式、确定传输波特率以及确定8250操作方式。发送字符时要考虑距离的远近:近距离时不用考虑RS—232C的MODEM控制信号,CPU只要检测到8250发送器保持寄存器为空,即可向发送器保持寄存器输出一个字符;而远距离时应按照RS—232C配置MODEM时的控制规则去处理,而且发送方首先要输出RTS和DTR有效,然后检测MODEM状态寄存器,只要收到DCE送来的CTS和DSR有效,CPU才向8250输出一个字符。接收字符时也同样要考虑这两个问题:近距离时不考虑RS—232C的MODEM控制信号,CPU只要检测到8250接收器数据寄存器准备好,即可从接收器数据寄存器读取一个字符;远距离时也应按照RS—232C配置MODEM的控制规程要求去处理,接收方首先应输出数据终端就绪信号,然后,检测MODEM状态寄存器,只有当接收到DCE发来的数据设备准备好信号,CPU才可从8250接收一个字符。

2.中断方式的异步串行通讯

  根据异步串行通讯中断程序的特点,异步通讯中断编程一般包括三个部分:通讯中断初始化、通讯中断主程序、通讯中断服务程序。中断初始化时,应修改中断向量表,按使用的串口COM1和COM2,接管中断0CH或中断0BH,使新的中断向量指向自行编制的通信中断程序,接着要确定8250的操作方式,设置中断允许寄存器相应位的允许或禁止,并允许中断操作,然后确定起止式通讯协议,设置通讯波特率及数据帧传输格式,最后要开放通讯中断。通讯中断主程序主要由用户自己编写,因而没有统一的模式。而中断服务程序是中断处理的核心,首先要判断发生中断的中断源类型,通过读取中断标识寄存器的标识位,找到相应中断服务程序的入口地址,然后要对不同的中断源类型,进行不同的处理:如果是接收器数据寄存器就绪中断,则从8250数据寄存器读取数据;如果是发送器保持寄存器空中断,则从内存读取字符写到8250保持寄存器;如果是接收数据出错引起的中断,则从8250线路状态寄存器读取状态进行分析,根据错误或间断,作出相应的处理;如果是MODEM状态变化引起的中断,则从8250的MODEM状态寄存器读取状态进行分析,根据状态变化,作出相应的处理;最后要判断是否有尚未处理的中断,即当每种中断源处理后,要继续判别中断标识寄存器的最低位IP是否为0,若为0,则再输入标识位指示的相应中断处理,若为1,则结束中断处理,并以IRET返回被中断的通讯子程序。

3.通过调用BIOS串行通讯口实现PC机和DSP通讯

  高层系统软件或应用程序可以通过调用软中断INT 14H来实现PC机访问串行通讯口,它包括串行口初始化、发送一个字符到串行口、接收一个从串行口来的字符、获取和读串行口当前状态等四个部分,在C语言中可以通过调用指令INT86来实现。串行口的初始化是通过INT 14H的0号功能来实现,即确定通讯双方采用的波特率、数据位位数、停止位位数及奇偶性等参数,这些参数由用户写入AL寄存器,这些参数的具体含义如下:AH=0 为通讯口功能号,AL 为初始化参数,DX 为串行口号;发送一个字符是通过INT 14H的1号功能来实现,此时AH=1为功能号,AL 为欲发送的字符,DX 为串行口号,返回时,AH寄存器含状态信息,如AH的第七位为1,表明出错;INT 14H的2号功能用来从串行口读一个字符,此时相应的寄存器值分别为:AH=2为功能号,DX为串行口号,AL为所读入的那个字符,若返回时AH的第七位是1,表明接收失败;INT 14H 的3号功能是用来检查串行口的状态,此时AH=3为功能号,DX为串行口号,返回时AH与AL寄存器含串行口的状态信息。
  
  DSP在多处理机通讯时,发话者发送的数据块的第一个字节包括一个地址字节,它被所有的听众读取。只有具有正确地址的听众才能被跟在地址字节后的数据字节中断,地址不正确的听众保持未中断态直到下一个地址字节。串行连接的所有处理器将它们的串行通讯接口的SLEEP位置成1,使得它们仅当检测到地址字节用户时才被中断。当处理器读取的块地址相应于应用软件设置的CPU器件地址时,用户程序必须清除SLEEP位来确保串行通讯接口在收到每个数据字节时产生一个中断。

(二)DSP的异步通讯方式主要有以下几种:

1.空闲线多处理机模式
  
  这种模式下在地址前留有一个固定空间。该模式没有附加的地址/数据位,它在处理包含多于10个字节的数据块方面比地址位模式更有效。它应用于典型的非多处理机SCI通讯。

2.地址位多处理机模式
  
  这种模式下在每个字节中加入一个额外位(地址位)来将地址同数据区分开,它在处理多个小数据块时更有效,因为它不象空闲线多处理机模式,它在数据块之间不用等待。然而,当处于高发送速率时,程序的运行速度不足以避免传送流中的10位空闲。

4 软件的实现方法

  在本系统中,采用第一种方法,即采用查询方式的串行通讯。为提高PC机与DSP之间通讯的速度,采用的波特率为38400,实践证明,这种设置是可行的,而且这种方式结构简单,同时又能满足一定的速度要求。现在简单地介绍一下本系统:

  PC机的程序流程如图1所示,而8250的初始化子程序为:

  outportb(0x3fb,0x80);
  outportb(0x3f8,0x03);
  outportb(0x3f9,0x00);/*the bode is384000 bytes/s*/
  outportb(0x3fb,0x07);/*set the LCR*/
  outportb(0x3f9,0x00);/*intueeupt disable*/


PC机发送一个字符的子程序为:
void ttr(x)
int x;
{
int ch;
int times ,i;
i=0;
times=15000;
do{
ch=inportb(0x3fd);
} while(((ch&0x20)==0)&&(++i<times));
if(i>=times)
{printf("send time out!\n");
exit(1);
}
outportb(0x3f8,x) ;

PC机接收一个字符的子程序为:
double rre( )
{
int status;
long int times,i;
i=0;
times=15000;
do
{
status=inportb(0x3fd);
} while(((status&0x01)==0)&&(++i<times));
return(inportb(0x3f8));
}

对DSP而言,其程序流程如图2所示,DSP的初始化子程序为:
SCI_SET: SPLK #0097H, SCICCNTL ;2 stop ,no parity, 8 char;async mode, idle line      

SPLK    #0013H, SCICNTL1;Enable TX, RX, internal SCiCLK,;Disable RX ERR,SLEEP, TXWALK
SPLK    #0003H,SCICNTL2 ;Enable RX INT, TX INT
SPLK #0000H, SCIHBAUD ;
SPLK #0020H, SCILBAUD ;Baud rate is 38400 b/s(10MHz SYSCLK)
SPLK #0022H, SCIPORT_C2 ;Enable TXD and RXD Pins
SPLk    #0033H, SCICNTL1 ;Relinquish SCI From reset
SPLK    #0002H, SCICNTL2  ;Enable RX INT, DISABLE TX INT

  而DSP发送与接收一个字符的子程序比较简单,现简述如下:

  对于发送一个字符而言,发送的数据被写入发送数据缓冲器(SCITXBUF),数据从该寄存器传送到发送器移位寄存器(TXSHF)的操作将置位TXRDY的标志位,这表示SCITXBUF准备接收另外一组数据。

  对于接收一个字符而言,如果收到的当前数据从RXSHF移位到接收缓冲器时,标志位RXRDY置位,数据准备被读出。

5 结论

  本文通过用于SMES中PCS控制的DSP与 PC机之间的通信,很有效的对控制系统进行了调节,给实验者提供了很大的方便。实践证明这种方法是适用的,而且有一定的可视化效果,具有较大的使用价值。


参考文献:

1.TEXAS INSTRUMENTS“TMS320C24X DSP Controllers Reference Set ,Volume2: Peripheral Library and Specific Devices”, Literature Number: SPRU161B, December 1997.
2.TEXAS INSTRUMENTS“TMS320C24X DSP Controllers Reference Set, Volume1: CPU,
 System, and Instruction Set”, Literature Number: SPRU160B, September 1997.
3.张旭东,廖先芸,“IBM 微型计算机实用接口技术”,科学技术文献出版社。
4.刘乐善,叶济忠,叶永坚,“微型计算机接口技术原理及应用”,华中理工大学出版社。
5.温伟强,梁浩源,周静泉,“一种用C语言实现PC机与多台单片机通讯的新方法”,《电子
 技术应用》, 1996年第11期。
6.何晓红,谭兵,周建丽,“PC机与多台单片机的远距离多机通讯”, 《电子技术应用》, 1997年第12期
来源:电源世界  作者:王荆江 林…  点击:  录入:admin
收藏此页】【字体: 】【打印此文】【关闭窗口
※相关链接※
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) 发表评论
专 题 栏 目
推 荐 图 书
热 门 文 章
热 门 下 载
热 门 电 路
论 坛 推 荐
精 彩 广 告

关于本站 - 广告服务 - 联系我们 - 版权申明 - 网站地图 - RSS订阅 - 友情链接 - -
Copyright@2004-2014 ◆电源开发网◆ All Rights Reserved