首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-10-30 
为何s3c2440串口发送中断一上电就会进入中断,但是之后就不再进去了?我的串口初始化函数如下:#includeuart

为何s3c2440串口发送中断一上电就会进入中断,但是之后就不再进去了?
我的串口初始化函数如下:
#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的亮灭状态。
跪求大师指导……!谢谢!!
[解决办法]
逻辑上 发送 最好不要用 中断方式, 因为 你 知道 什么时候 应该 发送。
[解决办法]
因为一般进入发送中断的条件是“发送buffer为空”,当单片机reset释放后,初始状态的发送buffer就是空的,所以,只要你“允许了发送中断”,那么程序就进入发送中断了。
至于为什么第二次不进入,一个可能的原因就是程序在中断里禁止了发送中断

热点排行