主题中讨论的其他器件:MSP430WARE
不确定是否有更好的方法报告 driverlib 代码的错误。 但我注意到以下情况:
在 driverlib 代码的 timer_b.c 文件中、诸如 Timer_B_initUpMode()之类的函数不会清除 TBxCTL 寄存器的 ID 字段位。 因此、如果您在不同的时间将同一个计时器用于两种不同的用途、并且这两种不同的用途需要不同的 ID 字段设置、那么在 ID 字段中的位已设置且现在您希望它们清除后、您将无法获得正确的配置。
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.
不确定是否有更好的方法报告 driverlib 代码的错误。 但我注意到以下情况:
在 driverlib 代码的 timer_b.c 文件中、诸如 Timer_B_initUpMode()之类的函数不会清除 TBxCTL 寄存器的 ID 字段位。 因此、如果您在不同的时间将同一个计时器用于两种不同的用途、并且这两种不同的用途需要不同的 ID 字段设置、那么在 ID 字段中的位已设置且现在您希望它们清除后、您将无法获得正确的配置。
肯特、您好!
您观察到的行为实际上是预期的功能、而不是错误。 设置 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。