APP IO驱动
结构体
app_io_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t pin |
选择IO引脚 |
该参数的取值可以是下列值中的任意一个: APP_IO_PIN_0(PIN0)~ APP_IO_PIN_15(PIN15) |
| app_io_mode_t mode | IO模式配置 |
该参数的取值可以是下列值中的任意一个:
|
| app_io_pull_t pull | 设置IO上拉/下拉/浮空 |
该参数的取值可以是下列值中的任意一个:
|
| app_io_mux_t mux | 设置IO映射功能 |
该参数的取值可以是下列值中的任意一个:
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_io.h。
app_io_evt_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_io_type_t type |
设置IO类型(GPIOA/NORMAL/GPIOB/GPIOC/AON_GPIO/MSIO) |
该参数的取值可以是下列值中的任意一个:
|
| uint32_t pin |
选择IO引脚 |
同app_io_init_t中定义 |
| void *arg |
用户参数指针 |
通过app_io_event_register_cb传入用户参数,中断函数可用 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_io.h。
枚举
app_io_pin_state_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_IO_PIN_RESET = 0 |
IO低电平 |
| APP_IO_PIN_SET = 1 |
IO高电平 |
app_io_type_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_IO_TYPE_GPIOA |
普通IO类型:GPIO0 ~ GPIO15 |
| APP_IO_TYPE_GPIOB |
普通IO类型:GPIO16 ~ GPIO31 |
| APP_IO_TYPE_GPIOC |
普通IO类型:GPIO32 ~ GPIO33,仅适用于GR5526、GR5x25 |
| APP_IO_TYPE_NORMAL |
普通IO类型:GPIO0 ~ GPIO32,仅适用于GR551x |
| APP_IO_TYPE_AON |
具有唤醒功能的IO类型:AON_GPIO0 ~ AON_GPIO7 |
| APP_IO_TYPE_MSIO |
具有模拟输入功能的IO类型:MSIO0 ~ MSIO7 |
| APP_IO_TYPE_MAX |
IO类型总数,用作参数检测 |
app_io_mode_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_IO_MODE_NONE |
不设置模式 |
| APP_IO_MODE_INPUT |
IO输入模式 |
| APP_IO_MODE_OUTPUT |
IO输出模式 |
| APP_IO_MODE_MUX |
外设功能复用模式 |
| APP_IO_MODE_IT_RISING |
中断上升沿触发模式 |
| APP_IO_MODE_IT_FALLING |
中断下降沿触发模式 |
| APP_IO_MODE_IT_BOTH_EDGE |
中断上升下降沿触发模式 |
| APP_IO_MODE_IT_HIGH |
中断高电平触发模式 |
| APP_IO_MODE_IT_LOW |
中断低电平触发模式 |
| APP_IO_MODE_ANALOG |
模拟输入模式 |
| APP_IO_MODE_MAX |
IO模式总数,用作参数检测 |
app_io_pull_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_IO_NOPULL |
浮空 |
| APP_IO_PULLUP |
上拉 |
| APP_IO_PULLDOWN |
下拉 |
| APP_IO_PULL_MAX |
PULL模式总数,用作参数检测 |
app_io_mux_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_IO_MUX_0~APP_IO_MUX_54 |
MUX模式0~54,具体功能请参考芯片Datasheet |
接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
| app_io_init |
Y |
Y |
Y |
Y |
Y |
| app_io_deinit |
Y |
Y |
Y |
Y |
Y |
| app_io_read_pin |
Y |
Y |
Y |
Y |
Y |
| app_io_write_pin |
Y |
Y |
Y |
Y |
Y |
| app_io_toggle_pin |
Y |
Y |
Y |
Y |
Y |
| app_io_event_register_cb |
Y |
Y |
Y |
Y |
Y |
| app_io_event_unregister |
Y |
Y |
Y |
Y |
Y |
| app_io_set_speed | Y |
Y |
Y |
Y |
Y |
| app_io_set_strength | Y |
Y |
Y |
Y |
Y |
| app_io_set_intput_type | Y |
Y |
Y |
Y |
Y |
app_io_init
| 函数原型 | uint16_t app_io_init(app_io_type_t type, app_io_init_t *p_init) |
|---|---|
| 功能说明 | 初始化IO |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_deinit
| 函数原型 | uint16_t app_io_deinit(app_io_type_t type, uint32_t pin) |
|---|---|
| 功能说明 | 反初始化IO |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_read_pin
| 函数原型 | app_io_pin_state_t app_io_read_pin(app_io_type_t type, uint32_t pin) |
|---|---|
| 功能说明 | 读取IO电平 |
| 输入参数 |
|
| 返回值 | |
| 备注 |
app_io_write_pin
| 函数原型 | uint16_t app_io_write_pin(app_io_type_t type, uint32_t pin, app_io_pin_state_t pin_state) |
|---|---|
| 功能说明 | 使能IO输出高低电平 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_toggle_pin
| 函数原型 | uint16_t app_io_toggle_pin(app_io_type_t type, uint32_t pin) |
|---|---|
| 功能说明 | 切换IO电平:
|
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_event_register_cb
| 函数原型 | uint16_t app_io_event_register_cb(app_io_type_t type, app_io_init_t *p_init, app_io_callback_t io_evt_cb, void *arg) |
|---|---|
| 功能说明 | 初始化IO,设置IO中断模式,并注册回调函数 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
|
app_io_event_unregister
| 函数原型 | uint16_t app_io_event_unregister(app_io_type_t type, uint32_t pin) |
|---|---|
| 功能说明 | 反初始化IO,并注销中断回调函数 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_set_speed
| 函数原型 | uint16_t app_io_set_speed(app_io_type_t type, uint32_t pin, app_io_speed_t speed) |
|---|---|
| 功能说明 | 设置IO速度 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_set_strength
| 函数原型 | uint16_t app_io_set_strength(app_io_type_t type, uint32_t pin, app_io_strength_t strength) |
|---|---|
| 功能说明 | 设置IO驱动强度 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_io_set_intput_type
| 函数原型 | uint16_t app_io_set_intput_type(app_io_type_t type, uint32_t pin, app_io_input_type_t input_type) |
|---|---|
| 功能说明 | 设置IO输入特性(CMOS 输入或Schmitt 输入) |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
示例工程
GPIO
本示例工程将IO复用成GPIO,实现GPIO输入输出和电平变换,工程路径:SDK_Folder\projects\peripheral\gpio\app_gpio。
简介
示例工程配置4个GPIO的PIN脚,PIN0和PIN1为输出模式,PIN2和PIN3为输入模式,连接方式如图所示:
流程图
初始化参数
- IO引脚定义
#define APP_GPIO_PIN0 APP_IO_PIN_12 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_GPIOB #define APP_GPIO_PIN1 APP_IO_PIN_0 /* MSIO0 */ #define APP_GPIO_PIN1_TYPE APP_IO_TYPE_MSIO #define APP_GPIO_PIN2 APP_IO_PIN_7 /* AON7 */ #define APP_GPIO_PIN2_TYPE APP_IO_TYPE_AON #define APP_GPIO_PIN3 APP_IO_PIN_1 /* MSIO1 */ #define APP_GPIO_PIN3_TYPE APP_IO_TYPE_MSIO为兼容GR551x SDK V1.7.0及之前的版本,GR551x保留APP_IO_TYPE_NORMAL参数,即GPIO28引脚配置有两种方式:
-
方式一:
#define APP_GPIO_PIN0 APP_IO_PIN_12 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_GPIOB -
方式二:
#define APP_GPIO_PIN0 APP_IO_PIN_28 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_NORMAL
-
- 初始化
下面以GPIO28为例介绍IO初始化。
app_io_init_t io_init = APP_IO_DEFAULT_CONFIG; io_init.pull = APP_IO_PULLUP; io_init.mode = APP_IO_MODE_OUTPUT; io_init.pin = APP_GPIO_PIN0; io_init.mux = APP_IO_MUX; ret = app_io_init(APP_GPIO_PIN0_TYPE, &io_init);- pull:上/下拉电阻配置,选择APP_IO_PULLUP(上拉)。
- mode:I/O。
- pin:IO引脚选择。
- mux:引脚映射配置,具体选择可参考芯片Datasheet中Pin Mux配置表。示例中不同芯片复用模式的配置,请参考SDK_Folder\platform\boards\board_SK.h。
提示:具体配置可参考app_io_init_t结构体描述。
重要函数
-
初始化IO配置
ret = app_io_init(APP_GPIO_PIN0_TYPE, &io_init); -
设置IO输出电平
app_io_write_pin(APP_GPIO_PIN0_TYPE, APP_GPIO_PIN0, APP_IO_PIN_SET);APP_IO_PIN_SET表示高电平;APP_IO_PIN_RESET表示低电平。
-
读取IO电平
pin_val = app_io_read_pin(APP_GPIO_PIN2_TYPE, APP_GPIO_PIN2)pin_val为0表示低电平,为1表示高电平。
-
电平翻转
app_io_toggle_pin(APP_GPIO_PIN1_TYPE, APP_GPIO_PIN1)翻转IO电平:高电平翻转为低电平,低电平翻转为高电平。
测试验证
- 测试步骤
- 根据示例工程代码连接引脚。
- 连接开发板到PC,打开串口调试助手(如GRUart),连接串口,查看日志是否与预期结果一致。
- 测试结果
结果如下所示,GPIO的电平按照预期进行变化。
APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0
GPIO Interrupt
示例工程实现按键输入功能,工程路径:SDK_Folder\projects\peripheral\gpio\app_gpio。
简介
配置GPIO为输入模式,低电平触发中断,即当按键按下,产生低电平输入,触发中断。
流程图
初始化参数
- IO引脚定义:
定义key0和key1按键输入引脚。
#define APP_GPIO_KEY0_PIN APP_KEY_UP_PIN #define APP_GPIO_KEY0_TYPE APP_KEY_UP_IO_TYPE #define APP_GPIO_KEY1_PIN APP_KEY_OK_PIN #define APP_GPIO_KEY1_TYPE APP_KEY_OK_IO_TYPE具体引脚定义,参见board_SK.h。GR5526引脚定义如下,key0按键输入引脚为AON_GPIO_1,key1按键输入为AON_GPIO_0。
/*******KEY DRIVER IO CONFIG********************/ #define APP_KEY_UP_IO_TYPE APP_IO_TYPE_AON #define APP_KEY_DOWN_IO_TYPE APP_IO_TYPE_AON #define APP_KEY_UP_PIN APP_IO_PIN_1 #define APP_KEY_DOWN_PIN APP_IO_PIN_0 - 中断配置
app_io_init_t io_init = APP_IO_DEFAULT_CONFIG; io_init.pull = APP_IO_PULLUP; io_init.mode = APP_IO_MODE_IT_FALLING; io_init.pin = APP_GPIO_KEY0_PIN; io_init.mux = APP_IO_MUX; ret = app_io_event_register_cb(APP_GPIO_KEY0_TYPE,&io_init, app_io_event_handler, "KEY0 pin interrupt");详细GPIO配置参数,请参考初始化参数。其中,mode选择APP_IO_MODE_IT_FALLING(下降沿触发)。
重要函数
ret = app_io_event_register_cb(APP_GPIO_KEY0_TYPE,&io_init, app_io_event_handler,
"KEY0 pin interrupt");
调用app_io_event_register_cb接口实现GPIO初始化和中断注册,支持参数传入。
测试验证
连接开发板到PC端,打开串口调试助手,连接串口。分别按下key0和key1,串口打印如下。
需根据原理图了解key0和key1对应的物理按键。
KEY0 pin interrupt
KEY0 pressed.
KEY1 pin interrupt
KEY1 pressed.