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

RT1052 的四定时器

文章目录

  • 1 Quad Timer,简称:QTMR
  • 2 单个通道的框图
  • 3 QTMR配置
    • 3.1 QTMR1 时钟使能。
    • 3.2 初始化 QTMR1。
      • 3.2.1 QTMR_Init
    • 3.3 设置 QTMR1 通道 0 的定时周期。
      • 3.3.1QTMR_SetTimerPeriod
    • 3.4 使能 QTMR1 通道 0 的比较中断。
      • 3.4.1 QTMR_EnableInterrupts
    • 3.5 开启 QTMR 。
    • 3.5.1 QTMR_StartTimer
    • 3.6 使能 QTMR1 中 断并设置优先级。 。
    • 3.7编写中断服务函数。
      • 3.7.1 QTMR_GetStatus
      • 3.7.2 QTMR_ClearStatusFlags

1 Quad Timer,简称:QTMR

RT1052 内部集成了 4 个 QTMR 定时器,每个 QTMR 定时器又有 4 个通道.
每个通道都有独立的:

  • 1 个 16 位计数器、
  • 1 个预分频器、
  • 1 个加载值寄存器、
  • 1 个捕获寄存器、
  • 2 个比较寄存器、
  • 两个状态寄存器
  • 1 个控制寄存器等

完全就是一个独立定时器的功能。
可以将QTMR 看成是一个拥有 4*4 个定时器的集合,这样光 QTMR 就拥有 16 个定时器之多

2 单个通道的框图

在这里插入图片描述RT1052 内部有 16 个这样的通道!
RT1052 四定时器每个通道的功能包括:
1)16 位计数器(CNTR),支持向上/下计数。
2)可级联,组成 32/48/64 位计数器。
3)独立分频器(支持:1/2/4/8/16/32/64/128 分频)。
4)支持输出比较和输入捕获功能。
5)支持多种工作模式(14 种)。
6)支持输入滤波器(输入捕获时用)。
7)最大计数频率可达 150Mhz。
8)支持单次计数/连续计数。
9)比较寄存器具有预装载功能。
10)4 个通道可以同时开启计数(同步启动)。
四定时器单个通道的工作模式非常多(14 种),具体某个模式的使用方法请参考《RT1050参考手册》第 47.6.5 节。

3 QTMR配置

QTMR 相关的库函数在 fsl_qtmr.c 和 fsl_qtmr.h 这两个文件中
我们使用 QTMR1 的通道 0 产生中断

3.1 QTMR1 时钟使能。

使用函数 CLOCK_EnableClock 使能 QTMR1 时钟,使用方法如下:

CLOCK_EnableClock(kCLOCK_Timer1)

此函数会被 Q TMR 定时器初始化函数 QTMR_Init 调用,所以不需要我们显示的调用。

3.2 初始化 QTMR1。

使用函数 QTMR_Init 来初始化 QTMR,此函数原型如下:

3.2.1 QTMR_Init

void QTMR_Init(TMR_Type * base,qtmr_channel_selection_t channel,const qtmr_config_t * config)qtmr_config_t qtimer1_config;
QTMR_GetDefaultConfig(&qtimer1_config); //先设置为默认配置
qtimer1_config.primarySource= kQTMR_ClockDivide_128; //设置第一时钟源
QTMR_Init(TMR1, kQTMR_Channel_0, &qtimer1_config); //初始化 QTIMER
  • 第一个参数指定初始化哪个 QTMR,可以选择:TMR1、TMR2、TMR3 和 TMR4
  • 第二个参数选择使用哪个通道,可选择的通道如下:
typedef enum _qtmr_channel_selection
{kQTMR_Channel_0 = 0U, //QTMR 通道 0kQTMR_Channel_1, //QTMR 通道 1kQTMR_Channel_2, //QTMR 通道 2kQTMR_Channel_3, //QTMR 通道 3
} qtmr_channel_selection_t;
  • 第三个参数为指向结构体 qtmr_config_t 的指针
typedef struct _qtmr_config
{qtmr_primary_count_source_t primarySource; //指定第一时钟源qtmr_input_source_t secondarySource; //指定第二时钟源bool enableMasterMode;bool enableExternalForce;uint8_t faultFilterCount;uint8_t faultFilterPeriod;qtmr_debug_action_t debugMode;
} qtmr_config_t;

