LPC2114芯片的外部中断0使用哪个IO?如何将响应的IO口配置为外部中断0?
LPC2114与LPC2124使用P0.16作为EINT0的GPIO,使用时需要设置PINSEL寄存器的值为EINT。
添加eint.h的代码
#ifndef __EINT_H
#define __EINT_H
#include "sys.h"
void eint_st0(u32 pin_num);//外部中断0,pin_num:1或者16
#endif
添加eint.c的代码
#include "eint.h"
__irq void IRQ_Eint0(void);//外部中断0中断服务函数声明
//外部中断0只能选择1或者16
void eint_st0(u32 pin_num){
if(pin_num == 1){
PINSEL0 = PINSEL0 | 0x0000000C; //P0.1管脚功能选择为外部中断
}
else{
PINSEL1 = PINSEL1 | 0x00000003; //P0.16管脚功能选择为外部中断
}
VICIntSelect = VICIntSelect & (~0x00004000); //将外部中断0设置为IRQ模式
VICIntEnable = VICIntEnable | 0x00004000; //使能外部中断0
VICVectCntl0 = 0x2E; //将14号中断外部中断0优先级设置为0
VICVectAddr0 = (int)IRQ_Eint0; //设置中断服务子程序
EXTINT = EXTINT | 0x01;
EXTMODE = EXTMODE & (~0x01); //0为电平激活,1为边沿激活
EXTPOLAR = EXTPOLAR & (~0x01); //0为低电平产生中断,1位高电平产生中断
}
//外部中断0中断服务函数
__irq void IRQ_Eint0(void){
}
添加main.c的代码
#include "sys.h"
#include "gpio.h"
#include "eint.h"
u32 flag = 0;
__irq void IRQ_Eint0(void){
flag = 1;
while((EXTINT&0x01)!=0){ //等待外部中断信号恢复为高电平
EXTINT = 0x01; //清除EINT0中断标志
}
VICVectAddr=0;
}
int main(){
eint_st0(16);
while(1){
if(flag == 1){
gpio1_seL(23);
delay_ms(100);
gpio1_seH(23);
delay_ms(100);
}
else{
gpio1_seH(23);
}
}
}