51822代码篇4
来源:互联网 发布:演唱会订票软件 编辑:程序博客网 时间:2024/06/01 10:51
51822的按键,在代码里使用了GPIOE的sense中断的触发方式,下面函数开辟了GPIOE所需的空间
static void gpiote_init(void)
{
APP_GPIOTE_INIT(APP_GPIOTE_MAX_USERS);
}
其实就是开辟了一个结构体,因为APP_GPIOTE_MAX_USERS被设为1
typedef struct
{
uint32_t pins_mask; /**< Mask defining which pins user wants to monitor. */
uint32_t pins_low_to_high_mask; /**< Mask defining which pins will generate events to this user when toggling low->high. */
uint32_t pins_high_to_low_mask; /**< Mask defining which pins will generate events to this user when toggling high->low. */
uint32_t sense_high_pins; /**< Mask defining which pins are configured to generate GPIOTE interrupt on transition to high level. */
app_gpiote_event_handler_t event_handler; /**< Pointer to function to be executed when an event occurs. */
} gpiote_user_t;
在这个结构体里,将会记录所用到的pin脚,和他们的状态,以及一个在gpioe中断里面会调用执行的函数。
在按键初始化函数里面,将会配置相应的io口为输入,将按键信息注册到上面的gpiote_user_t 结构体里,
为按键创建timer任务。
static void buttons_init(void)
{
static app_button_cfg_t buttons[] =
{
{SIGNAL_ALERT_BUTTON, false, BUTTON_PULL, button_event_handler},
{STOP_ALERTING_BUTTON, false, BUTTON_PULL, button_event_handler}
};
APP_BUTTON_INIT(buttons, sizeof(buttons) / sizeof(buttons[0]), BUTTON_DETECTION_DELAY, false);
}
在botton使能函数里,将会对gpioe的sense脚进行配置
uint32_t app_button_enable(void)
{
if (mp_buttons == NULL)
{
return NRF_ERROR_INVALID_STATE;
}
return app_gpiote_user_enable(m_gpiote_user_id);
}
所以整个的流程是:
1. 开辟GPIOE空间
2. 根据按键数组buttons[ ] 配置io为输入,注册gpioe的状态结构体,创建按键的timer任务
3. 在app_button_enable函数里配置gpioe寄存器
4. 当有按键按下,首先进入gpioe的中间函数进行判断。
5. 在gpioe中断里开始按键的timer任务
6. 在按键timer任务函数里调用button_event_handler
整个按键的实现代码跳转的比较多,在代码里通过记录按键的初始状态,来判断按键是按下还是
抬起,而不是像比较通用的以知高低电平来判断,这样做法通用性更好,但也耗费了代码量。
- 51822代码篇4
- 51822代码篇1
- 51822代码篇2
- 51822代码篇3
- 代码4
- 整洁代码之道 [4] - 完结篇
- 第十七篇:计算代码行数练习代码
- Gerrit使用篇-提交代码,合并代码
- 新手C#代码简洁性—代码篇
- Duwamish代码分析篇
- Duwamish代码分析篇
- Duwamish -- 代码分析篇
- Duwamish代码分析篇
- Duwamish代码分析篇
- 代码优化篇
- java线程代码篇
- 发篇代码测试
- NSLayoutConstraint代码篇
- 线程与网络编程(第五节:UDP的扩展与双工通信)
- POSIX---linux多线程编程基础总结
- asp.net执行cmd命令
- 意念控制飞行器
- View的事件分发流程
- 51822代码篇4
- 启动mongodb数据库服务命令
- Keil(MDK-ARM)系列教程(三)_工程目标选项配置(Ⅰ)
- iOS 百度地图使用详解
- python自动化环境搭建
- 阿里云UbuntuServer版本升级操作尝试
- PHP之——安装配置Xdebug模块详解
- Java中的hashMap
- Mac下搭建Android studio+genymotion