ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC

2023-11-13

1、计数器

计数器就是每隔一段固定的时间计数值就加一,于是我们可以根据计数值来计算时间:经过的时间=计数值x计数时间间隔。

2、定时器

2.1、定时器介绍

定时器具有计时的功能,类似于我们手机自带的倒计时功能。比如我们先给定时器设置计时一小时,当一小时之后定时器就会发出终端信号,提醒CPU该执行提前绑定好的中断处理程序。

2.2、定时器原理

定时器内部有一个计数器,当我们设定好计时的时间后,内部的计数器会通过计数值和计数时间间隔来计算经过的时间。当经过的时间等于设定的
计时时间,定时器就会发出终端信号,提醒CPU时间到了,该去处理相应的中断函数。定时的时间由计数值和计数时间间隔有关,其中计数时间间隔和定时器的时钟频率有关,假设时钟频率是1000,那计数时间间隔就是1ms;如果我们想定时1分钟,就需要将计数值设置为1000ms/1ms=1000。

3、PWM波定时器、看门狗定时器、RTC之间的关系

(1)三者都是和时间相关的外设,但是用途不同。PWM定时器和看门狗定时器是一类,都是用来定时一个时间段;RTC是关于时间点,用来得到当前的时间。
(2)PWM波定时器和看门狗定时器本质都是一样的,只是PWM波定时器是专门用来产生PWM波的,看门狗定时器是专门用来产生复位信号的;

4、PWM定时器

4.1、PWM波介绍

PWM是脉冲宽度调制,是占空比可变的脉冲波形。脉冲宽度调制是一种对模拟信号电平进行数字编码的方法。PWM波的两个重要概念:
周期T:PWM波是周期性的波形,每个周期里由一段高电平和一段低电平组成;
占空比duty:占空比就是一个周期内高电平的时间除以周期时间的商;

4.2、PWM波的典型应用

PWM波可以控制电机、蜂鸣器、LED灯等。PWM波就是不停的交替输出高低信号,我们通过设置PWM波的周期和占空比来实现对器件的控制。

4.3、S5PV210的PWM定时器介绍

(1)S5PV210芯片有5个PWM定时器,其中0、1、2、3各自对应一个外部GPIO,可以通过这些对应的GPIO产生PWM波形信号并输出;timer4没有对应的外部GPIO,因此不是为了生成PWM波形而是为了产生内部定时器中断而生的。
(2)S5PV210的5个PWM定时器的时钟源为PCLK_PSYS,timer0和timer1共同使用一个预分频器、timer2、3、4共同使用一个预分频器;每个timer有一个专用的独立的分频器;预分频器和分频器构成了2级分频系统,将PCLK_PSYS两级分频后生成的时钟供给timer模块作为时钟周期。

4.4、PWM定时器的时钟框图

在这里插入图片描述

(1)timer0和timer1共同使用一个预分频器、timer2、3、4共同使用一个预分频器;
(2)时钟来源是PCLK_PSYS;
(3)timer0和timer1支持死区生成功能;
(4)定时器的时钟信号由PCLK_PSYS信号经过两级分频得到,其中第二级分频系数不是任意的,实际是一个多选一(1/1、1/2、1/4、1/8、1/16);

4.5、PWM定时器相关寄存器

4.5.1、TCNT 、TCNTB、TCNTO寄存器

(1)TCNT和TCNTB是一对寄存器。TCNTB是能查询到地址的寄存器,我们将要定时的时间间隔次数写入到该TCNTB寄存器;TCNT是没有寄存器地址的,
程序员不能去操作这个寄存器。定时器开始后,如果开启自动重加载则TCNTB的值在定时到后被硬件自动刷新到TCNT寄存器中,开启下一次定时;如果没有开启自动重加载,
则需要我们去操作寄存器手动将TCNTB中的值刷新到TCNTB中。
(2)TCNTO寄存器是做捕获计时的,读取出TCNTo寄存器的值可以知道还要多少次时间间隔TCNT寄存器中的值才减到零;

4.5.2、TCNTB、TCMPB寄存器

(1)TCNTB和TCMPB是用来产生PWM波的,TCNTB是定时的时间长度,也就是周期,TCMPB是在周期中高或低(查手册)电平有多少个时间间隔;
(2)假设时间间隔为1ms,TCMPB是高电平的间隔次数。TCNTB设置为1000,TCMPB设置为400,那么产生的PWM波的周期T=1000ms,占空比为400/1000=0.4。

4.6、死区生成器

timer0支持死区生成器,死区生成器和交流电整流有关,具体细节不太清楚,用不上死区生成器就把该功能关闭。

4.7自动重加载和双缓冲

