历史上的今天

今天是:2024年10月27日(星期日)

正在发生

2021年10月27日 | inux之ARM (I.MX6ULL) EPIT定时器详解

发布者:码农侠 来源: eefocus关键字:inux  ARM  I  MX6ULL 手机看文章 扫描二维码
随时随地手机看文章

定时器是最常用的外设,常常需要使用定时器来完成精准的定时功能, I.MX6U 提供了多种硬件定时器,有些定时器功能非常强大。我们从最基本的 EPIT 定时器开始,学习如何配置 EPIT 定时器,使其按照给定的时间,周期性的产生定时器中断,在定时器中断里面我们可以做其它的处理,比如翻转 LED 灯。


1、EPIT定时器简介

EPIT 的全称是: Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,它主要是完成周期性中断定时的。学过 STM32 的话应该知道, STM32 里面的定时器还有很多其它的功能,比如输入捕获、 PWM 输出等等。但是 I.MX6U 的 EPIT 定时器只是完成周期性中断定时的,仅此一项功能!至于输入捕获、 PWM 输出等这些功能, I.MX6U 由其它的外设来完成。


EPIT 是一个 32 位定时器,在处理器几乎不用介入的情况下提供精准的定时中断,软件使能以后 EPIT 就会开始运行, EPIT 定时器有如下特点:


①、时钟源可选的 32 位向下计数器。

②、 12 位的分频值。

③、当计数值和比较值相等的时候产生中断。

EPIT 定时器结构如下图所示:

上图中各部分的功能如下:


①、这是个多路选择器,用来选择 EPIT 定时器的时钟源, EPIT 共有 3 个时钟源可选择,ipg_clk、 ipg_clk_32k 和 ipg_clk_highfreq。

②、这是一个 12 位的分频器,负责对时钟源进行分频, 12 位对应的值是 0 ~ 4095,对应着1~4096 分频。

③、经过分频的时钟进入到 EPIT 内部,在 EPIT 内部有三个重要的寄存器:计数寄存器(EPIT_CNR)、加载寄存器(EPIT_LR)和比较寄存器(EPIT_CMPR),这三个寄存器都是 32 位的。EPIT 是一个向下计数器,也就是说给它一个初值,它就会从这个给定的初值开始递减,直到减为 0,计数寄存器里面保存的就是当前的计数值。如果 EPIT 工作在 set-and-forget 模式下,当计数寄存器里面的值减少到 0, EPIT 就会重新从加载寄存器读取数值到计数寄存器里面,重新开始向下计数。比较寄存器里面保存的数值用于和计数寄存器里面的计数值比较,如果相等的话就会产生一个比较事件。

④、比较器。

⑤、 EPIT 可以设置引脚输出,如果设置了的话就会通过指定的引脚输出信号。

⑥、产生比较中断,也就是定时中断。


EPIT 定时器有两种工作模式:

set-and-forget 和 free-running,这两个工作模式的区别如下:

set-and-forget 模式:

EPITx_CR(x=1, 2)寄存器的 RLD 位置 1 的时候 EPIT 工作在此模式下,在此模式下 EPIT 的计数器从加载寄存器 EPITx_LR 中获取初始值,不能直接向计数器寄存器写入数据。不管什么时候,只要计数器计数到 0,那么就会从加载寄存器 EPITx_LR 中重新加载数据到计数器中,周而复始。


free-running 模式:

EPITx_CR 寄存器的 RLD 位清零的时候 EPIT 工作在此模式下,当计数器计数到0以后会重新从0XFFFFFFFF开始计数,并不是从加载寄存器EPITx_LR中获取数据。


接下来看一下 EPIT 重要的几个寄存器,第一个就是 EPIT 的配置寄存器 EPITx_CR,此寄存器的结构如下图所示:

寄存器 EPITx_CR 我们用到的重要位如下:

image.png

寄存器 EPITx_SR 结构体如下图 所示:

寄存器 EPITx_SR 只有一个位有效,那就是 OCIF(bit0),这个位是比较中断标志位,为 0 的时候表示没有比较事件发生,为 1 的时候表示有比较事件发生。当比较中断发生以后需要手动清除此位,此位是写 1 清零的。


寄存器 EPITx_LR、 EPITx_CMPR 和 EPITx_CNR 分别为加载寄存器、比较寄存器和计数寄存器,这三个寄存器都是用来存放数据的,很简单。


寄存器 EPITx_LR结构体如下图 所示:

寄存器 EPITx_CMPR 结构体如下图 所示:

1.1、总结

通过上面的分析,EPIT 的配置步骤如下:


1、设置 EPIT1 的时钟源设置寄存器 EPIT1_CR 寄存器的 CLKSRC(bit25:24)位,选择 EPIT1 的时钟源。


2、设置分频值设置寄存器 EPIT1_CR 寄存器的 PRESCALAR(bit15:4)位,设置分频值。


3、设置工作模式设置寄存器 EPIT1_CR 的 RLD(bit3)位,设置 EPTI1 的工作模式。


4、设置计数器的初始值来源设置寄存器 EPIT1_CR 的 ENMOD(bit1)位, 设置计数器的初始值来源。


5、 使能比较中断我们要使用到比较中断,因此需要设置寄存器 EPIT1_CR 的 OCIEN(bit2)位,使能比较中断。


