4. AURIX时钟系统配置与频率测量
任务目标
在 AURIX TC3xx 上配置 PLL 与 CCU,将系统时钟切换到目标频率(本例目标 200 MHz),并用 STM 定时器测量实际频率,验证配置是否生效。
环境与依赖
- 开发板:AURIX TC3xx(如 TC375 Lite Kit)
- 工具链:AURIX Development Studio / Tasking,iLLD 库
- 外部晶振:20 MHz(OSC0)
- 调试接口:DAP,可在线查看变量
配置思路
PLL 由外部晶振经预分频、倍频、K2/K3 分频得到 PLL 输出,再经 CCU 的 PLLERAY/SPB 等分频器分配给各总线。测量时用 STM 以已知的 f_SPB 计数,在固定时间窗口内读取计数值,反推实际频率。
关键代码
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "IfxScuCcu.h"
#include "IfxStm.h"
#define TARGET_FREQ_HZ 200000000u /* 目标 200 MHz */
#define MEASURE_MS 100u /* 测量窗口 100 ms */
static IfxScuCcu_Config g_ccuCfg;
/* 配置 PLL + CCU,切换到目标频率 */
void Clock_init(void)
{
IfxScuCcu_initConfig(&g_ccuCfg);
/* 20 MHz 晶振 -> 200 MHz:PDIV=1, NDIV=40, K2=2, K3=4 */
g_ccuCfg.pllConfig.pllPdiv = 1;
g_ccuCfg.pllConfig.pllNdiv = 40;
g_ccuCfg.pllConfig.pllK2Div = 2;
g_ccuCfg.pllConfig.pllK3Div = 4;
/* SPB 分频 = 2 -> 100 MHz */
g_ccuCfg.spbConfig.spbDivider = 2;
IfxScuCcu_init(&g_ccuCfg);
IfxScuCcu_setCpuClockDivider(IfxScuCcu_CpuDivider_1);
IfxScuCcu_setCpuClockDivider(IfxScuCcu_CpuDivider_1);
}
/* 用 STM 测量 f_SPB:在 MEASURE_MS 窗口内计数 */
uint32 Clock_measureSpb(void)
{
Ifx_STM *stm = &MODULE_STM0;
uint32 start = IfxStm_getLower(stm);
uint32 ticks = (uint32)((uint64)MEASURE_MS * 100000u); /* 100 MHz 下 100ms 的 tick 数 */
/* 忙等固定 tick 数 */
while ((IfxStm_getLower(stm) - start) < ticks) { }
uint32 elapsed = IfxStm_getLower(stm) - start;
/* 实际 f_SPB = elapsed / (MEASURE_MS/1000) */
return (uint32)((uint64)elapsed * 1000u / MEASURE_MS);
}
int core0_main(void)
{
IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
Clock_init();
uint32 fSpb = Clock_measureSpb();
uint32 fCpu = fSpb * 2u; /* CPU = SPB * 2 */
/* 调试观察:fCpu 应接近 TARGET_FREQ_HZ */
volatile uint32 result = fCpu;
(void)result;
while (1) { }
return 0;
}
运行与验证
- 用 AURIX Development Studio 新建 TC375 工程,加入上述代码,编译并下载。
- 进入调试,在
volatile uint32 result处设断点,运行到断点。 - 查看
result值:应接近 200000000(允许 ±1% 误差,即 198M~202M)。 - 若偏差过大,检查 PDIV/NDIV/K2/K3 与 SPB 分频是否与晶振频率匹配。
通过条件:result 落在 198 MHz ~ 202 MHz 区间,即认为 PLL 与 CCU 配置正确、系统时钟已切换到目标频率。