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

APP COMP驱动

结构体

app_comp_params_t

结构体定义如下:

表 311 app_comp_params_t结构体成员
成员 描述 取值

app_comp_pin_cfg_t pin_cfg

对COMP模拟输入引脚input和模拟参考源引脚Vref进行配置

参考app_comp_pin_t结构体

comp_init_t init

COMP需要的初始化配置

参考comp_init_t结构体

comp_env_t comp_env

仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置

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

app_comp_pin_t

结构体定义如下:

表 312 app_comp_pin_t结构体成员
成员 描述 取值

app_io_type_t type

IO类型

可配置类型:

APP_IO_TYPE_MSIO

app_io_mux_t mux

设置IO映射功能

APP_IO_MUX

uint32_t pin

IO引脚

  • GR551x取值选项:

    APP_IO_PIN0~ APP_IO_PIN4

  • GR5526/GR5x25/GR533x/GR5405取值选项:

    APP_IO_PIN0~ APP_IO_PIN7

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

comp_init_t

结构体定义如下:

表 313 comp_init_t结构体成员
成员 描述 取值

uint32_t input_source

COMP输入引脚

GR551x取值选项:

  • COMP_INPUT_SRC_IO0
  • COMP_INPUT_SRC_IO1
  • COMP_INPUT_SRC_IO2
  • COMP_INPUT_SRC_IO3
  • COMP_INPUT_SRC_IO4

对应引脚为MSIO0 ~ MSIO4

GR5526/GR5x25/GR533x/GR5405取值选项:

  • COMP_INPUT_SRC_IO0
  • COMP_INPUT_SRC_IO1
  • COMP_INPUT_SRC_IO2
  • COMP_INPUT_SRC_IO3
  • COMP_INPUT_SRC_IO4
  • COMP_INPUT_SRC_IO5
  • COMP_INPUT_SRC_IO6
  • COMP_INPUT_SRC_IO7
  • COMP_INPUT_SRC_VBAT
  • COMP_INPUT_SRC_VREF

对应引脚为MSIO0 ~ MSIO7

uint32_t ref_source

COMP参考源

GR551x取值选项:

  • COMP_REF_SRC_IO0
  • COMP_REF_SRC_IO1
  • COMP_REF_SRC_IO2
  • COMP_REF_SRC_IO3
  • COMP_REF_SRC_IO4
  • COMP_REF_SRC_VBAT(电池电压)
  • COMP_REF_SRC_VREF(芯片内部参考源)

GR5526/GR5x25/GR533x/GR5405取值选项:

  • COMP_REF_SRC_IO0

  • COMP_REF_SRC_IO1

  • COMP_REF_SRC_IO2

  • COMP_REF_SRC_IO3

  • COMP_REF_SRC_IO4

  • COMP_REF_SRC_IO5

  • COMP_REF_SRC_IO6

  • COMP_REF_SRC_IO7

  • COMP_REF_SRC_VBAT(电池)

  • COMP_REF_SRC_VREF(内部参考)

uint32_t ref_value

COMP参考输入电压值

GR551x取值选项:

  • 外部参考源档位:无
  • 电池参考源档位:0 ~ 7
  • 内部参考源档位:0 ~ 63

GR5526/GR5x25/GR533x/GR5405取值选项:

  • 外部参考源档位:无
  • 电池参考源档位:0 ~ 7
  • 内部参考源档位:0 ~ 255

说明:

参考源为内部参考时,实际参考电压:GR551x为30 mV*档位,GR5526/GR5x25/GR533x/GR5405为7.45 mV*档位;参考源为电池时,实际参考电压为VBAT*[(档位+1)/10]

uint32_t hyst

迟滞(GR551x不适用)

该参数的取值可以是下列值中的任意一个,用或运算进行多个选择:

  • COMP_HYST_POSITIVE(开启正向迟滞,当输入电压大于Vref + Vhyst_positive时,触发上升沿中断),具体取值参考芯片Datasheet
  • COMP_HYST_NEGATIVE(开启逆向迟滞,在输入电压小于Vref – Vhyst_negative时,触发下降沿中断),具体取值参考芯片Datasheet

说明:

迟滞和开启逆向迟滞总是开启,用户无需关心此参数输入

uint32_t edge

中断触发方式(GR551x默认只有上升沿触发)

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

  • COMP_WAKEUP_EDGE_FALLING(输入电压低于参考源电压时触发中断)

  • COMP_WAKEUP_EDGE_RISING(输入电压高于参考源电压时触发中断)

  • COMP_WAKEUP_EDGE_BOTH(输入电压低于或高于参考源电压时触发中断)

uint32_t res_deg

矫正值(GR551x不适用)

暂不支持,默认为0

详细信息请参考文件:
  • GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_ll_comp.h
  • GR533x:SDK_Folder\drivers\inc\hal\gr533x_ll_comp.h
  • GR5405:SDK_Folder\hal_drv\include\ll_comp.h

app_comp_pin_cfg_t

结构体定义如下:

表 314 app_comp_pin_cfg_t结构体成员
成员 描述 取值

app_comp_pin_t input

COMP输入引脚配置

参考app_comp_pin_t结构体

app_comp_pin_t vref

COMP参考引脚配置

参考app_comp_pin_t结构体,如果参考源是内部参考电压或者电池电压,此参数可为NULL

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

枚举

app_comp_evt_t

