您的位置:首页 > 其它

恩智浦大学生智能车学习(Superstorm)定时器PIT、LPTMR、FTM、SysTick

2018-10-19 19:54 141 查看

K60有4个PIT模块,可用于定时、计时、延时作用。

智能车学习总结:

INT_COUNT  0xFFFF(这是最大值)   //LPT产生中断的计数次数。

PIT模块,LPTMR模块,SysTick模块。

SysTick:滴答定时器

FTM产生PWM脉冲,所谓的定时就是设置一定时间,时间到了就执行程序。

led_turn(LED0)   // 闪烁LED0

PIT_Flag_Clear(PTTO);//清楚中断标志

lptmr_timing_ms(uint16 ms);//定时(ms)毫秒

lptmr_delay_us(uint16 us);//延时(us)

注意:如果你启动(开始计时)的时候用的us,那么你计时(获取时间)的时候也要用us,ms同理。

[code]lptmr_time_start_ms(void);//开始计时(ms)

lptmr_time_get_ms(void);//获取计时时间

lptmr_time_start_us(void);//开始计时(us)

lptmr_time_get_us(void);//获取计时时间

关闭计时器:lptmr_time_close();//关闭计时器都是统一的

 

由如上两个图片可以得出PIT模块,LPTMR模块两个模块的计时函数差不多,在用法上。

这是第二个有一个关闭的函数,其实用不用无所谓,因为再次启动的时候就会清零。

同一时间只能进行一个脉冲计数。

Cortex-M是单片机。内核自带的滴答定时器。好比是人的心脏会砰砰跳。

[code]core_clk_khz    //内核时钟,因为内核时钟调频会调很高,所以计时时间很短,所以难以准确,所以一般不用来计时。

上面设置中断服务函数为SysTick_IRQHandler就可以直接调用下面设置的中断服务函数,下面设置中断服务函数, (两个函数在同一个页面,放在main.c文件)

为什么上面设置计时100ms,因为他的计时时间是很短的,如果设置1000ms的话,会超出计算配置,比如可能就崩溃了,或者完全记录不准啥的。

Assertion failed in  断点失败,在那个位置,都会一一显示出来。问题出现在如下,是时间超出范围的原因。

如果我们并不想将就于100毫秒的束缚,但是我们有不得不在那里填一个100毫秒,那么我们的办法是,循环!怎么循环?怎么实现了循环,就是一次次的调用,首先调用 SysTick_IRQHandler函数作为 set_vector_handler的参数,如果要让这个参数起到作用,那么就要 SysTick_IRQHandler 函数执行 led_turn(LED0);当然就是让灯闪烁啦,当然,满足条件i==10才让灯闪烁,当然满足条件的时候,也经过了十次调用了,在此过程中 led_init(LED0);也不断初始化,systick_timing_ms(100);也执行了十次。当 i==10;时,调用led_turn(LED0);开始闪烁。闪烁完紧接着给 i 初始为0;然后又开始新的一轮!

很多实时系统的定时器就是使用这个方法实现的!

集成到中断NVIC模块上,一般用作操作系统的心脏,提供定时切换任务。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: