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)绑定好闹钟功能的终端处理程序;

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

  1. 单片机开发:不得不了解的看门狗电路

    在单片机学习.开发中,我们不可避免地要接触看门狗电路,那看门狗电路是什么呢?你掌握了吗? 看门狗是什么? 看门狗是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的 ...

  2. STM32开发笔记77: 内部看门狗长延时的产生

    单片机型号:STM32L053R8T6 开发笔记STM32开发笔记45:看门狗驱动程序的移植介绍了看门狗驱动程序的基本设计方法.今天项目中看门狗的延时时间达到10秒,则实际运行效果只有3秒. 以下是看 ...

  3. 服务器看门狗芯片电路图,新型纯硬件看门狗电路设计分析研究

    摘   要:看门狗电路是电子电路中一种非常常见的电路,常用的看门狗电路在喂狗进程工作,CPU死机的状态时,可以重新复位CPU,防止CPU跑飞.但是在一些极端条件下,看门狗进程也会挂死,例如温度过高等, ...

  4. ARM芯片(S5PV210芯片)——串口通信详解

    1.电子通信的基本概念 1.1.同步通信和异步通信 1.同步通信:通信双方有统一的工作节拍,一般需要发送方给接收方发送信息的同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的工作节奏.同步通 ...

  5. (实测可用)STM32L431RCT6开发板-实验2 看门狗IWDG实验

    一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...

  6. cubeIDE开发, stm32独立看门狗IWDG的CubeMX配置及HAL库底层实现分析

    一.STM32 的IWDG简介 2.1 看门狗原理 看门狗本质上就是一种计数器,和我们现实生活中一炷香现象.沙漏现象等是同理的,计数器一般有两种做法,一种是递增,超过固定阀值报警:一种是递减,通常值降 ...

  7. 基于at91sam9260芯片在u-boot写添加看门狗控制命令

    基于at91sam9260芯片在u-boot下添加wdt on/off控制命令,需要进行如下修改: 1.在common目录下增加cmd_wdt.c文件,代码如下: /<span style=&q ...

  8. Rockchip开发系列 - 9.watchdog看门狗

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  9. 嵌入式知识-ARM裸机-学习笔记(8):SoC定时器与看门狗(WDT)

    嵌入式知识-ARM裸机-学习笔记(8):SoC定时器与看门狗(WDT) 一.定时器 1. 定时器简介 定时器是SoC中最常见的外设 (1)定时器与计数器.计数器是用来计数的(每隔一个固定时间会计一个数 ...

  10. 服务器看门狗芯片电路图,看门狗芯片-MAX706看门狗电路和AD7988工作原理分别是什么?...

    主要用于电源监控和看门狗,在上电期间只要Vcc大于1.0V,就能保证输出电压不高于0.4V的低电平.在Vcc上升期间RESET维持低电平直到电源电压升至复位门限(4.或4.)以上.在超过此门限后,内部 ...

最新文章

  1. IIS 之 添加绑定域名 或 设置输入IP直接访问网站
  2. [解析]多线程加锁Lock调用python2
  3. 行业观察丨激荡二十年——货代软件1999—2019
  4. python中的sys.argv是什么?(控制台参数传递、控制台传参)
  5. 自定义sql_一个简单易用的开源BI软件,专为SQL用户设计的开源库
  6. matlab查找替换指令,使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换
  7. scheduled只执行一次,有个定时任务突然不执行了?
  8. 获取数组中的所有非唯一值(即:重复/多次出现)
  9. linux命令行 正则,Linux shell基础(四)正则表达式与grep命令 beta
  10. JAVA Web基础3-Servlet
  11. Java实现UDP功能
  12. 南昌大学计算机考试题,南昌大学计算机基础考试题库
  13. CSS实现div垂直居中 div上下居中显示
  14. 自动化做任务、收能量工具Hamibot,我愿称它为神器
  15. rpiplay实现树莓派AirPlay投屏器
  16. 微信开源PhxQueue:高可用、高可靠、高性能的分布式队列**
  17. php语言开始和结束分别为,PHP语言参考
  18. 函数式编程#3纯函数的概念
  19. 有一个超毒舌的对象是什么体验?
  20. 21 世纪什么最贵?那必须得是“人才”啊,一本书带你读懂 TCP-IP 协议

热门文章

  1. u盘数据恢复的原理_U盘数据恢复实例
  2. 适合前端初学者的:学习笔记 + 练手开源项目(持续更新ing)
  3. scrapy的爬虫类总结
  4. 预处理加速干货:大幅加速数据预处理、轻松定制高性能ML算子
  5. vuex-stepbystep 经典案例,详细注释一步到位
  6. 教学科研上云,中国地质大学携手EasyStack打造智慧校园
  7. 下载mrt需要java_MRT的安装与使用.doc
  8. 修改mysql表空间为独立模式
  9. TCP重传与确认机制
  10. ORCID iD有什么意义?