这个结构体最常用的就是前两个成员变量

  • 第一时钟源可选设置如下:
typedef enum _qtmr_primary_count_source
{kQTMR_ClockCounter0InputPin = 0,kQTMR_ClockCounter1InputPin,kQTMR_ClockCounter2InputPin,kQTMR_ClockCounter3InputPin,kQTMR_ClockCounter0Output,kQTMR_ClockCounter1Output,kQTMR_ClockCounter2Output,kQTMR_ClockCounter3Output,kQTMR_ClockDivide_1, //IPG 总线时钟 1 分频kQTMR_ClockDivide_2, // IPG 总线时钟 2 分频kQTMR_ClockDivide_4, // IPG 总线时钟 4 分频kQTMR_ClockDivide_8, // IPG 总线时钟 8 分频kQTMR_ClockDivide_16, //IPG 总线时钟 16 分频kQTMR_ClockDivide_32, // IPG 总线时钟 32 分频kQTMR_ClockDivide_64, // IPG 总线时钟 64 分频kQTMR_ClockDivide_128 // IPG 总线时钟 128 分频
} qtmr_primary_count_source_t;

第一时钟源为 IPG_CLK_ROOT 的 128 分频,也就是设置为 kQTMR_ClockDivide_128。
第二时钟源的选择类似。

3.3 设置 QTMR1 通道 0 的定时周期。

QTMR1 通道 0 的定时周期通过函数 QTMR_SetTimerPeriod 来设置

3.3.1QTMR_SetTimerPeriod

此函数原型如下:

void QTMR_SetTimerPeriod(TMR_Type *base, qtmr_channel_selection_t channel, uint16_t ticks)
  • 第一个参数指定要设置的 QTMR,这里为 TMR1。
  • 第二个参数指定要设置的通道,这里是通道 0 所以应该设置为 kQTMR_Channel_0。
  • 第三个参数设置匹配比较值,此值就是用来决定定时器溢出时间的。
    • QTMR 的计数方向是可以修改的
    • 当 CTRL 寄存器的 DIR 位为 0 的时候就是向上计数器
    • 当 DIR 位为 1 的时候就是向下计数器,默认是向上计数器。

3.4 使能 QTMR1 通道 0 的比较中断。

使用函数 QTMR_EnableInterrupts 来使能 QTMR1 通道 0 的比较中断,这样当定时器计数值(CNTR0)达到我们设置的匹配比较值的时候就会产生相应中断

3.4.1 QTMR_EnableInterrupts

此函数原型如下:

void QTMR_EnableInterrupts(TMR_Type * base,qtmr_channel_selection_t channel,uint32_t mask)
  • 第一个参数指定要操作的 QTMR,这里为 TMR1。
  • 第二个参数指定要使用的通道,这里是通道 0,即 kQTMR_Channel_0。
  • 第三个参数是要开启的中断类型
typedef enum _qtmr_interrupt_enable
{kQTMR_CompareInterruptEnable = (1U << 0), //比较中断kQTMR_Compare1InterruptEnable = (1U << 1), //比较 1 中断kQTMR_Compare2InterruptEnable = (1U << 2), //比较 2 中断kQTMR_OverflowInterruptEnable = (1U << 3), //溢出中断kQTMR_EdgeInterruptEnable = (1U << 4) //输入边沿检测中断
} qtmr_interrupt_enable_t;

我们要使能的是匹配比较中断,因此选择 kQTMR_CompareInterruptEnable。

3.5 开启 QTMR 。

在相关的配置完成以后,就可以使能 QTMR 了,使用函数 QTMR_StartTimer 来开启 QTMR定时器

3.5.1 QTMR_StartTimer

此函数原型如下:

static inline void QTMR_StartTimer(TMR_Type * base,qtmr_channel_selection_t channel,qtmr_counting_mode_t clockSource)

第三个参数用来设置定时器的计数模式,是上升沿计数还是下降沿计数、双边沿模式。

