Thread 中讨论的其他器件:SysConfig、 C2000WARE
工具/软件:
下午好!
请帮助我理解:
我需要一个毫秒延迟例程来执行使用 CM 内核的工程。
当我使用 DEVICE_DELAY_US(毫秒* 1000)时、结果似乎是合理的。
但当我尝试使用 CPU 计时器来获得更准确的延迟时、如下所示:
CPUTimer_setPeriod(CPUTIMER2_BASE, (CM_CLK_FREQ / 1000) * milliSeconds - 1);
CPUTimer_setPreScaler(CPUTIMER2_BASE, 0);
CPUTimer_stopTimer(CPUTIMER2_BASE);
CPUTimer_reloadTimerCounter(CPUTIMER2_BASE);
CPUTimer_setEmulationMode(CPUTIMER2_BASE, CPUTIMER_EMULATIONMODE_RUNFREE);
CPUTimer_startTimer(CPUTIMER2_BASE);
CPUTimer_clearOverflowFlag(CPUTIMER2_BASE);
while(!CPUTimer_getTimerOverflowStatus(CPUTIMER2_BASE));
CPUTimer_stopTimer(CPUTIMER2_BASE);
实际延迟似乎要 短得多。
错误在哪里?
更新:我找到了原因。
SysConfig 工具出错、它会忽略 CM CLK 分频器、并且总是会将代码放在 device.c 中:
//
// Set up CMCLK to use AUXPLL as the clock source and set the
// clock divider to 1.
//
SysCtl_setCMClk(SYSCTL_CMCLKOUT_DIV_1,SYSCTL_SOURCE_AUXPLL);
阈值下保持高精度。
CM 内核以惊人的频率在 250MHz 下运行。