K60学习之PIT周期性定时模块

PIT(周期性定时器模块)
原理部分:
相当于Systick的增强版
输入时钟是bus clock
能够产生中断或是触发triggger信号
一些重要的寄存器
PIT_MCR Module Control Register
MDIS 为0时使能PIT ;为1时禁止PIT
FRZ 在debug模式下,为0时使能PIT ;为1时禁止PIT
PIT_LDVALn Timer Load Value Register
存储一个计数值,减法计数,到0时产生一个中断或是触发一个事件
在计数过程中,如果写入新的值,不会打断计数,而只是会在本次计数结束之后再写入
要想废除本次计数,必须先关闭计数器,再打开
PIT_CVALn Current Timer Value Register
用于存储当前正在计数的值
PIT_TCTCLn Timer Control Register
TIE 0表示不产生中断
TEN 0表示计数器禁止,1表示计数器开启
PIT_TFGn Timer Flag Register
TIF 0表示正在计数;1表示计数结束 ;写1的时候清零
应用部分:

//初始化PIT
    PIT_InitTypeDef PIT_InitStruct1;  //申请一个PIT模块
    PIT_InitStruct1.chl = HW_PIT_CH0; /*使用通道0进行定时 */
    PIT_InitStruct1.timeInUs = 1000*1000; /* 定时时间设置 */
    PIT_Init(&PIT_InitStruct1); //初始化
    PIT_CallbackInstall(HW_PIT_CH0, PIT_ISR); //注册中断函数
    PIT_ITDMAConfig(HW_PIT_CH0, kPIT_IT_TOF, true);
    //开启 PIT中断

对函数PIT_Init()的解释:
1.在外部的结构体PIT_InitStruct1已经定义了通道号和定时的时间。
2.在初始化内部,需要完成通道的设置,定时时间的设置,为了后续调用的方便,还加入了一部分代码将计数值换算为us和ms;
3.将定时时间换算成计数值放到PIT_LDVALn 寄存器中;
4.修改PIT_TCTCLn 的TEN 位,设置允许计数;
5.最后设置PIT_MCR 打开PIT模块。
后面的注册回调函数和打开中断与之前的类似。

你可能感兴趣的:(K60学习之PIT周期性定时模块)