当前位置: 首页 > news >正文

IMX6ULL--EPIT 定时器理论

0.绪论

        上一讲写了EPIT定时器的实验,中间讲到那个中断放入了延时函数,这种办法是不可行的,需要使用定时器去消抖,后面就想先不看教程自己写,发现写不出来,于是回过头来在看一下手册,把EPIT定时器的理论知识在学习一下。这里包含消抖的理论知识。可以直接看正点原子提供的手册,每个人理解不一样,接受程度不一样,我就属于接受比较慢的,完整的资料官网就有,不是他家的板子也可以参考一下。

1.EPIT定时器简介

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

1.时钟源可选的32位向下计数器

2.12位的分频值

3.当计数值和比较直相等的时候产生中断。

EPIT定时器结构图
  1. 多路选择器,有三个时钟源可供选择
  2. 是一个12位的分频器,负责对时钟源进行分频,12位对应的值是0-4095,对应着1-4096分频。
  3. 经过分频的时钟进入到EPIT内部,在EPIT内部有三个重要的寄存器分别是:计数寄存器(EPIT_CNR),加载寄存器(EPIT_LR)和比较寄存器(EPIT_CMPR),都是32位寄存器。EPIT是一个向下计数器,也就是说给他一个初值,他就会从这个初值开始递减,直到减为0,EPIT_CNR(计数寄存器),里面保存的就是当前的计数值。这里就要提及EPIT的工作模式了
    1. set-and-forget模式EPITx_CR(x=1,2下同)寄存器的RLD位,置为1的时候EPIT处于该工作模式下,在此模式下EPIT的计数器从加载寄存器EPITx_LR中获取初始值,不能直接向计数器寄存器写入数据。只要计数器计数到0,就会从加载寄存器EPITx_LR中重新加载数据到计数器中。
    2. free-running模式:EPITx_CR寄存器的RLD位清零的时候EPIT工作在此模式下,当计数器计数到0的时候会重新从0XFFFFFFFF开始计数,并不是从加载寄存器EPITx_LR中获取数据的。
  4. 比较器。
  5. EPIT可以设置引脚输出,如果设置了的话就会通过指定的引脚输出信号。
  6. 产生比较中断,也就是定时中断。

2.EPIT的配置步骤

        这里拿上一讲的定时器代码来讲解一下,重新写一下。

EPITx_CR引脚图

         这一步创建EPIT1的初始化函数,这里需要传递两个参数:分频值和计数值。上面有讲分频值是12位的,最大值是0XFFF,所以我们需要判断输入的分频值是否大于0XFFF以及是否小于0,如果大于0XFFF则将分频值设定为0XFFF,若小于0设定为0,即是1分频,防止原则上的错误。 

2.1.设置EPIT1的时钟源       

时钟选择
EPIT1->CR = 1 << 24;

2.2.设置分频值

EPIT分频值设置

由上图可以 EPITx_CR的pin4~pin15为设置EPIT的分频值,所以将我们输入的分频值左移4位即可。

EPIT1->CR = frec << 4;

2.3.设置工作模式

EPIT工作模式

         这里是设置的set-and-forget的工作模式,所以将bit3置为1,即是:

EPIT1->CR = 1 << 3;

2.4.设置计数器的初始值来源

        这个就是我们传进来的第二个参数了,将计数值赋值给LR寄存器

EPIT1->CR = 1 << 1;

2.5.使能比较中断

EPITx_CR使能比较中断
EPIT1->CR = 1 << 2;

2.6.设置加载值和比较值

EPIT1->LR = value;
EPIT1->CMPR = 0;

2.7.使能EPIT1定时器

EPIT1->CR |= 1 << 0;

相关文章:

  • Docker加入用户组
  • Android Wi-Fi 连接失败日志分析
  • CanFestival移植到STM32G4
  • DataFrame中.iloc 属性
  • Java面向对象思想以及原理以及内存图解
  • C++ 时间处理指南:深入剖析<ctime>库
  • 深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
  • 关于 WASM:1. WASM 基础原理
  • S16-国产PN-IO设备坑我实录
  • 有关文心一言禁止浏览器开启调式工具的问题帖子汇总
  • 安科瑞户储ADL200N-CT:即插即用破解家庭光伏安装困局
  • 【MPC-C++】qpOASES 源码编译与链接,编译器设置细节
  • FastAPI 与 JWT 身份验证:保护你的 API
  • Day10_C语言基础
  • 6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
  • 什么是EULA和DPA
  • 汇编常见指令
  • 如何高效的组织产品研发团队与产品交付开发团队
  • 【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
  • 等待组(waitgroup)
  • 政府网站建设推进会上的讲话/软文代写接单平台
  • 网络工程师证/关键词排名优化怎么样
  • 公司形象墙设计图/优化推广关键词
  • 番禺 大石网站建设/网络营销心得体会1000字
  • 男男做暧网站免费/关键词优化公司电话
  • 销售网站建设公司/上海疫情最新情况