请教C3200 GPIO按键进不了中断问题
请教下,为什么GPIO中断进不了?只要按下C3200-LAUNCHXL上的SW3按键,程序就停止运行。
代码如下:
void PinMuxConfig(void)
{
//
// Enable Peripheral Clocks
//
MAP_PRCMPeripheralClkEnable(PRCM_UARTA0, PRCM_RUN_MODE_CLK);
MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1, PRCM_RUN_MODE_CLK);
//
// Configure PIN_55 for UART0 UART0_TX
//
MAP_PinTypeUART(PIN_55, PIN_MODE_3);
//
// Configure PIN_57 for UART0 UART0_RX
//
MAP_PinTypeUART(PIN_57, PIN_MODE_3);
//
// Configure PIN_04 for GPIO Input
//
MAP_PinTypeGPIO(PIN_04, PIN_MODE_0, false);
MAP_GPIODirModeSet(GPIOA1_BASE, 0x20, GPIO_DIR_MODE_IN);
}
void GpioIntHandle(void){
unsigned long ulPinState = GPIOIntStatus(GPIOA1_BASE,1);
GPIOIntClear(GPIOA1_BASE,GPIO_PIN_5);
if(ulPinState & GPIO_PIN_3)
{
Message("Interrupt on pin 3\n\r");
}
else if(ulPinState & GPIO_PIN_4)
{
Message("Interrupt on pin 4\n\r");
}
else if(ulPinState & GPIO_PIN_5) {
Message("Interrupt on pin 5\n\r");
}
}
static void InterruptInt(void){
GPIOIntTypeSet(GPIOA1_BASE,GPIO_PIN_5,GPIO_HIGH_LEVEL);
GPIOIntRegister(GPIOA1_BASE, GpioIntHandle);
//
// Enable Interrupt
//
GPIOIntClear(GPIOA1_BASE,GPIO_PIN_5);
IntPendClear(INT_GPIOA1);
IntEnable(INT_GPIOA1);
GPIOIntEnable(GPIOA1_BASE,GPIO_INT_PIN_5);
}
void main(void) {
BoardInit();
PinMuxConfig();
Message("InterruptInt\r\n");
InterruptInt();
InitTerm();
//
// Clearing the Terminal.
//
ClearTerm();
Message("\r\nLoop start \r\n");
while(1) {
UtilsDelay(26666666);
Report("hello world\r\n");
}
}
我把这段程序放到了uart_demo中去运行,可正常进入中断。
可能是配置出了问题,求指教。
1.这个程序和uart_demo中Main函数初始化有什么不同,确认一下PinMUX对引脚的配置是否正确和uart_demo中的引脚配置是否一致。
2.void GpioIntHandle(void)打个断点,看看按键后会不会进入回调函数内部去?
断点进不去。
按下按键后,主循环停止,不再打印“hello world”。