【本文原创,版权所有,如需转载,请注明出处!】
接着上篇讲arm7对于普通中断的响应。今天讲一下,关于快速中断的响应。
步骤1:基础环境:arm7 LPC2106 , Realview 4.2(编译环境默认)
步骤2:starup.s文件(启动代码)和irq中断不同的是,这里需要修改一下启动代码。
修改前后如下图(注:改动只在图中区域)
图1:原始
修改后如下图(注:对比原图改动如下)
步骤3:编写程序
#include "LPC210x.h"
#define CON 0x000000ff //设置p0.0-p0.7为输出,其余引脚为输入
int volatile temp = 0;
__irq void eint0(void)
{
IOCLR=CON;
IOSET=(++temp)%16;
while(EXTINT&(1<<0))
EXTINT=(1<<0);
VICVectAddr=0;
}
int main()
{PINSEL0=0xa0000000; //设置p0.14,p0.15为中断方式
PINSEL1=0x00000001; //设置p0.16为中断方式
IODIR=CON;//设置p0.0-p0.7为输出,其余引脚为输入
IOCLR=CON; //通过向GPIOl输出模式引脚写1清零IOSET相应位,对应引脚输出低电平
IOSET=temp; //通过向GPIOl输出模式引脚写1输出高电平
VICIntEnClr = 0xfffffff;//消除所有中断标志
VICIntSelect=(1<<14);//设置p0.16为快速中断(FIQ)
VICIntEnable=(1<<14);//使能eint0;//使能eint0 EXTINT=0x07;//清除中断标志
while(1);}
在proteus里的仿真结果如下图:
中断前:
按下key1中断响应后: