概述
介绍 2016定时器设置和计算的方法:
1.定时器采用减一的计数方式,减到0X00时触发中断标志。
2.定时器溢出后会自动重载装载值。
3.定时器计算方法 以8M晶振为例
1>没有使用预分频,则每经过1/8000000秒则计数值减1;
2>使用100预分频,则每经过(1/8000000)*100秒计数值减1,如需要定时500ms,则装载值=0.5/((1/8000000)*100)=0.5*80000=40000。
4.进入中断后软件清除中断标志位
#define TIMER_125MS 10000UL //定时器125MS 装载值
#define TIMER_250MS 20000UL //定时器250MS 装载值
#define TIMER_500MS 40000UL //定时器500MS 装载值
/*********************************************************************************************************
** Function name: timer0Init
** Descriptions: Timer0的初始化函数
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: siw
** Created date: 2009.12.28
*********************************************************************************************************/
void timer0Init( void )
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // 使能定时器模块
TimerDisable(TIMER0_BASE, TIMER_A);
TimerDisable(TIMER0_BASE, TIMER_B);
TimerConfigure( TIMER0_BASE ,TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PERIODIC | TIMER_CFG_A_PERIODIC); //设置两个定时器为16位
TimerControlStall(TIMER0_BASE, TIMER_A, true); //设置进入调试模式时,停止计数
TimerControlStall(TIMER0_BASE, TIMER_B, true); //设置进入调试模式时,停止计数
TimerPrescaleSet(TIMER0_BASE , TIMER_A , 99); //预先进行100分频
TimerPrescaleSet(TIMER0_BASE , TIMER_B , 99); //预先进行100分频
TimerLoadSet(TIMER0_BASE , TIMER_A , TIMER_125MS); //125MS中断一次
TimerLoadSet(TIMER0_BASE , TIMER_B , TIMER_500MS); //500MS中断一次
TimerIntEnable(TIMER0_BASE , TIMER_TIMA_TIMEOUT);// 使能TimerA超时中断
TimerIntEnable(TIMER0_BASE , TIMER_TIMB_TIMEOUT);// 使能TimerB超时中断
IntEnable(INT_TIMER0A); // 使能TimerA中断
IntEnable(INT_TIMER0B); // 使能TimerB中断
IntMasterEnable(); // 使能处理器中断
TimerEnable(TIMER0_BASE , TIMER_A);
TimerEnable(TIMER0_BASE , TIMER_B);
}
/*********************************************************************************************************
** Function name: Timer0A_ISR
** Descriptions: Timer0_A定时器中断服务程序 125MS中断一次
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: siw
** Created date: 2009.12.28
*********************************************************************************************************/
void Timer0A_ISR(void)
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
//清除定时器中断源,在进入中断后要清除中断标志,否则会不断的进入中断。
timer0ATrick++;
ClkFlagA = BIT0;
}
最后
以上就是俊秀小熊猫为你收集整理的『Cortex M3 – LM2016 学习笔记』 定时器的全部内容,希望文章能够帮你解决『Cortex M3 – LM2016 学习笔记』 定时器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复