ARM裸机开发-EPIT与GPT

Linux-ARM裸机(九)-EPIT定时器 本篇为I.MX6ULL的EPIT定时器的学习记录,记录了两个使用实例:用于定时中断和定时器按键消抖。 阅读详情

目录

一.EPIT

SR寄存器

CR寄存器

LR寄存器

CMPR寄存器

消除抖动

二.GPT

CR寄存器

PR寄存器


一.EPIT

增强型定时器,其中,

ipg_clk为上篇配置的66MHZ时钟,ipg_clk_32k为RTC提供时钟,用不上;ipg_clk_highfred为高精度的ipg时钟。右侧为12位分频器,通过左侧选中的频率在1-4096之间选择分频因子。

中间为计数器,装入初值,每减一次与比较寄存器比较,若比较成功,ITIF置1(中断标记位),(最后记得清零),此时若ITIE为1(中断使能位),则通过与门为真,发出中断,同时,Load加载寄存器,给初值寄存器重新赋值。  

OM为底板的一个引脚,可以选择性的让一个引脚电平翻转,由正点原子做的板子没有该功能,忽略即可。

表示向下计数,32位计数器,0x0000 0000--0xFFFF FFFF,适用进程调度,时间片轮转

SR寄存器

OCIF,中断标记位,写1清零

CR寄存器

RLD为配置EPIT工作模式:
Free-Running Mode:自由运行模式   从0到 0xFFFF FFFF

Set and Forget Mode:设置-遗忘模式  从加载寄存器读

LR寄存器

CMPR寄存器

void epit1_interrupt_handler(void)
{
    if ((EPIT1->SR & (1 << 0)) != 0)    //bit0位为中断标记位
    {
        led_nor();
    }
    EPIT1->SR |= (1 << 0);
}

void epit1_init(void)
{
    EPIT1->CR = 0;
    EPIT1->CR |= (1 << 24) | (1 << 17) | (65 << 4) | (1 << 3) | (1 << 2) | (1 << 1);
    EPIT1->LR = 1000000;
    EPIT1->CMPR = 0;

    // 注册epit1中断函数
    system_interrupt_register(EPIT1_IRQn, epit1_interrupt_handler);
    // 设置epit1中断优先级
    GIC_SetPriority(EPIT1_IRQn, 1);
    // GIC使能epit1中断
    GIC_EnableIRQ(EPIT1_IRQn);

    // 开启EPIT1定时器
    EPIT1->CR |= (1 << 0);
}

EPIT接在SOC内部,逻辑分析仪测不了,接在底板可以

消除抖动

硬件:在按键左右两边并联电容,连续变化的电平信号会被电容屏蔽。

软件:

之前的实验中都用到了按键,用到按键就要处理因为机械结构带来的按键抖动问题,也就是按键
消抖。前面的实验中都是直接使用了延时函数来实现消抖,因为简单,但是直接用延时函数来实现消抖会浪费 CPU 性能,因为在延时函数里面 CPU 什么都做不了。如果按键使用中断的话更不能在中断里面使用延时函数,因为中断服务函数要快进快出!接下来我们学习如何使用定时器来实现按键消抖,使用定时器既可以实现按键消抖,而且也不会浪费CPU 性能,这个也是 Linux 驱动里面按键消抖的做法。
如图t1~t3 这一段时间就是按键抖动,是需要消除的。设置按键为下降沿触发,因此会在 t1、t2
和 t3 这三个时刻会触发按键中断,每次进入中断处理函数我们都重新开器定时器中断,所以会在 t1、t2和 t3 这三个时刻开器定时器中断。但是 t1~t2 和 t2~t3 这两个时间段是小于我们设置的定时器中断周期(也就是消抖时间,比如 10ms),所以虽然 t1 开启了定时器,但是定时器定时时间还没到t2 时刻就重置了定时器,最终只有 t3 时刻开启的定时器能完整的完成整个定时周期并触发中断,我们就可以在中断处理函数里面做按键处理了,这就是定时器实现按键防抖的原理。

二.GPT

输入捕获:第一次产生电平变化时保存到Timer1中,第二次保存到Timer2中,相减乘以每次计数增加的时间即为电平跳变之间的间隔时间

CR寄存器

由于该板子没有设计输入捕获和输出捕获,所以OM3和IM2设为默认值0

PR寄存器

void gpt1_init(void)
{
    GPT1->CR = 0;
    GPT1->CR |= (1 << 15);      // 复位GPT
    while ((GPT1->CR & (1 << 15)) != 0);    // 等待GPT复位完成
    GPT1->CR |= (1 << 9);       // GPT工作模式:Free-Run模式
    GPT1->CR |= (1 << 6);       // 时钟源:ipg_clk
    GPT1->PR = 65;              // 66分频
    GPT1->CR |= (1 << 0);       // 使能GPT
}

