I.MX6ull EPIT定时器

news2024/11/28 14:43:18

一 简介

EPIT定时器是一种增强的周期中断定时器,完成周期性中断定时的功能。

具有以下特点

  1.  EPIT定时器是一个32位的定时器 
  2. 时钟源可选的向下计数器  EPIT 共有 3 个时钟源可选择,ipg_clk、ipg_clk_32k 和 ipg_clk_highfreq
  3.  当计数值和比较值相等的时候产生中断
  4.  12 位分频器 对应的值是 0~4095,对应1~4096 分频
  5.  EPIT定时器在处理器几乎不用介入的情况下提供精准的定时中断,时序分辨率高达125fs。它可以应用于高速数据采集、超声波测距、雷达等领域。
  6. 可以设置引脚输出,如果设置了的话就会通过指定的引脚输出信号。

二 结构原理图

2.1 工作原理

图中  EPIT 内部有三个重要的寄存器:

计数寄存器(EPIT_CNR)、加载寄存器(EPIT_LR)和比较寄存器(EPIT_CMPR),

        EPIT 是一个向下计数器,也就是说给它一个初值,开始递减,直到减 为 0,EPIT_CNR 里面保存的就是当前的计数值。如果 EPIT 工作在 set-and-forget 模式下,当计数寄存器里面的值减少到 0,EPIT 就会重新从EPIT_LR读取数值到计数寄存器里面,重新开 始向下计数。比较寄存器 EPIT_CMPR 里面保存的数值用于和计数寄存器里面的计数值比较,如果相等的话 就会产生一个比较事件。

2.2 工作模式

       两种工作模式: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中获取数据

2.3 23.6.1 Control register (EPITx_CR)

2.3.1 EPITx_CR field descriptions  位字段描述

 

寄存器 EPITx_CR 重要位如下:
CLKSRC(bit25:24): EPIT 时钟源选择位,
为 0 的时候关闭时钟源,
为1 的时候选择选择Peripheral 时钟(ipg_clk),
为 2 的时候选择 High-frequency 参考时钟(ipg_clk_highfreq),
为 3 的时候选择 Low-frequency 参考时钟(ipg_clk_32k)。
一般选择 ipg_clk=66MHz。
PRESCALAR(bit15:4): EPIT 时钟源分频值,可设置范围 0~ 4095,分别对应 1~ 4096 分频。
RLD(bit3): EPIT 工作模式,
为 0 的时候工作在 free-running 模式,
为 1 的时候工作在 set-and-forget 模式。
一般工作在 set-and-forget 模式。
OCIEN(bit2):比较中断使能位,
为 0 的时候关闭比较中断,
为 1 的时候使能比较中断,
本章试验要使能比较中断。
ENMOD(bit1):设置计数器初始值,
为 0 时计数器初始值等于上次关闭 EPIT 定时器以后计数器里面的值,
为 1 的时候来源于加载寄存器。
EN(bit0): EPIT 使能位,
为 0 的时候关闭 EPIT,
为 1 的时候使能 EPIT。0

2.4  EPIT_SR寄存器

EPIT_SR寄存器,只有bit0有效,表示中断状态,写1清零。当OCIF位为1的时候表示中断发生,为0的时候表示中断未发生。我们处理完定时器中断以后一定要清除中断标志位

2.5  EPIT_LR 寄存器

EPIT_LR寄存器设置计数器的加载值。计数器每次计时到0以后就会读取LR寄存器的值重新开始计时。

2.6  EPIT_CMPR 寄存器

CMPR比较计数器,当计数器的值和CMPR相等以后就会产生比较中断。无需设置

3  使用实验   

通过 EPTI1 的中断来控制 LED0 的亮灭 500ms一次中断,

3.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)位来设置。


驱动编写

  1.  配置EPIT1
  2.  使能对应中断
  3. 注册中断 服务函数
  4. 使能EPIT1

EPIT1->CR = (1<<24 | frac << 4 | 1<<3 | 1<<2 | 1<<1); 一次配置完EPIT1_CR寄存器

/***************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名	: 	 bsp_epittimer.c
作者	   : 左忠凯
版本	   : V1.0
描述	   : EPIT定时器驱动文件。
其他	   : 配置EPIT定时器,实现EPIT定时器中断处理函数
论坛 	   : www.wtmembed.com
日志	   : 初版V1.0 2019/1/5 左忠凯创建
***************************************************************/
#include "bsp_epittimer.h"
#include "bsp_int.h"
#include "bsp_led.h"

/*
 * @description		: 初始化EPIT定时器.
 *					  EPIT定时器是32位向下计数器,时钟源使用ipg=66Mhz		 
 * @param - frac	: 分频值,范围为0~4095,分别对应1~4096分频。
 * @param - value	: 倒计数值。
 * @return 			: 无
 */
