This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我已使用TimerA模块实施了一个计时器,可以倒计时毫秒。 我使用了Driverlib中的示例以及TI论坛中的示例作为参考。 当我在调试模式下使用MSP430FR6989的秒表对其进行测试时,时间似乎是准确的。 但是我意识到我需要一种更准确的方法来测试计时器。 因此,我通过计算CCS在调试模式下的CPU周期数来测试计时器。 但是,这表明,假设CPU频率为16MHz,计时器关闭了20倍。
我看到计时器实现正确的唯一方法是CPU频率为800 kHz,这在阅读MSP430FR6992的数据表后我不确定。
如果我忽略或误解了某些内容,请告诉我! 代码片段如下所示。 谢谢!
void timer_init() { Timer_a_clearTimerInterrupt (timer_A0_base); // TimerA0 Uptime配置参数 timer_a_initUpModeParam = { Timer_A_CLOCKSOURCE_ACLK, // ACLK时钟源~32.768kHz Timer_a_CLOCKSOURCE_diver_1, // aclk/??? =??kHz 32岁 //反跳周期 Timer_a_TAIE_INTERRUST_DISABLE, //禁用计时器中断 Timer_a_CCIE_CCR0_interrupT_enable,//启用CCR0中断 Timer_a_DO清除, //清除值 正确 //开始计时器 }; timer_a_initUpMode(timer_A0_base,¶m); } void delayMS(unsigned long DelayTime){ 毫秒= 0; while (millis < DelayTime){} #if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__) #pragma vector=TIMER0_A0_vector __ISR#Elif defined(__GNU__) __attribute__(interrupt (TIMERA0_vector) #IMenvoid
谢谢! 所以它确实是11 % 错误,比我之前想象的要好。 每个呼叫的计时器时钟是否看起来正确,为1毫秒?
我重新讨论这个问题,因为与理论上的延迟相比,我的实验请求中仍有一个11 12 % 的错误。 当运算数字时,计时器的输入时钟频率必须是32.768 kHz,如果是9.4 kHz,则百分比误差将高于90 % OFF。 我主要测试1-150毫秒的延迟,它们始终由~11 % 关闭,它告诉我计时器计算已关闭,输入计时器和计时器时钟周期不正确,或者CPU时钟频率不是1 MHz。 但我无法确定此11 % 错误的来源。 您认为这是否是因为使用ACLK作为定时器的输入时钟?