S3C2410有24个外部中止引脚:EINT0~EINT23,可是关于EINT0~EINT3这4个外部中止而言,运用比较简单;关于其它20个而言,运用稍稍杂乱一些。
首要,来看S3C2410的中止控制器,有6个中止判决器分为2级,第1级5个,第2级1个;第1级的5个判决器办理32级中止源,在这32级中止源中有2个保存,24级是给内部中止源的,关于24个外部中止只给了6个中止级:EINT0、EINT1、EINT2、EINT3、EINT4~7、EINT8~23,EINT4~EINT7同享一个中止级,EINT8~EINT23同享一个中止级。
中止控制器中首要的相关寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,还有一个INTMOD。可是关于外部中止还有几个寄存器:EXTINTn、EINTMSK、EINTPEND等。
关于外部中止EINT0~EINT3因为没有同享,因而外部寄存器中只要EXTINT0和它们有关,进行中止触发电平信号的设置。
可是关于其他的20个外部中止而言,一切上面说到的寄存器都有联系。实际上关于EINT4~EINT23,实际上能够看作有3级屏蔽,第1级屏蔽是CPSR中的I-Bit和F-Bit,第2级屏蔽是EINTMASK([4:23]每一位对应一个相应的外部中止),第3级屏蔽是INTMSK(Bit4、Bit5);关于EINT0~EINT3而言,仅仅INTMSK中的Bit0~Bit3,因而在变成初始化时应该要特别留意。
在外部中止有中止请求时,因为EINT4~7、EINT8~23别离同享中止,因而在SRCPND中别离对应Bit4、Bit5,终究导致INTPND中的相应方位1(在任何时刻只能有一个方位1),可是怎么分辩这些同享的中止?能够经过查询EINTPEND来进行(Bit4~Bit23别离对应1个外部中止)。因为在相应中止后在服务例程中应将挂起寄存器中相应的位清0来铲除未处理状况,因而关于EINT4~7、EINT8~23这20个外部中止的铲除挂起寄存器的次序是:
1. EINTPEND(或许多位搭档为1),办法:向要清0的位写1,其它位写0,但要留意因为第4位保存,因而不要企图向第4位写1,或许会导致不行意料的成果。
2.SRCPND(或许多位一起为1),办法:向要清0的位写1,其它位写0。
3.INTPND,办法:向其写自身的数据(即INTPND=INTPND)。