实现精准延迟

分为两种情况,newcount大于或小于oldcount

void delay_us(unsigned int n)
{
    unsigned int counter = 0;
    unsigned int old_counter = 0;
    unsigned int new_counter = 0;

    old_counter = GPT1->CNT;
    while (1)
    {
        new_counter = GPT1->CNT;
        if (new_counter != old_counter)
        {
            if (new_counter > old_counter)
            {
                counter += new_counter - old_counter;
            }
            else  
            {
                counter += 0xFFFFFFFF - old_counter + new_counter;
            }
            if (counter >= n)
            {
                return;
            }
            old_counter = new_counter;
        }
    }
}

void delay_ms(unsigned int n)
{
    while (n--)
    {
        delay_us(1000);
    }

}
i.MX6ULL裸机开发实战:从寄存器到中断与定时器 在嵌入式系统开发中,理解ARM处理器架构与底层寄存器操作是构建可靠固件的基础。对于基于Cortex-A7内核的i.MX6ULL应用处理器,裸机编程能够帮助开发者绕过操作系统,直接掌控启动流程、内存映射、GPIO控制与中断响应机制。从汇编编写启动文件到C语言驱动外设,再到移植官方SDK,开发者可以逐步掌握从芯片上电到外设初始化的完整链路。时钟系统、EPIT与GPT定时器的配置,以及GIC中断控制器的应用,都是实现精准时间基准与异步事件处理的关键。这种“无OS”的开发方式不仅适合从单片机过渡到应用处理器的新手, 阅读详情

相关推荐

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

ARM裸机开发:时钟配置、定时器epit、gpt

(一)晶振为24MHZ,通过PLL锁相环电路来倍频,通过PFD来分频,还有一个既可以分频又可以倍频的电路。2.在528 PLL中选择浅蓝色路径,先配置AHB再配置IPG,在配置PERCLK。2.PLL2(528 PLL):又称system PLL固定528MHZ。3.PLL3(480 PLL):又称USB1 PLL固定480MHZ。4.PLL 4(Audio PLL):用于音频设备。5.PLL 5(Video PLL):视频相关配置。(三)528 PLL配置和480 PLL配置。

2501_91498265的博客 703

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1986

【ARM 裸机开发 (IMX6ULL-mini)】EPIT/GPT 定时器、 UART 串口驱动

本文基于 i.MX6ULL-mini 裸机开发,在时钟配置基础上,讲解 EPIT、GPT 定时器与 UART 串口外设原理与驱动编写。EPIT 为递减定时器,支持硬件自动重载实现周期中断;GPT 是递增定时器,利用自由运行模式实现高精度阻塞延时,同时介绍按键软件 / 硬件消抖方案。文章梳理 UART 通信分类、电平标准、流控机制,详解串口寄存器与波特率计算,配套完整裸机 C 代码,帮助掌握定时器中断、延时与串口收发,夯实 ARM 裸机外设开发基础。

2403_89702754的博客 650

ESP32-CAM图像糊成马赛克?OV2640参数调优保姆级教程(亮度/对比度/饱和度)

本文提供了一份详细的ESP32-CAM图像调优教程,针对OV2640摄像头常见的图像模糊问题,从分辨率设置、亮度/对比度/饱和度调整到高级寄存器配置,帮助用户优化网页显示画质。通过代码示例和实用技巧,解决马赛克、色彩暗淡等问题,提升摄像头性能。

weixin_30410119的博客 596

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6842

【ARM 裸机开发】EPIT/GPT 定时器详解与 UART 串口通信实战

EPIT为32位向下计数定时器,支持自由运行与重装载模式,适用于周期中断及软硬件消抖;GPT为32位向上计数定时器,具备输入捕获与输出比较功能,可实现精准延时、测速与PWM输出。UART结合Modbus协议构建单主多从通信拓扑,采用RS485差分传输与CRC校验提升抗干扰能力,配合RTS/CTS流控防止数据丢失,合理配置UBIR/UBMR寄存器确保115200bps等波特率精度。

2201_75490992的博客 467

【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码

1 简介 数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域.由于电磁工作环境的恶化和大量射频干扰的存在,在极低的信干噪比(SINR)条件下进行目标检测和信息提取十分困难.对于阵列系统,往往采用自适应数字波束形成(ADBF)技术,来抑制强干扰和方向性干扰对有用信号的影响.介绍了数字波束形成器的基本原理及其DSP的实现结构.​ 2 完整代码 clc;clear all;close all;%%%%%%%%%%%%%%%%%一维DBF%%%%%%%%%%%%%

qq_59747472的博客 7267

IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置

