【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析

这篇具有很好参考价值的文章主要介绍了【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

后续需要使用 GPT 计数器实现中断以及延时,这里我们需要先了解一下GPT的功能以及相关寄存器。


目录

一、GPT 定时器的功能

1、计数器

2、输入捕获

3、输出比较(GPT的两种工作模式)

二、寄存器解析

1、GPTx_CR

2、GPTx_PR

3、GPTx_SR

4、GPTx_IR

5、GPTx_OCRn

6、GPTx_ICRn

7、GPTx_CNT


一、GPT 定时器的功能

gpt 定时器的主要包含以下三个功能:

  • 计数器
  • 输入捕获(可产生捕获中断)
  • 输出比较(可产生比较中断)—— 注意 GPT 的模式

1、计数器

根据图中路线,可以大致了解配置计数器的顺序:

  • 第一步,选择时钟源,这里我们依然 ipg_clk (66MHz)
  • 第二步,选择分频数(1~4096)

因为计数器是向上计数的,也就是说,每过一个时钟周期就会自增 1。 

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

2、输入捕获

输入捕获(Input Capture,ICR)可以捕获到时钟源产生的上升沿或者下降沿,并产生中断。GPT 定时器有两个输入捕获通道

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

3、输出比较(GPT的两种工作模式)

输出比较(Output Compare,OCR)包含三个输出通道GPT_COMPARE1~3 ,通道的使用和触发中断的机制都取决于 GPT 的工作模式:

  • Restart Mode:需要预设 Output Regx ,当计数器的值 == Output Regx时,会产生比较中断(仅适用于GPT_COMPARE1)
  • Free-Run Mode:计数器从 0 开始自增,自增到 0xFFFFFFFF 以后溢出,重新从 0 开始计数

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

二、寄存器解析

1、GPTx_CR

GPT 控制寄存器,可以控制时钟源、输入通道使能、输出通道使能等。下面主要解析后面需要用到的一些位。

bit 0:GPT 使能(启动 / 关闭GPT定时器),一般等到配置完其他寄存器再设置该字段。

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

bit 1:设置当定时器启动时的初始值。0 表示从上一次关闭时计数器的值开始计数,1 表示重新从0开始计数。

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

bit 8-6:选择时钟源。我们选择 ipg_clk(66MHz)

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

bit 9:选择 GPT 的工作模式。一般选 Restart Mode。(上面已经介绍了)

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

bit 15:设置软件复位状态。

  • 设为复位状态后,只要还在复位,该位会一直置 1 。除了bit 0、1、2、3、5外,其他位都会被重置为默认值。
  • 复位完毕后,会自动清零,即置 0 

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

补充:

  • IM1~2 设置的是捕获状态,即上升沿还是下降沿捕获
  • OM1~3 设置的是输出状态,即不输出、输出反转等。
寄存器: GPT1_CR
基地址: 0x2098000
初始化操作:
    // 禁用GPT定时器
    GPT1_CR &= ~(1 << 0);
    // 复位
    GPT1_CR |= (1 << 15);
    while((GPT1_CR >> 15) & 0x1);    // 等待复位结束

    /* 
     * 配置GPT定时器
     * bit 1: 1
     * bit 8-6: 001
     * bit 9: 0
     */
    GPT1_CR |= (1 << 1);
    GPT1_CR &= ~((7 << 6) | (1 << 9));
    GPT1_CR |= (1 << 6);
    
    // ... 其他初始化操作

    // 启动定时器
    GPT1_CR |= (1 << 0);

2、GPTx_PR

GPT 分频器,可以设置时钟源的分频数。bit 11-0 设置的是分频数(1~4096)

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

寄存器: GPT1_PR
基地址: 0x2098004
初始化操作:
    // 66 分频
    GPT1_PR &= ~(0xFFF << 0);    // 低 12 bit 清零
    GPT1_PR |= (66 << 0);        // 66 分频

3、GPTx_SR

GPT状态寄存器,是一个可读寄存器,无需设置。主要保存如下内容:

  • 输出比较的中断触发状态 OF1~3
  • 输入捕获的中断触发状态 IF1~2
  • 溢出状态(即计数器的值是否和比较器的值相等 或者 是否计数到 0xFFFFFFFF)
​寄存器: GPT1_SR
基地址: 0x2098008

4、GPTx_IR

GPT 中断寄存器,主要控制输入 / 输出通道的中断使能。上面GPT的工作模式已经设为 Restart Mode,所以我们需要 使能输出比较通道 1。

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析,# 裸机开发,单片机

寄存器: GPT1_IR
基地址: 0x209800C
初始化操作:
    GPT1_IR |= (1 << 0);    // 输出比较通道1 使能

5、GPTx_OCRn

GPT 输出比较寄存器,保存的是比较值,Restart 模式下,当计数器的值 == 比较值时,触发中断。假设延时 10 ms,时钟源为 66 MHz,分频数为 66。

