imx6ull EPIT定时器

EPIT 的全称是: Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,
它主要是完成周期性中断定时的。学过 STM32 的话应该知道, STM32 里面的定时器还有很多 其它的功能,比如输入捕获、 PWM
输出等等。但是 I.MX6U 的 EPIT 定时器只是完成周期性中 断定时的,仅此一项功能!至于输入捕获、 PWM 输出等这些功能,
I.MX6U 有其它的外设来完 成。 EPIT 是一个 32 位定时器,在处理器几乎不用介入的情况下提供精准的定时中断,软件使 能以后
EPIT 就会开始运行, EPIT 定时器有如下特点:
时钟源可选的 32 位向下计数器。
12 位的分频值。
当计数值和比较值相等的时候产生中断。

在这里插入图片描述

这是个多路选择器,用来选择 EPIT 定时器的时钟源, EPIT 共有 3 个时钟源可选择,
ipg_clk、 ipg_clk_32k 和 ipg_clk_highfreq。
这是一个 12 位的分频器,负责对时钟源进行分频, 12 位对应的值是 04095,对应着14096 分频。
经过分频的时钟进入到 EPIT 内部,在 EPIT 内部有三个重要的寄存器:计数寄存器(EPIT_CNR)、加载寄存器(EPIT_LR)和比较寄存器(EPIT_CMPR),这三个寄存器都是 32 位的。
EPIT 是一个向下计数器,也就是说给它一个初值,它就会从这个给定的初值开始递减,直到减为 0,计数寄存器里面保存的就是当前的计数值。如果 EPIT 工作在 set-and-forget 模式下,当计数寄存器里面的值减少到 0, EPIT 就会重新从加载寄存器读取数值到计数寄存器里面,重新开始向下计数。比较寄存器里面保存的数值用于和计数寄存器里面的计数值比较,如果相等的话就会产生一个比较事件。
1、 EPIT 可以设置引脚输出,如果设置了的话就会通过指定的引脚输出信号。
2、产生比较中断,也就是定时中断。
EPIT 定时器有两种工作模式:
set-and-forget 和 free-running,这两个工作模式的区别如下:set-and-forget 模式: EPITx_CR(x=1, 2)寄存器的 RLD 位置 1 的时候 EPIT 工作在此模式下,在此模式下 EPIT 的计数器从加载寄存器 EPITx_LR 中获取初始值,不能直接向计数器寄存器写入数据。不管什么时候,只要计数器计数到 0,那么就会从加载寄存器 EPITx_LR 中重新加载数据到计数器中,周而复始。
free-running 模式: EPITx_CR 寄存器的 RLD 位清零的时候 EPIT 工作在此模式下,当计数器计数到0以后会重新从0XFFFFFFFF开始计数,并不是从加载寄存器EPITx_LR中获取数据。

EPITx_CR

在这里插入图片描述
寄存器 EPITx_CR 我们用到的重要位如下:
CLKSRC(bit25:24): EPIT 时钟源选择位,为 0 的时候关闭时钟源, 1 的时候选择选择Peripheral 时钟(ipg_clk),为 2 的时候选择 High-frequency 参考时钟(ipg_clk_highfreq),为 3 的时候选择 Low-frequency 参考时钟(ipg_clk_32k)。在本例程中,我们设置为 1,也就是选择 ipg_clk作为 EPIT 的时钟源, ipg_clk=66MHz。
PRESCALAR(bit15:4): EPIT 时钟源分频值,可设置范围 0~4095,分别对应 1~4096 分频。
RLD(bit3): EPIT 工作模式,为 0 的时候工作在 free-running 模式,为 1 的时候工作在 setand-forget 模式。本章例程设置为 1,也就是工作在 set-and-forget 模式。
***OCIEN(bit2):***比较中断使能位,为 0 的时候关闭比较中断,为 1 的时候使能比较中断,本
章试验要使能比较中断。
***ENMOD(bit1):***设置计数器初始值,为 0 时计数器初始值等于上次关闭 EPIT 定时器以后
计数器里面的值,为 1 的时候来源于加载寄存器。
EN(bit0): EPIT 使能位,为 0 的时候关闭 EPIT,为 1 的时候使能 EPIT。
在这里插入图片描述
寄存器 EPITx_SR 只有一个位有效,那就是 OCIF(bit0),这个位是比较中断标志位,为 0 的时候表示没有比较事件发生,为 1 的时候表示有比较事件发生。当比较中断发生以后需要手动清除此位,此位是写 1 清零的。
寄存器 EPITx_LR、 EPITx_CMPR 和 EPITx_CNR 分别为加载寄存器、比较寄存器和计数寄存器,这三个寄存器都是用来存放数据的,很简单。

EPIT 的配置步骤如下: 1、设置 EPIT1 的时钟源 设置寄存器 EPIT1_CR 寄存器的 CLKSRC(bit25:24)位,选择 EPIT1 的时钟源。 2、设置分频值 设置寄存器 EPIT1_CR 寄存器的 PRESCALAR(bit15:4)位,设置分频值。 3、设置工作模式 设置寄存器 EPIT1_CR 的 RLD(bit3)位,设置 EPTI1 的工作模式。 4、设置计数器的初始值来源 设置寄存器 EPIT1_CR 的 ENMOD(bit1)位, 设置计数器的初始值来源。 5、 使能比较中断 我们要使用到比较中断,因此需要设置寄存器 EPIT1_CR 的 OCIEN(bit2)位,使能比较中断。 6、设置加载值和比较值 设置寄存器 EPIT1_LR 中的加载值和寄存器 EPIT1_CMPR 中的比较值,通过这两个寄存器就可以决定定时器的中断周期。 7、 EPIT1 中断设置和中断服务函数编写 使能 GIC 中对应的 EPIT1 中断,注册中断服务函数,如果需要的话还可以设置中断优先级。最后编写中断服务函数。 8、使能 EPIT1 定时器 配置好 EPIT1 以后就可以使能 EPIT1 了,通过寄存器 EPIT1_CR 的 EN(bit0)位来设置。