一、PIT是什么
PIT即Periodic interrupt timer,周期中断定时器,PIT模块是一组计时器,可用于引发中断和触发DMA信道。PIT主要功能是定时器产生DMA触发脉冲和定时器产生中断,且中断可屏蔽,每个定时器有独立的超时时间。
二、PIT初始化流程
void PIT_init(unsigned int number_ms)
{
/*Trun on PIT clocks*/
SIM_SCGC6|=SIM_SCGC6_PIT_MASK;
/*Enable PIT Module*/
PIT_MCR&=~(PIT_MCR_MDIS_MASK);
/*Setup the channel0 of PIT*/
PIT_LDVAL0=20000*number_ms;
/*Enable the IRQ of channel0,PIT*/
PIT_TCTRL0|=PIT_TCTRL_TIE_MASK;
/*Running channel0,PIT*/
PIT_TCTRL0|=PIT_TCTRL_TEN_MASK;
}
step1:使能PIT模块的时钟
SIM_SCGC6|=SIM_SCGC6_PIT_MASK;
step2:PIT模块使能
PIT_MCR&=~(PIT_MCR_MDIS_MASK);
即设置MDIS为0,且FRZ为1.
启用PIT时钟,且在调试模式下会停止寄存器。
step3:设置定时器超时时间,以ms为单位
PIT_LDVAL0=20000*number_ms;
设置定时器超时时间为number_ms毫秒。
设置计时器启动值后,计时器将倒计时,直到达到0,然后它将生成一个中断并再次加载该寄存器值。向该寄存器写入新值不会重新启动计时器;相反,该值将在计时器过期后加载。要中止当前周期并使用新值启动计时器周期,必须禁用并再次启用计时器。
step4:使能中断请求
PIT_TCTRL0|=PIT_TCTRL_TIE_MASK;
启用定时器中断。当中断处于挂起状态或设置了TFLGn[TIF]时,启用中断将立即导致中断事件。为了避免这种情况,必须首先清除相关的TFLGn[TIF]。
step5:使能定时器
PIT_TCTRL0|=PIT_TCTRL_TEN_MASK;