GPIO口未经中断触发就进入中断服务程序



//使能相关片内外设,并进行基本的配置

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

//配置PB4为输入(此步必须要,而且要用下面的函数初始化)

GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_4);

//配置PB4中断触发类型为高电平触发

GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_4,GPIO_HIGH_LEVEL);

//使能PB4引脚中断

GPIOPinIntEnable(GPIO_PORTB_BASE, GPIO_PIN_4);

//使能片内外设的总中断

IntEnable(INT_GPIOB);

//使能处理器总中断

IntMasterEnable();

//注册中断处理函数

GPIOPortIntRegister(GPIO_PORTB_BASE, DrawImage);

上面是我将PB4引脚设置为高电平触发的程序,我用MDK调试,程序运行时就直接进入中断服务程序DrawImage,此时我没有启动触发信号(触发信号来至于触摸按键板,触摸按键时其中断线会发出一个高电平信号,此信号线与MCU的PB4引脚相连)。MCU为LM3S9B92,请问大虾这是怎么回事

  • 第一点,在触摸按键没有触摸动作的情况下,用万用表测量PB4脚的电平高低,确认该引脚的初始状态;

    第二点,试一试改成低电平触发中断,并将触摸发送信号改为低电平信号,可考虑加上拉电阻。

  • 我直接将触摸按键板与主板断开,让PB4悬空,发现设置为高电平触发方式时程序一运行就直接进入中断服务程序了,此时PB4的电压为0.17V。当设置为低电平触发方式时,程序运行时不会自动进入中断服务程序,但用万用表探针接触一下PB4时程序就进入中断服务程序,此时测得PB4电压为0.16V,后改为上升沿触发、下降沿触发,边沿触发,情况和之前的下降沿一样,这是不是我上面的程序有问题所引起的啊,现在已经排除触摸按键板的问题了。

  • 我直接将触摸按键板与主板断开,让PB4悬空,发现设置为高电平触发方式时程序一运行就直接进入中断服务程序了,此时PB4的电压为0.17V。当设置为低电平触发方式时,程序运行时不会自动进入中断服务程序,但用万用表探针接触一下PB4时程序就进入中断服务程序,此时测得PB4电压为0.16V,后改为上升沿触发、下降沿触发,边沿触发,情况和之前的下降沿一样,这是不是我上面的程序有问题所引起的啊,现在已经排除触摸按键板的问题了。

  • 问题解决了,是由于触控IC上电复位时触摸按键的灵敏度是最高的,用示波器观察发现中断引脚不时有个高电平脉冲,就是这个脉冲导致程序不管设为那种触发方式都会进入中断服务函数,将触控IC的灵敏度配置寄存器的灵敏度配置降低后故障排除。