ARM M0+各种定时器驱动的编写

2023-05-16

systick

系统滴答时间。这个定时器之前的文章已经讲过。这个是一个递减的定时器,有个模数寄存器。在此不多说。就是一个系统的模块,这个模块是集成在ARM M0+内核中的,其实主要是集成在NVIC 中的,NVIC也是ARM 内部模块,该模块的定时器,用该模块的时钟源来使能该定时器。以及模数计数器。总共只有四个寄存器。控制状态寄存器:主要包含一个COUNTFLAG 中断标志位,当计数器计数到0的时候标志该位,CLKSOURCE :可选择时钟源,默认为内核始终,有的厂家还会提供其他外设始终。TICKINT中断使能位,ENABLE计数器使能位。

RVR重载寄存器:每次计数器计数到0 的时候,都重载该值。

CVR计数器的值,记录当前的值。

CALIB校准寄存器:有的厂家将计算好的10ms的ticks值放入该寄存器。也就是说是厂商决定的,厂商烧入,则有,没有设置则没有。

TPM

这个寄存器是递增的。有三个模块,

分为主计数器,和通道计数器,也就是相当于一个计数器,分一个主模数,一个次模数。状态和控制寄存器(SC)中,通过CMOD 可以选计数的模式通过该计数模式可以选择时钟,是选择模块时钟还是选择时钟失效,还是选择异步外设时钟,。再经过PS分频,2(PS次幂)代表分频值,即将该时钟降频。   CPWMS:中心对齐PWM选择(即计数器的计数模式,这个也算该计数器的一个特色吧。比如一般来说计数器是1,2,3,4,5, 然后1,2,3,4,5 。通过该位置1,可以设置成1,2,3,4,5,4,3,2,1)。所以置1只能配出中央对齐的PWM.

该定时器有一个总的MOD模数值,该值用来控制该模块的一个总的中断请求置状态寄存器的TOF位,当计数器达到该值时,该请求。当然一定有一个中断使能位,就是TOIE中断使能位,。两个值一并即触发了中断服务历程。

TPM的分通道。每个模块也有自己的模数寄存器的值。就相当于,主计数器模数是5,从1数到5,通道模数是3,即从1数到3的时候就出发了通道相应的事件。

其实也就是说通过将该模块的计数值。当前通道通过一定的配置 ,根据计数器来进行相应的处理。通道中分为MSnB:MSnA该位控制模式的。ELSNB:ELSNA该两位控制的是边沿和等级。模式有0:输入捕捉(01上升沿,10下降沿,11上升或下降捕捉),1,输出比较(在通道的模数值和计数器的值相等的时候,01翻转电平,10清除电平即置0,11设置电平即置1),2边沿对其PWM(10重新加载的时候是高电平,匹配的时候是低电平,即先高后低,01或11先低电平后高电平),11输出比较(10在匹配的时候打出低电平,X1在匹配的是打出高电平)。后面两种其实是一种,不同的就是在重新加载计数器的时候是否有操作。

每个通道都有一个状态控制寄存器和模数值,包含一个标志通道的中断的标志位,该标志位每个通道都有,还有一个中断使能位,还有就是刚才提到的模式控制和边沿控制,外加一个DMA使能。

模数值和计数器的模数值一样都是16位的,

由于一个模块的通道都比较多,每个通道虽然都有这个中断标志,但是,模块中断只有一个,所以KL25有一个寄存器STATUE将总中断标志位TOF,和每个通道的中断标志位,都映射到一个寄存器中,这个标志都是写1清0的。

有CONFIG配置寄存器,配置计数器的模式,以及时钟源,以及触发方式,比如让计数器不计数,等到输入捕捉到一个上升沿就开始捕捉。等等。还有在调试模式和在等待模式下用的时间基数。

根据以上寄存器的功能可以配置一下的几种功能:

输入捕捉:一般用于编码器

采集输入脉冲的上升沿,下降沿或者上升沿下降沿都采集。采样周期得是计数器时钟的1/4。这其中还涉及到一个Nyquist定律。输入捕捉的时候,CnV就没有用了。

 

输出捕捉功能:一般用于打出方波波形,比如步进电机需要的方波波形

即只有在通道值和模块的计数器的值相等的时候,会操作,可以翻转,默认高,或者默认低。该脉冲周期是计数器周期的两倍

边沿对其的PWM;即在上面的输出比较功能的基础上添加在重载计数器的值得时候进行设置。形成方波脉冲波形。

中心对其的PWM:这个就比较复杂了。周期是模数的两倍。就是1,2,3,4,5,模数是5 ,通道的模数是3 ,当开始和结尾的时候有一次溢出中断,总中断,当1数到3的时候触发一次通道中断,当3数到5 再从5数到3的时候又触发一次通道中断,然后再从3数到1.

 

