嵌入式Linux裸机开发(六)EPIT 定时器

2023-10-11 13:52

本文主要是介绍嵌入式Linux裸机开发(六)EPIT 定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 介绍
  • 配置过程


前言

前面学的快崩溃了,这也太底层了,感觉学好至少得坚持一整年,我决定这节先把EPIT学了,下面把常见三种通信大概学一下,直接跳过其他的先学移植了,有些太多了内容。


介绍

EPIT(Enhanced Periodic Interrupt Timer)增强周期中断定时器,EPIT是专门完成此功能的,PWM、输入捕获那些事其他外设完成的。

EPIT是32位的向下计数的定时器,有12位的分频,当计数值等于比较值的时候就产生中断

在这里插入图片描述
EPIT时钟源可由多路选择器选择,ipg_clk、 ipg_clk_32k 和 ipg_clk_highfreq。
分频器是12位的,值0-4095对应1-1096(终于明白HAL配置32的时候为啥分频时要减1)。
计数寄存器(EPIT_CNR):32位向下递减的寄存器,保存当前递减到几(直到0)。
加载寄存器(EPIT_LR):set-and-forget 模式,计数器值减少到0,将从加载寄存器里面重新加载。
比较寄存器(EPIT_CMPR):和计数寄存器比较,如果相等就触发中断。

EPIT两种工作模式:
set-and-forget 模式:EPITx_CR(x=1, 2)寄存器的 RLD 置1 ,计数器从加载寄存器 EPITx_LR 中获取初始值,不能直接写。
free-running 模式:EPITx_CR 寄存器的 RLD 为零,计数器计数到 0以后会重新从 0XFFFFFFFF开始计数,不从加载寄存器 EPITx_LR中获取。

EPITx_CR完成各种配置,具体参考手册的寄存器:
在这里插入图片描述
寄存器 EPITx_SR只有一个位有效,OCIF(bit0),中断比较标志位,为0没有中断,为1中断发生(比较事件),发生后需要手动置0
在这里插入图片描述

配置过程

  • 设置时钟源(EPIT1_CR 寄存器的 CLKSRC)
  • 设置分频器(EPIT1_CR 寄存器的 PRESCALAR)
  • 设置工作模式(EPIT1_CR 的 RLD)
  • 设置计数器的初始值来源(EPIT1_CR 的 ENMOD):0来自上次关闭定时器的计数器值,1加载寄存器
  • 使能比较中断(EPIT1_CR 的 OCIEN)
  • 设置加载值和比较值(EPIT1_LR 中的加载值和 EPIT1_CMPR 中的比较值)
  • EPIT1 中断设置和中断服务函数编写(使能 GIC 中对应的 EPIT1 中断,注册中断服务函数,设置中断优先级,编写中断服务函数)
  • 使能 EPIT1 定时器(EPIT1_CR 的 EN)

在这里插入图片描述
Tout = ((frac +1 )* value) / Tclk;分频值是12位的,倒计数值是32位的
时钟源 ipg_clk的Tclk为66MHz。
Tout: EPIT1 的溢出时间(单位 S)。
Tclk: EPIT1 的输入时钟频率(单位 Hz)。

函数 epit1_irqhandler 是 EPIT1 的中断处理函数,此函数先读取 EPIT1_SR 寄存器,判断当前的中断是否为比较事件,在退出中断处理函数的时候需要清除中断标志位
在这里插入图片描述
主函数定义了500ms的中断:
在这里插入图片描述

这篇关于嵌入式Linux裸机开发(六)EPIT 定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT