【北京迅为】i.MX6ULL终结者EPIT定时器介绍及原理分析

1 EPIT定时器介绍

EPIT的全称是Enhanced Periodic Interrupt Timer,增强性周期中断计时器,主要实现周期性中断定时的。EPIT是一个32位的定时器,在软件使能以后,在处理器不用介入的情况下提供精准的定时。

EPIT定时器有如下特点:
1.12位的分频值
2.时钟源可选的 32 位向下计数器
3.当计数值等于比较值的时候,产生定时器中断
4.支持在低功耗或者调试模式下使用
5.计数值在运行的时候也可以被修改

首先EPIT定时器的输入时钟源有3种,ipg_clk,ipg_clk_32k ,ipg_clk_highfreq可以选择,选择好输入在时钟以后,在经过一个12位的分频器进行分频,分频后的时钟进入到EPIT内部,在EPIT内部有三个寄存器为计数寄存器,装载寄存器,比较寄存器。这三个寄存器是32位的,EPIT计数器给他设置一个初值,开始运行后,他会从这个给定的初值开始递减,直到减为0。计数寄存器里面保存的就是某个时刻的这个数值。

EPIT定时器有两种工作模式:set-and-forget和free-running:
工作在set-and-forget模式,表示计数寄存器从加载寄存器里面获取初始值,然后开始递减,减到0以后会总重新从加载寄存器获取初始值。我们不能直接向计数寄存器直接写初始值。
工作在free-running模式,当计数寄存器减到0的时候自动从0xffffffff开始重新递减,不会从加载寄存器获取初始值。

EPIT定时器可以设置引脚输出,如果设置了,就会通过CPU的引脚输出信号。

接下来我们来看下EPIT的几个寄存器,首先是控制寄存器EPITx_CR,其定义如图 1.1所示:
在这里插入图片描述

图 1.1

我们主要用到的主要有如下这些位:
CLKSRC(bit25:24)时钟源选择位,为0的时候关闭时钟,为1的时候选择Peripheral
Clock((ipg_clk),为2的时候选择High-frequency clock(ipg_clk_highfreq),为3的时候选择Low-frequency clock(ipg_clk_32k),我们在例程中设置成1,选择使用ipg_clk作为EPIT的时钟源,ipg_clk=66MHz。

PRESCALAR(bit15:4)时钟源分频值,他是12位的,取值范围0-4095。
RLD(bit3)EPIT工作模式选择位,为0工作在free-running模式,为1工作在setand-forget模式。我们在例程中设置该位为1,工作在setand-forget模式。

OCIEN(bit2)比较中断使能2位,为0的时候关闭,为1的时候使能比较中断,我们在例程中使能中断,所以设置该位为1。

ENMOD(bit1)计数器初始值模式,为0的时候计数器的初始值等于上次关闭EPIT以后计数器里面的值,为1的时候初始值等于加载寄存器里面的值。

EN(bit0):EPIT的使能位,为0的时候关闭EPIT,为1的时候使能EPIT。

寄存器EPITx_SR的结构如图 1.2:

在这里插入图片描述

图 1.2

我们可以看到该寄存器只有bit0有效,bit1-bit31作为保留。
OCIF(bit0):比较中断标志位,为0的时候表示没有比较事件发生,为1的时候表示有比较事件发生,当有比较事件发生的时候,需要手动给这个位写1来清除该标志位。

寄存器EPITx_LR结构如图 1.3所示:
在这里插入图片描述

图 1.3

该寄存器是加载寄存器,bit0-bit31表示加载的值。

寄存器EPITx_CMPR机构如下图所示:
在这里插入图片描述

图 1.4

该寄存器是比较寄存器,bit0-bit31表示比较值,当计数器的值等于该寄存器的值的时候,就会产生一个比较事件。

寄存器EPITx_CNR结构如图 1.5所示:
在这里插入图片描述

图 1.5

该寄存器是计数寄存器,bit0-bit31表示计数值。

关于EPIT的寄存器我们就先介绍到这里,大家可以参考《IMX6ULL参考手册.pdf》的24.6 EPIT Memory Map/Register Definition章节查看具体的寄存器描述。

本章我们使用EPIT定时器产生定时中断,然后在中断处理函数里面实现LED的亮灭状态切换。I.MX6 ULL内有两个EPIT定时器,我们以EPIT1为例,需要实现下面的配置步骤,达到我们的实验目的:
1.设置EPIT1的时钟源
我们在前面介绍过EPIT的时钟源有三种,可以通过EPIT1_CR寄存器的CLKSRC(bit25:24)位选择具体使用哪个时钟源。
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中断设置和中断处理函数实现
使能EPIT的中断,注册中断,然后编写中断处理函数。
8.使能EPIT1定时器
通过寄存器EPIT1_CR的EN(bit0)位使能。

2 原理分析

本实验用到的硬件资源:LED和定时器EPIT1,LED的原理我们前面章节已经分析过了,这里就不做具体分析了,EPIT1属于i.MX6 ULL处理器内部的资源,我们直接使用就可以了。在这里插入图片描述