为何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就是空的,所以,只要你“允许了发送中断”,那么程序就进入发送中断了。
至于为什么第二次不进入,一个可能的原因就是程序在中断里禁止了发送中断