具体硬件如下叙述:
我用 TM4C123AH6PMI的PD7管脚与一个按键相连,PD7又连了一个上拉电阻,和其他的按键管脚接法相同,这里的PD口我只用到了GPIO_PIN_7,其他的0~6都悬空没用上。
软件如下:在keydriver.c的初始化时配置如下
#define PB_MASK ( GPIO_PIN_0 | GPIO_PIN_1)
#define PD_MASK ( GPIO_PIN_7 )
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIODirModeSet(GPIO_PORTB_BASE, PB_MASK,GPIO_DIR_MODE_IN);
GPIODirModeSet(GPIO_PORTD_BASE, PD_MASK,GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, PB_MASK,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
GPIOPadConfigSet(GPIO_PORTD_BASE, PD_MASK,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
GPIOIntTypeSet(GPIO_PORTB_BASE, PB_MASK, GPIO_FALLING_EDGE);
GPIOIntTypeSet(GPIO_PORTD_BASE, PD_MASK, GPIO_FALLING_EDGE);
GPIOPinIntEnable(GPIO_PORTD_BASE, PD_MASK);
GPIOPinIntEnable(GPIO_PORTB_BASE, PB_MASK);
IntEnable( INT_GPIOB );
IntEnable( INT_GPIOD );
IntMasterEnable( );
GPIOPinIntClear(GPIO_PORTD_BASE,PD_MASK);
GPIOPinIntClear(GPIO_PORTB_BASE,PB_MASK);
相应的中断处理函数:
void GPIOB_ISR (void){
switch (GPIOPinIntStatus(GPIO_PORTB_BASE, true)){
case GPIO_PIN_0:{
delay(200000);if(GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_0)) break; //¾¹ý³¤Ê±¼äÑÓʱÈç¹ûΪµÍµçƽ£¬²ÅÉè±ê־λ
else {KeyValue = 16; isr_evt_set(KEY_FLAG, TIDKeyProcess); break;}
}
case GPIO_PIN_1:{
.....
}
default : break;
}
GPIOPinIntClear(GPIO_PORTB_BASE,PB_MASK);
}
void GPIOD_ISR (void){
switch (GPIOPinIntStatus(GPIO_PORTD_BASE, true)){
case GPIO_PIN_7:{
delay(200000);if(GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7)) break; //¾¹ý³¤Ê±¼äÑÓʱÈç¹ûΪµÍµçƽ£¬²ÅÉè±ê־λ
else {KeyValue = 10; isr_evt_set(KEY_FLAG, TIDKeyProcess); break;}
}
default : break;
}
GPIOPinIntClear(GPIO_PORTD_BASE,PD_MASK);
}
我已经把GPIOB_ISR,GPIOD_ISR放到了启动代码Startup.S相应的位置如下:
...
IMPORT GPIOB_ISR
DCD GPIOB_ISR ; GPIO Port B
IMPORT GPIOC_ISR
DCD GPIOC_ISR ; GPIO Port C
IMPORT GPIOD_ISR
DCD GPIOD_ISR ; GPIO Port D
...
问题就来了:
我按PB对应的按键就有中断响应,并执行程序,可按PD7的一点反应的都没有,本人还用示波器查看PD7口的电平跳动,
结果是正常跳动的,按下是从高变低的,松开由低变高,电压3.3v,可为什么没有进入到中断处理呢,我有两种怀疑:
1)PD口的其他脚悬空对PD7的使用有影响,或者不使用的PD管脚口不能悬空,或许PD7的管脚配置和其他的有所不同
2) PD7口的管脚复用功能对其的影响,可我没有使用PD7口的其他功能呢,NMI功能会不会对PD7口有限制的因素呢,因为这是个很特殊的功能
PD7口复用功能 : NMI WT5CCP1 PhB0 M0FAULT1 U2Tx
可该PD7口在LM3S818用其他的的管脚代替都能响应呢,可在这个M4芯片的PD7口就不行了,同样配置的其他管脚都能正常运行,这是为何呢?由于本人的学识尚浅,以上描述有所漏洞,未能参透其中的困惑,还请高手更正与指点呢,本人在此谢谢了!!