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同理。
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是单片机。内核自带的滴答定时器。好比是人的心脏会砰砰跳。
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模块上,一般用作操作系统的心脏,提供定时切换任务。
如果觉得《恩智浦智能车(CNYouth)》对你有帮助,请点赞、收藏,并留下你的观点哦!