嵌入式第五十四天(EPIT,GPT)
一.EPIT
在 ARM 架构中,EPIT 即 Enhanced Periodic Interrupt Timer,是增强型周期性中断定时器,其工作原理如下:
- 基本特性 :EPIT 是 32 位定时器,拥有 12 位的分频值,并且它是时钟源可选的 32 位向下计数器,每当一个时钟周期来临,计数值就会减 1,直到减为 0,当计数值和比较寄存器中的比较值相等时,就会产生中断。
- 时钟源选择 :EPIT 通常有 3 个时钟源可供选择,通过配置其配置寄存器 EPITx_CR 中的 CLKSRC 位来实现,比如,CLKSRC 位为 1 时,选择 Peripheral 时钟(ipg_clk),为 2 时,选择 High - frequency 参考时钟(ipg_clk_highfreq),为 3 时,选择 Low - frequency 参考时钟(ipg_clk_32k)。
- 分频处理 :选定的时钟源会进入到 12 位的分频器,分频器对应的值是 0 到 4095,分别对应 1 到 4096 分频,通过设置 EPITx_CR 寄存器的 PRESCALAR 位能设定分频值。
- 工作模式 :set - and - forget 模式下,EPITx_CR 寄存器的 RLD 位置 1,计数器从加载寄存器 EPITx_LR 中获取初始值,计数器计数到 0 后,会再次从加载寄存器中重新加载数据继续计数。而 free - running 模式下,RLD 位清零,计数器计数到 0 后,会从 0XFFFFFFFF 重新开始计数,并非从加载寄存器取数。
- 中断产生机制 :EPIT 内部有比较寄存器 EPIT_CMPR 和计数寄存器 EPIT_CNR,当两者中的值相等时,若配置寄存器中的中断使能位 OCIEN 被置 1,就会产生一个比较中断信号,告知 CPU 执行相关的定时任务。
二.GPT
在 ARM 架构里,GPT 指 General Purpose Timer,即通用目的定时器,其工作原理如下:
- 时钟源选择:GPT 通常存在多个时钟源可供选择,以IMX6ULL芯片为例,它有高频参考时钟、低频参考时钟、外围时钟、外部时钟以及晶体振荡器时钟 5 种时钟源,通过 GPT 配置寄存器中的相关位可进行时钟源的选取 。
- 分频处理:GPT 拥有一个 12 位的预分频器,预分频值可在 0 到 4095 之间设置,对应 1 到 4096 分频。最终输入到计数器的时钟频率为时钟源频率除以预分频数加 1 所得的值 。
- 计数器工作模式:GPT 计数器能被编程为重新启动模式或自由运行模式。在重新启动模式下,当计数器计数值与比较寄存器中的值相等时,计数器会复位至 0 并重新开始计数,该模式仅和比较通道 1 相关。而自由运行模式中,计数器从 0 计数到 0xFFFFFFFF 后会自动归零并继续计数,所有比较通道发生比较事件都不会让其重置 。
- 输入捕获功能:GPT 具备两个输入捕获通道,能够设置触发方式,可针对上升沿、下降沿或两者都进行捕获。当信号出现设定的触发沿跳变时,定时器的捕获寄存器就会保存当下的计数器值,借此可以计算信号的脉宽等时间参数 。
- 输出比较功能:GPT 包含三个输出比较通道,当输出比较寄存器中预先设定的值与计数器中的值匹配时,就会设置输出比较状态标志,并且能产生中断信号,此外还有强制比较功能,可立即触发比较事件,但不会设置状态标记位和产生中断 。