typedef enum _qtmr_counting_mode
{kQTMR_NoOperation = 0,kQTMR_PriSrcRiseEdge,kQTMR_PriSrcRiseAndFallEdge,kQTMR_PriSrcRiseEdgeSecInpHigh,kQTMR_QuadCountMode,kQTMR_PriSrcRiseEdgeSecDir,kQTMR_SecSrcTrigPriCnt,kQTMR_CascadeCount
} qtmr_counting_mode_t;

这个参数设置的就是寄存器 CTRL0 的 CM 位,本例程中我们选择 kQTMR_PriSrcRiseEdge,也就是第一时钟源上升沿计数模式。

3.6 使能 QTMR1 中 断并设置优先级。 。

在定时器配置完了之后,因为要产生中断,必不可少的要设置 NVIC 相关寄存器,以使能QTMR1 的相关中断,设置方法如下:

RT1052_NVIC_SetPriority(TMR1_IRQn,6,0); //抢占优先级 6,子优先级 0
EnableIRQ(TMR1_IRQn); //是能 TMR1 中断

3.7编写中断服务函数。

通过函数 QTMR_GetStatus 来获取中断状态,判断此次产生的中断来自哪个通道
调用函数 QTMR_ClearStatusFlags 来清除相应的中断标志位。

3.7.1 QTMR_GetStatus

中断状态获取函数 QTMR_GetStatus 原型如下:

uint32_t QTMR_GetStatus(TMR_Type *base, qtmr_channel_selection_t channel)
  • 第一个参数是要获取的定时器,这里为 TMR1
  • 第二参数就要获取的通道,这里为kQTMR_Channel_0

其实就是读取寄存器 SCTRL0 的值

3.7.2 QTMR_ClearStatusFlags

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

void QTMR_ClearStatusFlags(TMR_Type * base,
qtmr_channel_selection_t channel,
uint32_t mask)

最后一个参数指定要清除的中断类型(中断标志位)

typedef enum _qtmr_status_flags
{kQTMR_CompareFlag = (1U << 0), //比较标志位kQTMR_Compare1Flag = (1U << 1), //比较 1 标志位kQTMR_Compare2Flag = (1U << 2), //比较 2 标志位kQTMR_OverflowFlag = (1U << 3), //溢出标志位kQTMR_EdgeFlag = (1U << 4) //输入边沿检测标志位
} qtmr_status_flags_t;

这里要清除的即使比较标志位,所以选择kQTMR_CompareFlag

相关文章:

RT1052 的四定时器

文章目录 1 Quad Timer&#xff0c;简称&#xff1a;QTMR2 单个通道的框图3 QTMR配置3.1 QTMR1 时钟使能。3.2 初始化 QTMR1。3.2.1 QTMR_Init 3.3 设置 QTMR1 通道 0 的定时周期。3.3.1QTMR_SetTimerPeriod 3.4 使能 QTMR1 通道 0 的比较中断。3.4.1 QTMR_EnableInterrupts 3.…...

ViT-vision transformer

ViT-vision transformer 介绍 Transformer最早是在NLP领域提出的&#xff0c;受此启发&#xff0c;Google将其用于图像&#xff0c;并对分类流程作尽量少的修改。 起源&#xff1a;从机器翻译的角度来看&#xff0c;一个句子想要翻译好&#xff0c;必须考虑上下文的信息&…...

Election of the King 2023牛客暑期多校训练营4-F

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一个n个数的数组a&#xff0c;有n-1轮操作&#xff0c;每轮由每个数选择一个和它的差最大的数&#xff0c;如果相同就选值更大的&#xff0c;被最多数组选择的数字被删去&#xff0c;有相同的也去掉数值更大的那个…...

Nacos的搭建及服务调用

文章目录 一、搭建Nacos服务1、Nacos2、安装Nacos3、Docker安装Nacos 二、OpenFeign和Dubbo远程调用Nacos的服务1、搭建SpringCloudAlibaba的开发环境1.1 构建微服务聚合父工程1.2 创建子模块cloud-provider-payment80011.3 创建子模块cloud-consumer-order80 2、远程服务调用O…...

uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件&#xff0c;如图&#xff1a; 示例代码&#xff1a; <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…...

leetcode 45. 跳跃游戏 II

