TIMER_A_STOP_MODETIMER_A_UP_MODE //增计数模式 计数到CCR0,置0重计
TIMER_A_CONTINUOUS_MODE //连续计数模式 连续计数,计数到0FFFFh之后从0开始重新计数,无法更改频率
TIMER_A_UPDOWN_MODE //增减计数模式 0-ccr-0定时器中断分为TAIE中断与CCIFG0中断:TAIE中断是计数值到达CCR0(或者CCR1)时会产生中断,CCIFG0中断是定时器溢出时产生中断(在归0的那瞬间)。其分别对应的中断服务函数为:
#pragma vector=TIMER0_A0_VECTOR__interruptvoid TIMER0_A0_ISR (void)
{ GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN1);}#pragma vector=TIMER0_A1_VECTOR__interruptvoid TIMER0_A1_ISR (void){ switch(TA0IV) { case TA0IV_NONE: break; case TA0IV_TACCR1: break; case TA0IV_TACCR2: break; case TA0IV_TACCR3: break; case TA0IV_TACCR4: break; case TA0IV_5: break; case TA0IV_6: break; case TA0IV_TAIFG: GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN1);//此为等于CCR0时 break; default: break; }}
Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,6249);//更改CCR1的值,但在CCR1产生中断其频率只与CCR0有关,更改CCR0无法改变其频率周期
Timer_A_enableCaptureCompareInterrupt(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1);//使能CCR1中断定时器的初始化函数:
void Timer_A_Init(void){ Timer_A_initUpModeParam htim = {0}; htim.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; //时钟源选为SMCLK = 1048576 HZ
htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32; //32分频 32768
htim.timerPeriod = 16384 - 1; //计数值设为16374(32768/2=16374),定时0.5s
htim.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_ENABLE; //使能TALE中断
htim.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE;
htim.timerClear = TIMER_A_DO_CLEAR; //把定时器的定时计数器,分频计数器的计数值清零
htim.startTimer = true; //初始化后立即启动定时器 //配置定时器A为增计数模式
Timer_A_initUpMode(TIMER_A0_BASE, &htim);}
|