TImer已设置成 周期性 产生 TimeOut中断(比如间隔10s),但特殊情况下,希望Timer 下一次在 第6s时 产生一个TimeOut 中断。 后面又是正常10s 一次中断。
请教一下大家, 该怎么做?
可能需要用到 TimerLoadSet, TimerValueSet
Terry Han:
参考Timer例程,进入定时器中断后,修改下一次的定时时间为6s即可,如需要修改为10s在下一次的中断服务函数中修改,可以通过一个标志位来进行区分6s还是10s
// // Initialize board configurations BoardInit(); // // Pinmuxing for LEDs // PinMuxConfig(); // // configure the LED RED and GREEN // GPIO_IF_LedConfigure(LED1|LED3);
GPIO_IF_LedOff(MCU_RED_LED_GPIO); GPIO_IF_LedOff(MCU_GREEN_LED_GPIO);
// // Base address for first timer // g_ulBase = TIMERA0_BASE; //定时器0 // // Base address for second timer // g_ulRefBase = TIMERA1_BASE; //定时器1 // // Configuring the timers // TIMER_CFG_PERIODIC-32位宽度 TimerA0/TimerA1的设置值都是TIMER_A 0不分频 // 注意预分频值只对16位定时器有效,对32位定时器无效! // TRM-When using Timer A and Timer B in concatenated mode, only the Timer A control and status bits must be used 当采用32位时仅有TimeA控制标志位有效!因此–>TIMER_A Timer_IF_Init(PRCM_TIMERA0, g_ulBase, TIMER_CFG_PERIODIC, TIMER_A, 0); //其实 TIMER_A并未起作用,其传递的函数是分频函数,对32位定时器无效! Timer_IF_Init(PRCM_TIMERA1, g_ulRefBase, TIMER_CFG_PERIODIC, TIMER_A, 0);
// // Setup the interrupts for the timer timeouts. // Timer_IF_IntSetup(g_ulBase, TIMER_A, TimerBaseIntHandler); Timer_IF_IntSetup(g_ulRefBase, TIMER_A, TimerRefIntHandler);
// // Turn on the timers feeding values in mSec // Timer_IF_Start(g_ulBase, TIMER_A, 500); Timer_IF_Start(g_ulRefBase, TIMER_A, 1000);