微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Cortex M3S811学习笔记-TIMER32

Cortex M3S811学习笔记-TIMER32

时间:09-14 来源:互联网 点击:
今天把32位下的定时功能搞清楚了,首先32位下只有三个功能,32位单周期定时,32位多周期定时,和一个要外接时钟的RTC。RTC 我们暂时用不上,先不管。

把握大局,就是用来得到精确时间的一个定时器,单周期只跑一次,即使是你用TimerLoadSet(TIMERn_BASE,TIMER_A,要赋的值);他也不会跑了,是没有用的。说跑一次就是一次; 跑一次还是N次是由定时器模式设置达到的:TIMERMODULE(TIMER2_BASE,TIMERS320);


来说下具体如何操作

1:使能定时器模块,DEVICEEN(SYSCTL_PERIPH_TIMER2);

2:设置模式 TIMERMODULE(TIMER2_BASE,TIMERS32);

3: 装值 TimerLoadSet(TIMER2_BASE,TIMER_A,要装的值);

4: 启动定时器 TimerEnable(TIMER2_BASE,TIMER_A);


以上就是完整过程,TIEMR2到0后自己动变为装载值。

可以用查询的方法,确定具体时间干什么事;

if(TimerValueGet(TIEMR1_BASE,TIMERA)>多少){你要干什么事情};


下面是用中断的方法进入中断,然后处理中断程序,有中断,就要写中断程序,麻烦;

以下是具体步骤:

1:同上,使能定时器模块,DEVICEEN(SYSCTL_PERIPH_TIMER1)

2; 同上,设置定时器模式,TIMERMODULE(TIMER1_BASE,TIMERS32);

3:注意,这里就不同了,开定时器溢出中断;与GPIOINTENABLE对比,

TimerIntEnable(TIMER_BASE,TIMERAOUT);

(TIMERAOUT名为溢出中断,就是减到了0不能减了,就溢出了,需从头开始)

4:开总的TIMER中断, IntEnable(INT_TIMER1A);

5:开CPU的中断, IntMasterEnable();


6:同上装初值 TimerLoadSet(TIMER1_BASE,TIMER_A,要装的值)

7:启动定时器,开始计数 TimerEnable(TIMER1_BASE,TIMER_A);

最后一步:时间到了进中断,你需要进处理中断,也就是你要写的中断程序(切记,一定要修改中断向量表中的名字和申明,在startup.s里面)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top