找回密码
 注册
搜索
查看: 804|回复: 1

[讨论] 请教TMS320lf2407串口通信

[复制链接]
发表于 2006-9-29 22:41:00 | 显示全部楼层 |阅读模式
我用下面这个程序想实现DSP与PC机串口通信
但是不行,串口配置应该没问题,因为同样的配置,我改成查询的方式,就收发正常了
可是用中断就是不行,刚开始学,有很多地方不懂,请教高手
#include "LF2407regs.h"
initial()
{
asm(" setc SXM"); //抑制符号扩展位
asm(" clrc OVM"); //累加器结果正常溢出
asm(" clrc CNF"); //B0被配置为数据存储空间
//asm(" setc INTM"); //禁止所有中断

*SCSR1=0x81DD;  //系统时钟频率=4*fin,并使能ADC,SCI,SPI,can,EVB,EVA外设
*WDCR=0x0E8;  //不使能看门狗,因为SCSR2中的的WDOVERRIDE
      //即WD保护位复位后的缺省值为1,故可以用软件禁止看门狗
*IMR=0x0000;  //禁止所有中断
*IFR=0x0FFFF;  //清除全部中断标志,"写1清0"
}
void inline disable()
{
asm(" setc INTM");  //禁止所有中断
}
void inline enable()
{
asm(" clrc INTM");
}
main()
{
disable();  //禁止所有中断
initial();

*SCICCR=0x07;
*SCICTL1=0x3;
*SCICTL2=0x13;
*SCIHBAUD=0x2;
*SCILBAUD=0x70;
*SCICTL1=0x33;
*SCIPRI=0x60;
*MCRA=0x3;
*PADATDIR=0x100;
*IMR=0x10;
enable();
*SCITXBUF='';


while(1);

}
void UartSent()
{
const char* var="f2407 UART is fine!"; //定义一段需要发送的字符串
static int i=0;
if(i>strlen(var)) return; //若已经发送完毕,则中断就直接返回
*SCITXBUF=var[i++];   //依次发送定义的字符串中的各个字符
*IFR=0x0010;  //清除IFR中相应的中断标志位
enable();   //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void UartRec()
{
static int recieve[10],j=0;
recieve[j++]=*SCIRXBUF;  //依次接收各个字符
if(j>9) j=0;
*IFR=0x0010;  //清除IFR中相应的中断标志位
enable();   //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void interrupt uarttr()
{
switch(*PVIR)
{
  case 6: UartRec();
  case 7: UartSent();
}
}
void interrupt nothing()
{
return;
}
 楼主| 发表于 2006-10-2 10:50:00 | 显示全部楼层

搞定

原来我是在RAM中在线调的,后来程序稍作改动后下到flash中就可以了
不知道大家有没有碰到过这样的问题
如果说在线调试老是出问题,只能烧到flash中,那么程序一大不是很难调试了
请问大家是怎么解决这个问题的
[em13]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-27 11:46 , Processed in 0.051210 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表