Hello,
I have this code in order to print a message when the SW3 is pressed but enter in the IF conditional and not print the message and it does not go back into the loop.
I'm using McuExpresso and SDK2.5, the gpios are initialized from pin_mux.c and worsk fine with the numbers and letters in the 7 segment led display, but not the interrupt.
Should I initialize the interrupt also in pin_mux.c, instance of the source file? (as it's in the examples)
/* Init input switch GPIO.*/
#if (defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
#else
PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
#endif
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
Best regards
已解决! 转到解答。
Hi Javier,
I checked both your main and pinmux files, and I noticed that you don't set SW3 completely. When I tried your code on my side, I saw that you have a function at pinmux.c that you never use called "BOARD_InitButtonsPins" where you can see the configuration for SW3; based on this observation I just added this function inside your main function and with this I was able to call the SW3 interruption without any problem.
int main(void) {
/* Define the init structure for the input switch pin */
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput, 0,
};
/* Init board hardware. */
BOARD_InitBootPins();
/**I added your function here!******************************************************/
BOARD_InitButtonsPins();
/*********************************************************************************/
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
/* Init FSL debug console. */
BOARD_InitDebugConsole();
PRINTF("Starting program!\n");
/* Init input switch GPIO.*/
#if (defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
#else
PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
#endif
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
while(1)
{
if(g_ButtonPress)
{
//for(int i = 0; i<8;i++)
//{
PRINTF("button pressed");
//GPIO_PortToggle((void*)base[i], letter[4][i] << pin[i]);
//PRINTF("Base %d, Pin %d\n",base[i],pin[i]);
//delay();
/* Reset state of button. */
g_ButtonPress = false;
//}
//for (int i=0; i<8; i++){led[i] = number[4][i];}
}
}
}
I hope this can help you.
Best Regards,
Ricardo Delsordo
Hi Javier,
I checked both your main and pinmux files, and I noticed that you don't set SW3 completely. When I tried your code on my side, I saw that you have a function at pinmux.c that you never use called "BOARD_InitButtonsPins" where you can see the configuration for SW3; based on this observation I just added this function inside your main function and with this I was able to call the SW3 interruption without any problem.
int main(void) {
/* Define the init structure for the input switch pin */
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput, 0,
};
/* Init board hardware. */
BOARD_InitBootPins();
/**I added your function here!******************************************************/
BOARD_InitButtonsPins();
/*********************************************************************************/
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
/* Init FSL debug console. */
BOARD_InitDebugConsole();
PRINTF("Starting program!\n");
/* Init input switch GPIO.*/
#if (defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
#else
PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
#endif
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
while(1)
{
if(g_ButtonPress)
{
//for(int i = 0; i<8;i++)
//{
PRINTF("button pressed");
//GPIO_PortToggle((void*)base[i], letter[4][i] << pin[i]);
//PRINTF("Base %d, Pin %d\n",base[i],pin[i]);
//delay();
/* Reset state of button. */
g_ButtonPress = false;
//}
//for (int i=0; i<8; i++){led[i] = number[4][i];}
}
}
}
I hope this can help you.
Best Regards,
Ricardo Delsordo