【Follow me第二季第3期】入门任务:2、按键控制LED测试
[复制链接]
1、测试介绍
上次测试搭建入门任务VsCode、FSP Smart Configurator、CMAKE、GNU 开发环境搭建成功后,本次测试使用按键控制LED的开关。测试实现GPIO的中断输入。
2、设置过程
首先,使用FSP Smart Configurator创建项目FSP_BUT_LED。
完成后使用,Stacks->New Stack增加IRQ设置
关键参数:Name g_external_irq9,Channel 9,Callback user_irq_callback,三个关键设置。
因为P004使用按键使用IRQ9设置。
完成后生成项目
3、程序代码
只要程序
#define APP_ERR_TRAP() __asm("BKPT #0\n")
volatile bool g_sw_press = false;
volatile bool g_led_sw = false;
设置两个变量用来存储,按键状态和过程控制,在void hal_entry (void)中初始化中断设置。
fsp_err_t err = FSP_SUCCESS;
err = R_ICU_ExternalIrqOpen(&g_external_irq9_ctrl,&g_external_irq9_cfg);
if(FSP_SUCCESS != err)
{
APP_ERR_TRAP();
}
err = R_ICU_ExternalIrqEnable(&g_external_irq9_ctrl);
if(FSP_SUCCESS != err)
{
APP_ERR_TRAP();
}
在hal_entry()外增加Callback函数,
void user_irq_callback(external_irq_callback_args_t *p_args)
{
if(9== p_args->channel)
{
g_sw_press = true;
}
}
只要在hal_entry()循环中检测按键可以控制LED
uint32_t pin0 = leds.p_leds[0];
R_BSP_PinWrite((bsp_io_port_pin_t) pin0, pin_level);
uint32_t pin1 = leds.p_leds[1];
R_BSP_PinWrite((bsp_io_port_pin_t) pin1, pin_level);
if(g_sw_press)
{
g_led_sw = !g_led_sw;
uint32_t pin2 = leds.p_leds[2];
if(g_led_sw)
{
R_BSP_PinWrite((bsp_io_port_pin_t) pin2, BSP_IO_LEVEL_HIGH);
}
else
{
R_BSP_PinWrite((bsp_io_port_pin_t) pin2, BSP_IO_LEVEL_LOW);
}
g_sw_press = false;
}
debug运行项目,通过按键可以控制RED LED的开关。
4、测试过程
程序中断
LED关闭
|