前一篇帖子用PinRead来读取按键的状态,
R_IOPORT_PinRead(&g_ioport_ctrl,BSP_IO_PORT_00_PIN_04, &Pin_P004);
这个方法,实时性不是很高,所以如果想实现高效的按键检测,需要引入外部中断检测来实现。
配置按键的中断
1、按下图创建两个中断:
2、按下图配置中断:
配置好后同步工程
3、hal_entry函数如下:
bsp_io_level_t button2_status = BSP_IO_LEVEL_LOW;
bsp_io_level_t button3_status = BSP_IO_LEVEL_LOW;
void button1_callback(external_irq_callback_args_t *p_args)
{
(void) p_args;
R_IOPORT_PinWrite(&g_ioport_ctrl, LED_Red, button2_status);
button2_status =~button2_status;
}
void button2_callback(external_irq_callback_args_t *p_args)
{
(void) p_args;
R_IOPORT_PinWrite(&g_ioport_ctrl, LED_Bule, button3_status);
button3_status =~button3_status;
}
void hal_entry(void)
{
LED_Init();
R_ICU_ExternalIrqOpen(button1.p_ctrl,button1.p_cfg);
R_ICU_ExternalIrqEnable(button1.p_ctrl);
R_ICU_ExternalIrqOpen(button2.p_ctrl, button2.p_cfg);
R_ICU_ExternalIrqEnable(button2.p_ctrl);
while(1)
{
R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
}
上传开发板后,按下sw2 或者sw3,就可以很灵敏的控制红灯跟蓝灯的亮与来。
按键
|