EPIT(Enhanced Periodic Interrupt Timer,增强的周期中断定时器)是 I.MX6U 处理器中的一个重要外设,主要用于实现周期性中断定时功能。与 STM32 的定时器不同,EPIT 的功能相对单一,专注于周期性中断定时。本文将详细介绍 EPIT 的工作原理、寄存器配置以及使用步骤。
1. EPIT 定时器概述
EPIT 是一个 32 位定时器,具有以下特点:
- 时钟源可选:支持 3 个时钟源(
ipg_clk
、ipg_clk_32k
、ipg_clk_highfreq
)。 - 12 位分频器:分频范围为 1~4096。
- 周期性中断:当计数值与比较值相等时,产生中断。
- 两种工作模式:
- Set-and-Forget 模式:计数器从加载寄存器中获取初始值,计数到 0 后重新加载。
- Free-Running 模式:计数器从 0xFFFFFFFF 开始计数,计数到 0 后重新从 0xFFFFFFFF 开始。
2. EPIT 定时器框图
EPIT 定时器的结构框图如下:
- 时钟源选择器:选择 EPIT 的时钟源。
- 12 位分频器:对时钟源进行分频。
- 计数寄存器(EPIT_CNR):存储当前计数值。
- 加载寄存器(EPIT_LR):存储计数器的初始值。
- 比较寄存器(EPIT_CMPR):存储比较值,用于触发中断。
- 比较器:比较计数值和比较值。
- 中断生成:当计数值等于比较值时,产生中断。
3. EPIT 工作模式
3.1 Set-and-Forget 模式
- 特点:计数器从加载寄存器中获取初始值,计数到 0 后重新加载。
- 应用场景:适用于需要周期性定时中断的场景。
3.2 Free-Running 模式
- 特点:计数器从 0xFFFFFFFF 开始计数,计数到 0 后重新从 0xFFFFFFFF 开始。
- 应用场景:适用于需要连续计数的场景。
4. EPIT 寄存器详解
4.1 EPITx_CR(配置寄存器)
- CLKSRC(bit25:24):时钟源选择位。
00
:关闭时钟源。01
:选择ipg_clk
(Peripheral 时钟)。10
:选择ipg_clk_highfreq
(高频参考时钟)。11
:选择ipg_clk_32k
(低频参考时钟)。
- PRESCALAR(bit15:4):分频值,范围为 0
4095(对应 14096 分频)。 - RLD(bit3):工作模式选择位。
0
:Free-Running 模式。1
:Set-and-Forget 模式。
- OCIEN(bit2):比较中断使能位。
0
:关闭比较中断。1
:使能比较中断。
- ENMOD(bit1):计数器初始值设置位。
0
:计数器初始值为上次关闭 EPIT 时的值。1
:计数器初始值来源于加载寄存器。
- EN(bit0):EPIT 使能位。
0
:关闭 EPIT。1
:使能 EPIT。
4.2 EPITx_SR(状态寄存器)
- OCIF(bit0):比较中断标志位。
0
:无比较事件。1
:有比较事件(需手动清除)。
4.3 EPITx_LR(加载寄存器)
- 功能:存储计数器的初始值。
4.4 EPITx_CMPR(比较寄存器)
- 功能:存储比较值,用于触发中断。
4.5 EPITx_CNR(计数寄存器)
- 功能:存储当前计数值。
5. EPIT 配置步骤
以下是使用 EPIT 实现定时中断的配置步骤:
5.1 设置时钟源
- 配置
EPITx_CR
寄存器的CLKSRC
位,选择时钟源(如ipg_clk
)。
5.2 设置分频值
- 配置
EPITx_CR
寄存器的PRESCALAR
位,设置分频值。
5.3 设置工作模式
- 配置
EPITx_CR
寄存器的RLD
位,选择工作模式(如 Set-and-Forget 模式)。
5.4 设置计数器初始值
- 配置
EPITx_CR
寄存器的ENMOD
位,设置计数器初始值来源。
5.5 使能比较中断
- 配置
EPITx_CR
寄存器的OCIEN
位,使能比较中断。
5.6 设置加载值和比较值
- 配置
EPITx_LR
寄存器的加载值。 - 配置
EPITx_CMPR
寄存器的比较值。
5.7 配置中断
- 使能 GIC 中的 EPIT 中断。
- 注册中断服务函数。
5.8 使能 EPIT
- 配置
EPITx_CR
寄存器的EN
位,使能 EPIT。
6. EPIT 寄存器配置表
寄存器 | 位域 | 描述 |
---|---|---|
EPITx_CR | CLKSRC | 时钟源选择(00:关闭,01:ipg_clk,10:ipg_clk_highfreq,11:ipg_clk_32k) |
PRESCALAR | 分频值(0 | |
RLD | 工作模式(0:Free-Running,1:Set-and-Forget) | |
OCIEN | 比较中断使能(0:关闭,1:使能) | |
ENMOD | 计数器初始值来源(0:上次值,1:加载寄存器) | |
EN | EPIT 使能(0:关闭,1:使能) | |
EPITx_SR | OCIF | 比较中断标志位(0:无事件,1:有事件) |
EPITx_LR | - | 加载寄存器,存储计数器初始值 |
EPITx_CMPR | - | 比较寄存器,存储比较值 |
EPITx_CNR | - | 计数寄存器,存储当前计数值 |
7. 总结
EPIT 定时器是 I.MX6U 中用于实现周期性中断的重要外设。通过合理配置 EPIT 的时钟源、分频值、工作模式和中断设置,可以实现精确的定时功能。本文详细介绍了 EPIT 的工作原理、寄存器配置和使用步骤,希望能帮助你更好地理解和使用 EPIT 定时器。
参考资料:
- I.MX6U 嵌入式 Linux 驱动开发指南
- I.MX6ULL 参考手册
相关链接:
希望这篇博客能帮助你更好地理解 I.MX6U 的 EPIT 定时器!如果有任何问题,欢迎在评论区讨论。