PIT:  PIT有两个定时器,两个定时器可以连到一起去的。

该计数器的值和上面不一样,它是倒序的,跟systick有点像,从一个值往下递减,减到0的时候重新加载。该定时器还有两个寄存器表示生命周期,可以用来计算该计算机运行了多久,多长时间,对了,该定时器还有一个功能,就是累加(chain)也可以说连接吧,就比如KL25里面有2个TIMER,当第一个TIMER达到0的时候,第二个TIMER减1.

控制寄存器CR也没有几个功能,就是一个模块使能。和一个freeze

每个定时器都有以下的值:

PIT加载值,该值就是该计数器数到0的时候重新加载的值,

PIT当前值:计数当前计数器的值,

PIT时间控制寄存器。可以设置chain累加到前面一个计数器。timer0肯定没有这个功能。TIE中断使能位,TEN时钟使能。

PIT标志位:该位标志了计数器的值达到timer

LPTMR

低功耗定时器:

一共有四个寄存器:控制状态寄存器。预分频寄存器,比较值寄存器,计数寄存器

该定时器可以用外部的脉冲来进行使能,一共有4个外部引脚。

控制寄存器:TCF:定时器比较标志,

                       TIE:中断使能             TPS外部引脚使能    TPP引脚极性(上升沿递增,下降沿递增)  TFC当计数器的值在TCF的时候复位,或者溢出复位。

           TMS:时钟模式选择,定时器或者外部脉冲

TEN:定时器使能。

预分频寄存器:分配值,有2~65535     预分频时钟选择:PCS:与四个外部引脚相对应

比较值寄存器:比较寄存器,存储该值。

RTC:(实时时钟)

 

一共有8个寄存器:秒计数器:闹钟定时器,预分频寄存器,补偿寄存器,控制寄存器,状态寄存器,锁定寄存器,中断使能寄存器:

秒计数器TSR:1s递增一次

闹钟定时器TAR:当TSR达到TAR的值得时候,触发中断。

预分频寄存器,该值是对于32.768晶振来起作用的。预分频晶振的值。

补偿寄存器:可以对预分频进行设置,可以+-127进行配置。

控制寄存器,根据晶振的电容,CLKO晶振使能。OSCE晶振使能。

 

