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);}
|