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.
我设想是这样的:timer设置成,脉冲下降沿捕获,捕获到下降沿读出TACCR1作为时间,如果计数器溢出了,我用变量记住溢出的次数,
但是如果捕获事件和溢出事件同时发生(前后差几个微妙,中断没处理过来),TAIV 标志是不是只能保存一个事件,如果没及时处理完成,会被后面的事件覆盖?
用什么方法能解决这个问题?
以MSP430F5529为例:
17.2.6.2 TAxIV, Interrupt Vector Generator
对TAIV寄存器的任何访问,读取或写入都将自动复位最高未决中断标志。
另外17.2.6.2.1 TAxIV Software Example给出了例子
建议您使用下面的方式
//╞════════════════════════════ TA0 ISR ══════════════════════════════════════╡ #pragma vector=TIMER0_A0_VECTOR // Timer A0_0 interrupt service routine __interrupt void Timer_A0 (void) // TA0CCR0 CCIFG { event.alert = 1; // ALERT TIMER __bic_SR_register_on_exit(LPM3_bits); } //╞───────────────────────────────────────────────────────────────────────────╡ #pragma vector = TIMER0_A1_VECTOR // Timer A0_A1 Interrupt vector (shared) __interrupt void TIMER0_A1_ISR (void) { switch(__even_in_range(TA0IV,0x0A)) { case TA0IV_NONE: break; // Vector 0: No interrupt case TA0IV_TACCR1: break; // Vector 2: TA1CCR1 CCIFG case TA0IV_TACCR2: break; // Vector 4: TA1CCR2 CCIFG case TA0IV_6: break; // Vector 6: Reserved CCIFG case TA0IV_8: break; // Vector 8: Reserved CCIFG case TA0IV_TAIFG: break; // Vector 10: TA1IFG (rollover) default: break; } }