一、定时器的定义
定时器是嵌入式系统中的重要组件,用于产生精确的时间延迟、测量时间间隔、执行周期性任务以及提供系统时基。在i.MX6ULL处理器中,定时器模块通过内部时钟信号进行计数,当达到预设值时可触发中断或执行特定操作。
二、定时器的分类
- 通用定时器(GPT)
- General Purpose Timer,通用目的定时器
- 支持多种工作模式
- 可配置的预分频器
- 适用于精确的时间测量和控制
- 增强型周期中断定时器(EPIT)
- Enhanced Periodic Interrupt Timer,增强型周期中断定时器
- 专为周期性中断任务设计
- 预装载寄存器支持
- 适用于周期性任务调度
三、定时器的工作流程
3.1.GPT通用定时器
3.1.1 GPT初始化阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 复位GPT模块 | GPT1->CR | 设置第15位置位 | 触发复位操作 |
| 2 | 等待复位完成 | GPT1->CR | 检查第15位 | 确认复位操作完成 |
3.1.2 GPT时钟配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 配置时钟源 | GPT1->CR | 清除第26-28位 | 选择内部时钟源 |
| 2 | 设置工作模式 | GPT1->CR | 清除第18-19位 | 设置为自由运行模式 |
| 3 | 启用模模式 | GPT1->CR | 设置第9位 | 启用模模式计数 |
3.1.3 GPT预分频配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 配置预分频 | GPT1->CR | 设置第6-8位 | 配置预分频器值 |
| 2 | 禁用重启功能 | GPT1->CR | 清除第1位 | 禁用重启功能 |
| 3 | 设置预分频值 | GPT1->PR | 设置第0-11位 | 设置预分频器为65 |
3.1.4 GPT启动阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 清零计数器 | GPT1->CNT | 设置为0 | 初始化计数值 |
| 2 | 启动定时器 | GPT1->CR | 设置第0位 | 启动GPT计数器 |
3.2 EPIT定时器
3.2.1 EPIT基本配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 配置时钟源 | EPIT1->CR | 设置第24-25位 | 选择GPT时钟作为源 |
| 2 | 启用比较功能 | EPIT1->CR | 设置第17位 | 启用比较功能 |
| 3 | 配置预分频 | EPIT1->CR | 设置第4-15位 | 配置预分频器为65 |
3.2.2 EPIT工作模式配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 设置工作模式 | EPIT1->CR | 设置第3位 | 设置为连续运行模式 |
| 2 | 启用中断 | EPIT1->CR | 设置第2位 | 启用中断功能 |
| 3 | 启用比较中断 | EPIT1->CR | 设置第1位 | 启用比较匹配中断 |
| 4 | 写入配置寄存器 | EPIT1->CR | 更新值 | 应用所有配置 |
3.2.3 EPIT寄存器配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 设置加载值 | EPIT1->LR | 1000000 | 设置为1秒周期 |
| 2 | 设置比较值 | EPIT1->CMPR | 0 | 设置比较值 |
| 3 | 设置计数值 | EPIT1->CNR | 1000000 | 初始化计数器 |
3.2.4 EPIT中断配置阶段
| 步骤 | 操作 | 寄存器 | 配置值 | 说明 |
|---|---|---|---|---|
| 1 | 启用GIC中断 | GIC_EnableIRQ | EPIT1_IRQn | 启用EPIT1中断 |
| 2 | 设置中断优先级 | GIC_SetPriority | 0 | 设置最高优先级 |
| 3 | 注册中断服务函数 | system_interrupt_register | epit_irq_handler | 绑定中断处理函数 |
| 4 | 启动定时器 | EPIT1->CR | 设置第0位 | 启动EPIT定时器 |