CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

APP IO驱动

结构体

app_io_init_t

结构体定义如下:

表 16 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_MODE_NONE(不配置)
  • APP_IO_MODE_INPUT(输入模式)
  • APP_IO_MODE_OUTPUT(输出模式)
  • 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(参数检测)
app_io_pull_t pull

设置IO上拉/下拉/浮空

该参数的取值可以是下列值中的任意一个:

  • APP_IO_NOPULL(浮空)
  • APP_IO_PULLUP(上拉)
  • APP_IO_PULLDOWN(下拉)
  • APP_IO_PULL_MAX(参数检测)
app_io_mux_t mux

设置IO映射功能

该参数的取值可以是下列值中的任意一个:

  • APP_IO_MUX_0(MUX模式0)
  • APP_IO_MUX_1(MUX模式1)
  • APP_IO_MUX_2(MUX模式2)
  • APP_IO_MUX_3(MUX模式3)
  • APP_IO_MUX_4(MUX模式4)
  • APP_IO_MUX_5(MUX模式5)
  • APP_IO_MUX_6(MUX模式6)
  • APP_IO_MUX_7(MUX模式7)
  • APP_IO_MUX_MAX(MUX模式总数,用作参数检测)

详细信息请参考文件:SDK_Folder\drivers\inc\app_io.h

app_io_evt_t

结构体定义如下:

表 17 app_io_evt_t结构体成员
成员 描述 取值

app_io_type_t type

设置IO类型(GPIOA/NORMAL/GPIOB/GPIOC/AON_GPIO/MSIO)

该参数的取值可以是下列值中的任意一个:

  • APP_IO_TYPE_GPIOA(GPIO0 ~ GPIO15)
  • APP_IO_TYPE_GPIOB(GPIO16 ~ GPIO31)
  • APP_IO_TYPE_GPIOC(GPIO32 ~ GPIO33)
  • APP_IO_TYPE_AON
  • APP_IO_TYPE_MSIO
  • APP_IO_TYPE_MAX(参数检测)

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

枚举定义如下:

表 18 app_io_pin_state_t枚举成员
成员 描述

APP_IO_PIN_RESET = 0

IO低电平

APP_IO_PIN_SET = 1

IO高电平

app_io_type_t

枚举定义如下:

表 19 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

枚举定义如下:

表 20 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

枚举定义如下:

表 21 app_io_pull_t枚举成员
成员 描述

APP_IO_NOPULL

浮空

APP_IO_PULLUP

上拉

APP_IO_PULLDOWN

下拉

APP_IO_PULL_MAX

PULL模式总数,用作参数检测

app_io_mux_t

枚举定义如下:

表 22 app_io_mux_t枚举成员
成员 描述

APP_IO_MUX_0~APP_IO_MUX_54

MUX模式0~54,具体功能请参考芯片Datasheet

接口函数

表 23 IO驱动接口函数
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

表 24 app_io_init接口
函数原型

uint16_t app_io_init(app_io_type_t type, app_io_init_t *p_init)

功能说明

初始化IO

输入参数
  • type:IO类型
  • p_init:初始化参数的结构体指针
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_io_deinit

表 25 app_io_deinit接口
函数原型

uint16_t app_io_deinit(app_io_type_t type, uint32_t pin)

功能说明

反初始化IO

输入参数
  • type:IO类型
  • pin:IO引脚
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_io_read_pin

表 26 app_io_read_pin接口
函数原型

app_io_pin_state_t app_io_read_pin(app_io_type_t type, uint32_t pin)

功能说明

读取IO电平

输入参数
  • type:IO类型
  • pin:IO引脚
返回值

详见app_io_pin_state_t枚举

备注

app_io_write_pin

表 27 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输出高低电平

输入参数
  • type:IO类型
  • pin:IO引脚
  • pin_state:输出高/低电平
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_io_toggle_pin

表 28 app_io_toggle_pin接口
函数原型

uint16_t app_io_toggle_pin(app_io_type_t type, uint32_t pin)

功能说明

切换IO电平:

  • 若IO电平为高电平,则调用此函数使能IO输出低电平
  • 若IO电平为低电平,则调用此函数使能IO输出高电平
输入参数
  • type:IO类型
  • pin:IO引脚
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_io_event_register_cb

表 29 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中断模式,并注册回调函数

输入参数
  • type:IO类型
  • pin_init:初始化参数的结构体指针
  • io_evt_cb:IO回调函数,由用户自定义
  • arg:任意指针,用于用户传参
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注
  • 回调函数形式可参照typedef void (*app_io_callback_t)(app_io_evt_t *p_evt)。
  • HAL层已实现中断标志位的清理,用户无需关心中断标志的清理。回调函数根据返回事件类型进行相应的处理即可。

app_io_event_unregister

表 30 app_io_event_unregister接口
函数原型

uint16_t app_io_event_unregister(app_io_type_t type, uint32_t pin)

功能说明

反初始化IO,并注销中断回调函数

输入参数
  • type:IO类型
  • pin:IO引脚
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_io_set_speed

表 31 app_io_set_speed接口
函数原型 uint16_t app_io_set_speed(app_io_type_t type, uint32_t pin, app_io_speed_t speed)
功能说明 设置IO速度
输入参数
  • type:IO类型
  • pin:IO引脚
  • speed:IO速度
返回值 APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义
备注

app_io_set_strength

表 32 app_io_set_strength接口
函数原型 uint16_t app_io_set_strength(app_io_type_t type, uint32_t pin, app_io_strength_t strength)
功能说明 设置IO驱动强度
输入参数
  • type:IO类型
  • pin:IO引脚
  • strength:IO驱动强度
返回值 APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义
备注

app_io_set_intput_type

表 33 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 输入)
输入参数
  • type:IO类型
  • pin:IO引脚
  • input_type:IO输入特性
返回值 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为输入模式,连接方式如图所示:

图 4 GPIO引脚配置及连接

流程图

图 5 GPIO输入输出和电平变换流程

初始化参数

  1. 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
      
  2. 初始化

    下面以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电平:高电平翻转为低电平,低电平翻转为高电平。

测试验证

  1. 测试步骤
    1. 根据示例工程代码连接引脚。
    2. 连接开发板到PC,打开串口调试助手(如GRUart),连接串口,查看日志是否与预期结果一致。
  2. 测试结果

    结果如下所示,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为输入模式,低电平触发中断,即当按键按下,产生低电平输入,触发中断。

流程图

图 6 IO按键输入

初始化参数

  1. 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
    
  2. 中断配置
    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.

扫描关注

打开微信,使用“扫一扫”即可关注。