TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] MSP430FR6989:使用DriverLib模块的计时器

Guru**** 2048030 points
Other Parts Discussed in Thread: MSP430FR6989
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/637866/msp430fr6989-timer-using-driverlib-module

部件号:MSP430FR6989


我已使用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,&param);
}


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





  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    默认DCO频率为8 MHz (CSCTL1),其来源MCLK的默认分频器为8 (CSCTL3),因此您的默认CPU频率为1 MHz。 同时,ACLK由VLOCLK提供(如果LFXT不可用,请参阅用户指南中的CSCTL2说明),通常以9.4 kHz工作(数据表的表5-7)。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 所以它确实是11 % 错误,比我之前想象的要好。 每个呼叫的计时器时钟是否看起来正确,为1毫秒?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    VLOCLK不是可靠的计时器。 调用delayMS函数时,您将丢失一些周期,因此较小的DelayTime值将产生合理的错误。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我重新讨论这个问题,因为与理论上的延迟相比,我的实验请求中仍有一个11 12 % 的错误。 当运算数字时,计时器的输入时钟频率必须是32.768 kHz,如果是9.4 kHz,则百分比误差将高于90 % OFF。 我主要测试1-150毫秒的延迟,它们始终由~11 % 关闭,它告诉我计时器计算已关闭,输入计时器和计时器时钟周期不正确,或者CPU时钟频率不是1 MHz。 但我无法确定此11 % 错误的来源。 您认为这是否是因为使用ACLK作为定时器的输入时钟?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否考虑过输出ACLK,MCLK和计时器时钟以确保频率符合预期? 您可以尝试使用SMCLK来确定错误是ACLK还是您的测量方法。

    此致,
    Ryan