Hi TI team:
1、在使用MSP430FR2433的TA0R不计数,发现如果执行延时函数,TA0R能够正常计时,但是其他的语句无法让TA0R计时;
2、想了解下在主频配置或者定时器初始化有什么不一样的地方?现在用的是16M主频,对输入时钟进行了8分频,8s中断唤醒一次
3、又测试发现如果定时器时钟源选择ACLK只有经过延时函数定时器可以正常计时,其他语句指令不计时,时钟源选择SMCLK时,所有指令都可以正常计时。附件是测试程序。
main() { _DINT(); WDTCTL = WDTPW | WDTHOLD; PortInit(); Ucs_Init_16M(); // Ucs_Init_1M(); TimerA0CounterSetup(); while(1) { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 WDTCTL = WDTPW | WDTCNTCL | WDTSSEL0_L | WDTIS_2; UCA1IE |= UCRXIE; APP_RTCPro_Delay_ms(2); uiTranceiver=TA0R; do { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 if(TA0R>=uiTranceiver)uiTemp=TA0R; else uiTemp=TA0R+0x8000; if((uiTemp-uiTranceiver)> T50ms) //400ms { P1OUT |= BIT3; P3OUT |=BIT3;; break; } }while((uiTemp-uiTranceiver)<(T200ms+T200ms)); P1OUT |= BIT3; UCA1IE &= ~UCRXIE; } } void Ucs_Init_16M(void) { FRCTL0 = FRCTLPW | NWAITS_1; P2SEL0 |= BIT0 | BIT1; do { CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag SFRIFG1 &= ~OFIFG; } while (SFRIFG1 & OFIFG); // Test oscillator fault flag __bis_SR_register(SCG0); // disable FLL CSCTL3 |= SELREF__XT1CLK; CSCTL0 = 0; // clear DCO and MOD registers CSCTL1 &= ~(DCORSEL_7); // Clear DCO frequency select bits first CSCTL1 |= DCORSEL_5; // Set DCO = 16MHz CSCTL2 = FLLD_0 + 487; // DCOCLKDIV = 16MHz __delay_cycles(3); __bic_SR_register(SCG0); // enable FLL while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // FLL locked CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK; // MCLK=SMCLK=DCO; ACLK=XT1 PM5CTL0 &= ~LOCKLPM5; } void TimerA0CounterSetup(void) { TA0CCTL0 |= CCIE; // CCR0 interrupt enabled TA0CCR0 = 0x8000; TA0CTL = TASSEL_1 | TACLR | ID_3 | MC_1; // ACLK, clear TAR,8��Ƶ��Up to CCR0 }