1.中止分两大类:内部中止和外部中止。
2.外部中止。24个外部中止占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中止输入,则有必要装备引脚为中止,而且不要上拉。详细参阅datesheet数据手册。
寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方法。
EINTFLT0-EINTFLT3:操控滤波时钟和滤波宽度。
EINTPEND:这个是中止挂起寄存器,铲除时要写1,后边还有几个是写1铲除。当一个外部中止(EINT4-EINT23)产生后,那么相应的位会被置1。为什么没有EINT0-EINT3,呵呵,看看SRCPND就知道了,晒干没有EINT4-EINT23的位子,所以有了EINTPEND。
EINTMASK:这个简略,是屏蔽中止用的,也就是说位为1时,此次中止无效。
3.内部中止。内部中止有8个寄存器,下面逐个来看。
寄存器:SUBSRCPND:当一个中止产生后,那么相应的位会被置1,一共一个中止产生了。
INTSUBMSK:与上一个是一伙的,中止屏蔽寄存器,详细屏蔽什么,自己看手册去吧。
INTMOD:中止的方法。一个中止可所以一般中止,也可所以快中止,在这里设置,但只能有一个快中止。
PRIORITY :优先级寄存器,不说了。
SRCPND :当一个中止产生后,那么相应的位会被置1,一共一个或一类中止产生了。
INTMSK :中止屏蔽寄存器。
INTPND :中止产生后,SRCPND中会有方位1,或许好几个(由于一起或许产生几个中止),这些中止会由优先级裁定器选出一个最急迫的,然后吧把INTPND中相应方位1,所以同一时间只要一位是1。也就是说前面的寄存器置1是一共产生了,只要INTPND置1,CPU才会处理。
INTOFFSET :用来一共INTPND中哪一方位1了,好让你查询,一般中止跳转时查询用。铲除INTPND、SRCPND时主动铲除。
4.各寄存器联系:
5.中止过程。
a 假如是不带子中止的内部中止:产生后SRCPND相应方位1,假如没有被INTMSK屏蔽,那么等候进一步处理。
b 假如是带子中止的内部中止:产生后SUBSRCPND相应方位1,假如没有被INTSUBMSK屏蔽,那么SRCPND相应方位1,等候进一步处理,几个SUBSRCPND或许对应同一个SRCPND,对应表如下:
SRCPND SUBSRCPND
INT_UART0 INT_RXD0,INT_TXD0,INT_ERR0
INT_UART1 INT_RXD1,INT_TXD1,INT_ERR1
INT_UART2 INT_RXD2,INT_TXD2,INT_ERR2
INT_ADC INT_ADC_S, INT_TC
INT_CAM INT_CAM_C, INT_CAM_P
INT_WDT_AC97 INT_WDT, INT_AC97
c 假如是外部中止:EINT0-EINT3产生后SRCPND相应方位1,假如没有被INTMSK屏蔽,那么等候进一步处理。EINT4-EINT23产生后EINTPEND相应方位1,假如没有被EINTMASK屏蔽,那么SRCPND相应位EINT4-7 或EINT8-23置1,假如没有被INTMSK屏蔽,等候进一步处理,几个EINTPEND对应同一个SRCPND,对应表如下:
SRCPND EINTPEND
EINT0 EINT0
EINT1 EINT1
EINT2 EINT2
EINT3 EINT3
EINT4-7 EINT4-EINT4
EINT8-23 EINT8-EINT23
三种中止都等候进一步处理了。接下来从SRCPND往下看,看INTMSK。假如中止被屏蔽了,就不用说了(留意:快中止也能被屏蔽)。假如没有被屏蔽,那么会进一步到INTMOD。假如是快中止,那么直接出来,进入FIQ(即CPU进入快中止形式处理)。假如是一般中止,那么SRCPND能够有多为置1(FIQ只能有一个),这时就会通过PRIORITY选出一个优先级高的,然后把依据选出的中止把INTPND相应方位1(留意:只能选出一个),进入IRQ,让CPU处理。
6.中止的舱位。
a.假如是不带子中止的内部中止,只需设置INTMSK,让它不屏蔽中止就能够了。
b 假如是带子中止的内部中止,需设置INTSUBMSK和INTMSK,让它门不屏蔽中止就能够了。
c 假如是外部中止,关于EINT8-23需求设置EINTMASK和INTMSK。关于EINT0-EINT3只需设置INTMSK。
7.中止的铲除。
a.假如是不带子中止的内部中止,只需铲除SRCPND,留意铲除需方位1。
b 假如是带子中止的内部中止,需铲除SRCPND和SUBSRCPND,留意先铲除SUBSRCPND,再铲除SRCPND。由于,假如你先铲除SRCPND的话,然后在铲除SUBSRCPND的过程中,SRCPND会认为又有中止产生,又会置1。也就是说一次中止会呼应两次。所以有必要先掐断源头。
c 假如是外部中止,关于EINT8-23需求铲除EINTPEND和SRCPND(相同留意次序)。关于EINT0-EINT3只需铲除SRCPND。