(1)自动重加载:硬件会自动将TCNTB的值刷新到TCNT中,TCNT寄存器里的值每过一个时间间隔就减一,当见到0的时候就触发定时器中断。我们经常是需要循环定时,即本次定时结束后自动开始下一次的计时,有了自动重加载我们便不用每次定时结束都去把TCNTB中的值刷新到TCNT中。
(2)双缓冲:顾明思议就是两个缓冲区,有备份。比如TCNT和TCNTB就构成双缓冲,你可以在本次定时还没有结束就去设置TCNTB的值,这样下一次定时就是新的定时时间。自动重加载也是依赖双缓冲的,正是因为有TCNTB中的值做备份,当定时时间到后才能再把定时间隔刷新到TCNT中,开启一下次的定时。

4.8输出电平翻转器

就是将输出电平信号取反,比如PWM波的占空比是0.4,如果电平取反则PWM波的周期不变,占空比变成1-0.4=0.6。有寄存器控制电平翻转功能,根据自己需求判断是否开启。

4.9、设置PWM定时器

(1)将PWM波输出的GPIO引脚设置为PWM波输出功能;
(2)配置好PWM定时器的时钟频率;
(3)TCNTB和TCMPB寄存器写入根据PWM波的周期和占空比计算好的值;
(4)开启自动重加载功能;
(5)第一次启动时手动将TCNTB中的值刷新到TCNT寄存器中,不然第一次定时的时间将是默认值而不是你定时的时长;
(6)开启定时器;

5、看门狗定时器

5.1、看门狗介绍

(1)看门狗定时器默认到了定时的时间就会发出复位中断信号,让系统重启。是为了系统卡死后能够重启,不至于一直卡住;
(2)看门狗定时器可以关闭;
(3)看门狗定时器可以被设置成在到了定时的时间后不发出复位中断信号,而发出普通中断信号,当一个普通的定时器用;
(4)默认功能下,如果看门狗定时器开启,则要在定时时间到之前喂狗,在WTCNT寄存器减到0之前给WTDAT寄存器中重新写值以喂狗,因为WTCNT寄存器中的值减到零就会发出复位中断,导致系统重启;

5.2、看门狗定时器时钟框图

在这里插入图片描述

(1)看门狗定时器的时钟信号是PCLK_PSYS经过两级分频得到;
(2)看门狗定时器可以设置成发出复位信号,也可以设置成发出普通中断信号;
(3)两级分频器中,预分频器的分频系数是0-255,而第二级分频器实际是个多路选择开发,只能选择固定的分频系数。实际分频系数 = 预分频器分频系数 x 第二级分频系数;

5.3、看门狗定时器相关寄存器

(1)WTCON:设置分频系数、使能开关、设置发出复位信号还是普通中断信号
(2)WTDAT:设置定时的时间间隔,当你把值写到WTDAT寄存器后,硬件会自动把值刷新到WTCNT中;
(3)WTCNT:保存的看门狗定时间当前的计数值。需要注意,第一次启动前,必须先写一次WTCNT寄存器,否则第一次将是默认的定时时间间隔;
(4)WTCLRINT:清中断;

5.4、设置看门狗定时器(复位)

(1)设置分频系数;
(2)设置看门狗定时器发出复位中断信号还是普通中断信号;
(3)设置定时的时间长度:把计算好的值写入到WTDAT和WTCNT寄存器中;
(4)打开看门狗定时器;
(5)在定时的时间到之前去喂狗;

6、RTC

6.1、实时时钟介绍

(1)RTC(real time clock)是实时时钟,保存的是当前的时间点,包含年、月、日、时、分、秒、星期;
(2)RTC是Soc中的一个外设,自带晶振,有寄存器去记录时间(年、月、日、时、分、秒、星期),通过读取/写入这些寄存器来获取/设置时间。一般为了系统关机还能准确计时,会单独用电池给RTC供电;
(3)有的为了计时更加精确,会单独接RTC芯片,然后主控SOc去RTC芯片读取/设置时间;

6.2、RTC的结构框图

在这里插入图片描述

(1)有7个寄存器存储分别年、月、日、时、分、秒、星期,其中date寄存器保存的是星期;
(2)有专门的晶振(xrtCXTI、crtcxTO、XRTCCLKO);
(3)有闹钟模块,可以设置闹钟,和我们平时设置的闹钟功能是一样的;

6.3、闹钟发生器

(1)这个闹钟功能就是和我们平时的闹钟功能一样的,闹钟发生器就是在设定的时候里发出终端信号;
(2)闹钟发生器有一个控制寄存器和(年、月、日、时、分、秒)寄存器,先设置闹钟发生的时间,再打开相应的使能。

6.4、BCD码

