原创 keil for arm 关于enit0 中断计数

2011-7-10 21:28 2439 6 6 分类: MCU/ 嵌入式

经过一下午的实验,终于能在keil编译环境下实现中断响应了。

今天我用的是lpc2106,它和lpc211x类相比少了一些设置。

Lpc2106的配置

clip_image001[8]

Lpc211x的

clip_image002[7]

Lpc 2106 GPIO的配置

clip_image003[7]

LPC 211xGPIO的配置

clip_image004[7]

相比211x来说2106的配置少了不少。2106不需要配置是电平触发或上升沿、下降沿触发。。。。它压根就没这寄存器啊。。。

关于keil响应IRQ中断的实验:

步骤1:编译环境

首先讲一下Realview MDK3.5的设置,clip_image006[7]

然后其它的可以选择默认的,也可以参考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后产生中断效果:

未命名

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条