状态寄存器,锁定寄存器,中断使能寄存器:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM M0+各种定时器驱动的编写 的相关文章

  • 优秀的C/C++框架和库整理,值得收藏

    1 ACE 庞大 复杂 xff0c 适合大型项目 开源 免费 xff0c 不依赖第三方库 xff0c 支持跨平台 http www cs wustl edu schmidt ACE html 2 Asio Asio基于Boost开发的异步I
  • linux socket select(tcp)

    1 概述 xff1a 该demo主要实现了linux下通过select tcp 方式的socket并发通讯 xff0c 相关接口介绍可以参考 lt lt UNIX环境高级编程 gt gt 2 场景 服务端 一 lt 多 客户端 xff1a
  • 对于char*、char[]和string的转换

    1 char char 可以直接转为string 直接赋值 2 string转为char c str 会返回一个指向c字符串类型的指针 xff0c 所以 const char ch 61 str c str 也可以用str data C 4
  • 十分详细的数码管电子时钟(基于51单片机)

    数码管由于内部由多段LED灯构成 xff0c 也被称为多段式LED数码管 从数码管里面包含的LED个数来分 xff0c 可以分为七段式 八段式 十四段式等 七段式数码管 xff1a 八段式数码管 xff08 比七段式右下角多了一个小点 xf
  • 如何用Unity3D实现游戏中的角色换装?

    换装系统是游戏中较为常见的功能 xff0c 我们给它一个专业词avatar xff0c 可以做到装备与人物分离 xff0c 实现自由换装效果 我们可以将头部 身体 手 脚 武器独立建模 贴图 xff0c 利用avatar来动态换装 xff0
  • stm32学习(3)——NVIC中断优先级分组

    相信大多数铁汁在学习stm32的时候都了解过51单片机的基本内容 xff0c 对于51单片机来说 xff0c 中断就那么几个 xff1a 外部中断0定时器 计数器0中断外部中断1定时器 计数器1中断串口中断 它们在51单片机中的优先级也是按
  • STM32F407系统时钟配置不准确导致串口发送数据乱码、定时器定时不准问题

    前言 在用原子的F407探索者开发板时 xff0c 由于是用的野火的工程模板 xff0c 导致了一些串口发送乱码 定时器定时不准的问题 如果你也有类似的问题 xff0c 这个或许可以帮到你 原因 SYSCLK 系统时钟来源有三个方面 xff
  • 巡线PID算法

    相信很多电子专业的同学都做过循迹小车这个小玩意儿 xff0c 而在我们刚刚接触巡线的时候都是用的两个循迹模块 xff08 如下图 xff09 左边的模块检测到黑线了就说明我车子的方向偏右了就需要往左转 xff0c 同理 xff0c 右边检测
  • MSP432(Keil5)——9.ADC驱动

    本次例程驱动了板载的ADC来读取一个模拟的角度传感器 xff0c 大家可以在ADC读取中断里面换成其他的计算 xff0c 具体引脚见程序代码 adc c span class token macro property span class
  • C语言宏函数妙用——1

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • union和struct的区别

    union只配置一个空间来放置共用体中内存最大的数据 xff0c 而结构体则给其中每个变量内存空间 union常用来压缩数据空间 xff0c 其中两个变量不能同时使用时用union
  • 二极管基础知识

  • Java学习之多线程复制文件

    1 一个线程复制一个文件 import java io FileInputStream import java io FileOutputStream import java io IOException public class MyTh
  • 对于HTTP请求头及响应头的详解

    对于HTTP协议的请求头的详解 标签 xff1a CSDN博文 http协议由两部分组成 xff1a 请求和响应 当你在浏览器中输入一个URL时 xff0c 浏览器将按照你的请求创建并且发送请求 xff0c 该请求包含的所输入的URL以及一
  • 手把手教你实现Unity网络同步

    现如今 xff0c 网络同步的技术在各种游戏里被广泛应用和发展 xff0c 那么 xff0c 如何在Unity中搭建网络模块 xff1f 如何使服务器和客户端之间通信 xff1f 如何做到网络同步 xff1f 本文作者烂笔头 27将从自身经
  • Java个人学习笔记07多线程和网络编程

    Java 多线程编程 Java 给多线程编程提供了内置的支持 一条线程指的是进程中一个单一顺序的控制流 xff0c 一个进程中可以并发多个线程 xff0c 每条线程并行执行不同的任务 创建线程 Java 提供了三种创建线程的方法 xff1a
  • 同步/异步与阻塞/非阻塞的区别(转)(中软国际Fourth day)

    转自于 http www cppblog com converse archive 2009 05 13 82879 html 首先来解释同步和异步的概念 这两个概念与消息的通知机制有关 举个例子 比如我去银行办理业务 可能选择排队等候 也
  • python subprocess模块设置环境变量,加载动态库

    众所周知 xff0c 利用python的subprocess pOpen 可以执行应用程序 不过今天碰到一个问题 xff1a 应用程序需要调用动态库 xff0c 而且动态库和应用程序在同一目录下 不过python的运行目录不是应用程序所在目
  • 智能家居 WiFi&BLE 双模模组 WiFi蓝牙遥控器同时控制W800

    由于文档较长文档只展示部分资料需要了解详细资料 链接 https pan baidu com s 1cpmtH7fC7D RGBh09UbhIQ 提取码 pnu4 一 W800 Wi Fi 蓝牙双模SoC 芯片简介 2 二 W800 CDS
  • Qt Creator使用CMake配置第三方库

    语法 include directories 添加第三方库头文件路径 这里的 include directories 直接向括号里加入第三方库的头文件路径即可 span class token function include direct