(1)RTC中所有的时间(年月日时分秒星期,包括闹钟)都是用BCD码编码的,准确的是是8421 BCD码;
(2)因为时间相关的寄存器里存的数据都是BCD码编码的,所以我们在操作RTC寄存器时需要在BCD编码和十进制间进行转换。比如我们想设置分钟数为56,则往分钟寄存器里应该写0x56,我们需要写一个函数来将56转成0x56。

6.5、RTC相关寄存器

(1)INTP 中断挂起寄存器
(2)RTCCON RTC控制寄存器,比如使能、读写控制;
(3)RTCALM 闹钟的控制寄存器
(4)ALMxxx 闹钟功能有关的寄存器,保存闹钟功能设置的时间;比如ALMSEC(秒)、ALMMIN(分钟);
(4)BCDxxx 保存当前的时间,比如BCDSEC(秒)、BCDMIN(分钟);

6.6、年的设置

S5PV210中做了个设定,BCDYEAR寄存器存的并不是完整的年数(譬如今年2015年),而是基于2000年的偏移量来存储的,譬如今年2015年实际存的就是15(2015-2000)。还有些RTC芯片是以1970年其他的年份作为基点来记录的。

6.7、设置时间

(1)设置RTCCON寄存器打开RTC读写开关;
(2)往RTC的BCDxxx寄存器中写值,设置年、月、日、时、分、秒;
(3)设置RTCCON寄存器关闭RTC读写开关;

6.8、读取时间

(1)设置RTCCON寄存器打开RTC读写开关;
(2)往RTC的BCDxxx寄存器中读数据,读取年、月、日、时、分、秒;
(3)设置RTCCON寄存器关闭RTC读写开关;

6.9、设置闹钟

(1)设置好闹钟功能的时间寄存器ALMxxx;
(2)设置RTCALM寄存器,打开相应使能开关;
(3)绑定好闹钟功能的终端处理程序;

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

ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC 的相关文章

  • 理解这部分手臂的汇编代码

    syntax unified thumb cpu cortex m4 arch armv7e m fpu fpv4 sp d16 Changes from unprivileged to privileged mode thumb func
  • 使用 GCC 编译器为代码的特定部分保留寄存器

    是否可以为 C 代码的特定部分保留寄存器 ffixed reg 选项或声明全局寄存器变量不是我正在寻找的答案 我想保留特定范围 比如说特定函数 的寄存器值 使用局部寄存器变量是不可能的 因为它不能保证在整个范围内保留寄存器的值 我正在寻找类
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 使用 ARM NEON 内在函数添加 alpha 和排列

    我正在开发一个 iOS 应用程序 需要相当快地将图像从 RGB gt BGRA 转换 如果可能的话 我想使用 NEON 内在函数 有没有比简单分配组件更快的方法 void neonPermuteRGBtoBGRA unsigned char
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • ARM 调用约定是否允许函数不将 LR 存储到堆栈中?

    正如标题所示 我在理解 ARM 架构的调用约定时遇到问题 特别是 我仍然很难知道当你调用子程序时 LR 寄存器会发生什么 我认为 当您进入子程序时 处理 LR 寄存器的最明显 最安全的方法是将其存储到堆栈中 但该行为没有出现在文档中 因此我
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 在 Intel 机器上构建 Apple Silicon 二进制文件

    如何在 macOS 11 Intel 上编译 C 项目以在 Silicon 上运行 我当前的构建脚本很简单 configure make sudo make install 我尝试过使用 host and target标志与aarch64
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • 直接在 ARM 目标上调试单声道应用程序

    我最近在 BeagleBone 嵌入式 ARM 设备上安装了 Mono 希望通过 USB 连接 Kinnect 传感器并使用 C Mono 控制它 我想知道 Mono 我正在使用 MonoDevelop 但我想这个问题也适用于 VS 是否允
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3

