NXP MPC5744P-PIT模块(周期中断定时器)
1.功能描述
在周期中断定时器使能的情况下,定时器加载被LDVAL寄存器指定的计数初值,然后递减计数,当递减到0时自动重载LDVAL指定的计数初值并触发一次中断。中断的使能由TCTR寄存器TIE位控制。
2.PIT初始化
5744P含有4个周期中断定时器,各个定时器可以分别设置不同的定时器周期,也可以进行两个定时器的链接以形成定时周期更长的定时器,PIT定时器的结构如下:
PIT定时器的一般配置过程为:
1)根据系统配置情况选择外设运行模式。由时钟模块可知,外设可设置外设配置寄存器来决定自身在不同模式的运行情况,PIT定时器也是这样
2)使能PIT模块,5744P中各个外设模块一般需要软件使能来使用;
3)关闭指定定时器以进行初始化,PIT模块有4个定时器,使用时需要指定具体的定时器,可为0~3;
4)对指定定时器加装初值;
5)设置指定定时器中断优先级;
6)使能指定定时器的定时周期中断;
7)使能指定定时器以开始计时。
示例代码如下:
/******************************************************
* 函数名 PIT_Init
* 功能 对指定定时器初始化并设置指定定时周期
* 输入参数
* PIT_TIMERx
* 定时器号 指定要初始化的定时器 x可为0~3 如
* PIT_TIMER0 选择定时器0,PIT_TIMERx可以直接写为0,1,2,3
* PIT_SetMS
* 定时器周期 单位为毫秒(ms)
* 返回值 无
* 示例 PIT_Init(PIT_TIMER0,1);//初始化PIT定时器0并设置定时周期为1ms
******************************************************
*/
static void PIT_Init(uint8_t PIT_TIMERx,uint8_t PIT_SetMs)
{
MC_ME.PCTL30.B.RUN_CFG=0; //选择外设运行模式0
PIT_0.MCR.B.MDIS=0; //打开PIT模块
PIT_0.TIMER[PIT_TIMERx].TCTRL.B.TEN=0; //关闭TIMERx
PIT_0.TIMER[PIT_TIMERx].LDVAL.R=PIT_SetMs*PIT_TRANS_RATE; //设置TIMERx初始值
INTC_0.PSR[226].R = 0x800A; //设置中断优先级为10
PIT_0.TIMER[PIT_TIMERx].TCTRL.B.TIE=1; //使能TIMERx中断
PIT_0.TIMER[PIT_TIMERx].TCTRL.B.TEN=1; //使能TIMERx模块
}
3.中断函数设计
在PIT初始化完成后,可设计对应的中断函数,中断函数内必须清除对应定时器的中断标志位,中断函数一般设计步骤如下:
1)设计中断函数PIT_TIMEx_Isr
2)在工程自动含有的intc_SW_mode_isr_vectors_MPC5744P.c中声明中断函数PIT_TIMEx_Isr
3)将中断向量表内对应PIT_TIMERx的中断向量改为中断函数PIT_TIMEx_Isr
示例代码如下:
在isr.c函数设计中断函数
void PIT_TIMERx_Isr()
{
PIT_ClearFlag(PIT_TIMERx);
.
.
.
}
在intc_SW_mode_isr_vectors_MPC5744P.c声明中断向量函数
extern void PIT_TIMERx_Isr(void);
在将中断向量表内对应PIT_TIMERx的中断向量改为中断函数PIT_TIMEx_Isr,定时器0~3对应的中断向量号对应位226~229.
(uint32_t) &dummy, /* Vector # 223 Reserved for Ethernet_1_2 */
(uint32_t) &dummy, /* Vector # 224 Reserved for Real Time Counter (RTC) */
(uint32_t) &dummy, /* Vector # 225 Reserved for Autonomous Periodic Interrupt (API) */
(uint32_t) &PIT_TIMERx_Isr, /* Vector # 226 Periodic Interrupt Timer (PIT_0) channel 0*/
(uint32_t) &dummy, /* Vector # 227 Periodic Interrupt Timer (PIT_0) channel 1 PIT_0 */
(uint32_t) &dummy, /* Vector # 228 Periodic Interrupt Timer (PIT_0) channel 2 PIT_0 */
(uint32_t) &dummy, /* Vector # 229 Periodic Interrupt Timer (PIT_0) channel 3 PIT_0 */
(uint32_t) &dummy, /* Vector # 230 Reserved for PITx PIT */
(uint32_t) &dummy, /* Vector # 231 Reserved for PITx PIT */
(uint32_t) &dummy, /* Vector # 232 Reserved for PITx PIT */
(uint32_t) &dummy, /* Vector # 233 Reserved for PITx PIT */
(uint32_t) &dummy, /* Vector # 234 Reserved for PITx PIT */
(uint32_t) &dummy, /* Vector # 235 Reserved for PITx PIT */