本文介绍 IMX6ULL 时钟系统基础组件晶振、PLL、PFD、预分频器,梳理 ARM‑PLL 安全配置流程,介绍 AHB、IPG、PERCLK 等根时钟。对比 EPIT 与 GPT 定时器,EPIT 为向下计数,用于简单周期性定时中断;GPT 向上计数,具备输入捕获、输出比较能力,可实现精准延时。同时列出课程重点作业考点,掌握时钟树和定时器是裸机定时、中断开发的基础。

2601_96618230的博客 404

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7065

Android 10.0 任务栏音乐播放器后台播放杀进程功能实现

在10.0的系统rom定制化开发过程中,在某些情况下在安装第三方播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定是需要点击全部清除以后,音乐播放器也被杀掉进程,接下来看下这个问题怎么解决

安卓兼职framework和app工程师的博客 652

ARM裸机开发 : i.MX6ULL裸机项目总览——从零搭建完整的嵌入式系统

启动流程:汇编向量表 → 系统初始化 → C语言main时钟系统:PLL/PFD/CCM 时钟树配置GPIO操作:引脚复用、方向控制、电平读写中断系统:GIC中断控制器、中断注册与分发定时器:GPT定时延时、EPIT周期中断串口通信:UART初始化、收发数据IIC初始化、收发数据工程管理:Makefile、链接脚本、烧录流程在后续博客中,我们将逐一深入讲解每个模块的原理和实现。

xxy22241的博客 137

arcgis计算栅格平均值

打开FC栅格数据和非水体矢量数据 利用矢量数据提取对应栅格的非水体部分 2.1打开空间分析工具à提取分析à按掩膜提取 输入对应栅格数据和矢量数据 2.2提取结果如下 进行计算FC平均值 3.1打开空间分析工具à多元分析à波段集统计 输入对应栅格和输出路径 3.2统计结果如下 ...

Z_W_H_的博客 5371

ARM 裸机开发 DAY7 学习笔记

EPIT:32位自减型定时器,计数范围 0x00000000 ~ 0xFFFFFFFF• 向下计数:自减• 向上计数:自增计数器区分:• 16位计数器:0x0000 ~ 0xFFFF• 32位计数器:0x00000000 ~ 0xFFFFFFFF时钟:24MHz32.768KHz → RTC实时时钟=>EPIT两种工作模式1. Free-Running Mode:自由运行模式,初值固定0xFFFFFFFF,计数到0后自动重载,持续循环。

m0_69464963的博客 187

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

裸机进阶|从轮询到中断,吃透ARM Cortex-A7中断、时钟树与定时器全套底层流程

轮询方式CPU会持续空转查询外设状态,资源利用率极低,而中断机制可以让CPU正常执行任务,仅在外设触发事件时暂停主程序、处理突发任务,是嵌入式高效开发的核心。ARM Cortex-A7内核并不直接管理所有中断,依靠GIC通用中断控制器完成所有中断的统一调度与管理。本文将整合全套裸机进阶核心知识点,从ARM中断与GIC控制器、按键软硬件消抖原理、i.MX6ULL时钟树与CCM配置,再到EPIT/GPT两大定时器原理与实战,从零梳理完整底层逻辑、配置方案与代码落地思路,彻底吃透嵌入式裸机核心底层。

ouynagda的博客 378

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

☆嵌入式硬件的学习:ARM 裸机 知识点总结

本文摘要:介绍了通信基础概念,包括单工/半双工/全双工通信模式、串行/并行通信方式、异步/同步通信区别。重点阐述了串口通信的电气特性(TTL/RS232/RS485)、参数配置及中断处理流程。详细说明了ARM芯片中PLL锁相环、分频器的配置方法,以及EPIT和GPT定时器的工作原理。最后解析了IIC通信协议的核心时序,包括起始/停止信号、数据传输规则、应答机制和读写时序。内容涵盖嵌入式系统开发中的关键通信与时钟技术要点。

2301_77695365的博客 258

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

裸机开发速记:启动流程|GIC 中断|时钟系统|UART 通信

ARM裸机启动流程包括设置异常向量表、重映射至链接地址、配置各模式栈、使能IRQ中断、清零BSS段、开启I-Cache并关闭D-Cache,最终跳转至C语言main函数。中断系统基于GIC V2,支持SPI、PPI、SGI三类中断,以GPIO按键为例,完成外设与GIC配置后,CPU进入IRQ模式处理中断。时钟系统通过PLL、PFD、Prescale实现528MHz内核时钟及多路总线时钟分频,外设使用前需开启时钟门控。UART采用异步通信,支持轮询与中断两种收发方式,需配置时钟、引脚复用、波特率及帧格式,适用

SXR0115的博客 446

硬件开发2-ARM裸机开发3-I.MX6ULL - 时钟、定时器

