API GUIDE / TCU / OVERVIEW
G32S10 TCU API 概述
模块概述:本文档定义 G32S10 SDK TCU 模块的正式接口,覆盖以下两层:
1. 文档范围
本文档定义 G32S10 SDK TCU 模块的正式接口,覆盖以下两层:
HAL TCU:面向应用、BSP和驱动上层的功能级接口LL TCU:面向寄存器与位操作的低层接口
补充说明:
LL层不返回状态码;需要返回寄存器值或数据时返回
uint32_t。HAL层负责参数校验、状态管理、模式编排、中断回调分发。
2. 分层关系
分层职责如下:
HAL TCU封装普通timer、capture、quadrature和ADC trigger四类模式
维护参数合法性、模块级状态、active channel mask、模式配置mask和统一返回码
提供捕获值/正交采样值解包、回调注册、错误查询和寄存器dump接口
LL TCU提供寄存器位级访问入口
不维护软件状态,不做复杂业务语义判断
公开接口均为
static inline,首参数为tcu_regs_t *tcuxtcu_regs.h定义TCU基地址、寄存器结构体布局、通道数量、事件mask和位域mask
3. 资源模型与公开类型
3.1 TCU硬件能力摘要
| 项目 | 说明 |
|---|---|
| 普通通道 | 支持通道0~7。 |
| 计数宽度 | FULL/HALF/COUNT 有效宽度为16 bit,范围0~0xFFFF。 |
| 计数使能 | cnt_status/cnt_enable/cnt_disable 控制通道计数器是否运行。 |
| 通道时钟 | clock_status/clock_enable/clock_disable 控制通道时钟门控。 |
| 最大计数时钟 | TCU通道计数时钟最大为24 MHz。 |
| 时钟分频 | PRESCALERn.TPRE 为16 bit;TPRE=0 表示不分频,TPRE=n,n>0 时实际分频为 (n + 1) * 2,硬件不支持2分频。 |
| 计数模式 | 支持到FULL、溢出、到HALF、到HALF或Z输入四类模式。 |
| 事件 | ir/ie 中bit07为FULL事件,bit815为CAPTURE事件,bit16~23为HALF事件。 |
| 捕获 | HAL捕获模式开放通道0~7,固定使用GPIO0作为捕获输入;capture_num=0 不触发捕获,HAL配置接口不接受该值。 |
| HALL状态 | hall_state 低8 bit对应通道0~7输入状态;HAL通过捕获电平接口读取。 |
| 正交编码 | HAL按group组织:group0使用通道1/2/3作为A/B/Z,group1使用通道4/5/6作为A/B/Z。 |
| GPIO1输入 | GPIO1仅适用于正交编码模式。 |
| 输入滤波 | filter_value[n] 中GPIO0/GPIO1滤波字段均为10 bit,滤波计数器时钟为200 MHz。 |
| Store值 | store_value[n] 提供current/previous两个16 bit字段,HAL用于正交编码采样值读取。 |
| ADC触发 | 通道0固定用于ADC trigger模式;HALF事件触发ADC0,FULL事件触发ADC1,两路可分别开启或关闭。 |
3.2 HAL返回状态约定
HAL层普通可失败接口统一返回SDK公共错误码类型:
error_code_t
常用返回值如下:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 参数为空、实例非法、通道/group越界、字段取值非法或模式组合非法。 |
IM_ERR_BUSY | 指定通道或group当前处于active状态,不能重配置或重复启动。 |
IM_ERR_NOT_READY | handle未初始化、目标通道未配置,或目标模式未配置完成。 |
IM_ERR_UNSUPPORTED | 当前编译配置不支持该操作,例如未打开dump宏控。 |
4. 当前实现约束与行为说明
4.1 通道和模式范围
| 功能 | 范围 | 说明 |
|---|---|---|
| Timer | 通道0~7 | 每通道均有FULL/HALF/COUNT/CONTROL。 |
| Capture | 通道0~7 | HAL固定GPIO0输入。 |
| ADC Trigger | 通道0 | HALF触发ADC0,FULL触发ADC1。 |
| Quadrature | group0~1 | group0使用通道1/2/3,group1使用通道4/5/6。 |
| HALL状态读取 | 通道0~7 | hall_state 低8 bit有效。 |
4.2 模式组合
| 配置项 | TIMER | CAPTURE | QUADRATURE | ADC_TRIGGER |
|---|---|---|---|---|
| 通道0 | 支持 | 支持 | 不支持 | 支持 |
| 通道1~6 | 支持 | 支持 | 通过group使用 | 不支持 |
| 通道7 | 支持 | 支持 | 不支持 | 不支持 |
| EXTAL输入 | 可选 | 可选 | HAL按模式配置 | 可选 |
| GPIO0输入 | 不由timer配置 | 固定使用 | 使用 | 不使用 |
| GPIO1输入 | 不由timer配置 | 不使用 | 使用 | 不使用 |
| Store value | 不由timer读取 | 不开放HAL读取 | 用于位置/Z相采样读取 | 不使用 |
| 中断 | 可配置FULL/CAPTURE/HALF | 默认CAPTURE | 默认B/Z HALF | 不主动配置中断 |
4.3 捕获次数约束
capture_num == 0时硬件不会进行捕获,HAL配置接口返回IM_ERR_INVALID_PARAM。capture_num1~`HAL_TCU_CAPTURE_NUM_FINITE_MAX` 表示有限次捕获。capture_num大于HAL_TCU_CAPTURE_NUM_FINITE_MAX时作为连续捕获使用。HAL默认配置使用
HAL_TCU_CAPTURE_NUM_DEFAULT,推荐普通应用使用连续捕获。
4.4 文件组织
code/include/drivers/g32s10/tcu/ tcu_regs.h ll_tcu.h hal_tcu.h code/drivers/g32s10/tcu/ hal_tcu.c code/examples/ll/ tcu_trig_example.c code/examples/hal/ tcu_trig_adc_example.c
文件职责:
| 文件 | 说明 |
|---|---|
tcu_regs.h | TCU寄存器结构体、基地址、位定义和字段写辅助宏。 |
ll_tcu.h | LL层 static inline API定义、寄存器位操作接口。 |
hal_tcu.h | HAL层公开宏、枚举、配置结构、句柄、回调类型和API声明。 |
hal_tcu.c | HAL层参数校验、状态管理、模式编排、中断处理和寄存器dump。 |
tcu_trig_example.c | LL层TCU触发ADC示例。 |
tcu_trig_adc_example.c | HAL层TCU分别触发ADC0和ADC1示例。 |
5. 推荐关注的错误标志
TCU HAL私有错误标志通过 hal_tcu_error_get() 读取,字段定义见 hal_tcu_error_t。
| 错误标志 | 说明 | 常见触发场景 |
|---|---|---|
HAL_TCU_ERROR_NONE | 无HAL私有错误。 | 初始化后或错误状态清除后。 |
HAL_TCU_ERROR_INVALID_PARAM | HAL记录的参数错误flag。 | 空指针、非法实例、通道/group越界、字段取值非法、非法模式组合。 |
HAL_TCU_ERROR_NOT_READY | HAL记录的未就绪flag。 | handle未初始化,或调用start/stop/get接口时目标模式未配置。 |
HAL_TCU_ERROR_BUSY | HAL记录的忙状态flag。 | 运行中通道重配置,或重复启动已active通道。 |