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

RT1052的定时器

文章目录

  • 1 通用定时器
    • 1.1 定时器框图
    • 1.2 实现周期性中断
  • 2 相关寄存器
  • 3 定时器配置
    • 3.1 时钟使能
    • 3.2 初始化GPT1定时器
      • 3.2.1 base
      • 3.2.2 initConfig
        • 3.2.2.1 clockSorce
        • 3.2.2.2 divider
        • 3.2.2.3 enablexxxxx
    • 3.3 设置 GPT1 比较值
      • 3.3.1 base
      • 3.3.2 channel
      • 3.3.3 value
    • 3.4 设置 GPT1 输出比较 1 的 中断
    • 3.5 使能 GPT
    • 3.6 设置 GPT1 中断 优先级
    • 3.7 编写中断服务函数
      • 3.7.1 GPT_GetStatusFlags
      • 3.7.2 GPT_ClearStatusFlags
    • 3.8 最终代码

1 通用定时器

RT1052 内部包含 2 个通用定时器(GPT1 和 GPT2,以下简称 GPT)

1.1 定时器框图

在这里插入图片描述一个 32 位定时器,拥有 2 个输入捕获通道、3 个输出比较通道以及相应的中断。

1)32 位计数器(CNT),仅支持递增计数方式。
2)12 位可编程预分频器(PR),计数器时钟频率的分频系数为 1~4096 之间的任意数值。
3)2 个输入捕获通道,支持上升沿、下降沿和任意边沿捕获。
4)3 个输出比较通道,支持取反、设置、清零和生成单脉冲(1 个输入时钟)模式。
5)支持捕获、比较和溢出中断。
6)支持低功耗模式下继续运行。
6)支持重启(Restart)模式和自由运行(Free Run)模式

  • 重启模式:当计数器值与比较值匹配时,计数器自动清零,重新开始计数。
  • 自由运行模式:计数器值总是从 0 开始计数,一直到 0XFFFFFFFF 溢出,发生匹配事件不会导致定时器清零。

1.2 实现周期性中断

使用重启模式,利用比较值1 来设置溢出时间

2 相关寄存器

3 定时器配置

GPT 相关的库函数在 fsl_gpt.c 和 fsl_gpt.h 这两个文件中

3.1 时钟使能

GPT 初始化函数 GPT_Init 默认会使能GPT 使能。函数里面通过 CLOCK_EnableClock 来使能了 GPT1 时钟。

3.2 初始化GPT1定时器

void GPT_Init(GPT_Type *base, const gpt_config_t *initConfig)gpt_config_t gpt1_onfig;
GPT_GetDefaultConfig(&gpt1_onfig); //先初始化 GPT1 为默认值
gpt1_onfig.clockSource=kGPT_ClockSource_Periph; //初始化时钟源 perclk_clk_root
gpt1_onfig.divider=psc; //设置分频值
GPT_Init(GPT1,&gpt1_onfig); //初始化 GPT1

3.2.1 base

GPT1

3.2.2 initConfig

typedef struct _gpt_init_config
{gpt_clock_source_t clockSource; //选择时钟源uint32_t divider; //时钟源分频bool enableFreeRun;bool enableRunInWait;bool enableRunInStop;bool enableRunInDoze;bool enableRunInDbg;bool enableMode;
} gpt_config_t;

3.2.2.1 clockSorce

clockSource 用来设置用于 GPT 的时钟源

typedef enum _gpt_clock_source
{kGPT_ClockSource_Off = 0U, //关闭时钟kGPT_ClockSource_Periph = 1U, //外设时钟(ipg_clk)kGPT_ClockSource_HighFreq = 2U, //高速参考时钟(ipg_clk_highfreq)kGPT_ClockSource_Ext = 3U, //外部参考时钟kGPT_ClockSource_LowFreq = 4U, //低速参考时钟(ipg_clk_32k)kGPT_ClockSource_Osc = 5U, //24M 晶振
} gpt_clock_source_t;

