keil for arm 关于enit0 中断计数

【本文原创,版权所有,如需转载,请注明出处!】


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

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

Lpc2106的配置

clip_image001[1]

Lpc211x的

clip_image002[1]

Lpc 2106 GPIO的配置

clip_image003[1]

LPC 211xGPIO的配置

clip_image004[1]

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

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

步骤1:编译环境

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

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

未命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值