请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR2433 工具/软件:Code Composer Studio
我一直在阅读,但仍然不能让它正常工作...
我想使用TimerA0校准VLO。 使用下面的代码,我尝试输入两次interreupt并获得时差,然后使用它校准VLO,因为知道时间段为 应用报告SLAA693A–2016年1月–2016年2月修订建议
我的问题是,时间一直在触发,并且 在调试器上从未清除过TA0CCTL1 &=~CCIFG...
有什么建议?
所以我有这个VLO功能
void cal_vLO (void) { cap_cnt1 = 0; //第一个捕获计数器 cap_cnt2 = 0; //第二捕获计数器 RTCMOD = RTC_CAL -1; //输出RTC脉冲每个RTC_CAL VLO时钟周期 RTCCTL = RTCSS__VLOCLK | RTCSR | RTCPS__1024; TA0CCTL1 |= CM_1 | CCIS_1 | CAP | CCIE;// Timer0_A1设置 ///捕获上升边缘, //在RTC输出CCIS_1上捕获 / CCIE启用中断 //启用捕获模式, TA0CTL || tassel__ACLK | MC_2 | TALCLR;//使用ACLK作为时钟源,清除TALCL //连续模式下启动计时器 __bis_sr_register (LPM3_bits | GIE); //第一次唤醒 __no_operation(); __bis_sr_register (LPM3_bits); //再次唤醒以获得第二次计数 计数= cap_cnt2 - cap_cnt1; TA0CTL = 0; //停止计时器 TA0CCTL0 = 0; RTCCTL = 0; //停止RTC } #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__) #pragma vector = TIMER0_A1_vector __interrupt void TIMER0_ISR(void) #Elif defined(__GNUC__) _attribute__((A3(TIMER0_Vector __void TI_ISR_1) #endif { Switch(__偶 数_in_range(TA0IV,TA0IV_TAIFG)) { CASE TA0IV_NONE: 中断; //不中断 案例TA0IV_TACR1: IF (CAP_Cnt1 == 0) { CAP_Cnt1 = TA0CCR1;//第一个捕获计数 器} 否则 { CAP_Cnt2 = TA0CCR1;/第二捕获计数 器} / TA0CCTL1 &=~CCIFG; //清除计时器IFG __BIC_SR_REGISTER_ON_EXIT (LPM3_bits);//退出LPM3 中断; //未使用CCR1 CASE TA0IV_TACCR2: 中断; //未使用CCR2 CASE TA0IV_TAIFG: 中断; //溢出 默认: 中断; } }