void epit1_init(unsigned int frac, unsigned int value)
{
	if(frac > 0XFFF)
		frac = 0XFFF;
		
	EPIT1->CR = 0;	/* 先清零CR寄存器 */
	
	/*
     * CR寄存器:
     * bit25:24 01 时钟源选择Peripheral clock=66MHz
     * bit15:4  frac 分频值
     * bit3:	1  当计数器到0的话从LR重新加载数值
     * bit2:	1  比较中断使能
     * bit1:    1  初始计数值来源于LR寄存器值
     * bit0:    0  先关闭EPIT1
     */
	EPIT1->CR = (1<<24 | frac << 4 | 1<<3 | 1<<2 | 1<<1);
	
	EPIT1->LR = value;	/* 倒计数值 */
	EPIT1->CMPR	= 0;	/* 比较寄存器,当计数器值和此寄存器值相等的话就会产生中断 */

	/* 使能GIC中对应的中断 			*/
	GIC_EnableIRQ(EPIT1_IRQn);

	/* 注册中断服务函数 			*/
	system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)epit1_irqhandler, NULL);	

	EPIT1->CR |= 1<<0;	/* 使能EPIT1 */ 
}

/*
 * @description			: EPIT中断处理函数
 * @param				: 无
 * @return 				: 无
 */
void epit1_irqhandler(void)
{ 
	static unsigned char state = 0;

	state = !state;
	if(EPIT1->SR & (1<<0)) 			/* 判断比较事件发生 */
	{
		led_switch(LED0, state); 	/* 定时器周期到,反转LED */
	}
	
	EPIT1->SR |= 1<<0; 				/* 清除中断标志位 */
}

3.2 分频计算方法

 bit25:24 01 时钟源选择Peripheral clock=66MHz 设置分频值1 则计时计数器为  66*1000*1000/1*0.5 = 33000 000

	epit1_init(0, 66000000/2);	/* 初始化EPIT1定时器,1分频
								 * 计数值为:66000000/2,也就是
								 * 定时周期为500ms。
								 */

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兼顾性能+实时性处理缓冲数据解决方案

我们经常会遇到这样的数据处理应用场景&#xff1a;我们利用一个组件实时收集外部交付给它的数据&#xff0c;并由它转发给一个外部处理程序进行处理。考虑到性能&#xff0c;它会将数据存储在本地缓冲区&#xff0c;等累积到指定的数量后打包发送&#xff1b;考虑到实时性&…

ChatGPT与软件架构(3) - 软件架构提示工程

高效利用ChatGPT辅助研发的关键是在研发生命周期的不同阶段采用对应提示获取有益的帮助。原文: Leveraging Prompt Engineering in Software Architecture with ChatGPT 软件架构开发生命周期转型。 Beth Smith Unsplash 简介 作为解决方案架构师&#xff0c;有必要掌握软件架构…

【分布式架构】资源与事务:可观测性的基本二重性

西格曼&#xff1a;我叫本西格曼。我是Lightstep的联合创始人兼首席执行官。我在这里讨论的是资源和事务&#xff0c;这是可观察性的一个基本的二元性。我职业生涯的大部分时间都在研究可观察性。在我职业生涯之初&#xff0c;我在谷歌工作了九年&#xff0c;致力于谷歌的分布式…

SLAM实战项目(1) — ORB-SLAM2稠密地图重建

目录 1 整体思路 2 功能实现 3 结果运行 (1) TUM数据集下载 (2) associate.py用于RGB和Depth匹配 (3) 运行数据集 4 CMakeLists.txt文件修改 5 完整PointCloudMapping.h和PointCloudMapping.cc 6 报错分析 7 思考扩展 文章参考部分开源代码和报错文章 1 整体思路 利…

【微信小程序开发】第 3 节 - 安装开发者工具

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、微信开发者工具 3、下载 4、安装 5、扫码登录 6、设置外观和代理 7、总结 1、缘起 开发微信小程序从大的方…

吊打面试官的16000字JVM专属秘籍,又一个Java面试神器!终于可在简历写上精通JVM了!

前言 吊打面试官的16000字JVM专属秘籍&#xff0c;总共包含三部分的内容&#xff0c;从基础到进阶带大家一步步深入理解JVM&#xff01; 学完就可以在简历上面直接写上精通JVM&#xff01; 因为篇幅限制这里只给大家做简单的一个介绍&#xff0c;也就是进行一个大点的梳理&a…

记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 所谓数据可视化&#xff0c;我们可以理解为从宏观角度来看一眼就能看出来整个数据的占比&#xff0c;走向。对于数据可视化&#xff0c;很多互联网公司是很看重这一块的&#xff0c;包括大厂&…

基于wireshark打造安全分析师工具--解析suricata中的分析结果

