LPC2114芯片的外部中断0使用哪个IO?如何将响应的IO口配置为外部中断0?
1条回答
辰似五味 2022-11-08 14:37关注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); } } }解决 无用评论 打赏 举报