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

2022年8月22日
admin
没有评论

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

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

定时器内部有一个计数器,当我们设定好计时的时间后,内部的计数器会通过计数值和计数时间间隔来计算经过的时间。当经过的时间等于设定的

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

(1)三者都是和时间相关的外设,但是用途不同。PWM定时器和看门狗定时器是一类,都是用来定时一个时间段;RTC是关于时间点,用来得到当前的时间。

(2)PWM波定时器和看门狗定时器本质都是一样的,只是PWM波定时器是专门用来产生PWM波的,看门狗定时器是专门用来产生复位信号的;

PWM是脉冲宽度调制,是占空比可变的脉冲波形。脉冲宽度调制是一种对模拟信号电平进行数字编码的方法。PWM波的两个重要概念:

周期T:PWM波是周期性的波形,每个周期里由一段高电平和一段低电平组成;

PWM波可以控制电机、蜂鸣器、LED灯等。PWM波就是不停的交替输出高低信号,我们通过设置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模块作为时钟周期。

(1)timer0和timer1共同使用一个预分频器、timer2、3、4共同使用一个预分频器;

(4)定时器的时钟信号由PCLK_PSYS信号经过两级分频得到,其中第二级分频系数不是任意的,实际是一个多选一(1/1、1/2、1/4、1/8、1/16);

(1)TCNT和TCNTB是一对寄存器。TCNTB是能查询到地址的寄存器,我们将要定时的时间间隔次数写入到该TCNTB寄存器;TCNT是没有寄存器地址的,

程序员不能去操作这个寄存器。定时器开始后,如果开启自动重加载则TCNTB的值在定时到后被硬件自动刷新到TCNT寄存器中,开启下一次定时;如果没有开启自动重加载,

(2)TCNTO寄存器是做捕获计时的,读取出TCNTo寄存器的值可以知道还要多少次时间间隔TCNT寄存器中的值才减到零;

(1)TCNTB和TCMPB是用来产生PWM波的,TCNTB是定时的时间长度,也就是周期,TCMPB是在周期中高或低(查手册)电平有多少个时间间隔;

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

(1)自动重加载:硬件会自动将TCNTB的值刷新到TCNT中,TCNT寄存器里的值每过一个时间间隔就减一,当见到0的时候就触发定时器中断。我们经常是需要循环定时,即本次定时结束后自动开始下一次的计时,有了自动重加载我们便不用每次定时结束都去把TCNTB中的值刷新到TCNT中。

(2)双缓冲:顾明思议就是两个缓冲区,有备份。比如TCNT和TCNTB就构成双缓冲,你可以在本次定时还没有结束就去设置TCNTB的值,这样下一次定时就是新的定时时间。自动重加载也是依赖双缓冲的,正是因为有TCNTB中的值做备份,当定时时间到后才能再把定时间隔刷新到TCNT中,开启一下次的定时。

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

(3)TCNTB和TCMPB寄存器写入根据PWM波的周期和占空比计算好的值;

(5)第一次启动时手动将TCNTB中的值刷新到TCNT寄存器中,不然第一次定时的时间将是默认值而不是你定时的时长;

(1)看门狗定时器默认到了定时的时间就会发出复位中断信号,让系统重启。是为了系统卡死后能够重启,不至于一直卡住;

(3)看门狗定时器可以被设置成在到了定时的时间后不发出复位中断信号,而发出普通中断信号,当一个普通的定时器用;

(4)默认功能下,如果看门狗定时器开启,则要在定时时间到之前喂狗,在WTCNT寄存器减到0之前给WTDAT寄存器中重新写值以喂狗,因为WTCNT寄存器中的值减到零就会发出复位中断,导致系统重启;

(2)看门狗定时器可以设置成发出复位信号,也可以设置成发出普通中断信号;

(3)两级分频器中,预分频器的分频系数是0-255,而第二级分频器实际是个多路选择开发,只能选择固定的分频系数。实际分频系数 = 预分频器分频系数 x 第二级分频系数;

(1)WTCON:设置分频系数、使能开关、设置发出复位信号还是普通中断信号

(2)WTDAT:设置定时的时间间隔,当你把值写到WTDAT寄存器后,硬件会自动把值刷新到WTCNT中;

(3)WTCNT:保存的看门狗定时间当前的计数值。需要注意,第一次启动前,必须先写一次WTCNT寄存器,否则第一次将是默认的定时时间间隔;

(3)设置定时的时间长度:把计算好的值写入到WTDAT和WTCNT寄存器中;

(1)RTC(real time clock)是实时时钟,保存的是当前的时间点,包含年、月、日、时、分、秒、星期;

(2)RTC是Soc中的一个外设,自带晶振,有寄存器去记录时间(年、月、日、时、分、秒、星期),通过读取/写入这些寄存器来获取/设置时间。一般为了系统关机还能准确计时,会单独用电池给RTC供电;

(3)有的为了计时更加精确,会单独接RTC芯片,然后主控SOc去RTC芯片读取/设置时间;

(1)有7个寄存器存储分别年、月、日、时、分、秒、星期,其中date寄存器保存的是星期;

(1)这个闹钟功能就是和我们平时的闹钟功能一样的,闹钟发生器就是在设定的时候里发出终端信号;

(2)闹钟发生器有一个控制寄存器和(年、月、日、时、分、秒)寄存器,先设置闹钟发生的时间,再打开相应的使能。

(1)RTC中所有的时间(年月日时分秒星期,包括闹钟)都是用BCD码编码的,准确的是是8421 BCD码;

(2)因为时间相关的寄存器里存的数据都是BCD码编码的,所以我们在操作RTC寄存器时需要在BCD编码和十进制间进行转换。比如我们想设置分钟数为56,则往分钟寄存器里应该写0x56,我们需要写一个函数来将56转成0x56。

(4)ALMxxx 闹钟功能有关的寄存器,保存闹钟功能设置的时间;比如ALMSEC(秒)、ALMMIN(分钟);

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

(2)往RTC的BCDxxx寄存器中读数据,读取年、月、日、时、分、秒;

Vishay 新款第5代 600 V Ultrafast整流器,具有出色导通和开关损耗特性

英国制定2025年自动驾驶汽车发展路线亿美元,LG美国第四座电池厂要来了

下载有礼:一起初探5G,赢氮化镓(GaN)充电器、柔性墨水屏等精美礼品

【 有奖直播】 掌握潮流~TI DLP技术在汽车上的创新及全新应用

综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程

标签:

发表回复

您的电子邮箱地址不会被公开。