MCXA156开发板为了便于用户体验和测试其功能,配备了相应的接口和外设,见图1所示。
图1 接口及外设配置
为此,就从GPIO口的使用来开始它的探索与使用之旅。
GPIO口有两大基本功能,即输入与输出功能。板载的RGB_LED和按键恰为GPIO口的测试提供了便利,其电路见图2所示。
图2 RGB及按键电路
用按键来控制LED不外乎2种方式,即查询方式和中断方式。
- 查询方式
以查询方式进行控制的思路为:
将LED和按键所使用的引脚分别配置为输出和输入工作模式,然后通过按键的状态来控制LED进行状态的翻转变化。
以查询方式进行控制的主程序为:
int main(void)
{
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
while (1)
{
if ((GPIO_PinRead(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN))==0)
{
GPIO_PortToggle(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
while (((GPIO_PinRead(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN))==0));
}
}
}
2.中断方式
以中断方式进行控制的思路为:
将LED和按键所使用的引脚分别配置为输出和输入工作模式,并启动中断处理。当按下按键时,触发中断处理以使标志变量等于真,从在主程序中使LED进行状态翻转。
以中断方式进行控制的主程序为:
int main(void)
{
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
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);
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
while (1)
{
if (g_ButtonPress)
{
GPIO_PortToggle(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
g_ButtonPress = false;
}
}
}
中断处理的函数为:
void BOARD_SW_IRQ_HANDLER(void)
{
GPIO_GpioClearInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);
g_ButtonPress = true;
SDK_ISR_EXIT_BARRIER;
}
这样我们就以2种方式实现了按键控制LED的功能,也为后续的GPIO口使用提供了可靠的支持。
|