1. CPU Timer 是什么

C2000 的 CPU Timer 本质是:

32 位倒计数器

从设定值开始减,减到 0 后产生中断,然后重新装载,继续下一轮。


2. 工作流程

CPU Timer 流程图​编辑

核心流程:

SYSCLKOUT
↓
预分频器 PSC
↓
TIMCLK
↓
主计数器 TIM
↓
TIM = 0
↓
产生中断


3. 两级计数

CPU Timer 时序图
​编辑
第一级:预分频器

SYSCLKOUT 驱动 PSC 递减
PSC 减到 0 → 产生 TIMCLK

第二级:主计数器

TIMCLK 驱动 TIM 递减
TIM 减到 0 → 产生定时器中断


4. 主要寄存器

寄存器作用
PRD / PRDH设置 32 位定时周期
TIM / TIMH32 位当前计数值
TPR / TPRH存放预分频设定值和当前预分频计数值
TCR控制定时器启动、停止、中断

TPR、TDDR、PSC 的关系

TPRTPRH 是两个 16 位寄存器,但里面又分成几个 8 位字段:

寄存器高 8 位低 8 位
TPRHPSCHTDDRH
TPRPSCTDDR

组合后:

组合字段含义
TDDRH:TDDR16 位预分频设定值
PSCH:PSC16 位预分频当前计数值

简单记:

TDDRH:TDDR 决定分频多少
PSCH:PSC 是当前倒计数值
TPR/TPRH 只是存放这些字段的寄存器


5. 定时时间

定时时间 ≈ (PRD + 1) × (TDDR + 1) / SYSCLKOUT

不使用预分频时:

TDDR = 0
定时时间 ≈ (PRD + 1) / SYSCLKOUT

例子:

SYSCLKOUT = 60MHz
目标定时 = 1ms
PRD = 60000 - 1
TDDR = 0


6. 配置步骤

1. 设置 PRD
2. 设置 TPR / TPRH
3. 重装载计数器
4. 使能定时器中断
5. 启动定时器
6. 配置 PIE 和 CPU 中断


7. 核心代码

CpuTimer0Regs.TCR.bit.TSS = 1;      // 停止定时器

CpuTimer0Regs.PRD.all = 60000 - 1;  // 1ms,60MHz
CpuTimer0Regs.TPR.all  = 0;         // TDDR = 0,不预分频
CpuTimer0Regs.TPRH.all = 0;

CpuTimer0Regs.TCR.bit.TRB = 1;      // 重装载
CpuTimer0Regs.TCR.bit.TIF = 1;      // 清中断标志
CpuTimer0Regs.TCR.bit.TIE = 1;      // 使能中断

CpuTimer0Regs.TCR.bit.TSS = 0;      // 启动定时器


8. 总结

CPU Timer = 预分频器 + 32 位倒计数器。
TDDRH:TDDR 设置预分频;
PSCH:PSC 是预分频当前值;
TIMH:TIM 减到 0 后产生中断。