
【ARM学习笔记】ARM Cortex -A7 EPIT定时器
时钟源可选23位向下计数器:支持多个时钟源,可.triplexe选择 Peripheral clock、高频参考 clock(32 kHz)或外部 32 kHz 旁端器源。 12位分频值支持:能设置最多 4096 次分频。 事件触发中断机制:在计数器值与设定值相等时触发中断。 可现场设置计数器值:支持即使编程计数器的当前值。 低功耗模式与调试模式支持:在低功耗模式下仍能通过编程使计数器保持活跃状态。
选择时钟源: 预分频设置: 设置工作模式: 定义初始计数值: 配置比较值和中断: 设置引脚功能: 使能 FMC 初始器: 编写中断服务函数:
发布日期:2021-05-14 16:25:24
浏览次数:20
分类:精选文章
本文共 2400 字,大约阅读时间需要 8 分钟。
ARM Cortex-A7 EPIT 定时器简述
定时器特点
ARM Cortex-A7 的 EPIT(嵌入式定时器/中断定时器) 是一种功能强大的周期性定时器,主要用途是处理系统中需要定期执行的任务。它具有以下主要特点:
原理分析
结构分析
EPIT 定时器内部包含多路选择器、预分频器、以及一系列寄存器。这些组件共同构成其核心计时功能。
多路选择器:
- 可选时钟源:
- Peripheral clock:由时钟控制模块 CCM 提供的系统时钟。
- Low-frequency 32 kHz clock:外部引入的晶振 clock。
- High-frequency clock:由 CCM 提供的高性能时钟。
12位预分频器:
- 用于将系统时钟进一步分频,以适应不同定时需求。
寄存器组件:
- Counter Register(32位):用于存储当前计数器值。
- Load Register(32位):在 set-and-forget 工作模式下,存储计数器的初始值,供计数器恢复时使用。
- Compare Register(32位):用于定义计数器触发比较事件的设置值。
- Counter比较器:负责检测计数器与比较值的变化,触发中断事件。
- 引脚配置器:定义输出引脚的功能。
- SR 寄存器:存储中断事件标志位,用于通知主控制器定时器事件发生。
工作模式
EPIT 定时器支持两种工作模式:
Set-and-forget模式:
- 初始化时,计数器直接从 Load Register 获取初始值,并开始递减至零。
- 到达零值后,自动从 Load Register 重新获取初始值,继续运转。
- 该模式通常用于需要长时间循环的任务,例如定期任务调度。
Free-running模式:
- 计数器在触发后继续递减至零后会自动在高位处重新置零(如 Likely 0xFFFF_FFFF),然后重新开始计数。
- 该模式适用于突然事件检测,如周期性拍摄或实时数据采集。
寄存器配置
EPIT 控制寄存器(CR)
属性 | 属性说明 | 示例配置 |
---|---|---|
CLKSRC | 时钟源选择 | 10 (高频时钟) |
PRESCALAR | 预分频值(12位) | 0x00FF |
RLD | 工作模式控制位 | 1 (Set-and-forget) |
OCIEN | 比较中断使能位 | 1 |
ENMOD | 初始值源控制位 | 0 (保持当前值) |
EN | 定时器使能位 | 1 |
中断寄存器(SR)
- 只有最低有效位(OCIF)用于告知是否有比较事件。
溢出时间计算
通过以下公式计算 EPIT 定时器的溢出周期:
[ \text{溢出时间} = \frac{(\text{分频值} + 1) \times \text{装载值}}{\text{时钟频率}} ]
这是一个通用公式,需结合具体硬件参数进行调整。
配置流程
- 通过 CLKSRC 寄存器选择 Peripheral clock、高频 clock 或外部 32 kHz clock。
- 调整 PRESCALAR 寄存器,设置适当的分频值。
- 根据需求选择 Set-and-forget 或 Free-running 模式。
- 使用 ENMOD 寄存器控制初始值的来源。
- 设置 Compare Register 定时器触发条件。
- 激活比较中断使能位。
- 定义 EPIT 定时器输出引脚的功能,配置中断翻转模式。
- 调整 FMC 寄存器,完成定时器配置后计数器恢复。
- 定义中断响应函数,执行相应的操作。
实现过程
以控制 LED �灯灭为例:
- EPIT 定时器负责定期切换 LED 状态。
- 通过 Set-and-forget 模式,EPIT 定时器会根据 Load Register 的值周期性地触发中断。
- 在中断服务函数中,切换 LED 状态并清除中断标签。
代码编写
void epit1_init(unsigned int frac, unsigned int value){ EPIT1->CR = 0; EPIT1->LR = value; EPIT1->CMPR = 0; GIC_EnableIRQ(EPIT1_IRQn); system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)epit1_irqhandler, NULL); EPIT1->CR |= (1 << 0);}
void epit1_irqhandler(void){ static unsigned char state = 0; state = !state; if (EPIT1->SR & (1 << 0)) { led_switch(LED0, state); } EPIT1->SR |= (1 << 0);}
编译烧录
将所有代码文件汇总,使用任意标准编译工具进行编译和烧录,即可完成 EPIT 定时器的配置和测试。
总结
通过以上配置流程,EPIT 定时器可轻松完成周期性任务任务需求,支持多种工作模式和灵活配置,适用于嵌入式系统中的各种实时控制需求。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月09日 12时05分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ORA-00020 超过当前最大连接数
2019-03-11
合理控制oracle数据库具有DBA权限的用户
2019-03-11
喝红茶是否会上火
2019-03-11
Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
2019-03-11
GreenDao之注解
2019-03-11
Android使用Font Awesome
2019-03-11
主线程中Looper的轮询死循环为何没有阻塞主线程?
2019-03-11
Gradle实战四:Jenkins持续集成
2019-03-11
使用RestTemplate,显示请求信息,响应信息
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
为什么WGCLOUD安装完后,启动服务端打不开网页
2019-03-11
wgcloud网络监控出现负值
2019-03-11
ios 官方sample
2019-03-11
iOS 开发官方文档链接收集
2019-03-11
网易云面试(Android岗)之旅,差点被这些基础题绊了跟头。
2019-03-11
Android音视频开发之——音频非压缩编码和压缩编码
2019-03-11
linux学习笔记(四)基本用户管理与帮助命令
2019-03-11
小程序:防止父方法被子方法冒泡,使用catchtap
2019-03-11