- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
DSP 与PC 机串行通讯的设计
b)使能总中断子程序
void inline enable()
{
asm("clrc INTM") ;
}
c)中断服务程序
void interrupt uarttr(){
switch (*PVIR){
//根据中断向量寄存器PVIR 的值区别是接收还是发送中断
case 6:UartRec();
//如果PVIR=6,则发生了接受中断,执行接受中断服务程序
}
}
d)当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
void interrupt nothing(){
return; }
5.3中断处理
void UartRec(){
unsigned int uwork;
int I, k;
k=0;
while(1) {
do{
uwork=(*SCIRXST);
}while((uwork&0x40= =0));
cReceive=(*SCIRXBUF);
cBuffer[k]= cReceive;
if(cReceive= =’.’) {
cBuffer[k+1]=’’;
nlen=k+1;
Set();
Break;
}
k++; k%=16;
}
}
5.4程序初始化
# include "2407c.h"
//初始化子程序
Initial(){
*IFR=0xFFFF; //清除中断标志
*WDCR=0Xe8; //不使能看门狗
*SCSR1=0x81FE; //CLKIN=6M, CLKOUT=24M
*MCRA=0x3; //use SCITXD, SCIRXD
*PADATDIR=0x100; //设置ADIR 为输出口
}
5.5主程序
Main(){
Set();
Disable(); //屏蔽所有中断
Initial(); //系统初始化
Enable(); //使能总中断
While(1) {
unsigned int uwork;
For (intI=0;I<10;I++){
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
(*SCITXBUF)=cAnswer[i];
*IFR=0x0010;
Enable();
}
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
(*SCITXBUF)='"';
}
For(;;){
:
}
}
6结束语
本文作者创新点:利用DSP 的串行通信接口(SCI)和功能强大的开发环境CCS,可以方便地实现DSP 与PC 机间的单机或多机串行通信。通过实际运行表明,利用TMS320 的SCI 模块实现DSP 之间或与PC 机的通信,与传统的C51 单片机相比,其电路简单、设置灵活、运行速度快,性能可靠稳定。
来源:维库