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.
你(们)好
我正在处理计时器 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; } }
>HWREG16 (timer_B0_BASE + OFS_TBxCTL)|= MC;
符号"MC"与"MC_3"相同、后者请求向上/向下计数模式。 在此模式下、周期为2*CCR0、但第一个中断(EQU0)位于1*CCR0 [参考用户指南(SLAU445I)第14.2.3.4]节。 我怀疑您需要向上计数模式:
>HWREG16 (timer_B0_BASE + OFS_TBxCTL)|= MC_1; //以向上计数模式启动计时器
您好、Bruce、
再次感谢您的帮助
最恰当的考虑