i.MX6UL嵌入式系统时钟与定时器机制解析:系统采用多级时钟树架构,由外部晶振经PLL倍频和分频器产生各模块所需时钟。提供两种定时器:EPIT(32位向下计数器,适用于周期中断)和GPT(32位向上计数器,支持输入捕获/输出比较)。时钟系统通过CCM模块管理,包含ARM内核时钟(可调至1056MHz)、AHB总线时钟(132MHz)和IPG外设时钟(66MHz)。关键配置涉及PLL锁定、分频系数设置及时钟源切换,需注意操作顺序以避免系统故障。定时器选择取决于应用场景,EPIT适合简单定时,GPT适用于复杂

DebugKitty的博客 891

IMX6ULL裸机开发:定时器(GPT/EPIT)与UART串口

讲解IMX6ULL两款核心定时器EPIT、GPT的原理与区别,解析输入捕获、输出比较功能,同时介绍UART串口通信原理、硬件流控、波特率配置与工业Modbus组网应用

weixin_57202813的博客 324

i.MX6ULL 裸机开发:时钟树与定时器

时钟树是所有外设运行的根基,i.MX6ULL 裸机开发必须先完成 CCM、PLL、PFD、时钟根的配置,再使用定时器外设验证时序。EPIT 侧重周期性中断,GPT 侧重精准延时与信号采集 / PWM 输出,二者应用场景不同,是嵌入式时序开发中最常用的两个定时器。

weixin_48445537的博客 516

ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)

在电子系统中,时钟(Clock)是一个产生稳定、周期性振荡信号的电路或组件。这个信号像节拍器或心跳一样,为数字电路中的各种操作提供同步时序基准。

weixin_53745973的博客 274

60、嵌入式定时器深度解析:EPIT与GPT

本文深入解析了嵌入式系统中定时器的核心原理与应用,重点对比了51单片机基础定时器与i.MX6ULL高级定时器(EPIT/GPT)的实现差异。首先阐述了定时器工作的时钟基础,包括晶振、锁相环(PLL)和分频器的工作原理。然后以51单片机16位定时器为例,展示了1秒LED闪烁的完整实现过程。最后详细讲解了i.MX6ULL中EPIT定时器的自动重装特性,通过66MHz时钟分频后实现精确的1秒定时中断控制LED。全文从底层时钟配置到上层应用实现,系统性地剖析了嵌入式定时器的关键技术要点。

weixin_46607526的博客 1017

裸机开发 时钟配置,EPIT

时钟(clock):在电子系统中是一个产生稳定、周期性振荡信号的电路或组件。这个信号像节拍器或心跳一样,为数字电路中的各种操作提供同步时序基准。PLL(phase locked loop)锁相环电路: 倍频PFD(phase fractional Prescale)相位分数分频器: 输出频率可升可降。

2303_78816874的博客 1193

ARM裸机--时钟管理单元与定时器

时钟管理单元是嵌入式系统(如ARM架构芯片)中负责生成、分配和调控时钟信号的核心模块主要功能倍频/分频:通过锁相环、分频器组合生成不同频率的信号时钟分配:为CPU、总线、外设等提供独立时钟EPIT是专为周期性中断定时设计的32位向下计数定时器EPIO 定时器通常支持三种时钟源选择EPIO仅支持定时中断功能,不具备输入捕获、PWM输出等特性,适用于精准时间控制。

cui__OaO的博客 1485

IMX6ULL 时钟系统配置与定时器 (EPIT/GPT)

时钟是嵌入式系统的心脏,所有外设的运行都离不开时钟信号。做 IMX6ULL 裸机开发,第一步就是把时钟树搞明白,把系统时钟配置好,后面的 GPIO、串口、定时器、SPI 这些外设,才能正常工作。EPIT 和 GPT 是最基础的两个定时器,EPIT 适合做固定周期的中断任务,GPT 适合做精准的硬件延时,这两个工具掌握了,后面做按键消抖、传感器数据采集、PWM 输出、串口超时判断这些功能,都能得心应手。

senijusene的博客 896

IMX6ULL裸机|CPS指令、时钟PLL/PFD、定时器EPIT/GPT、UART串口全梳理

📝摘要:本篇承接IMX6ULL裸机开发笔记,讲解CPS模式/中断开关指令、裸机启动完整流程、GIC中断优先级体系;时钟系统晶振、PLL锁相环、PFD相位分数分频、预分频Prescale;EPIT自减定时器、GPT自增定时器功能;UART串口参数、硬件流控RTS/CTS,附带代码片段,适合嵌入式期末复习、裸机实验。#IMX6ULL#CPS指令#PLL时钟#UART串口。

m0_69717451的博客 247
上一篇: ARM裸机开发-时钟
下一篇: ARM裸机开发-UART
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值