2023.7.30 class Solution { public:int jump(vector<int>& nums) {int step 0;int cover 0;int largest 0;if(nums.size() 1) return step;for(int i0; i<nums.size(); i){cover max(cover , inums[i]); //最大覆盖范围if(cover > nums.size()-1) retur…...

力扣热门100题之矩阵置0【中等】

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff…...

【机器学习】Classification using Logistic Regression

Classification using Logistic Regression 1. 分类问题2. 线性回归方法3. 逻辑函数&#xff08;sigmod&#xff09;4.逻辑回归5. 决策边界5.1 数据集5.2 数据绘图5.3 逻辑回归与决策边界的刷新5.4 绘制决策边界 导入所需的库 import numpy as np %matplotlib widget import m…...

全方位支持图文和音视频、100+增强功能,Facebook开源数据增强库AugLy

Facebook 近日开源了数据增强库 AugLy&#xff0c;包含四个子库&#xff0c;每个子库对应不同的模态&#xff0c;每个库遵循相同的接口。支持四种模态&#xff1a;文本、图像、音频和视频。 最近&#xff0c;Facebook 开源了一个新的 Python 库——AugLy&#xff0c;该库旨在帮…...

RxSwift 使用方式

背景 最近项目业务&#xff0c;所有模块已经支持Swift混编开发&#xff0c;正在逐步使用Swift 方式进行开发新业务&#xff0c;以及逐步替换老业务方式进行发展&#xff0c;所以使用一些较为成熟的Swift 的三方库&#xff0c;成为必要性&#xff0c;经过调研发现RxSwift 在使用…...

HTML5 Web Worker

HTML5 Web Worker是一种浏览器提供的JavaScript多线程解决方案&#xff0c;它允许在后台运行独立于页面主线程的脚本&#xff0c;从而避免阻塞页面的交互和渲染。Web Worker可以用于执行计算密集型任务、处理大量数据、实现并行计算等&#xff0c;从而提升前端应用的性能和响应…...

25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)

1.简述 一、算法原理 1、问题引入 之前我们了解过的算法大部分都是无约束优化问题&#xff0c;其算法有&#xff1a;黄金分割法&#xff0c;牛顿法&#xff0c;拟牛顿法&#xff0c;共轭梯度法&#xff0c;单纯性法等。但在实际工程问题中&#xff0c;大多数优化问题都属于有约…...

django channels实战(websocket底层原理和案例)

1、websocket相关 1.1、轮询 1.2、长轮询 1.3、websocket 1.3.1、websocket原理 1.3.2、django框架 asgi.py在django项目同名app目录下 1.3.3、聊天室 django代码总结 小结 1.3.4、群聊&#xff08;一&#xff09; 前端代码 后端代码 1.3.5、群聊&#xff08;二&#xff09…...

学习使用axios,绑定动态数据

目录 axios特性 案例一&#xff1a;通过axios获取笑话 案例二&#xff1a;调用城市天气api接口数据实现天气查询案例 axios特性 支持 Promise API 拦截请求和响应&#xff08;可以在请求前及响应前做某些操作&#xff0c;例如&#xff0c;在请求前想要在这个请求头中加一些…...

c语言内存函数的深度解析

本章对 memcpy&#xff0c;memmove&#xff0c;memcmp 三个函数进行详解和模拟实现&#xff1b; 本章重点&#xff1a;3个常见内存函数的使用方法及注意事项并学会模拟实现&#xff1b; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力…...

低代码平台介绍(国内常见的)

文章目录 前言1、阿里云宜搭2、腾讯云微搭3、百度爱速搭4、华为云Astro轻应用 Astro Zero&#xff08;AppCube&#xff09;5、字节飞书多维表格6、云程低代码平台7、ClickPaaS8、网易轻舟9、用友YonBuilder10、金蝶苍穹云平台11、泛微平台12、蓝凌低代码平台13、简道云14、轻流…...

matlab RRR机械臂 简略代码

RRR机器人&#xff01;启动&#xff01; gazebo在arm mac上似乎难以运行&#xff0c;退而选择Matlab&#xff0c;完成老师第一个作业&#xff0c;现学现卖&#xff0c;权当记录作业过程&#xff0c;有不足之处&#xff0c;多多指教。 作业&#xff01;启动&#xff01; RRR机…...

集成测试,单元测试隔离 maven-surefire-plugin

详见 集成测试,单元测试隔离 maven-surefire-plugin maven的goal生命周期 Maven生存周期 - 含 integration-test Maven本身支持的命令&#xff08;Goals&#xff09;是有顺序的&#xff0c;越后面执行的命令&#xff0c;会将其前面的命令和其本身按顺序执行一遍&#xff0c;…...

渗透测试基础知识(1)

渗透基础知识一 一、Web架构1、了解Web2、Web技术架构3、Web客户端技术4、Web服务端组成5、动态网站工作过程6、后端存储 二、HTTP协议1、HTTP协议解析2、HTTP协议3、http1.1与http2.0的区别4、HTTP协议 三、HTTP请求1、发起HTTP请求2、HTTP响应与请求-HTTP请求3、HTTP响应与请…...

Android NDK开发

工程目录图 NDK中文官网 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;TestNDK 参考文献 Android NDK 从入门到精通&#xff08;汇总篇&#xff09;Android JNI(一)——NDK与JNI基础Android之…...

一种三菱MXF100-8 走CC LINK IE TSN 网络控制单轴伺服的功能块(可控30+轴)

三菱电机去年新推出了MX系列的PLC&#xff0c;其中最吸引人的应该就是本体网口支持CC Link TSN总线了。但MXF100系列的轴控功能&#xff0c;只有8轴和16轴两个版本&#xff0c;为了充分应用TSN的强大性能&#xff0c;作者手搓了一个直接读写对象字典实现单轴伺服定位控制的功能…...

大模型的“文字障眼法“:FlipAttack 文本反转越狱技术全解析

一、先打个比方&#xff1a;你听说过"倒着说话"绕过安检吗&#xff1f; 想象一下&#xff0c;有个调皮的小孩想带进游乐园一个违禁品。安检人员耳朵很尖&#xff0c;一听到"炸弹""刀具"这些词就会拦人。于是小孩想了个办法——把话说反。 “我要…...

为什么你的盐印相总像P图?:Midjourney v6.2最新盐印相渲染漏洞(已验证387组测试图)及绕过方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的盐印相总像P图&#xff1f; 盐印相&#xff08;Salted Paper Print&#xff09;作为19世纪早期摄影工艺的代表&#xff0c;其本质是依靠氯化钠与硝酸银反应生成感光氯化银&#xff0c;在阳光…...

vue3+python基于Django框架的铁路博物馆展览系统的设计与实现67350649

目录同行可拿货,招校园代理 ,本人源头供货商项目背景技术栈核心功能模块关键技术实现部署方案项目亮点项目技术支持源码获取详细视频演示 &#xff1a;同行可合作点击我获取源码->->进我个人主页-->获取博主联系方式同行可拿货,招校园代理 ,本人源头供货商 项目背景 …...

CANN/asc-devkit同步通知API文档

asc_sync_notify 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcod…...

终极智慧树刷课插件指南:如何实现自动化高效学习

终极智慧树刷课插件指南&#xff1a;如何实现自动化高效学习 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台枯燥的手动操作而烦恼吗&#xff1f;智慧…...

GanttProject终极指南:免费开源的项目管理工具完全攻略

GanttProject终极指南&#xff1a;免费开源的项目管理工具完全攻略 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject GanttProject是一款功能强大的免费开源项目管理软件&#xff0c;通过直…...

LicenseFinder高级配置指南:自定义许可证规则与决策继承

LicenseFinder高级配置指南&#xff1a;自定义许可证规则与决策继承 【免费下载链接】LicenseFinder Find licenses for your projects dependencies. 项目地址: https://gitcode.com/gh_mirrors/li/LicenseFinder LicenseFinder是一款强大的开源许可证管理工具&#xf…...

GLSL优化器核心优化技术详解:函数内联、死代码消除与常量传播

GLSL优化器核心优化技术详解&#xff1a;函数内联、死代码消除与常量传播 【免费下载链接】glsl-optimizer GLSL optimizer based on Mesas GLSL compiler. Used to be used in Unity for mobile shader optimization. 项目地址: https://gitcode.com/gh_mirrors/gl/glsl-opt…...

这份榜单够用!盘点2026年断层领先的的AI论文写作软件

一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的AI论文写作软件&#xff0c;覆盖选题构思、文献综述、数据整理、格式排版等核心场景&#xff0c;帮你高效搞定论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首选…...