6、设置加载值和比较值设置寄存器 EPIT1_LR 中的加载值和寄存器 EPIT1_CMPR 中的比较值,通过这两个寄存器就可以决定定时器的中断周期。


7、 EPIT1 中断设置和中断服务函数编写使能 GIC 中对应的 EPIT1 中断,注册中断服务函数,如果需要的话还可以设置中断优先级。最后编写中断服务函数。


8、使能 EPIT1 定时器配置好 EPIT1 以后就可以使能 EPIT1 了,通过寄存器 EPIT1_CR 的 EN(bit0)位来设置。通过以上几步我们就配置好 EPIT 了,通过 EPIT 的比较中断来实现 LED0 的翻转。

关键字:inux  ARM  I  MX6ULL 引用地址:inux之ARM (I.MX6ULL) EPIT定时器详解

上一篇:Linux之ARM Cortex-A7 中断系统详解
下一篇:Linux之ARM(IMX6U)裸机主频和时钟配置

推荐阅读

北京时间10月26日凌晨消息,英特尔今天公布了2018财年第三季度财报。报告显示,英特尔第三季度营收为191.63亿美元,与去年同期的161.49亿美元相比增长19%;净利润为63.98亿美元,与去年同期的45.16亿美元相比增长42%
(文章来源:中科罗伯特机器人学院) 在工业3.0中,通过应用信息技术,在工厂生产线上的自动化程度和生产效率都有了很大的改变。但随着社会的发展人们对产品提出了更高的要求,工业4.0应运而生,通过赋予生产线智能的特性,就可以使得生产线具备的柔性,以满足消费者个性化的需求,利用数据仓库和数据挖掘做出生产决策,平衡多条生产线的负荷,提高有效...
Redmi K30S 至尊纪念版新品发布会将于今日下午在北京市顺义区北石槽镇举行。届时,Redmi K30S 至尊纪念版将正式亮相。  今日早间,小米集团副总裁常程曝光了 Redmi K30S 至尊纪念版的真机照。  IT之家了解到,Redmi K30S 至尊纪念版将采用 144Hz 变速高刷屏,搭载骁龙 865 处理器,内置 5000mAh 大容量电池,配备 6400 万 ...
一、仪器型号是德网络分析仪N5244A。二.故障现象仪器开机后出现基线杂乱,报错现象。三.检测维修检测:经检测,仪器混频放大模块损坏维修:更换混频放大模块组件,调整检测仪器四、出库测试仪器修复结束后质检部进行整机测试,仪器各项指标正常,为客户办理出库手续。整个流程只花费了4天时间就完成。

史海拾趣

问答坊 | AI 解惑

请教各位大侠怎么解码NEC D78F0034AGC

怎么把芯片里面的程序考出来。…

查看全部问答∨

TD-SCDMA商用经济贡献预测

“TD-SCDMA产业经济贡献值”指TD-SCDMA产业链各成员通过直接或者间接的形式,促进最终消费产品、总投资与净出口的增加值的增长,即对国家GDP的贡献值。     从产业的贡献形式上看,TD-SCDMA产业的经济贡献包括直接和间接两个方面: ...…

查看全部问答∨

介绍一种新型“数字温湿度传感器”

这是采用双线串行数字接口的温湿度传感器,与单片机接口非常方便,时序也很简单。 测量的温度/湿度精度很高。我们使用以后觉得很好用,所以,介绍给大家。 特点如下: 相对湿度和温度测量 _ 兼有露点 _ 全标定输出,无需标定即可互换使用 ...…

查看全部问答∨

为什么我的按键中断在程序启动的时候总自动进入

为什么我的按键中断在程序启动的时候总自动进入,不是按下按键以后,而是程序一运行的时候就自动进入中断函数,请问这是什么原因呢?…

查看全部问答∨

怎样从内存中读取摄像头采集的数据保存成bmp格式

我已经从把摄像头采集的数据保存使用 mmap 内存映射来获取了图像,当用write函数得出的是jpeg格式的 我想得到bmp格式的图片怎么做,跪求,急用。谢谢各位。 …

查看全部问答∨

各位手上有什么比较好用的bootloader吗?要求可以将nk.bin文件下载到内存中运行。

有的话给我发推荐一份啊,如果有时间的话麻烦给我发一份。 我的邮箱cy757#21cn.com(#改为@)…

查看全部问答∨

大整数的转换问题

如何实现 大整数 999999999999 与 0xXX 0xXX 的十六进制数组 之间的互换? 请高手们指教~…

查看全部问答∨

用verilog HDL 实现网络加密算法md5

用verilog HDL 实现一个网络加密的算法(md5),有没有哪位高手能给点帮助,我邮箱是poppy220@126.com 先谢过啦!^_^ …

查看全部问答∨

一个很莫名其妙的问题

最近刚刚开始接触STM32,今天调试串口的时候发现一个很无奈的问题,源代码基本都是使用keil自带的demo,就不列举了。修改以下这些设置:/* PLLCLK = 12MHz * 6= 72 MHz */     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6 ...…

查看全部问答∨

STM32rtc有电池,确认起振后是不是就后顾无忧了?

                                 我的问题是如果我有外部电池给RTC供电,只要在厂测试RTC已经工作了后,只要电池有电就不会出现晶振不起振的情况吗 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved