9 - 中断:PIT定时中断

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 定时中断服务函数

中断处理函数

void PIT0_IRQHandler(void)
{
  PIT_Flag_Clear(PIT0);                 //清中断标志位
  // Do sth.
}

继续阅读“9 - 中断:PIT定时中断”