您的位置:首页 > 其它

S3C2440A外部中断BUG

2012-08-23 00:17 190 查看
最近做一个项目,是用s3c2440a做主控。在使用其外部中断EINT0时,发现一个奇怪的问题:

外部中断0初始化:

void init_exint0(void)
{
pISR_EINT0 = (unsigned)Exint0_handler;
rGPFCON &= ~(3<<0);     	//初始化GPF0为外部中断0
rGPFCON |= (2<<0);
rGPFUP |= (1<<0);		//禁止上拉
rEXTINT0 &= ~(0xf<<0);
rEXTINT0 |= (0xb<<0);    	//下降沿触发
rSRCPND |= (1<<0);
rINTPND |= (1<<0);
rINTMSK &= ~(1<<0);      	//使用IRQ_EINT0
}


中断处理程序:

void __irq Exint0_handler(void)
{
eint0_time ++;
ClearPending(BIT_EINT0);
}


之后,AVR连接输入100个周期方波(PD5直接接到2440的外部中断0)

_delay_ms(20);
PORTD |= (1<<5);
_delay_ms(20);
PORTD &= ~(1<<5);


发现,eint0_time总会少于100,也就是说,总会丢掉一些中断。大概在2%~5%。

后来发现2440的EXTINT0寄存器设置有问题:



貌似bit3是保留位,没有标明,那么设置为下降沿触发应该是0x0b或者0x02。

以上的实验就是设置为0x0b,却会丢失2%~5%的中断。

当设置为0x02时,中断触发就正常了,没有丢失。

搞清楚是什么原因,似乎是s3c2440a的一个bug,以此篇博文记下,以便日后查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: