为何s3c2440串口发送中断一上电就会进入中断,但是之后就不再进去了?

Nern 2013-10-13 10:04:08
我的串口初始化函数如下:
#include"uart.h"
#include"2440addr.h"

#define PCLK 50000000

void Uart0_Init(unsigned int baudrate)
{
rGPHCON &= ~((3<<4)|(3<<6));
rGPHCON |= ((2<<4)|(2<<6));
rGPHUP = 0X00; //有效
rULCON0 |= 0X03;
rUCON0 = 0X05;
rUBRDIV0 = (int)(PCLK/baudrate/16)-1;
rURXH0 = 0;
}

中断处理函数如下:
#include"config.h"
#include"isrservice.h"
#include"led.h"
#include"2440addr.h"

volatile unsigned char buf=0;
volatile unsigned int flag = 0;

void Isr_Init(void)
{
pISR_UART0 = (unsigned int)Uart0_Isr;
}

void __irq Uart0_Isr(void)
{

// Led4_On();
if(rSUBSRCPND & (1<<0)) //接收中断
{
buf = rURXH0;
rUTXH0 = buf;
while(!(rUTRSTAT0 & (1<<2)));
Led1_On();
rSUBSRCPND |= (1<<0);
}
if(rSUBSRCPND & (1<<1)) //发送中断
{
if(flag == 0)
{
Led2_On();
flag = 1;
}
else
{
Led2_Off();
flag = 0;
}
rSUBSRCPND |= 1<<1;

}
rSRCPND |= 1<<28;
rINTPND |= 1<<28;

}

问题就出在我想在s3c2440接收到数据后将数据发送返回给PC机,然后再进入发送中断改变Led2的亮灭状态。
跪求大师指导……!谢谢!!
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
drlsdrls 2013-10-14
  • 打赏
  • 举报
回复
因为一般进入发送中断的条件是“发送buffer为空”,当单片机reset释放后,初始状态的发送buffer就是空的,所以,只要你“允许了发送中断”,那么程序就进入发送中断了。 至于为什么第二次不进入,一个可能的原因就是程序在中断里禁止了发送中断
schlafenhamster 2013-10-13
  • 打赏
  • 举报
回复
逻辑上 发送 最好不要用 中断方式, 因为 你 知道 什么时候 应该 发送。

27,378

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