欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:14:43 责任编辑: Author_N1

 

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

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:43
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20014/
本文WWW.DOC100.NET DOC100.NET版权所有。