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.
CCRO与CCR1的区别,一个定时器不是只能装载一个初值吗,msp430的设置里的CCR1,又有什么用呢,同时设置了CCR0和CCR1,可不可以。我的理解是CCRO处定时器中断一下,CCR1处定时器中断一下,从而达到一个定时器,可以做两个不一样的中断。但是中断服务程序的中断变量,又是属于哪一个?
jiayuan song,
MSP430G2452只有一个Timer-A, 但此Timer_A有3个可配置的 capture/compare registers。
即如果是用作定时器,一般是工作在Capture mode,可以最多同时支持3路定时器.
关于中断向量,CCR0单独对应一个中断向量,其他CCIFG flags and TAIFG 共享一个中断向量。需要在其中断程序里通过判断Flag位来确认共享中断发生时是哪个flag引起的,再做对应的处理。
具体程序,你可以参考一下MSP430G2452 code example看一下。
CCR0中断向量服务程序:
// Timer A0 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
CCR1和其他中断对应的中断向量服务程序:
// Timer_A3 Interrupt Vector (TA0IV) handler
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A1_VECTOR))) Timer_A (void)
#else
#error Compiler not supported!
#endif
{
switch( TA0IV )
{
case 2: // CCR1
{
P1OUT ^= 0x01; // Toggle P1.0
CCR1 += 50000; // Add Offset to CCR1
}
break;
case 4: break; // CCR2 not used
case 10: break; // overflow not used
}
}