硬件10 定时器
EPIT
EPIT 是 "Enhanced Periodic Interrupt Timer"(增强型周期中断定时器)的缩写,它是 I.MX6U 系列处理器中一个专门用于产生周期性中断的硬件定时器模块
最主要的作用就是:每隔一个精确的时间,就向CPU触发一次中断。
核心特性如下:
-
32位向下计数器:你可以设定一个初始值,它会从这个值开始递减计数。
-
可编程的时钟源与12位分频器:它可以选用IPG_CLK等多种时钟源,并支持1~4096范围的分频,方便你得到想要的计数频率。
-
比较中断功能:这是其工作的核心。当计数器递减到与比较寄存器(
EPITx_CMPR)的值相等时,就会触发一次中断。
两种工作模式:
-
Set-and-Forget模式:计数器减到0后,会自动从加载寄存器(
EPITx_LR)重新装载初始值,并开始下一轮计数,产生的是周期性中断。 -
Free-Running模式:计数器减到0后,会回滚到
0xFFFFFFFF继续向下计数,并不会重新加载

ITIF:中断标记位
ITIE: 中断使能位
实现每秒灯翻转一次
void epit_interrupt_handler(void)
{
if((EPIT1->SR & (1<<0))!=0)
{
led_nor();
}
EPIT1->SR |= (1<<0);
}
void epit_init(void)
{
EPIT1->CR=0;
EPIT1->CR |=(1<<24)|(1<<17)|(65<<4)|(1<<3)|(1<<2)|(1<<1);
EPIT1->LR = 1000000;
EPIT1->CMPR=0;
// 注册EPIT1中断
system_interrupt_register(EPIT1_IRQn, epit_interrupt_handler);
// 设置EPIT中断优先级
GIC_SetPriority(EPIT1_IRQn, 1);
// 使能EPIT中断
GIC_EnableIRQ(EPIT1_IRQn);
// 开启EPIT1定时器
EPIT1->CR |= (1 << 0);
}
GPT
GPT(General Purpose Timer,通用定时器) 是 i.MX6ULL 等 ARM 处理器中的一个多功能定时器模块,用于实现各种定时、计数、输入捕获和输出比较功能。计数器向上计数
输入捕获(Input Capture) 和 输出比较(Output Compare) 是定时器最核心的两种工作模式,广泛应用于脉冲测量、PWM 生成、电机控制等场景。


sync:同步寄存器
输入捕获 记录外部信号到来的时间(测量脉冲宽度、频率)

输出比较 当计数器达到预设值时,自动改变输出引脚的电平

void gpt_init(void)
{
GPT1->CR=0;
GPT1->CR |=(1<<15);//复位GPT
while((GPT1->CR & (1<<15))!=0);
GPT1->CR |=(1<<9);// GPT运行在Free-Run模式
GPT1->CR |=(1<<6);// 时钟源选择为ipg_clk
GPT1->PR = 65; // 预分频器选择为66分频
GPT1->CR |= (1 << 0); // 使能GPT
}
// 微秒延时函数
void delay_us(unsigned int n)
{
unsigned int counter=0;
unsigned int new_counter =0;
unsigned int old_counter =0;
old_counter=GPT1->CNT;
while(1)
{
new_counter=GPT1->CNT;
if(new_counter!=old_counter)
{
if(new_counter>old_counter)
{
counter +=new_counter-old_counter;
}
else
{
counter +=0xFFFFFFFF-old_counter+new_counter;
}
if(counter>=n)
{
return;
}
old_counter=new_counter;
}
}
}
// 毫秒延时函数
void delay_ms(unsigned int n)
{
while (n--)
{
delay_us(1000);
}
}
GPT 是功能全面的通用定时器,适合需要输入捕获、PWM 输出等复杂场景;EPIT 是专为周期中断设计的精简定时器,适合只需要定时中断的简单场景。选择哪个取决于你的具体需求——功能用 GPT,简单周期中断用 EPIT。
1. 什么是EPIT,什么是GPT?
-
EPIT (Enhanced Periodic Interrupt Timer):即增强型周期中断定时器。它是一款设计目标非常专一的定时器,核心功能就是产生精确的周期性中断,结构简单,配置方便,适用于像LED精确翻转、按键消抖、操作系统时间片调度这类需要稳定周期信号的场景。
-
GPT (General Purpose Timer):即通用目的定时器。相比EPIT,它的功能要丰富和强大得多,是一个真正的多功能定时器模块。除了基本的定时功能,GPT还具备:
-
输入捕获:有两个捕获通道,可用于测量外部信号的脉冲宽度或频率。
-
输出比较:有三个比较通道,可以在特定时刻产生中断或改变引脚输出电平,常用于生成PWM波
-
2. EPIT和GPT是多少位定时器?向上计数还是向下计数?
| 特性 | EPIT 定时器 | GPT 定时器 |
|---|---|---|
| 位数 | 32位 | 32位 |
| 计数方向 | 向下计数 (Decrementing) | 向上计数 (Incrementing) |
| 设计侧重 | 专精于周期性中断 | 功能丰富,通用性强,支持输入捕获/输出比较 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)