嵌入式Linux(八)EPIT定时器

1. EPIT简介

  EPIT是一个向下计数的32位计时器。时钟源可以选择,我们选用ipg_clk = 66MHz,然后可以进行分频(12位分频值0-4095分别代表1-4096分频)。EPIT唯一的功能是实现周期性的中断定时
  EPIT内部有计数,加载,比较三个寄存器,当计数寄存器和比较寄存器的值相等的时候,就会发生中断。

1.1 EPIT工作模式

  由EPITx_CR寄存器的RLD(bit3)位进行控制,0代表free-running,1是set-and-forget模式。
set-and-forget工作模式:
  当计数寄存器的值为0时,从加载寄存器中读取初始值,该模式下不能直接向计数寄存器写入数据。
free-running工作模式:
  当计数寄存器值为0时,重新从0xFFFFFFFF开始计数。

2. EPIT配置步骤

2.1 EPIT寄存器配置

EPITx_CR寄存器的配置如下:
在这里插入图片描述
EPITx_SR配置:
  只有一个位有效,即bit0的OCIF位。该位是比较中断标志位,1表示有比较事件发生。比较中断发生后需要手动清除此位(写1)。

2.2 EPIT配置步骤

①设置EPIT1的时钟源:设置CR寄存器的CLKSRC位(bit25:24)。
②设置分频值:设置CR寄存器的PRESCALAR位(bit15:4)。
③设置工作模式:设置CR的RLD(bit3)。
④设置计数器初始值来源:CR的ENMOD(bit1)。
⑤使能比较中断:设置CR的OCIEN(bit2)。
⑥设置加载值和比较值:EPIT1_LR中的加载值,EPIT1_CMPR的比较值,从而决定中断周期。
⑦EPIT1中断设置和中断服务函数编写。
⑧使能EPIT1定时器:设置CR的EN(bit0)。

3. EPIT实现LED定时亮灭实验

  按照上面进行配置即可,分频值计算公式如下:
Tout = ((frac + 1) x load)/Tclk
  其中,Tout为EPIT1的溢出时间,Tclk为EPIT1的输入时钟频率(Hz),load为加载值,frac为分频值。我们设置的时钟源为66MHz,意思就是每经过66000000次计数经过1秒,Tclk=1000ms,那么要实现500ms的周期,所以frac=0,load=33000000。

4. EPIT按键消抖实验

4.1 原理

  使用EPIT定时器,设置溢出时间为10ms,KEY0按下后触发按键中断,按键中断中开启定时器,定时器计时到10ms之后,在定时器中断中读取按键的值,如果按键值还是按下状态就说明是有效的按键,从而实现了消抖。
  按键抖动一般小于溢出时间,所以每一次抖动触发的按键中断中定时器中断都未执行完就重置了,所以最后一次有效抖动的按键中断才能包含完整的EPIT中断。

4.2 步骤

①配置按键IO中断
②初始化EPIT定时器
③编写中断服务函数(两个)
EPIT1的中断服务函数:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值