5 DSP软件设计

5.1 串口初始化

首先对寄存器地址、波特率、数据位、停止位、奇偶校验位进行设置。

void Set()

{

*SCICCR=0x7; //8 位字符,1 停止位,无校验

*SCICTL1=0X13; //使能发送和接受

*SCICTL2=0x03; //使能接受和发送中断

*SCIHBAUD=0x02; //波特率=208h,40MHZ

*SCILBAUD=0x08; //208h=40*106/(9600*8)-1

*SCICTL1=0x33; //使能发送和接受,复位

*SCIPRI=0X60; //SCI 中断(接受和发送中断)为低优先级中断

}

5.2 中断初始化

a)禁止总中断子程序

void inline disable()

{

asm("setc INTM");

asm("setc SXM");

}

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 单片机相比,其电路简单、设置灵活、运行速度快,性能可靠稳定。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查