原创 2440中断总结

2009-6-6 11:24 4169 4 4 分类: MCU/ 嵌入式
1.对于外部中断需要设置外部中断寄存器、外部中断屏蔽位、中断屏蔽位等三个位置。
2.中断处理函数的写法:
????pISR_EINT0= (unsigned ) doIrq;
??doIrq为我们定义的中断处理函数。?pISR_EINT0在头文件中定义,它与stat.s中定义的中断入口地址对应。但要注意,在使用ADS调试时,应该先把BIN文件烧进去,因为只有这样,0地址对应的地方才有中断向量表。
3下面是外部中断和串口中断的代码:

void __irq doIrq(void)
{
?? rSRCPND = 1;
?? rINTPND = 1;
???
?? rINTMSK |= 1 ; ? //disable EINT0;
?? rGPFDAT = 0;
???
?? ?myprintf("this is irq function!\n");
?? ?
?? ?rINTMSK &= ~(1<<0) ; ? //enable EINT0;
}


void __irq doUartIrq(void)
{

?
?? ? ?
?? rSRCPND =( 1<<28);
?? rSUBSRCPND = 1;
?? rINTPND = (1<<28);
???
???
??rINTMSK |= (1<<28) ; ? //关闭串口中断
?? rINTSUBMSK |= (1<<0) ; ? ?

?? ?
??// rUTXH0=rURXH0;
???
?if(rUTRSTAT0&1)
{
rUTXH0=rURXH0;
rUTRSTAT0=0;
?}

?? rINTMSK &= ~(1<<28) ; ? //打开串口中断
?? rINTSUBMSK &= ~(1<<0) ; ?

}

在中断处理函数中要清除中断位,如:
?? rSRCPND =( 1<<28);
?? rSUBSRCPND = 1;
?? rINTPND = (1<<28);

注意,清除顺序有要求,先总的,再分的,并且这几位是写 1 表示清 0;

4. 发现每次发一个数据给串口,串口接收中断进入两次,但查看STATUS寄存器却有一次是没有数据的,所以在串口中断中加入对STATUS的查看语句,如果为空则不响应。

5 存在问题:

??发现while为空循环时中断响应正常,但只要在while里加入了delay延时后,中断变为只能响应一次,以后就没反应了,不知道为什么!!


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条