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.

[参考译文] MSP430G2231:SLAA340 -使用 DCO 校准 VLO

Guru**** 2390775 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611139/msp430g2231-slaa340---calibrating-the-vlo-with-dco

器件型号:MSP430G2231

大家好、团队、

SLAA340介绍了一种通过 DCO 校准值校准 VLO 频率的方法。

例行程序运行正常、但我不理解其中一件事。

完成了三次捕获。

第一个周期被忽略、另外两个周期之间的差异在于、可以看到两个 VLO 边沿内有多少个 DCO 周期。

在第二次捕获时、我通常得到大约100个计数、而在第三次捕获时、我得到大约900个计数。 假设 DCO 频率为1MHz、则计数差异为800、因此约为12kHz。 这是可以的。

我不清楚的是、为什么在第二次捕获时、值实际上是100左右、而不是~800左右。

你可以评论一下吗?

谢谢、

Mauro

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

    日落时分、

    定时器在以下代码行开始计数:

    MOV.w #tassel_2+MC_2+TACLR、&TACTL;SMCLK、连续模式、清除 

    在该行被执行后、还有几个其它的操作被执行、其中包括设置 ACLK = VLO、清除 BCSCTL2、将 ACLK = VLO/8分频、以及清除捕捉标志。 在此期间、TimerA 计数器正在计时、在第一次 CCIFG 捕获时、我怀疑 TAR 为~0xFD43。 然后、当第二次捕获发生时、TAR 溢出且为~0x64。 我希望这有助于澄清问题。  

    此致、  
    Caleb Overbay

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

    您好 Caleb、

    感谢您的参与。

    我的问题实际上在以下代码之间:

    BIC.w #CCIFG、 TACCTLx;清除捕捉标志
    EDGE_ONE 位。w #CCIFG、 TACCTLx;跳过第一个信号的测试捕捉标志(&T)
    JZ 边沿一
    BIC.w #CCIFG、 TACCTLx;清除捕捉标志
    EDGE_Two 位。w #CCIFG、 TACCTLx;跳过第二个信号的测试捕捉标志(&T)
    JZ EDGE_two ;
    MOV.w TACCRX、 R13. ;保存硬件捕获的值
    BIC.w #CCIFG、 TACCTLx;清除捕捉标志
    EDGE_Three bit.w #CCIFG、 TACCTLx;测试捕捉标志以捕捉一个良好的时钟
    JZ EDGE_Three ;
    BIC.w #MC_3、 TACTL;停止计时器(&T)
    MOV.w TACCRX、 R12. 

    在第一个边沿、我清除 TACCTLX。 因此、在第二个边沿上、计数器应该大约为800计数、而不是在我测量时为100。

    在第三个上、它应该+ 800个额外的计数。

    因此、我本来期望大约为800和1600、而不是100和900计数。

    这是我无法理解的。

    谢谢、

    日落

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

    日落时分、

    [引用 user="Sunset)]第一个边沿清除 TACCTLx。 因此、在第二个边沿上、计数器应约为800计数、而不是我测量时的100。

    您只清除捕获比较中断标志(CCIFG)、而不清除计数器寄存器 TA0R。 因此计时器仍在计数、不会在0时重新启动。  

    此致、  
    Caleb Overbay

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

    好的地方。

    也许还有另一件事。

    通过启动计时器、我假设 TACCR0从0开始。

    MOV.w #tassel_2+MC_2+TACLR、&TACTL;SMCLK、连续模式、清除
    

    计数器在第二个边沿上不应达到~800?

    谢谢、

    日落

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

    将 TACTL 寄存器中的 TACLR 位置位会将定时器的计数寄存器 TAR 清零。 当一个捕获被 ACLK 触发时、TAR 的值被存储在 TACCR0寄存器中。 TACCR0不进行计数、它只存储计数寄存器 TAR 的值。

    因此、我不确定您对上述问题的提问是什么。 我仍然认为 EDGE_Two 触发器是100、因为 TAR 在 EDGE_ONE 和 EDGE_Two 触发器之间溢出。

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

    TACCR0没有直接计数、但它存储了 TAR 中的计数、这是可以的。 我把它混在一起的错误。 我想在计数方面不考虑我们处于捕捉模式。

    但是、如果 TAR、在 SLAA340内调用的例程初始化之后、每次都要进行复位、而不是开始计数、那么在第一个边沿上、它可能有几个周期到800之间的任何值、 但是、第二个边沿上必须有大约800个额外周期的东西、因为 TAR 会继续计数。

    执行的指令很少、捕捉触发器是 ACLK 的边沿、彼此相距800个周期。
    从任何一个捕获到另一个捕获、我预计会有800个计数(在 TAR 中)。

    校准期间不应达到 TAR 溢出、这是因为只有很少的指令和最坏的情况3次800计数(考虑到12kHz VLO)、所以对于第二次捕捉、100次计数要少一些。

    谢谢、

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

    日落时分、

    这很好。 定时器启动和第一个边沿触发之间没有那么多指令。 我希望第二个触发器捕获的值大于100。 我在 G2553上对此进行了测试、并看到以下内容:

    • 第一个边沿:0x89 (十进制137)
    • 第二沿:0x304 (十进制772)
    • 第三沿:0x582 (1410十进制)

    这些数字更符合我对代码结构的预期。 因此、我不会观察到与您相同的行为。 您能看到在运行代码时的第一个边沿捕获期间 CCR0寄存器的值是多少吗?

    此致、  
    Caleb Overbay

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

    Celebb、您好!

    感谢您进行测试并确认测量结果。

    日落

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

    此致、
    Caleb Overbay