我使能定时器的RTC模式后,会给它加载一个初始值,然后有一个中断处理函数进行匹配,但是过了一段时间后,我需要精确地时间,然后给RTC重新加载一个初始值,但是中断为什么还是按原先的加载的初始值在匹配,进行一秒一个中断,我确定初始值和后面加载值都加载进去了。程序附下:
初始化函数
void timerInitRTC(unsigned long ulVal)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeTimer( GPIO_PORTD_BASE, GPIO_PIN_4);
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER3);
TimerConfigure(TIMER3_BASE, TIMER_CFG_RTC); //设置为RTC模式
GPIOPinConfigure(GPIO_PD4_T3CCP0);//把PD4作为频率输入
TimerLoadSet(TIMER3_BASE, TIMER_A, ulVal);
TimerMatchSet(TIMER3_BASE, TIMER_A, 1 + ulVal);
//使能定时器中断
TimerIntEnable(TIMER3_BASE, TIMER_A);
IntEnable(INT_TIMER3A);
IntMasterEnable( );
//使能RTC计数
TimerRTCEnable(TIMER3_BASE);
TimerEnable(TIMER3_BASE, TIMER_A);
}
中断处理函数
void Timer3A_ISR(void)
{
uint32_t ulStatus;
uint32_t ulVal;
uint32_t ucVal;
ulStatus = TimerIntStatus(TIMER3_BASE, true);
TimerIntClear(TIMER3_BASE, ulStatus);
if (ulStatus & TIMER_RTC_MATCH)
{
ulVal = TimerValueGet(TIMER3_BASE,TIMER_A); //读取当前RTC计时器值
TimerMatchSet(TIMER3_BASE, TIMER_A, 1 + ulVal); // 重新设置RTC匹配值
ucVal = GPIOPinRead(GPIO_PORTK_BASE, GPIO_PIN_2 ); // 反转LED灯
GPIOPinWrite(GPIO_PORTK_BASE, GPIO_PIN_2, ~ucVal);
}
}
|