随机推荐

  • 从零开始完成YOLOv5目标识别(三)用PyQt5展示YOLOv5的识别结果

    往期内容 从零开始完成Yolov5目标识别 二 制作并训练自己的训练集 从零开始完成Yolov5目标识别 一 准备工作 目录 往期内容 一 项目框架 二 核心内容 1 QtDesign设计 2 检测部分 2 1 导包 2 2 main py
  • js-image-compressor 图片压缩插件

    1 安装插件 npm i js image compressor 2 引入 import ImageCompressor from js image compressor 3 使用 compressionImage file return
  • 加入ehcache后,系统出现内存泄漏,解决办法

    最近在系统中 加入缓存ehcache 但发现 每隔一天 服务器就会报出内存溢出 问题严重 后来在网上查资料发现 一篇解释的网文 spring中的提供了一个名为org springframework web util Introspector
  • Android从源码分析RecyclerView四级缓存复用机制一(缓存ViewHolder)

    RecyclerView相比较ListView先说多了多布局和缓存 目前已经在Android列表中大量普及使用 面试中也经常问到 所以对于RecyclerView的四级缓存机制也叫复用回收机制的分析很有必要 这部分很重要请 全村人来听 先说
  • Understanding Dataset Design Choices for Multi-hop Reasoning

    Understanding Dataset Design Choices for Multi hop Reasoning NAACL 2019 阅读笔记 记录论文中几个有趣的实验 1 单句包含答案实验 首先做了一个简单的实验 给模型输入一个
  • 游戏盾原理和优势

    什么是游戏盾呢 游戏盾是DDoS高防IP产品系列中针对游戏行业的安全解决方案 游戏盾专为游戏行业定制 针对性解决游戏行业中复杂的DDoS攻击 游戏CC攻击等问题 目前以对抗的形式存在的高防产品形态 也就是防御带宽要大于攻击者的流量 游戏盾有
  • 最大熵算法及简单例子

    最近在学模式识别 正在看Introduction to Pattern Recognition这本书 挺不错的一本书 好 下面和大家一起来学习最大熵算法 首先 最大熵算法是干什么的呢 一般是用来估计一个分布 至于把分布估计出来之后用来干什么
  • 程序员必备的画图工具

    作者 CUGGZ 来源 前端充电宝 XMind 是一个跨平台的思维导图软件 具有多种结构样式 除了普通的思维导图 还包括树形图 逻辑图 鱼骨图 时间轴 树状表格等等 不同的结构样式可以自由组合混用 同时支持一键更换结构样式 最近经常有小伙伴
  • 编译安装 Nginx 提示:/configure: error: C compiler cc is not found

    问题产生背景 反向代理服务器需要增加探活功能 需要对前置nginx 进行重新编译安装第三方模块 发现在编译安装配置时候一直过不去 百度查询过很多解决办法 基本都是没有安装好编译环境之类的说法 但是在确定编译环境所涉及的包全部都安装以后 还是
  • idea必备开发插件.

    1 lombok 支持lombok的各种注解 从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便 https plugins jetbrains com plugin 6317 lombok plugin
  • 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-RC-u5 树与二分图

    2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 文章目录 2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 题目描述 输入格式 输出格式 输入样例 输出样例 思路 A
  • 感知机分类学习

    感知机 perceptron 是一种二类分类的线性分类模型 也就是说 使用于将数据分成两类的 并且数据要线性可分的情况 线性可分是指存在一个超平面能够将空间分成两部分 每一部分为一类 感知机的目的就在于找这样的一个超平面 假设输入数据形式为
  • pandas入门

    pandas is a fast powerful flexible and easy to use open source data analysis and manipulation tool 一 读取文本文件中的数据 导入pandas
  • Python之创建多级菜单

    方法一 usr bin env python coding utf 8 Time 2021 11 25 19 09 Author Argonaut FileName 创建多级菜单 py 功能 可进可退的功能菜单 while True pri
  • 将C盘和桌面所在的E盘合并分区后,出现的路径问题解决方案

    问题一 开机时出现警告 由于启动计算机时出现页面配置问题 Windows在您的计算机上创建了一个临时页面文件 所有的磁盘驱动器的总页面大小可能稍大于您所指定的大小 解决方案 照着做就行 问题二 Windows 10系统开机显示 位置不可用C
  • shell脚本整段注释

    摘自 http zhidao baidu com link url XmCCZmfluRe6n8TjPRKJTx4GGOUPSGX1VNBm euqGdpKGpveTESxC0HL90UBNT5nZCvmvfq2oIJdP3JO5EoPSq
  • STM32关于PVD低电压能检测的知识

    在实际工程运用中需要对突发情况作出及时的相应 通常都需要考虑当系统电压下降或断电时 需要对控制系统加以保护 这时候就需要在程序中加入系统电压监测 PVD 供电电压降低到某一个电压值时 需要系统进入保护状态 执行紧急关闭任务 对系统数据进行保
  • DDR基础知识点汇总

    文章目录 文档推荐 DDR颗粒的电路图来源 DDR3 SDRAM电路结构高清图 DDR4 SDRAM电路结构高清图 DDR3 1866控制器 PHY 颗粒之间的带宽关系 channel gt DIMM gt rank gt chip gt
  • docker镜像中配置文件的修改

    docker镜像中配置文件的修改 需要修改docker里面的配置文件时 因为docker镜像里面没有vim 下载也比较麻烦 可以使用 docker cp docker镜像名 想要修改的文件的路径 想要复制到的路径 将镜像中的文件复制到镜像外
  • ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC

    1 计数器 计数器就是每隔一段固定的时间计数值就加一 于是我们可以根据计数值来计算时间 经过的时间 计数值x计数时间间隔 2 定时器 2 1 定时器介绍 定时器具有计时的功能 类似于我们手机自带的倒计时功能 比如我们先给定时器设置计时一小时