经过一下午的实验,终于能在keil编译环境下实现中断响应了。
今天我用的是lpc2106,它和lpc211x类相比少了一些设置。
Lpc2106的配置
Lpc211x的
Lpc 2106 GPIO的配置
LPC 211xGPIO的配置
相比211x来说2106的配置少了不少。2106不需要配置是电平触发或上升沿、下降沿触发。。。。它压根就没这寄存器啊。。。
关于keil响应IRQ中断的实验:
步骤1:编译环境
首先讲一下Realview MDK3.5的设置,
然后其它的可以选择默认的,也可以参考realview mdk自带的例子里的一些设置。编译环境就讲这么多了。
步骤2:starup.s文件(启动代码)
在IRQ处理上,启动代码不需要自己去改写什么,用默认的就可以了。当然你也可以适当裁剪。
步骤3:编写程序
#include "LPC210x.h"
#define CON 0x000000ff //设置p0.0-p0.7为输出,其余引脚为输入
int volatile temp = 8;
__irq void eint0(void)
{temp++;
IOCLR=CON;
IOSET=temp;
while(EXTINT&(1<<0))
EXTINT=0x01;
VICVectAddr=0;
}
int main(void)
{ PINSEL0=0x00000000;
PINSEL1=0x00000001;//设置p0.16选择为中断
IODIR=CON; //设置引脚方向
IOCLR=CON; //通过向GPIOl输出模式引脚写1清零IOSET相应位,对应引脚输出低电平
IOSET=temp; //通过向GPIOl输出模式引脚写1输出高电平
VICIntEnClr = 0xffffffff;
VICIntSelect=0;//设置为普通中断(IRQ)
VICVectCntl0=0x20|14;
VICVectAddr0=(unsigned long)eint0;
VICIntEnable=(1<<14);//使能eint0
EXTINT=0x01;//清除中断标志
while(1) ;
}
至于这段代码有两点要提一下:(1)至于很多人讲的中断响应函数的—irq放在前面或者后面实验证明都是一样的。(2)中断处理完,不要忘记VICVectAddr=0;
步骤4:以上都设置好了,以后就可以了。
下面是运行情况:
改变P0.16电平后,中断触发:
在proteus里的仿真结果如下图:
中断前:
按下KEY1后产生中断效果:
文章评论(0条评论)
登录后参与讨论