PIT是个非常准的定时中断(相比delay函数来说),说好的1ms触发一次中断就是1ms触发一次。
PIT是平衡直立车的灵魂,因为角度计算,速度计算,和方向控制都高度依赖于积分,而积分的“单位时间”5ms靠的就是PIT中断。
PIT中断的配置也很简单。设置好中断时间间隔(这里是1ms),写好中断处理函数,就可以啦。
要注意的是,中断处理函数要尽可能简单,把复杂的工作留给主循环。
K60
这里用野火的底层库,详情请参考《三天入门 Cortex-M4——Kinetis 系列》PIT 定时中断模块。
初始化
函数原型
void pit_init(PITn,u32 cnt);
调用示例
pit_init(PIT0,100000); //初始化 PIT0,定时 100000 个时钟周期
中断处理
中断重定向
#undef VECTOR_084
#define VECTOR_084 PIT0_IRQHandler //重新定义 84 号中断为 PIT0_IRQHandler 中断
extern void PIT0_IRQHandler(); //PIT0 定时中断服务函数
#define VECTOR_084 PIT0_IRQHandler //重新定义 84 号中断为 PIT0_IRQHandler 中断
extern void PIT0_IRQHandler(); //PIT0 定时中断服务函数
中断处理函数
void PIT0_IRQHandler(void)
{
PIT_Flag_Clear(PIT0); //清中断标志位
// Do sth.
}
{
PIT_Flag_Clear(PIT0); //清中断标志位
// Do sth.
}