APP COMP驱动
结构体
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
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
app_io_type_t type |
IO类型 |
可配置类型: APP_IO_TYPE_MSIO |
app_io_mux_t mux |
设置IO映射功能 |
APP_IO_MUX |
uint32_t pin |
IO引脚 |
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_comp.h。
comp_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t input_source |
COMP输入引脚 |
GR551x取值选项:
对应引脚为MSIO0 ~ MSIO4 GR5526/GR5x25/GR533x/GR5405取值选项:
对应引脚为MSIO0 ~ MSIO7 |
| uint32_t ref_source |
COMP参考源 |
GR551x取值选项:
GR5526/GR5x25/GR533x/GR5405取值选项:
|
| uint32_t ref_value |
COMP参考输入电压值 |
GR551x取值选项:
GR5526/GR5x25/GR533x/GR5405取值选项:
说明: 参考源为内部参考时,实际参考电压:GR551x为30 mV*档位,GR5526/GR5x25/GR533x/GR5405为7.45 mV*档位;参考源为电池时,实际参考电压为VBAT*[(档位+1)/10] |
| uint32_t hyst |
迟滞(GR551x不适用) |
该参数的取值可以是下列值中的任意一个,用或运算进行多个选择:
说明: 迟滞和开启逆向迟滞总是开启,用户无需关心此参数输入 |
| uint32_t edge |
中断触发方式(GR551x默认只有上升沿触发) |
该参数的取值可以是下列值中的任意一个:
|
| 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
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
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
| 成员 | 描述 |
|---|---|
| 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 |
比较器错误事件 |
接口函数
| 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
| 函数原型 | uint16_t app_comp_init(app_comp_params_t *p_params, app_comp_evt_handler_t evt_handler) |
|---|---|
| 功能说明 | 初始化COMP |
| 输入参数 |
|
| 返回值 | 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
| 函数原型 | uint16_t app_comp_deinit(void) |
|---|---|
| 功能说明 | 反初始化COMP |
| 输入参数 | |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_comp_start
| 函数原型 | uint16_t app_comp_start (void) |
|---|---|
| 功能说明 | 开启比较器 |
| 输入参数 | |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_comp_stop
| 函数原型 | uint16_t app_comp_stop(void) |
|---|---|
| 功能说明 | 停止比较器 |
| 输入参数 | |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_comp_get_handle
| 函数原型 | comp_handle_t *app_comp_get_handle(void) |
|---|---|
| 功能说明 | 获取COMP句柄 |
| 输入参数 | |
| 返回值 |
COMP句柄,详见
|
| 备注 |
示例工程
示例工程代码帮助开发者快速理解并使用COMP驱动。
COMP实现内部参考电压与MSIO引脚电压值的比较
示例工程实现输入源和参考源电压值的比较,工程路径:SDK_Folder\projects\peripheral\comp。
流程图
COMP比较器实现输入源和参考源电压值的比较,输入源电压值为MSIO引脚外接电压值、参考源电压值可以是MSIO引脚外接电压值、电池电压和内部参考电压,当输出源电压大于参考源电压,中断产生。
示例设置COMP的模拟输入引脚MSIO0、选择内部参考电压,开启比较器,串口打印中断日志。
初始化参数
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(¶ms, 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(¶ms, 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]