第六章中断系统概述LPC1700系列ARM具有4路外部中断,可以设置为2种类型:边沿触发:上升沿触发下降沿触发•电平触发:高电平触发低电平触发中断信号下降沿触发外部中断输入•边沿触发中断下降沿触发类型中断的请求和清除时序。T1T2T1时刻,中断信号有下降沿产生,中断控制器向CPU发出中断请求。1T2时刻,CPU执行完成中断控制器的中断服务程序,清除中断,中断信号回复到高电平。2中断信号低电平触发外部中断输入•电平触发中断低电平触发类型中断的请求和清除时序。T1T3T1时刻,中断信号开始由高电平转为低电平。1T2时刻,中断控制器确认中断信号是低电平后,将向CUP发出中断请求。2T2T3时刻,CPU执行完成中断控制器的中断服务程序,清除中断,中断信号回复到高电平。3外部中断源34(EINT0)外部中断源35(EINT1)外部中断源36(EINT2)外部中断源37(EINT3)ARM处理器核嵌套向量中断控制器(NVIC)外部中断输入•外部中断源LPC1700系列微控制器几乎所有的外设部件都可以产生中断。其中外部中断含有4个独立的中断输入。系统控制模块功能汇总名称描述访问复位值EXTINT外部中断标志寄存器R/W0EXTMODE外部中断方式寄存器R/W0EXTPOLAR外部中断极性寄存器R/W0•寄存器汇总外部中断输入•寄存器汇总可以通过设置PINSELx寄存器选择对应引脚为外部中断输入引脚。1可以通过设置EXTPOLAR和EXTMODE确定外部中断的触发信号。2可以控制把CPU从掉电模式唤醒。3有效中断信号设置中断标志。4管脚连接控制外部中断极性控制外部中断方式控制中断标志PINSELxEXTPOLAREXTMODEEXTINTCPU其它部件123外部中断极性控制外部中断方式控制掉电唤醒控制中断标志EXTPOLAREXTMODEEXTINTEXTWAKE管脚连接控制PINSELxCPU其它部件•寄存器汇总中断相关寄存器EXTINT——EINT07:40EINT11EINT22EINT33若引脚上出现了符合要求的信号,EXTINT寄存器中对应的中断标志将被置位。向该寄存器的EINT0~EINT3位写入1,可将其清零。外部中断标志寄存器(EXTINT):注意:在电平触发方式下,清除中断标志只有在引脚处于无效状态时才可实现。比如设置为低电平中断,则只有在中断引脚恢复为高电平后才能清除中断标志。设置该寄存器允许相应的外部中断将处理器从掉电模式唤醒。实现掉电唤醒不需要在向量中断控制器(VIC)中使能相应的中断。该寄存器的低四位(EXTWAKE[3:0])分别对应外部中断3~0。外部中断唤醒寄存器(EXTWAKE):控制寄存器EXTWAKE——EXTWAKE07:40EXTWAKE11EXTWAKE22EXTWAKE33外部中断方式控制寄存器(EXTMODE):该寄存器控制着外部中断输入信号的有效触发方式,低四位分别对应外部中断3~0。对应位为0时,电平触发外部中断;对应位为1时,边沿触发外部中断。控制寄存器EXTMODE——EXTMODE07:40EXTMODE11EXTMODE22EXTMODE33外部中断极性控制寄存器(EXTPOLAR):电平触发方式下:对应位为0时,低电平触发外部中断;对应位为1时,高电平触发外部中断。边沿触发方式下:对应位为0时,下降沿触发外部中断;对应位为1时,上升沿触发中断。控制寄存器EXTPOLAR——EXTPOLAR07:40EXTPOLAR11EXTPOLAR22EXTPOLAR33设置说明相应位设置值信号波形极性控制寄存器(EXTPOLAR)方式控制寄存器(EXTMODE)低电平触发0(低)0(电平)高电平触发1(高)0(电平)下降沿触发0(下降)1(边沿)上升沿触发1(上升)1(边沿)中断信号波形与设置方式外部中断输入•外部中断的设置LPC1700系列ARM的电平中断可以设置为电平中断和边沿中断。当EXTMODE[0]=0时,外部中断0设置为电平触发。当EXTMODE[0]=1时,外部中断0设置为边沿触发。注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。低电平高电平EINT00EXTMODE[0]=0EXTPOLAR[0]高电平中断低电平中断上升沿中断下降沿中断边沿中断VIC外部中断001101电平中断外部中断输入•外部中断的设置LPC1700系列ARM的电平中断可以设置为电平中断和边沿中断。当EXTMODE[0]=0时,外部中断0设置为电平触发。当EXTMODE[0]=1时,外部中断0设置为边沿触发。注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。EINT00EXTMODE[0]=1EXTPOLAR[0]高电平中断低电平中断上升沿中断下降沿中断电平中断VIC外部中断001101下降沿上升沿边沿中断外部中断输入•电平中断设置低电平注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。LPC1700系列ARM的电平中断可以设置为高电平触发和低电平触发。当EXTPOLAR[0]=0时,外部中断0设置为低电平触发。当EXTPOLAR[0]=1时,外部中断0设置为高电平触发。EINT00EXTMODE[0]=0EXTPOLAR[0]=0高电平中断低电平中断上升沿中断下降沿中断电平中断边沿中断VIC外部中断001101外部中断输入•电平中断设置EINT00EXTMODE[0]=0EXTPOLAR[0]=1高电平中断低电平中断上升沿中断下降沿中断电平中断边沿中断VIC外部中断001101注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。LPC1700系列ARM的电平中断可以设置为高电平触发和低电平触发。当EXTPOLAR[0]=0时,外部中断0设置为低电平触发。当EXTPOLAR[0]=1时,外部中断0设置为高电平触发。高电平外部中断输入•边沿中断设置EINT00EXTMODE[0]=1EXTPOLAR[0]=0高电平中断低电平中断上升沿中断下降沿中断电平中断边沿中断VIC外部中断001101注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。LPC1700系列ARM的边沿中断可以设置为上升沿触发和下降沿触发。当EXTPOLAR[0]=0时,外部中断0设置为下降沿触发。当EXTPOLAR[0]=1时,外部中断0设置为上升沿触发。下降沿外部中断输入•边沿中断设置EINT00EXTMODE[0]=0EXTPOLAR[0]=1高电平中断低电平中断上升沿中断下降沿中断电平中断边沿中断VIC外部中断001101注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。LPC1700系列ARM的边沿中断可以设置为上升沿触发和下降沿触发。当EXTPOLAR[0]=0时,外部中断0设置为下降沿触发。当EXTPOLAR[0]=1时,外部中断0设置为上升沿触发。上升沿外部中断输入•外部中断的设置——中断标志EXTINT[0]EXTINT[1]EXTINT[2]EXTINT[3]触发外部中断0触发外部中断1触发外部中断2触发外部中断3外部中断标志寄存器EXTINT注意:外部中断标志写“1”清零。外部中断输入•外部中断应用示例初始化EINT0(P2.10)为电平中断:初始化EINT0为下降沿中断:清除所有外部中断标志:LPC_PINCON-PINSEL4=(LPC_PINCON-PINSEL4&0xFFCFFFFF)|(1UL20);LPC_SC-EXTMODE=LPC_SC-EXTMODE&0x0E;LPC_SC-EXTINT=0x0F;LPC_PINCON-PINSEL4=(LPC_PINCON-PINSEL4&0xFFCFFFFF)|(1UL20);;LPC_SC-EXTMODE=LPC_SC-EXTMODE|0x01;LPC_SC-EXTPOLAR=LPC_SC-EXTPOLAR&0x0E;GPIO中断|中断相关寄存器控制寄存器状态寄存器端口P0和P2引脚还具有中断功能。GPIO管脚的中断寄存器可分为两组:控制寄存器和状态寄存器。没有电平中断上升沿中断使能寄存器IO0/2IntEnR上升沿中断状态寄存器IO0/2IntStatR下降沿中断使能寄存器IO0/2IntEnF下降沿中断状态寄存器IO0/2IntStatF中断标志清零寄存器IO0/2IntClr整体中断状态寄存器IOIntStatusGPIO中断|中断功能框图上升沿中断状态寄存器IO0/2IntStatFP0/P2+下降沿中断上升沿中断IO0/2IntStatRIOIntStatusIO0/2IntEnRIO0/2IntEnFIO0/2IntClr上升沿中断使能寄存器下降沿中断使能寄存器中断标志清零寄存器下降沿中断状态寄存器整体中断状态寄存器GPIO中断|中断操作流程IO0/2IntEnFIO0/2IntEnRP0/P2+IO0/2IntClrIOIntStatusIO0/2IntStatFIO0/2IntStatR设置中断触发模式1等待中断IOIntStatusIO0/2IntStatFIO0/2IntStatR清除中断标志2设置下降沿中断使能下降沿中断上升沿中断GPIO中断|中断操作流程操作示例——设置P0.0下降沿中断PINSEL0&=0xFFFFFFFC;IO0IntEnF|=0x01;NVIC_EnableIRQ(EINT3_IRQn);voidEINT3_IRQHandler(void){if((IO0IntStatF&0x01)!=0){IO0IntClr=0x01;......}}设置引脚连接模块设置下降沿中断判断是否为P0.0下降沿中断清除中断标志用户其它代码使能GPIO中断GPIO中断只有边沿触发方式,而外部中断具有边沿触发和电平触发两种方式;GPIO的中断与外部中断3占用一个中断通道,也就是说如果使用GPIO中断的话,外部中断3就无法使用;GPIO中断的引脚数目多,PORT0和PORT2两个端口的有效引脚都可以作为中断使用,而外部中断只有四个引脚:P2.10、P2.11、P2.12和P2.13;P2.10、P2.11、P2.12和P2.13这四个引脚既可以作为外部中断引脚,也可以作为GPIO中断引脚,二者只能选其一;小结:外部中断和GPIO中断的区别外部中断都有独立的中断通道,进入中断后不需要判断是哪一个外部中断源产生的中断;而GPIO中断是PORT0和PORT2两个端口的有效引脚都共用外部中断3这一个中断通道,进入中断后需要判断是哪个端口的哪个引脚产生的中断。外部中断的边沿中断只能选择上升沿或者下降沿中断,而GPIO中断可以选择上升沿、下降沿和双边沿三种方式。使用外部中断和GPIO中断时,在使能NVIC中断之前,都应该清除原有的中断标志,避免之前有未处理完成的中断。小结:外部中断和GPIO中断的区别OVER