实 际 上 设 置 的 是 CR 寄 存 器 的 CLKSRC 位 , 一 般 选 择 外 设 时 钟
kGPT_ClockSource_Periph (ipg_clk)作为 GPT 的时钟源

  • 外设时钟配置一般为75Mhz。

3.2.2.2 divider

divider 设置时钟源分频,可以设置的值范围为 0~4095,分别对应 1~4096 分频。

  • 实际设置的是 PR 寄存器的 PRESCALER 位
  • 比如我们将分频值设置为 2,那么 GPT1 最终的时钟就是:75MHz/(2+1)=25MHz。

3.2.2.3 enablexxxxx

使能 GPT 的相应模式

3.3 设置 GPT1 比较值

设置好比较值就可以决定确定GPT1的溢出时间了,也就是定时时间。

  • GPT1 比较值的设定通过函数 GPT_SetOutputCompareValue 来完成
static inline void GPT_SetOutputCompareValue(GPT_Type *base,gpt_output_compare_channel_t channel,uint32_t value)

3.3.1 base

GPT1

3.3.2 channel

typedef enum _gpt_output_compare_channel
{kGPT_OutputCompare_Channel1 = 0U, //输出比较通道 1kGPT_OutputCompare_Channel2 = 1U, //输出比较通道 2kGPT_OutputCompare_Channel3 = 2U, //输出比较通道 3
} gpt_output_compare_channel_t;

3.3.3 value

第三个参数就是要设置的比较值。

  • 比如我们设置 GPT1 分频值为 3749
  • 那么GPT1 的时钟就是 75MHz/(3749+1)=20000Hz
  • 比较值设置为 10000 的话那么每 0.5s 就会产生一次比较中断,这样就实现了 0.5s 的定时。

3.4 设置 GPT1 输出比较 1 的 中断

输出比较中断设置通过函数 GPT_EnableInterrupts 来完成

GPT_EnableInterrupts(GPT_Type *base, uint32_t mask);GPT_EnableInterrupts(GPT1, kGPT_OutputCompare1InterruptEnable);

使用 GPT1 的输出比较通道 1,所以设置为 kGPT_OutputCompare1InterruptEnable。

3.5 使能 GPT

调用函数 GPT_StartTimer 来使能 GPT 定时器

void GPT_StartTimer(GPT_Type *base)

设置 CR 寄存器的 EN 位

3.6 设置 GPT1 中断 优先级

因为要产生中断,必不可少的要设置 NVIC 相关寄存器

RT1052_NVIC_SetPriority(GPT1_IRQn,5,0); //抢占优先级 5,子优先级 0
EnableIRQ(GPT1_IRQn); //使能 GPT1 中断

3.7 编写中断服务函数

中断产生后,需要通过函数 GPT_GetStatusFlags 判断是否为比较中断。在处理完中断之后调用函数 GPT_ClearStatusFlags 来清除该中断标志。

3.7.1 GPT_GetStatusFlags

static inline uint32_t GPT_GetStatusFlags(GPT_Type *base, gpt_status_flag_t flags)
  • GPT1
  • flags
typedef enum _gpt_status_flag
{kGPT_OutputCompare1Flag = GPT_SR_OF1_MASK, //输出比较通道 1 中断标志kGPT_OutputCompare2Flag = GPT_SR_OF2_MASK, //输出比较通道 2 中断标志kGPT_OutputCompare3Flag = GPT_SR_OF3_MASK, //输出比较通道 3 中断标志kGPT_InputCapture1Flag = GPT_SR_IF1_MASK, //输入捕获通道 1 中断标志kGPT_InputCapture2Flag = GPT_SR_IF2_MASK, //输入捕获通道 2 中断标志kGPT_RollOverFlag = GPT_SR_ROV_MASK, //溢出中断标志
} gpt_status_flag_t;

3.7.2 GPT_ClearStatusFlags

中断状态(标志位)清除函数 GPT_ClearStatusFlags 原型如下:

