【目的】体验MCXA153的GPIO输入功能。
【实验步骤】
官方的SDK已经提供了按键中断的示例,这里直接导入他的工程,来体验。
1、点击导入SDK示例:

2、选择工程存放在的目录,选择driver_examples下面的gpio下的gpio_input_interrupt示例。

3、工程目录source下面的gpio_input_interrupt.c为用户主函数的文件。

4、函数中,先用宏对对应的PORT、PIN、中断进行了重新定义:
/******************************************************************************* * Definitions ******************************************************************************/ #define BOARD_LED_GPIO BOARD_LED_RED_GPIO #define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN #define BOARD_SW_GPIO BOARD_SW2_GPIO #define BOARD_SW_GPIO_PIN BOARD_SW2_GPIO_PIN #define BOARD_SW_NAME BOARD_SW2_NAME #define BOARD_SW_IRQ BOARD_SW2_IRQ #define BOARD_SW_IRQ_HANDLER BOARD_SW2_IRQ_HANDLER
5、再定义了一个按健的标志位:
/* Whether the SW button is pressed */ volatile bool g_ButtonPress = false;
6、用户的中函数实现:
/*!
* @brief Interrupt service fuction of switch.
*
* This function toggles the LED
*/
void BOARD_SW_IRQ_HANDLER(void)
{
/* Clear external interrupt flag. */
GPIO_GpioClearInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);
/* Change state of button. */
g_ButtonPress = true;
SDK_ISR_EXIT_BARRIER;
}在中断回调中,先清除产生的标志位,然后把标志志为真。
7、main的代码如下:
/*!
* @brief Main function
*/
int main(void)
{
/* Define the init structure for the input switch pin */
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};
/* Define the init structure for the output LED pin */
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
CLOCK_EnableClock(kCLOCK_GateGPIO3);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
/* Print a note to terminal. */
PRINTF("\r\n GPIO Driver example\r\n");
PRINTF("\r\n Press %s to turn on/off a LED \r\n", BOARD_SW_NAME);
/* Init input switch GPIO. */
GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
/* Init output LED GPIO. */
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
while (1)
{
if (g_ButtonPress)
{
PRINTF(" %s is pressed \r\n", BOARD_SW_NAME);
/* Toggle LED. */
GPIO_PortToggle(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
/* Reset state of button. */
g_ButtonPress = false;
}
}
}主函数中,先定义了两个gpio结构体,一个为LED灯,一个为按键,分别定义为输出与输入。然后执行了板级的Init。
GPIO_SetPinInterruptConfig配置按键为下拉产生中断。
在while循环中,判断按键的标志,如果有按键按下,则进行LED的反转。
【实现效果】
按下按键后,在串口终端中提示按下,同时翻了LED灯。
GPIO Driver example
Press SW2 to turn on/off a LED
SW2 is pressed
SW2 is pressed
SW2 is pressed
SW2 is pressed
SW2 is pressed
我要赚赏金
