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 低功耗长周期定时
CCU4 时钟树与分频器结构 系统时钟源 模块使能门控 8位预分频器 f_CCU4 分频系数:1, 2, 4, 8, 16, 32, 64, 128, 256 配置寄存器:CCU4_GPRES(复位值 0,即不分频) 输出至各定时器切片(Slice)

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,因为它们通常具有更短的内部信号路径,延迟更低。级联模式下,注意同步复位与启动时序,避免计数偏差。
CCU4 单个定时器切片(Slice)内部结构 16位计数器 向上/向下/双向 周期寄存器 PR 定义计数周期 比较寄存器 CR PWM 占空比控制 捕获寄存器 外部事件锁存 状态与控制逻辑 事件输出(中断/DMA) 外部捕获输入 每个 Slice 独立工作,支持级联(Slice 0 + Slice 1 形成 32 位计数器)

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 中断配置流程

  1. 配置 Slice 工作模式与事件源(周期/比较/捕获)。
  2. 在 CCU4_IM 中使能对应事件的中断位。
  3. 在 NVIC 中使能 CCU4 中断节点并设置优先级。
  4. 编写中断服务函数(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);