static inline void GPT_ClearStatusFlags(GPT_Type *base, gpt_status_flag_t flags)
  • GPT1
  • kGPT_OutputCompare1Flag。

3.8 最终代码

gpt_config_t gpt1_onfig;//初始化GPTIMER1,时钟源为perclk_clk_root=75MHz
//pre:分频值,0~4096
//comcount:比较计数值,0~0xFFFFFFFF
//当ocrx==CNT时,产生中断.
//定时时间=ocrx*(psc+1)/PERCLK_CLK_ROOT
void GPT1_Int_Init(u16 psc,u32 ocrx)
{GPT_GetDefaultConfig(&gpt1_onfig);	//先初始化GPT1为默认值gpt1_onfig.clockSource=kGPT_ClockSource_Periph;	//初始化时钟源perclk_clk_rootgpt1_onfig.divider=psc;	        //设置分频值GPT_Init(GPT1,&gpt1_onfig);GPT_SetOutputCompareValue(GPT1,kGPT_OutputCompare_Channel1,ocrx);	    //设置比较计数值GPT_EnableInterrupts(GPT1,kGPT_OutputCompare1InterruptEnable);			//使能GPT比较通道1中断RT1052_NVIC_SetPriority(GPT1_IRQn,5,0);									//抢占优先级5,子优先级0EnableIRQ(GPT1_IRQn);	//使能GPT1中断GPT_StartTimer(GPT1);	//开始定时器	
}//GPT1中断服务函数
void GPT1_IRQHandler(void) 
{//OCR1中断if(GPT_GetStatusFlags(GPT1,kGPT_OutputCompare1Flag)){LED1_Toggle;			//LED1灯翻转GPT_ClearStatusFlags(GPT1,kGPT_OutputCompare1Flag);//清除中断标志位}__DSB();				//数据同步屏蔽指令
}

相关文章:

RT1052的定时器

文章目录 1 通用定时器1.1 定时器框图1.2 实现周期性中断 2 相关寄存器3 定时器配置3.1 时钟使能3.2 初始化GPT1定时器3.2.1 base3.2.2 initConfig3.2.2.1 clockSorce3.2.2.2 divider3.2.2.3 enablexxxxx 3.3 设置 GPT1 比较值3.3.1 base3.3.2 channel3.3.3 value 3.4 设置 GPT…...

opencv python 训练自己的分类器

源码下载 一、分类器制作 1.样本准备 收集好你所需的正样本,和负样本,分别保存在不同文件夹 在pycharm新建项目,项目结构如下:has_mask文件夹放置正样本,no_mask文件夹放置负样本 安装opencv,把opencv包…...

