4.1 原理图分析
查看EK-RA6M4的原理图,如下图所示,该开发板上有2个用户按键。
根据原理图可知,这2个按键的控制逻辑为:
按键 S1 S2 引脚 P005 P006 电平 按键按下低电平、按键释放高电平 按键按下低电平、按键释放高电平4.2 中断配置
首先,在FSP配置中将按键所用的两个GPIO口配置成中断模式。
在这里,我们可以查找到 P005 、P006的中断号分别为 IRQ10 和 IRQ11;接着选择 Stacks , 点击 “New Stack” -> “Input” -> “External IRQ(r_icu)” 添加外部中断协议栈。
接下来配置相关的按键中断,并重新生成代码。
通过 Name 字段可以修改按键中断的名称为 g_key1_irq,它将在IDE自动生成的文件 ra_gen/common_data.c/h 中定义按键操作相关的变量; 通过 Channel 字段可以修改按键的中断号,这里设置为10,下面的 Pins 将自动选择 P005 这个引脚; 通过 Trigger 字段可以修改中断的触发方式为下降沿触发; 通过 Callback 字段设置按键的中断回调函数,它将配置在 g_key1_irq_cfg 变量中,该函数需要我们自己实现; 另外,我们也可以在这里修改按键中断的优先级;4.3 源码修改
创建按键操作相关的头文件 src/bsp_key.h 如下:
复制#ifndef BSP_KEY_H_ #define BSP_KEY_H_ #define USER_KEY1_IRQ_NUMBER 10 #define USER_KEY2_IRQ_NUMBER 11 extern int key_init(void); extern void icu_deinit(void); #endif /* BSP_KEY_H_ */创建按键操作相关的c文件 src/bsp_key.c 如下:
复制#include修改 src/hal_entry.c 源文件,在里面添加按键初始化代码并修改蓝色Led灯为系统运行的心跳灯状态。
复制… … #include “bsp_key.h” … … void hal_entry(void) { … … key_init(); while (1) { turn_led(BSP_LEDBLUE, BSP_LEDON); delay_ms(200); turn_led(BSP_LEDBLUE, BSP_LEDOFF); delay_ms(200); turn_led(BSP_LEDBLUE, BSP_LEDON); delay_ms(200); turn_led(BSP_LEDBLUE, BSP_LEDOFF); delay_ms(200); turn_led(BSP_LEDBLUE, BSP_LEDON); delay_ms(500); turn_led(BSP_LEDBLUE, BSP_LEDOFF); delay_ms(1000); } }4.4 编译运行
代码修改完成后,在开发板上编译运行,蓝色Led将作为系统状态心跳灯,而按下S1、S2将点亮红色和绿色Led,再次按下则将灭掉Led。
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:基于单片机的按键中断控制-单片机实现按键控制 https://www.yhzz.com.cn/a/5887.html