随机推荐

  • QtGlobal中常见的一些函数和宏

    lt QtGlobal gt 头文件包含了 Qt 类库的一些全局定义 xff0c 包括基本数据类型 函数和宏 xff0c 一般的 Qt 类的头文件都会包含该文件 xff0c 所以不用显式包含这个头文件也可以使用其中的定义 全局变量定义 为了
  • 传感器之激光雷达简介与使用

    激光雷达是现今机器人尤其是无人车领域及最重要 最关键也是最常见的传感器之一 xff0c 是机器人感知外界的一种重要手段 概念 激光雷达 LiDAR xff0c 英文全称为 Light Detection And Ranging xff0c
  • sci_loopback_int的例程(中断程序)

    例程代码如下 xff1a include 34 DSP28x Project h 34 Device Headerfile and Examples Include File define CPU FREQ 40E6 Default 61
  • python中使用subprocess.Popen中的返回值总结:

    usr bin python coding UTF 8 import sys import subprocess import traceback author by zhangheng timestamp 2018 06 08 gennl
  • SPI工作模式

    1 SPI总线条数 MISO xff1a 主设备输入 从设备输出引脚 该引脚在从模式下发送数据 xff0c 在主模式下接收数据 MOSI xff1a 主设备输出 从设备输入引脚 该引脚在主模式下发送数据 xff0c 在从模式下接收数据 SC
  • 游戏常用算法:四种迷宫生成算法

    简介 所谓迷宫生成算法 xff0c 就是用以生成随机的迷宫的算法 迷宫生成算法是处于这样一个场景 xff1a 一个row行 xff0c col列的网格地图 xff0c 一开始默认所有网格四周的墙是封闭的 要求在网格地图边缘 xff0c 也就
  • OPEN alliance工作小组

    Open Alliance TC 8小组 TC 8 xff1a 汽车以太网ECU测试规范 TC 8分配了汽车以太网ECU测试规范 它根据这些共享要求定义了适用于汽车以太网网络中所有ECU的规范 TC8定义了测试流程和支持建立能够执行ECU测
  • 测试PCB线路的阻抗的方法

    1 TDR测试 TDR是利用短脉冲信号发送到测试信号线上 xff0c 当信号到达另一端或者遇到不匹配点的时候就会发生反射回来 通过测量反射信号的时间和特征来判断线路的阻抗和不匹配点的位置 TDR测试需要专业的测试设备 xff0c 如时域反射
  • 开关电源的特性阻抗

    一 开关电源的特性阻抗好坏可以用以下几个量化指标来评估 xff1a 1 交流阻抗 xff08 AC Impedance xff09 xff1a 交流阻抗是指开关电源在交流信号下的电阻 电感和电容等电学特性 交流阻抗的好坏直接影响开关电源的驱
  • 学网络比不可少的网络协议分析神器-wireshark

    Wireshark是一款网络协议分析器 xff0c 可以用于捕获和分析网络数据包 xff0c 以便深入了解网络通信的细节和性能 xff0c 同时也可以用于网络安全分析和故障排除 Wireshark的主要功能包括 xff1a 1 捕获网络数据
  • C语言return的用法详解,C语言函数返回值详解

    C语言return的用法详解 xff0c C语言函数返回值详解 函数的返回值是指函数被调用之后 xff0c 执行函数体中的代码所得到的结果 xff0c 这个结果通过 return 语句返回 return 语句的一般形式为 xff1a spa
  • 网络编程——多线程编程

    文章目录 目的内容源代码及结果 1 Linux下的线程同步 1 1 编程使用互斥量实现线程同步 xff1b 1 2 编程使用信号量实现线程同步 xff0c 要求实现以下功能 xff1a 线程A从用户输入得到值后存入全局变量num xff0c
  • ARM-MPU内存保护单元详解

    ARM MPU 详解 简介 MPU Memory Protection Unit 内存保护单元 本文主要讲 armv7 m 架构 架构下的 MPU 在 armv7 m 架构下 xff0c Cortex M3 和 Cortex M4 处理器对
  • 玩转doxygen 之RT-THREAD

    玩转doxygen 之RT THREAD 文章目标 经常会看到小伙伴们遇到怎么写函数注释头疼 xff0c 以及如何生成漂亮的代码注释文档头疼 据我了解 xff0c 目前C语言中的代码注释规则有且只有一种比较常用 xff0c 就是doxyge
  • STM32如何将文件放到内部flash里面

    STM32如何将文件放到内部flash里面 背景介绍 上一篇讲到如何将STM32的FLASH改成文件系统 xff1a 如何不用外设在STM32片上FLASH做一个文件系统 https club rt thread org ask artic
  • 营运型手游开发、测试、正式的三阶段开发架构

    在手机游戏的畅销排行榜上 xff0c 可以看到大多数的游戏都是营运型的游戏 所谓的营运型游戏 xff0c 指的是游戏的开发并不是上架后就结束 xff0c 而是需要持续的配合游戏营运的需求 xff0c 进行游戏的更新 内容调整以及后续内容的开
  • 【github】【action】如何给软件包添加CI集成

    github action 如何给软件包添加CI集成 简介 github有自己的CI集成工具 action 很少有小伙伴关注到 xff0c 如果你有自己的软件包 xff0c 想要对其进行维护的话 xff0c 添加CI集成能够方便你快速验证你
  • Access 标准表达式中数据类型不匹配

    Access 标准表达式中数据类型不匹配 Access标准表达式中数据类型不匹配 今天在做一个小程序时 要求用到Access数据库 在调试运行一个SELECT语句时 老是提示标准表达式中数据类型不匹配 弄了好久 原来发现是数据类型不匹配的问
  • c#中new一个对象以后,是否需要手动释放?

    c 中new一个对象以后 xff0c 是否需要手动释放 xff1f 2012 04 28 23 43 wshbfzdzb 分类 xff1a C NET 浏览723次 c 43 43 中 class1 a 61 new class1 需要在用
  • ARM M0+各种定时器驱动的编写

    systick 系统滴答时间 这个定时器之前的文章已经讲过 这个是一个递减的定时器 xff0c 有个模数寄存器 在此不多说 就是一个系统的模块 xff0c 这个模块是集成在ARM M0 43 内核中的 xff0c 其实主要是集成在NVIC