定时器内部具有一个24-bit的向上计数器,计数器开始工作的时候计数器的值可以通过 TDR读取到。同时如果计数器的值等于 TCMP寄存器的时候,会触发相应的中断动作。
示例程序摘取
- //定时器时钟选择并使能
- /* Select HXT as the clock source of TIMER0 */
- CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, MODULE_NoMsk);
- /* Enable TIMER0 module clock */ CLK_EnableModuleClock(TMR0_MODULE);
- //定时器配置模式和定时频率
- /* Open Timer0 frequency to 0.5 Hz in periodic mode, and enable interrupt */
- TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 2);
- //中断使能
- TIMER_EnableInt(TIMER0);
- // NVIC 中断使能
- /* Enable Timer0 NVIC */
- NVIC_EnableIRQ(TMR0_IRQn);
- //启动定时器并产生0.5s的周期中断
- TIMER_Start(TIMER0);
- //中断服务程序,定时器中断发生时翻转LED IO电平
- void TMR0_IRQHandler(void)
- {
- if(TIMER_GetIntFlag(TIMER0) == 1)
- {
- /* Clear Timer0 time-out interrupt flag */
- TIMER_ClearIntFlag(TIMER0);
- P36^=1;
- }
- }
|