S3C2440A外部中断BUG

最近做一个项目,是用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,以此篇博文记下,以便日后查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值