1DSP部分
该DSP控制器的串行通讯接口由发送和接收两大部分组成,其与串行通讯相关的引脚如下:
SCIRXD:串行通讯接收引脚,也可用作普通I/O端口。
SCITXD:串行通讯发送端,也可用作普通I/O。
该DSP的系统时钟由SYSCLK设定,其中SYSCLK为CPUCLK/2 CPUCLK为20MHz。
通过TMS320C24X中的一个16位波特率选择器可获得超过65000种不同的可编程波特率。波特率的设置与SCIHBAUD和SCILBAUD有关,其具体算式如下:
BRR=SYSCLK/(SCI异步波特率×8)-1,
其中SYSCLK为10MHz。本软件采用9600的波特率。可编程数据字长从1位到8位,并可由SCICCR控制寄存器来编程数据格式。本软件采用8位数据字长。PC与DSP的通讯采用中断方式,可避免DSP的CPU反复查询接收与发送缓冲区满标志,从而提高设备利用率,保证其具有足够的实时性。相应的中断设置可由SCICTL2来完成。
串行通讯接口数据无论是接收还是发送,都采用NRZ(不归零)格式。本软件采用8位数据为一帧(一个接收和发送的单位)的格式。
在串行口初始化完成后,只需对数据发送缓冲器SCITXBUF和数据接收缓冲器SCITXD/IO进行操作即可。如果要发送数据,无论何时,只要把数据写入到SCITXBUF就会产生发送中断。而加入起始位、停止位、校检位数据以及在波特率规定的节拍下移位到发送引脚SCITXD/IO等工作则可由串行通讯SCI模块本身来完成。如果要接收数据,只要DSP接收到完整的帧就会产生中断,然后只要在中断程序中把SCIRXBUF的内容读出即可,因为对于引脚SCITXD/IO移位来的信息,串行通讯SCI模块本身即可自动去掉起始位、停止位和校检位,然后将数据放到SCIRXBUF中。
对于单机通信,可不使用SLEEP设置,而使用空闲线多处理机模式,并采用中断方式在主程序中完成初始化。同时可设置一个变量用于辨别是否给PC机发数据。
接下来应考虑中断接收子程序里从PC机送来的信号(PC机要先将DSP中需要的电机参数转换成定点数1.15、4.12、8.8、10.4等格式)。在发送子程序里,应由DSP将得到的数据回送给PC机并由PC机将定点数转换成电机参数并显示。当然,DSP也可以将内部某指定地址开始的数据传给PC机,然后由PC机按给定格式转换并处理。DSP程序流程图如图1所示。
有关SCI初始化的部分程序如下:
.bss SEND,1 ;向微机发送数据的标志
LDP #00E0H
SPLK #0017H SCICCR;SCI复位,传输数据长度8位
SPLK #0013H SCICTL1 ;串行输入、输出使能
SPLK#0003hSCICTL2 ;串行输入、输出中断使能
SPLK#0000h SCIHBAUD
SPLK#0082h SCILBAUD;波特率9600
SPLK#0022h SCIPC2;定义引脚SCITXD和SCIRXD为功能引脚
SPLK#0033h SCICTL1; 串行输入、输出工作
………………………………
3 VB部分
利用VB6.0专业版提供的功能强大的Active X控件MSCOMM可实现微机与DSP的通信,实际上,在VB中,串行通讯端口所传送的数据使用的是BYTE字节型数组变量,可将装载数据的数组转换为Variant型进行传输。同理接收数据时要将数据赋给Variant型变量再进行处理。byte型表示数据类型为整型?范围为:0-255。Variant型是变体变量,可以是任意数据类型。同时需设置一个变量(标志变量)以用于辨别是否要求DSP发送数据给PC。
由于本软件所用的DSP为定点格式,字长为16位,因此,本系统不能直接表示浮点数。而应进行格式转换。