您现在的位置: 主页 > MCU > 单片机技术应用 > ARM笔记:外部中断 -
本文所属标签:
为本文创立个标签吧:

ARM笔记:外部中断 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]一、概念中断分为两大类:外部中断和内部中断。1、外部中断:S3C2440的24个外部中断占用GPF0~GPF7(EINT0~EINT7)、GPG0~GPG15(EINT8~EINT23)。使用这些引脚作为中断输入时,必须将引脚配置为EINT模式,配置方法可

一、概念

本文引用地址: http://www.21ic.com/app/mcu/201808/778649.htm

中断分为两大类:外部中断和内部中断。

1、外部中断:S3C2440的24个外部中断占用GPF0~GPF7(EINT0~EINT7)、GPG0~GPG15(EINT8~EINT23)。使用这些引脚作为中断输入时,必须将引脚配置为EINT模式,配置方法可参考datasheet。


2、内部中断:内部中断包括DMA中断、UART中断、IIC中断等等由内部外设触发的中断。


3、相关寄存器:S3C2440中断控制涉及到10个寄存器--SRCPND、INTMOD、INTMSK、PRIORITY、INTPND、INTOFFSET、SUBSRCPND、INTSUBMSK、EINTMASK、EINTPEND,这10个寄存器的定义及其功能描述如下表一。对中断的控制无外乎配置和处理这10个寄存器中的某几个。

表一 与S3C2440中断相关的10个寄存器的信息



4、各寄存器的关系(工作流程)。根据中断源进行分类,中断的处理流程可用下图1表示:


图1 S3C2440中断处理流程图

由上图1可知,S3C2440的中断可分为四种情况:由外部中断源(EINT0~EINT3)触发的中断、由外部中断子中断源(EINT4~EINT23)触发的中断、由内部中断源(内部子中断)触发的中断和由内部中断源(非子中断)触发的中断。


5、中断的开启(中断初始化,INTMOD 和 PRTORITY使用默认值)

(a)如果是外部中断(EINT0~EINT3)和内部中断(不带子中断),需设置INTMSK,让它不屏蔽中断即可;

(b)如果是带子中断的内部中断,需设置INTSUBMSK 和 INTMSK,让它们不屏蔽中断即可;

(c)如果是外部中断(EINT4~EINT23),需设置EINTMASK 和 INTMSK,让它们不屏蔽中断即可;

注意:CPSR中的第7位I也需清除(在start.S中关闭了中断,这一步是针对在bootloader设计中进行EINT实验时的操作)


6、中断处理流程

(a)如果是外部中断(EINT0~EINT3)和 不带子中断的内部中断,发生中断后SRCPND相应位置1,如果没有被 INTMSK屏蔽,那么等待进一步处理;

(b)如果是带子中断的内部中断,发生中断后SUBSRCPND相应位置1,如果没有被INTSUBMSK屏蔽,则SRCPND相应位置1,如果没有被INTMSK屏蔽,那么等待进一步处理;

(c)如果是外部中断(EINT4~EINT23),发生中断后EINTPEND相应位置1,如果没有被EINTMASK屏蔽,则SRCPND相应位EINT4-7和EINT8~23置1,如果没有被INTMSK屏蔽,那么等待进一步处理;

三种中断都等待进一步处理了,接下来从SRCPND继续往前看,看看INTMSK,如果中断被屏蔽了,就不用说了(注意:快中断也能被屏蔽)。如果没有被屏蔽,那么会进一步到INTMOD。如果是快中断,那么直接出来,进入FIQ(即CPU进入快中断模式处理)。如果是普通中断,那么SRCPND可以有多位置1(FIQ只能有一个),这时就会经过PRIORITY选出一个优先级高的,然后根据选出的中断把INTPND相应位置1(注意:只能选出一个),进入IRQ,让CPU处理。

INTOFFSET寄存器用来表示INTPND中哪一位置1了,可以用来判断请求中断的中断源,但是,对于外部中断EINT4~EINT23是无法判断的,如EINT4~EINT7中任何一个中断源请求中断,都会将INTOFFSET中的位EINT4_7置1,所以要判断具体是哪个中断源请求的中断,可读取EINTPEND中的值进行判断。


7、中断的清除

(a)如果是外部中断EINT0~EINT3和不带子中断的内部中断,只需清除SRCPND(注意:清除时对相应位写“1”);

(b)如果是带子中断的内部中断,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因为如果先清除SRCPND的话,在清除SUBSRCPND的过程中,SRCPND会以为又有中断发生,又会置1,也就是说一次中断会响应两次,所以必须先掐断源头,对它们同样是写“1”清除

(c)如果是外部中断EINT4~EINT23,需清除EINTPEND和SRCPND(同样注意顺序),写“1”清除。




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > ARM笔记:外部中断 -
 

"ARM笔记:外部中断 -"的相关文章

网站地图

围观()