由此可以知道时钟周期为 1/1M,延时10ms对应的比较值 = 1M * 0.01 = 10000

寄存器: GPT1_OCR1
基地址: 0x2098010
初始化操作:
    GPT1_OCR1 |= (10000 << 0);    // 设置通道1 的比较值为10000

6、GPTx_ICRn

GPT 输入捕获寄存器,保存的是当捕获中断触发时,计数器的值。

​寄存器: GPT1_ICR1
基地址: 0x209801C

7、GPTx_CNT

GPT 计数寄存器,保存的是当前时刻计数器的值。文章来源地址https://www.toymoban.com/news/detail-521677.html

​寄存器: GPT1_CNT
基地址: 0x2098024

到了这里,关于【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux 裸机篇(八)】I.MX6U EPIT 定时器中断、定时器按键消抖

    EPIT 的全称是: Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,它主要是完成周期性中断定时的。学过 STM32 的话应该知道, STM32 里面的定时器还有很多其它的功能,比如输入捕获、 PWM 输出等等。但是 I.MX6U 的 EPIT 定时器只是完成周期性中断定时的,仅此一

    2024年02月02日
    浏览(64)
  • linuxARM裸机学习笔记(4)----GPIO中断以及定时器中断实验

    这个表里面存放的都是中断向量,中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量。中断向量表是一系列中断服务程序入口地址组成的表,当某个中断触发的时候会自动跳转到中断向量表对应的中断服务程序的入口。 2.NVIC(内嵌向量中断控制器) 在IMU6U的中

    2024年02月14日
    浏览(45)
  • linuxARM裸机学习笔记(5)----定时器按键消抖和高精度延时实验

    之前的延时消抖,是直接借助delay函数进行的,但是这样会浪费CPU的性能。我们采用延时函数的方式实现,可以实现快进快出。  定时器消抖,必须是在t3的时间点才可以,当在t1,t2的时间点每次进入中断函数都要重新开启定时器的计时 但是,这两个时间点的时间小于定时器设

    2024年02月14日
    浏览(74)
  • lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)

    目录 1 信号(signal) 2 设置信号响应方式 – signal 3 设置定时器 4 示例 问题: getch()阻塞获取键盘按键输入, 怎么操作才能不影响小鸟下落和管道移动? getch如果阻塞,下面的程序都是无法执行。通过信号机制方式实现。 在Linux中,软中断信号(signal,简称为信号)是在软件层

    2024年02月07日
    浏览(91)
  • 【裸机开发】指定外设根时钟配置实验(三)—— 寄存器分析篇(PERCLK_CLK_ROOT、IPG_CLK_ROOT)

    前面已经完成了 PLL1 和 8 路 PFD 的初始化,至于其他 PLL 路,等实际需要的时候再初始化也不迟。接下来我们就挑选几个具体的外设时钟进行配置。 假设我们要初始化下面两个根时钟 PERCLK_CLK_ROOT 、 IPG_CLK_ROOT 。(中途可能还涉及到根时钟 AHB_CLK_ROOT ) 目录 一、路线选择 1、

    2024年02月08日
    浏览(44)
  • STM32定时器-定时器中断功能详解

    STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括: 通用与基本定时器(2~7)位于低速的APB1总线上 高级定时器(1、8)位于高速的APB2总线上 自动装载计

    2024年02月08日
    浏览(56)
  • STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)

    定时器有高级定时器、通用定时器、基本定时器三种类型。具体功能如下。 上面是每种定时器所具有的功能。 我们可以看到每种定时器都有一个定时功能,(可能是名字的由来吧)。当然,每个定时器都可以来使用定时功能,但是我们往往在基本定时器和通用定时器上面使用

    2024年01月19日
    浏览(63)
  • 蓝桥杯单片机学习6——定时器/计数器&定时器实现秒表功能

    上一期我们学习了外部中断的相关内容,现在我接着来学习定时器。 定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断请求,从而实现定时或计数功能的外设。定时器的基本工作原理是进行计数。 举个栗子 :你可

    2024年02月04日
    浏览(50)
  • STM32G071开发笔记:使用定时器(TRGO功能)触发ADC规则采样以避免低侧电流采样所带来的PWM开关噪声

    目录 背景阐述: 导致问题的原因: 解决方案: 实验方案: 实验验证: 可改进的地方 结尾 RT:笔者在做一个项目的时候遇到了一个因为PWM开关噪声干扰导致ADC采样波动大的问题,经过2天的研究终于想到了一个比较好的办法,这个方法不一定适合所有项目,但和我当前项目

    2024年01月25日
    浏览(59)
  • I.MX6ull GPT高精度定时器

    一 简介 GPT的全称是General Purpose Timer,它是一个32位的向上的定时器, GPT 定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频。 分析方式 同EPTI  它具有以下特点

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包