芯科BG22学习笔记:2-如何添加GPIO输入
实验目的:读取BG22芯片GPIO口的高低电平输入
实验环境:Simplicity Studio V5
实验器材:Wireless Starter Kit Mainboard (BRD4001A Rev A01) + EFR32xG22 2.4 GHz 6 dBm QFN32 Radio Board (BRD4183A)
实验开始:
1. 新建工程,蓝牙工程输入soc empty, 普通MCU工程输入empty c
2. 打开SOFTWARE COMPONENTS,搜索对话框输入button,点击Install,用默认的名字btn0即可
3. 在app.c文件加入头文件
#include "sl_simple_button_instances.h"
4. 在应用程序中添加如下例程:
if (sl_button_get_state(&sl_button_btn0))//如果按键按下 { while (sl_button_get_state(&sl_button_btn0));//等待按键松开 }
5. 如果并不需要按键程序在主程序执行而是在中断中处理,则添加中断服务子程序:
//外部中断子程序 void sl_button_on_change(const sl_button_t *handle) { if(&sl_button_btn0 == handle)//判断是否中断来自btn0 { if (sl_button_get_state(handle) == SL_SIMPLE_BUTTON_PRESSED)//Button 0按键按下 { //sl_bt_external_signal(1); //app_log("Button 0 pushed\r\n"); } else //Button 0按键松开 { //app_log("Button 0 released\r\n"); } } }
6. 如果需要添加新的输入,点击下图中的 Add New Instances 继续添加btn1,btn2 ...
7. 补充说明:
一旦定义了按钮结构,就可以通过传递一个 sl_button_t 实例来调用通用按钮函数,该实例将被重定向到调用该函数的特定类型版本。常用功能包括:
sl_button_init
sl_button_get_state
sl_button_poll_step
sl_button_on_change
其中sl_button_init必须在读取按钮状态之前调用。
按钮驱动程序可以与中断模式、轮询或带去抖动的轮询一起使用。在使用中断模式的情况下,可以由应用程序实现sl_button_on_change 。该函数可以包含响应按钮事件或回调适当功能而执行的功能。在使用去抖动模式进行轮询或轮询的情况下,sl_button_poll_step用于更新状态,需要用户从tick(滴答)函数或类似函数中调用。这些模式可以在实例特定的配置文件中为每个按钮实例配置。
中断和轮询方法都通过调用sl_button_get_state为用户获取按钮状态。
完