从本篇文章开始&#xff0c;我将通过若干篇文章陆续介绍在实际安全运营的过程中&#xff0c;基于wireshark打造安全分析师趁手的流量威胁分析工具&#xff0c;帮助安全分析人员在面对网络数据包取证和分析时候达到事半功倍的效果。本篇文件介绍使用在使用iwreshark分析数据包事…

21天学会C++:Day7----auto关键字

CSDN的uu们&#xff0c;大家好。这里是C入门的第七讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. auto的使用 2.1 auto与指针和引用结合起来使用 2.2 在同一…

区分序列/UIO/特征集示例

区分序列/UIO/特征集示例 从确定性有限状态机进行测试&#xff1a;检查状态 概述 让我们假设我们有一个状态集 S 的 FSM M。还假设我们知道通过转换 t 达到的当前状态是 s 或 s0。 我们如何确定 t 到达了哪个状态&#xff1f; 分离状态 输入序列 w 将两个状态 s 和 s0 分开&…

C++进阶之继承

文章目录 前言一、继承的概念及定义1.继承概念2.继承格式与访问限定符3.继承基类与派生类的访问关系变化4.总结 二、基类和派生类对象赋值转换基本概念与规则 三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员六、复杂的菱形继承及菱形虚拟继承七、…

图论试题2020

n-m 2 16 Pk(Kn)k(k-1)…(k-n1)。 C&#xff1a;A2对角线元素aii2等于对应顶点vi的度数&#xff0c;所以对角线元素之和等于边数的两倍。 A的所有特征值的平方和等于A2的对角线元素之和。 B 完全图没有顶点隔&#xff0c;实际上也只有以完全图为生成子图的图没有顶点隔。 连通…

Qt6 C++基础入门1 定时器与QTimer

定时器 定时器图片流水灯案例 实现效果&#xff1a;构建一个界面&#xff0c;点击开始按钮轮流播放文件夹下图片&#xff0c;点击停止按钮停止播放 构建页面&#xff0c;上部是一个没有内容的 label 下面是开始和暂停按钮&#xff0c;各自的名称分别为 startBtn 和 stopBtn 先保…

6.事件绑定

目录 1 事件对象的属性 2 事件绑定方式 3 在事件中赋值 4 事件传参 1 事件对象的属性 target是触发该事件源头的组件&#xff0c;currentTarget是当前事件所绑定的组件&#xff0c;比如现在有一个父组件包着子组件&#xff0c;你给父组件绑定事件&#xff0c;由于事件…

ps磨皮插件专用智能磨皮插件Portraiture4

Portraiture是一款智能磨皮插件&#xff0c;为Photoshop和Lightroom添加一键磨皮美化功能&#xff0c;快速对照片中皮肤、头发、眉毛等部位进行美化&#xff0c;无需手动调整&#xff0c;大大提高P图效率。全新4版本&#xff0c;升级AI算法&#xff0c;并独家支持多人及全身模式…

从0到1深入剖析微服务架构,阿里人十年经验浓缩成一份笔记

前言 数字化经济的快速发展和云计算给底层IT系统带来的巨大变革正是当下微服务架构快速发展的时代背景。Gartner预计&#xff0c;从2018年到2022年&#xff0c;PaaS将成为未来的主流平台交付模式&#xff0c;而PaaS平台需要更加灵活的云原生应用架构做技术支撑&#xff0c;微服…

图论与算法(3)图的深度优先遍历

1. 遍历的意义 1.1 图的遍历 图的遍历是指按照一定规则访问图中的所有顶点&#xff0c;以便获取图的信息或执行特定操作。常见的图遍历算法包括深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;。 深度优先搜索&#xff08;DFS&#xff0…

UART串口通信实验

不管是单片机开发还是嵌入式 Linux 开发&#xff0c;串口都是最常用到的外设。 可以通过串口将开发板与电脑相连&#xff0c;然后在电脑上通过串口调试助手来调试程序。 还有很多模块&#xff0c;比如蓝牙、GPS、GPRS等都使用串口与主控进行通信。 UART简介 串口全称串行接口…

vb6 Webview2微软Edge Chromium内核执行JS取网页数据测速

微软Edge Chromium内核执行JS获取网页数据测试 ExcuteScript eval(document.body.innerHTML) from : https://www.163.com 采集的网页HTM字符串占用字节空间1.2MB ExcuteScript回调事件中取得JS执行结果&#xff0c;用时 54 毫秒 其中JSON转字符13.5209毫秒 jSON数据长度: 增…

ChatGPT更新说明(20230524)

原文传送门&#xff1a;ChatGPT — Release Notes 更新说明&#xff08;5月24日&#xff09; 简要&#xff1a;iOS应用在更多国家可用&#xff0c;Alpha测试中的共享链接&#xff0c;Bing插件&#xff0c;iOS上的历史记录禁用 ChatGPT iOS应用在更多国家可用 好消息&#xf…