kryssic 2022-11-05 22:42 采纳率: 0%
浏览 23

关于#嵌入式硬件#的问题:如何将响应的IO口配置为外部中断0(语言-c语言)

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);
            }
        }
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月5日