2. CCU4 硬件架构:时钟树、分频器、定时器切片(Slice)结构、事件逻辑、中断系统
CCU4(Capture/Compare Unit 4)是英飞凌 XMC 系列 MCU 中面向通用定时、PWM 生成、捕获与比较应用的高精度外设模块。理解其硬件架构是进行应用开发和性能调优的基础。本章从时钟树、分频器、定时器切片(Slice)结构、事件逻辑和中断系统五个维度,系统解析 CCU4 的内部工作机制。
2.1 时钟树与分频器
CCU4 模块的时钟源来自系统时钟树,经过模块级使能后,由内部可编程分频器进一步细分,为每个定时器切片提供灵活的时间基准。
2.1.1 时钟树结构
CCU4 的时钟输入路径如下:
- 系统时钟源:通常来源于内部高速振荡器(如 HRC、PLL)或外部晶振,经 CPU 时钟树分配后,作为外设总线时钟(如 PCLK)。
- 模块使能门控:通过外设时钟门控寄存器(如
CCU4_CLK_EN)控制 CCU4 模块是否工作,关闭时可降低功耗。 - 内部预分频器:CCU4 内部包含一个 8 位可编程预分频器(Prescaler),支持 1/2/4/8/16/32/64/128/256 分频,输出
f_CCU4作为各 Slice 的基准时钟。
关键参数:CCU4 预分频器分频系数通过寄存器
CCU4_GPRES 配置,复位后默认值为 1(不分频)。实际应用中,建议根据所需定时精度与 PWM 频率合理选择分频系数,避免计数器溢出或分辨率不足。
2.1.2 分频器配置示例
| 分频系数 | 寄存器值 (GPRES) | 典型应用场景 |
|---|---|---|
| 1 | 0 | 高频 PWM(>10 MHz) |
| 8 | 3 | 通用定时器(1-10 MHz) |
| 64 | 6 | 低频捕获(< 100 kHz) |
| 256 | 8 | 低功耗长周期定时 |
2.2 定时器切片(Slice)结构
CCU4 模块包含 4 个独立的定时器切片(Slice 0 ~ Slice 3),每个 Slice 都是一个完整的 16 位定时器/计数器单元,支持捕获、比较和 PWM 生成功能。Slice 之间可通过级联模式实现 32 位或更高位宽的定时。
2.2.1 Slice 内部组成
- 16 位计数器(Timer):核心计数单元,支持向上、向下、向上-向下三种计数模式。
- 周期寄存器(PR):定义计数周期,决定 PWM 频率或定时溢出周期。
- 比较寄存器(CR):存储比较值,用于产生比较事件或 PWM 占空比控制。
- 捕获寄存器(CRS):在捕获事件发生时锁存当前计数值,用于外部信号测量。
- 状态与控制逻辑:管理计数启停、同步、复位、事件生成等操作。
2.2.2 Slice 工作模式
| 模式 | 描述 | 典型应用 |
|---|---|---|
| 定时器模式 | 计数器按预设周期循环计数,产生溢出事件 | 周期性中断、软件定时 |
| 捕获模式 | 外部事件触发锁存当前计数值 | 脉冲宽度测量、频率测量 |
| 比较模式 | 计数器值与比较寄存器匹配时产生事件 | PWM 生成、单脉冲输出 |
| 级联模式 | 多个 Slice 串联形成更高位宽计数器 | 32 位定时、长周期 PWM |
设计建议:在需要高精度 PWM 或捕获时,优先使用 Slice 0 和 Slice 1,因为它们通常具有更短的内部信号路径,延迟更低。级联模式下,注意同步复位与启动时序,避免计数偏差。
2.3 事件逻辑
CCU4 的事件逻辑负责将 Slice 内部产生的各种状态变化(如计数溢出、比较匹配、捕获触发)转换为可被 CPU 或 DMA 识别的事件信号。事件逻辑是连接定时器硬件与软件中断系统的桥梁。
2.3.1 事件类型
| 事件名称 | 触发条件 | 典型用途 |
|---|---|---|
| 周期匹配事件 | 计数器值等于周期寄存器 PR | 定时溢出中断、PWM 周期同步 |
| 比较匹配事件 | 计数器值等于比较寄存器 CR | PWM 占空比更新、比较输出翻转 |
| 捕获事件 | 外部输入信号边沿触发 | 脉冲宽度测量、频率捕获 |
| 溢出/下溢事件 | 计数器达到最大值或最小值 | 计数方向变化、级联进位 |
2.3.2 事件路由与组合
每个 Slice 的事件输出可以通过事件路由寄存器(CCU4_ERS)选择直接输出、取反输出或与其它 Slice 事件组合后输出。这种灵活性使得 CCU4 能够实现复杂的时序控制逻辑,而无需 CPU 频繁干预。
注意:事件路由配置不当可能导致中断丢失或误触发。建议在初始化时先清除所有事件标志,再使能所需事件源。多 Slice 组合事件时,需确认各 Slice 的时钟同步状态。
2.4 中断系统
CCU4 的中断系统基于事件逻辑产生的中断请求,向 CPU 或 DMA 控制器发送服务请求。每个 Slice 拥有独立的中断节点,支持中断优先级配置和嵌套。
2.4.1 中断架构
- 中断节点:每个 Slice 对应一个中断节点(如 CCU4_0_IRQn ~ CCU4_3_IRQn),在 NVIC 中独立配置优先级。
- 中断使能:通过
CCU4_IM(中断掩码寄存器)控制每个事件源的中断使能。 - 中断标志:事件发生后,对应标志位在
CCU4_IS(中断状态寄存器)置位,需软件清除。 - DMA 触发:部分事件可配置为 DMA 请求,实现数据自动搬运,降低 CPU 负载。
2.4.2 中断配置流程
- 配置 Slice 工作模式与事件源(周期/比较/捕获)。
- 在
CCU4_IM中使能对应事件的中断位。 - 在 NVIC 中使能 CCU4 中断节点并设置优先级。
- 编写中断服务函数(ISR),读取
CCU4_IS判断事件源,执行处理后清除标志位。
性能调优要点:中断服务函数应尽量短小,避免在 ISR 中执行复杂运算。对于高频事件(如高速 PWM 周期中断),建议使用 DMA 方式处理数据,减少 CPU 中断响应开销。中断优先级设置时,将实时性要求高的事件(如捕获)设为较高优先级。
2.4.3 中断与 DMA 协同示例
// 伪代码:配置 CCU4 Slice 0 周期中断,并触发 DMA 传输
CCU4_IM->SL0 = CCU4_IM_SL0_PME_Msk; // 使能周期匹配中断
NVIC_SetPriority(CCU4_0_IRQn, 2); // 设置中断优先级
NVIC_EnableIRQ(CCU4_0_IRQn); // 使能中断
// 配置 DMA 通道,源地址为 CCU4 捕获寄存器,目的地址为内存缓冲区
DMA_ChannelConfig(DMA_CH0,
(uint32_t)&CCU4->CC4_0->CRS,
(uint32_t)buffer,
DMA_BURST_4,
DMA_TRIGGER_CCU4_0);
DMA_EnableChannel(DMA_CH0);