EPIT(Enhanced Periodic Interrupt Timer,增强的周期中断定时器)是 I.MX6U 处理器中的一个重要外设,主要用于实现周期性中断定时功能。与 STM32 的定时器不同,EPIT 的功能相对单一,专注于周期性中断定时。本文将详细介绍 EPIT 的工作原理、寄存器配置以及使用步骤。


1. EPIT 定时器概述

EPIT 是一个 32 位定时器,具有以下特点:

  1. 时钟源可选:支持 3 个时钟源(ipg_clkipg_clk_32kipg_clk_highfreq)。
  2. 12 位分频器:分频范围为 1~4096。
  3. 周期性中断:当计数值与比较值相等时,产生中断。
  4. 两种工作模式
    • Set-and-Forget 模式:计数器从加载寄存器中获取初始值,计数到 0 后重新加载。
    • Free-Running 模式:计数器从 0xFFFFFFFF 开始计数,计数到 0 后重新从 0xFFFFFFFF 开始。

2. EPIT 定时器框图

EPIT 定时器的结构框图如下:

  1. 时钟源选择器:选择 EPIT 的时钟源。
  2. 12 位分频器:对时钟源进行分频。
  3. 计数寄存器(EPIT_CNR):存储当前计数值。
  4. 加载寄存器(EPIT_LR):存储计数器的初始值。
  5. 比较寄存器(EPIT_CMPR):存储比较值,用于触发中断。
  6. 比较器:比较计数值和比较值。
  7. 中断生成:当计数值等于比较值时,产生中断。

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):分频值,范围为 04095(对应 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_CRCLKSRC时钟源选择(00:关闭,01:ipg_clk,10:ipg_clk_highfreq,11:ipg_clk_32k)
PRESCALAR分频值(04095,对应 14096 分频)
RLD工作模式(0:Free-Running,1:Set-and-Forget)
OCIEN比较中断使能(0:关闭,1:使能)
ENMOD计数器初始值来源(0:上次值,1:加载寄存器)
ENEPIT 使能(0:关闭,1:使能)
EPITx_SROCIF比较中断标志位(0:无事件,1:有事件)
EPITx_LR-加载寄存器,存储计数器初始值
EPITx_CMPR-比较寄存器,存储比较值
EPITx_CNR-计数寄存器,存储当前计数值

7. 总结

EPIT 定时器是 I.MX6U 中用于实现周期性中断的重要外设。通过合理配置 EPIT 的时钟源、分频值、工作模式和中断设置,可以实现精确的定时功能。本文详细介绍了 EPIT 的工作原理、寄存器配置和使用步骤,希望能帮助你更好地理解和使用 EPIT 定时器。


参考资料

  • I.MX6U 嵌入式 Linux 驱动开发指南
  • I.MX6ULL 参考手册

相关链接


希望这篇博客能帮助你更好地理解 I.MX6U 的 EPIT 定时器!如果有任何问题,欢迎在评论区讨论。