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.

[参考译文] MSP430FR5849:配置计时器 B0时出现 Driverlib 错误

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/877952/msp430fr5849-driverlib-bug-configuring-timer-b0

器件型号:MSP430FR5849
主题中讨论的其他器件:MSP430WARE

不确定是否有更好的方法报告 driverlib 代码的错误。  但我注意到以下情况:

在 driverlib 代码的 timer_b.c 文件中、诸如 Timer_B_initUpMode()之类的函数不会清除 TBxCTL 寄存器的 ID 字段位。  因此、如果您在不同的时间将同一个计时器用于两种不同的用途、并且这两种不同的用途需要不同的 ID 字段设置、那么在 ID 字段中的位已设置且现在您希望它们清除后、您将无法获得正确的配置。

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

    肯特、您好!

    感谢您发帖。 我将对此进行研究并返回给您。

    此致、

    Angelo

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

    肯特、您好!

    您观察到的行为实际上是预期的功能、而不是错误。 设置 TBCLR 不会改变输入分频器设置、如下所示:

    在某些应用中、输入分频器设置保持不变非常方便、这样您就无需在以后初始化 ID。 此 E2E 主题显示了一个这样的示例:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/844186

    但是、请随意以对您的应用最有意义的方式修改某些代码。

    此致、

    Angelo

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

    在原版海报上发言(不邀请):

    Timer_B_initUpMode 和 Timer_B_initUpDownMode 在 OR-ing ~之前不会清除 ID 字段("&= ID__8")。 因此、如果一个用户请求 ID = 1、而下一个 ID = 2、则最终结果为 ID = 3、而不是 ID = 2。 这与 TBCLR 无关。

    Timer_B_initContinuousMode 是否正确:

    HWREG16 (baseAddress +
    OFS_TBxCTL)&=~(TIMER_B_CLOCKSOURCE_INTRIAL_EXTERNAL_TXCLK +
    Timer_B_updown_mode +
    Timer_B_do_clear +
    Timer_B_TBIE_INTERRUPT_ENABLE +
    CNTL_3 +
    ID_8.
    ); 

    [编辑:少量澄清。]

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

    是的、这正是我尝试报告的内容。  在我的应用中、我在不同的时间将计时器 B0用于两种不同的用途。  定时器配置如下:

    第一个案例:

    Timer_B_initUpModeParam upParam ={
    时钟源= TIMER_B_CLOCKSOURCE_SMCLK、
    时钟源分频器= TIMER_B_CLOCKSOURCE_DEVIDER_1、
    timerPeriod = 124、
    .timerInterruptEnable_TBIE = Timer_B_TBIE_INTERRUPT_DISABLE、
    .CaptureCompareInterruptEnable_CCR0_CCIE = 0、
    .timerClear = Timer_B_do_clear、
    .startTimer = true
    };
    Timer_B_initUpMode (timer_B0_BASE、&upParam);

    第二种情况:

    Timer_B_initUpModeParam upParam ={
    时钟源= TIMER_B_CLOCKSOURCE_SMCLK、
    时钟源分频器= TIMER_B_CLOCKSOURCE_DEVIDER_64、
    .timerPeriod = 0、
    .timerInterruptEnable_TBIE = Timer_B_TBIE_INTERRUPT_DISABLE、
    .CaptureCompareInterruptEnable_CCR0_CCIE = 0、
    .timerClear = Timer_B_do_clear、
    .startTimer = true
    };
    Timer_B_initUpMode (timer_B0_BASE、&upParam);

    调用 Timer_B_initUpMode()的第一种情况在寄存器 TBxCTL 的 ID 字段中执行00b 的逻辑 OR 运算。  调用 Timer_B_initUpMode()的第二种情况在 ID 字段中执行逻辑 OR 运算,取11b。  当我返回到第一个案例时、它在 ID 字段中 ORS 00B、而不首先清除 ID 字段、因此 ID 字段保持为11b。

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

    Kent 和 Bruce、大家好、

    感谢您的澄清! 我现在了解问题、并已将其报告给 TI 内部的相应团队成员。

    此致、

    Angelo

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

    肯特和布鲁斯:

    您将是正确的。 感谢您指出这一点。 请对您的本地版本进行适当的更改、我们将在下一个 MSP430Ware 版本中添加您的修复程序。

    谢谢、

    Wallace