表 315 app_comp_evt_t枚举成员
成员 描述

APP_COMP_EVT_RISING = 0

COMP上升沿触发中断事件

APP_COMP_EVT_FALLING = 1

COMP下降沿触发中断事件

APP_COMP_EVT_DONE = 0

COMP上升沿触发中断事件(仅适用于GR551x),仅为了兼容GR551x SDK V1.7.0及之前的版本

APP_COMP_EVT_ERROR

比较器错误事件

接口函数

表 316 COMP驱动接口函数
API 芯片
GR551x GR5526 GR5x25 GR533x GR5405

app_comp_init

Y

Y

Y

Y

Y

app_comp_deinit

Y

Y

Y

Y

Y

app_comp_start

Y

Y

Y

Y

Y

app_comp_stop

Y

Y

Y

Y

Y

app_comp_get_handle

Y

Y

Y

Y

Y

app_comp_init

表 317 app_comp_init接口
函数原型

uint16_t app_comp_init(app_comp_params_t *p_params, app_comp_evt_handler_t evt_handler)

功能说明

初始化COMP

输入参数
  • p_params:初始化参数的结构体指针
  • evt_handler:用户自己实现的中断回调函数
返回值

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

备注

回调函数形式参照typedef void (*app_comp_evt_handler_t)(app_comp_evt_t *p_evt)

HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理

app_comp_deinit

表 318 app_comp_deinit接口
函数原型

uint16_t app_comp_deinit(void)

功能说明

反初始化COMP

输入参数
返回值

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

备注

app_comp_start

表 319 app_comp_start接口
函数原型

uint16_t app_comp_start (void)

功能说明

开启比较器

输入参数
返回值

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

备注

app_comp_stop

表 320 app_comp_stop接口
函数原型

uint16_t app_comp_stop(void)

功能说明

停止比较器

输入参数
返回值

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

备注

app_comp_get_handle

表 321 app_comp_get_handle接口
函数原型

comp_handle_t *app_comp_get_handle(void)

功能说明

获取COMP句柄

输入参数
返回值
COMP句柄,详见
  • GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_hal_comp.h
  • GR533x:SDK_Folder\drivers\inc\hal\gr533x_hal_comp.h
  • GR5405:SDK_Folder\hal_drv\include\hal_comp.h
备注

示例工程

示例工程代码帮助开发者快速理解并使用COMP驱动。

COMP实现内部参考电压与MSIO引脚电压值的比较

示例工程实现输入源和参考源电压值的比较,工程路径:SDK_Folder\projects\peripheral\comp

流程图

COMP比较器实现输入源和参考源电压值的比较,输入源电压值为MSIO引脚外接电压值、参考源电压值可以是MSIO引脚外接电压值、电池电压和内部参考电压,当输出源电压大于参考源电压,中断产生。

示例设置COMP的模拟输入引脚MSIO0、选择内部参考电压,开启比较器,串口打印中断日志。

图 26 COMP实现电压比较流程图

初始化参数

app_comp_params_t params = {
    .pin_cfg = {
        .input = {
            .type = APP_IO_TYPE_MSIO,
            .mux  = APP_COMP_INPUT_PIN_MUX,
            .pin  = APP_COMP_INPUT_PIN,
        },
        .vref = {
            .type = APP_IO_TYPE_MSIO,
            .mux  = APP_COMP_VREF_PIN_MUX,
            .pin  = APP_COMP_VREF_PIN,
        },
    },
    .init = {
        .input_source = COMP_INPUT_SRC_IO0,
        .ref_source   = COMP_REF_SRC_VREF,
#if (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR551X)
        .ref_value    = 30,
#else
        .ref_value    = 120,
#endif
    },};
void comp_interrupt(void)
{
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
    params.init.edge = COMP_WAKEUP_EDGE_BOTH;
#endif
    app_comp_init(&params, app_comp_event_handler);
    app_comp_start();
}
  • pin_cfg:引脚配置
    • pin_cfg.input:比较器输入引脚配置
    • pin_cfg.vref:比较器参考源引脚配置
  • init:COMP参数配置
    • init.input_source:输入源COMP_INPUT_SRC_IO0(选择MSIO0)
    • init.ref_source:参考源COMP_REF_SRC_VREF(选择内部参考电压)
    • init.ref_value:内部参考源档位,GR551x为30,其他芯片为120(GR551x参考电压:30*30 mV;其他:120*7.45 mV)
    • init.edge:触发方式LL_COMP_WAKEUP_EDGE_RISING(上升沿触发)

重要函数

  • 初始化COMP
    app_comp_init(&params, app_comp_event_handler)
  • 开启比较器
    app_comp_start();

测试验证

连接开发板到PC端,打开串口助手,连接串口,查看串口日志,MSIO0输入大于参考电压的电压,查看中断是否触发。

以GR5526为例,参考电压约等于0.894 V,即(120*7.45 )mV,开启了正向和逆向迟滞,上升沿触发时,只有输入电压大于0.92 V会触发中断,即(0.894 + 0.026)mV。再次触发需要输入电压下降到小于0.868 V(0.894 – 0.026)之后,再上升到大于0.92 V才能继续触发上升沿中断,下降沿触发类似。用电源输出1.0 V的电压,接入MSIO0,打印日志如下:

[19:23:48.668] 
This example demo end.
[19:26:14.001] Comp is rising triggered.
[19:42:47.356] 

扫描关注

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