请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2155 你(们)好
我正在处理计时器 TB0 CCR0例程
我在这里有一个问题、看看 TI 专家是否能给我一些指示。
我简化了应用程序、以便计时器运行240个时钟周期并重新启动。
我发现、在开始时、计时器每210个时钟周期启动一次。 我希望时钟周期为240。
120脚踢后、对停止和启动计时器进行编程。
计时器在重启后每420个时钟周期启动一次。
不确定我错过了什么
我在此附上一个简单的代码。
谢谢
unsigned int count;
unsigned int delta[120];
unsigned int pre_rtc;
void RTCInit()
{
HWREG16(RTC_BASE + OFS_RTCCTL) &= ~(RTCSS_3 | RTCPS_7);
HWREG16(RTC_BASE + OFS_RTCMOD) = 32767;
RTC_start(RTC_BASE, RTCSS_1);
}
void InitTimer()
{
HWREG16(TIMER_B0_BASE + OFS_TBxCTL) = TBSSEL__SMCLK;
HWREG16(TIMER_B0_BASE + OFS_TBxCCR0) = 239;
HWREG16(TIMER_B0_BASE + OFS_TBxCCTL0) |= CCIE
HWREG16(TIMER_B0_BASE + OFS_TBxCTL) |= MC;
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_B0_VECTOR
__interrupt void TIMER0_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) TIMER0_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{
delta[count] = RTCCNT - pre_rtc;
pre_rtc = RTCCNT;
count++;
if (count>=120)
{
HWREG16(TIMER_B0_BASE + OFS_TBxCTL) &= ~MC;
// process data
HWREG16(TIMER_B0_BASE + OFS_TBxCTL) |= MC;
}
}