S3C2440A外部中断BUG
2012-08-23 00:17
190 查看
最近做一个项目,是用s3c2440a做主控。在使用其外部中断EINT0时,发现一个奇怪的问题:
外部中断0初始化:
中断处理程序:
之后,AVR连接输入100个周期方波(PD5直接接到2440的外部中断0)
发现,eint0_time总会少于100,也就是说,总会丢掉一些中断。大概在2%~5%。
后来发现2440的EXTINT0寄存器设置有问题:
貌似bit3是保留位,没有标明,那么设置为下降沿触发应该是0x0b或者0x02。
以上的实验就是设置为0x0b,却会丢失2%~5%的中断。
当设置为0x02时,中断触发就正常了,没有丢失。
搞清楚是什么原因,似乎是s3c2440a的一个bug,以此篇博文记下,以便日后查询。
外部中断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,以此篇博文记下,以便日后查询。
相关文章推荐
- TIzstack中关于外部中断中采用轮询方式的bug
- stm32 EXTI中断BUG,无法进入外部中断的问题
- stm32 外部中断学习
- 外部中断
- IAR+Proteus7.6仿真MSP430单片机PORT1外部中断功能
- stm32外部中断与外部事件区别
- 外部中断实现LED灯的控制亮灭
- android PopupWindow引起外部view点击事件的一个诡异的bug
- zigbee学习笔记3----cc2530 外部中断实验
- 【stm32f103】stm32 外部中断(寄存器版)
- STM32中断一些概念(主要是外部中断)
- 《tiny6410裸机程序》第八章:S3C6410外部中断控制寄存器
- STM32学习笔记-外部中断
- STM32学习笔记4:外部中断
- kvm对外部中断的处理
- EFM32之外部中断
- STM32-外部中断学习笔记
- STM32 外部中断Exti
- STM32F10x外部中断释疑