详解Mybatis之分页插件【PageHelper】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 一. 什么是分页?二. 为什么使用分页?三. 如何设计一个Page类(分…...

【基于矢量射线的衍射积分 (VRBDI)】基于矢量射线的衍射积分 (VRBDI) 和仿真工具(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

基于jackson对bean的序列号和反序列化

通过观察控制台输出的SQL发现页面传递过来的员工id的值和数据库中的id值不一致,这是怎么回事呢? 分页查询时服务端响应给页面的数据中id的值为19位数字,类型为long 页面中js处理long型数字只能精确到前16位,所以最终通过ajax请求提交给服务…...

排队理论简介

排队理论简介 1. 理论背景2. 研究的数学方法3. 拒绝型排队系统与等候型排队系统4. 拒绝型排队系统 本文参考文献为Вентцель Е. С.的《Исследование операций》。 1. 理论背景 排队理论又称大众服务理论,顾名思义指的是在有限的服务条…...

极速查找(3)-算法分析

篇前小言 本篇文章是对查找(2)的续讲二叉排序树 二叉排序树(Binary Search Tree,BST),又称为二叉查找树,是一种特殊的二叉树。性质: 左子树的节点值小于根节点的值,右…...

http 常见的响应状态码 ?

100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本200——交易成功201——提示知道新文件的URL202——接受和处理、但处理未完成203——返回信息不确定或不完整204——请求收到,但返回信息为空205——服务器完成了请求,用户代理…...

机器学习笔记之优化算法(四)线搜索方法(步长角度;非精确搜索)

机器学习笔记之优化算法——线搜索方法[步长角度,非精确搜索] 引言回顾:精确搜索步长及其弊端非精确搜索近似求解最优步长的条件反例论述 引言 上一节介绍了从精确搜索的步长角度观察了线搜索方法,本节将从非精确搜索的步长角度重新观察线搜…...

Redis 哨兵 (sentinel)

是什么 官网理论:https://redis.io/docs/management/sentinel/ 吹哨人巡查监控后台 master 主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。 作用:无人值守运维 哨兵的作用: 1…...

统计2021年10月每个退货率不大于0.5的商品各项指标

统计2021年10月每个退货率不大于0.5的商品各项指标_牛客题霸_牛客网s mysql(ifnull): select product_id, format(ifnull(sum(if_click)/nullif(count(*),0),0),3) as ctr, format(ifnull(sum(if_cart)/nullif(sum(if_click),0),0),3) as c…...

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

UE5、CesiumForUnreal加载无高度地形

文章目录 1.实现目标2.实现过程3.参考资料1.实现目标 在UE5中,CesiumForUnreal插件默认的地形都是带高度的,这里加载没有高度的地形,即大地高程为0,GIF动图如下: 2.实现过程 参考官方的教程,下载无高度的DEM,再切片加载到UE中。 (1)下载无高度地形DEM0。 在官方帖子…...

关于Spring中的@Configuration中的proxyBeanMethods属性

Configuration的proxyBeanMethods属性 在Configuration注解中,有两个属性: value配置Bean名称proxyBeanMethos,默认是true 这个proxyBeanMethods的默认属性是true。 直接说:当Configuration注解的proxyBeanMeathods属性是true…...

dp1,ACM暑期培训

D - 摆花 P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Description 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花&…...

大厂程序员的水平比非大厂高很多嘛?

最近一个月,筛选了一百多份简历,前前后后面试了二三十人,基本上都是有大厂经历的人。同时,也录用了几个有大厂经历的。但整体而言,打破了对大厂出来的都是优质人才的幻觉。看到的实际情况与想象中的落差还是比较大的。…...

Java开发工具MyEclipse发布v2023.1.2,今年第二个修复版!

MyEclipse一次性提供了巨量的Eclipse插件库,无需学习任何新的开发语言和工具,便可在一体化的IDE下进行Java EE、Web和PhoneGap移动应用的开发;强大的智能代码补齐功能,让企业开发化繁为简。 MyEclipse v2023.1.2官方正式版下载 …...

基于正交滤波器组的语音DPCM编解码算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................................g0zeros(1,lenH); g1zeros(1,l…...

VS2022和QT混合编程打包发布程序

1.在开始菜单输入 CMD 找到 Qt5.15.2(MSVC 64-bit) 2.输入windeployqt exe所在路径 3.运行完毕后,双击打开exe文件,可能会报错,缺少相关的dll,找到缺少的dll拷贝到运行文件夹下即可。...

Filebeat学习笔记

Filebeat基本概念 简介 Filebeat是一种轻量级日志采集器,内置有多种模块(auditd、Apache、Nginx、System、MySQL等),针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点&#…...

【实战】 九、深入React 状态管理与Redux机制(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十六)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

第九十五回 如何使用dio的转换器

文章目录 概念介绍使用方法使用默认的转换器自定义转换器 示例代码经验分享 我们在上一章回中介绍了"如何打造一个网络框架"相关的内容,本章回中将介绍 如何使用dio的转换器.闲话休提,让我们一起Talk Flutter吧。 概念介绍 转换器主要用来转…...

Python深度学习“四大名著”之一【赠书活动|第二期《Python机器学习:基于PyTorch和Scikit-Learn》】

近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从AlexNet模型在2012年ImageNet大赛被提出以来,机器学习和深度学习迅猛发展,取…...

RAID相关知识

简介 RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。RAID技术将多个单独的物理硬盘以不同的方式组合成一个逻辑磁盘,从而提高硬盘的读写性能和数据安全性。 数据组织形式 分块&#x…...

DataStructure--Basic

程序设计数据结构算法 只谈数据结构不谈算法就跟去话剧院看梁山伯与祝英台结果只有梁山伯在演,祝英台生病了没来一样。 本文的所有内容都出自《大话数据结构》这本书中的代码实现部分,建议看书,书中比我本文写的全。 数据结构,直…...

Intellij IDEA 双击启动报错ClassNotFoundException: com.licel.b.z@

项目场景: 新从官网下载了ideaIU-2023.2.win.zip ,安装后双击启动报错, 无法运行idea, 提示信息如下 问题描述 Internal error. Please refer to https://jb.gg/ide/critical-startup-errorsjava.lang.ExceptionInInitializerErrorat java…...

使用 Logstash 及 enrich processor 实现数据丰富自动化

在我之前的文章: Elasticsearch:enrich processor (7.5发行版新功能) Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据 通过上面的两篇文章的介绍,我们应该充分掌握了如何使用 enrich proce…...

Django模板语法和请求

1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’),如果是pycharm创建的django项目会加上,就会默认先去根目录找templates目录下的html文件&#xff0c…...

Android跨进程传大图思考及实现——附上原理分析

1.抛一个问题 这一天,法海想锻炼小青的定力,由于Bitmap也是一个Parcelable类型的数据,法海想通过Intent给小青传个特别大的图片 intent.putExtra("myBitmap",fhBitmap)如果“法海”(Activity)使用Intent去传递一个大的Bitmap给“…...

【动态规划part13】| 300.最长递增子序列、674.最长连续递增序列、718.最长重复数组

目录 🎈LeetCode 300.最长递增子序列 🎈LeetCode 674. 最长连续递增序列 🎈LeetCode 718. 最长重复子数组 🎈LeetCode 300.最长递增子序列 链接:300.最长递增子序列 给你一个整数数组 nums ,找到其…...

做外贸有哪些好的免费b2b网站/建网站

题目描述: 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪——一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个 01 序列。11代表这个位置的脑组织正常工作,00代表这是一…...

新乡发布最新通告/seo教程技术

搭建开发环境1.Dreamweaver版本选择确认Dreamweaver CS5.5版本号是11.5。Adobe官网有的下,破解方法网上一大堆,主要是 通过序列号改hosts方法。2.安装Android SDK到官网下载Android SDK安装程序并安装好,安装后如图所示然后在DW中选择“站点-…...

晋城两学一做网站/nba最新消息新闻报道

这里偷工减料了,用蔡勒公式直接代入了! 蔡勒公式: W (〔 [c/4] - 2c y [y/4] [13 * (m1) / 5] d - 1 〕% 7 7)% 7;其中:c为年份的前两位数,y为年份的后两位数,m为月份,d为天数; 注&#x…...

权威的营销单页网站/百度网盘官方下载

首先配置config下的index.js dev: {// PathsassetsSubDirectory: static,autoOpenBrowser: false,assetsPublicPath: /,proxyTable: { // 在这里配置如下代码/api: {target:http:xxxxxxxxxxx, // 你请求的第三方接口changeOrigin:true, // 在本地会创建一个虚拟服务端&#xf…...

制作网页的工具按工作方式分为/企业关键词排名优化网址

更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/人人影视http://www.sfkyty.com/开发环境: win10-64 python2.7.16 chrome77 from selenium import webdriver driver webdriver.Ch…...

去视频网站做编辑器/b站好看的纪录片免费

原文地址:Part 4: Persistence tests 此篇教程中,我们将测试之前建立的映射并且进一步的了解 NHibernate 。 我们使用的是 NUnit 2.5.2 ,不过新版本的也应该会兼容的。 声明: 此部分内容我自己也是在学习中,所以你可以…...