程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Mini2440裸机开发之RTC

一、S3C2440上的RTC

1.1 概述

RTC,英文全称Real Time Clock,中文就是实时时钟,是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。 

RTC可以通过使用STRB/LDRB ARM操作发送8位二-十进制交换码(BCD)值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能。

1.2 特性

  • 时钟数据采用BCD编码,时钟数据包括秒、分、时、日、月、年、星期;
  • 32.768K 的晶振提供时钟输入;
  • 可以提供毫秒级的时钟节拍中断,该中断可用于作为嵌入式操作系统的内核时钟;
  • 闹钟功能:闹钟中断或从掉电模式唤醒;
  • 独立电源引脚(RTCVDD);

1.3 RTC方框图

1.3.1 中断

从上图可以看到RTC模块提供了2个中断:

  • INT_RTC:RTC alarm interrupt,即RTC闹钟中断;
  • INT_TICK: RTC Time tick interrupt,即RTC时钟节拍中断;
1.3.2 瑞年发生器

闰年发生器能够基于 BCDDATE、BCDMON 和 BCDYEAR 的数据,从 28、29、30 或 31 中决定哪个是每月的最后日,此模块决定每月最后日时会考虑闰年因素。

1.3.3 读写寄存器

为了写RTC模块中的BCD寄存器,RTCCON寄存器的位[0]必须设置为高。

为了显示,年、月、日、时、分和秒,CPU应该分别读取RTC模块中的 BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON和 BCDYEAR 寄存器中的数据。然而可能存在1秒的偏差,因为读取了多个寄存器。

例如,当用户从 BCDYEAR到BCDMIN读取寄存器,其结果假定为2059(年)、12(月)、31(日)、23(时)和 59(分)。当用户读取 BCDSEC寄存器并且值的范围是从 1 到 59(秒),这没有问题,但是如果该值为 0 秒。则年、月、日、时和分可能要变为 2060(年)、1(月)、1(日)、0(时)和 0(分),因为存在着 1 秒的偏差。在这种情况中,如果 BCDSEC为0则用户应该重新读取 BCDYEAR 到 BCDSEC。

1.3.4 备用电池

RTC逻辑可以由备用电池驱动,即使如果系统电源关闭了,则由 RTCVDD引脚供电给RTC模块。当关闭了电源则应该阻塞掉CPU和RTC逻辑的接口,并且备用电池只驱动振荡电路和BCD计数器来最小化功耗。

1.3.5 闹钟功能

RTC在掉电模式中或正常工作模式中的指定时间产生一个闹钟信号;

  • 在正常工作模式中,只激活闹钟中断(INT_RTC)信号;
  • 在掉电模式中,除了INT_RTC 之外还激活电源管理唤醒(PMWKUP)信号;

RTC闹钟寄存器(RTCALM)决定了闹钟使能/禁止状态和闹钟时间设置的条件。

1.3.6 时钟节拍中断

RTC时钟节拍是用于中断请求。TICNT寄存器有一个中断使能位和中断的计数值。当时钟节拍中断发生时计数值达到'0'。中断周期如下:$周期=(n+1)/128秒$

其中:n为时钟节拍计数值,1到127。

1.4 BCD码

BCD(Binary Coded Decimal)码,即二进制编码的十进制数,这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。

4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9这十个数符。最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。

下图为十进制数和8421BCD编码的对应关系表:

十进制 BCD(8421)码
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

二、RTC相关寄存器

2.1 RTC控制寄存器RTCCON

RTCCON寄存器由4 位组成,如控制BCD寄存器读/写使能的RTCEN、CLKSEL、CNTSEL和测试用的CLKRST。
RTCEN位可以控制所有CPU与RTC之间的接口,因此在系统复位后在RTC控制程序中必须设置为1来使能数据的读/写。同样的在掉电前,RTCEN位应该清除为0来预防误写入RTC寄存器中。

寄存器 地址 R/W 描述 复位值
RTCCON

0x57000040(L 小端)

0x57000043(B 大端)

R/W字节 RTC控制寄存器 0x0

寄存器位信息:

RTCCON 描述 初始状态
CLKRST [3]

RTC时钟计数复位

0:不复位   1:复位

0
CNTSEL [2]

BCD计数选择

0:融入BCD计数器

1:保留(分离BCD计数器)

0
CLKSEL [1]

BCD时钟选择

0:XTAL 1/215分频时钟

1:保留(XTAL时钟只用于测试)

0
RTCEN [0]

RTC控制使能

0:禁止    1:使能

注意:只能执行BCD时间计数和读操作

0

注意:所有RTC寄存器必须按自己为单位使用STRB或LDRB指令或char型指针访问;

2.2 时钟节拍计数寄存器TICNT

寄存器 地址 R/W 描述 复位值
TICNT

0x57000044(L 小端)

0x57000047(B 大端)

R/W字节 时钟节拍计数寄存器 0x0

寄存器位信息:

TICNT 描述 初始状态
TICK INT使能 [7]

INT_TICK中断使能

0:禁止  1:使能

0
TICK时钟计数 [6:0]

时钟节拍计数值,1到127

此计数器值内部递减并且用户不能在工作中读取此计数器的值

000000

2.3 RTC闹钟控制寄存器RTCALM

RTCALM寄存器决定了闹钟使能和闹钟时间。请注意RTCALM寄存器在掉电模式中同时通过INT_RTC和PMWKUP产生闹钟信号,但是在正常工作模式中只产生INT_RTC。

寄存器 地址 R/W 描述 复位值
RTCALM

0x57000050(L 小端)

0x57000053(B 大端)

R/W字节 RTC闹钟控制寄存器 0x0

寄存器位信息:

RTCALM 描述 初始状态
保留 [7]

-

0
ALMEN [6]

全局闹钟使能

0:禁止  1:使能

0
YAEREN [5]

年闹钟使能

0:禁止  1:使能

0
MONREN [4]

月闹钟使能

0:禁止  1:使能

0
DATAEN [3] 日闹钟使能

0:禁止  1:使能

 0
HOUREN [2] 时闹钟使能

0:禁止  1:使能

 0
MINEN [1] 分闹钟使能

0:禁止  1:使能

 0
SECEN [0] 秒闹钟使能

0:禁止  1:使能

 0
2.3.1 闹钟秒数据寄存器
寄存器 地址 R/W 描述 复位值
ALMSEC

0x57000054(L 小端)

0x57000057(B 大端)

R/W字节 闹钟秒数据寄存器 0x0

寄存器位信息:

ALMSEC 描述 初始状态
保留 [7]

-

0
SECDATA [6:4]

闹钟秒BCD值

0至5

000
[3:0] 0至9 0000
2.3.2 闹钟分数据寄存器
寄存器 地址 R/W 描述 复位值
ALMMIN

0x57000058(L 小端)

0x5700005B(B 大端)

R/W字节 闹钟分数据寄存器 0x0

寄存器位信息:

ALMMIN 描述 初始状态
保留 [7]

-

0
MINDATA [6:4]

闹钟分BCD值

0至5

000
[3:0] 0至9 0000
2.3.3 闹钟时数据据寄存器
寄存器 地址 R/W 描述 复位值
ALMHOUR

0x5700005C(L 小端)

0x5700005F(B 大端)

R/W字节 闹钟时数据寄存器 0x0

寄存器位信息:

ALMHOUR 描述 初始状态
保留 [7:6]

-

0
HOURDATA [5:4]

闹钟时BCD值

0至2

00
[3:0] 0至9 0000
2.3.4 闹钟日数据寄存器
寄存器 地址 R/W 描述 复位值
ALMDATE

0x57000060(L 小端)

0x57000063(B 大端)

R/W字节 闹钟日数据寄存器 0x01

寄存器位信息:

ALMDATE 描述 初始状态
保留 [7:6]

-

0
DATEDATA [5:4]

闹钟日BCD值

0至3

00
[3:0] 0至9 0001
2.3.5 闹钟月数据寄存器
寄存器 地址 R/W 描述 复位值
ALMMON

0x57000064(L 小端)

0x57000067(B 大端)

R/W字节 闹钟月数据寄存器 0x01

寄存器位信息:

ALMMON 描述 初始状态
保留 [7:5]

-

0
MONDATA [4]

闹钟月BCD值

0至1

00
[3:0] 0至9 0001
2.3.6 闹钟年数据寄存器
寄存器 地址 R/W 描述 复位值
ALMYEAR

0x57000068(L 小端)

0x5700006B(B 大端)

R/W字节 闹钟年数据寄存器 0x0

寄存器位信息:

ALMYEAR 描述 初始状态
YEARDATA [7:0]

闹钟年BCD值

00至99

0x0

2.4 BCD寄存器

2.4.1 BCD秒寄存器
寄存器 地址 R/W 描述 复位值
BCDSEC

0x57000070(L 小端)

0x57000073(B 大端)

R/W字节 BCD秒寄存器 未定义

寄存器位信息:

BCDSEC 描述 初始状态
保留 [7]

-

-
SECDATA [6:4]

秒BCD值

0至5

-
[3:0] 0至9 -
 2.4.2 BCD分寄存器
寄存器 地址 R/W 描述 复位值
BCDMIN

0x57000074(L 小端)

0x57000077(B 大端)

R/W字节 BCD分寄存器 未定义

 寄存器位信息:

BCDMIN 描述 初始状态
保留 [7]

-

-
MINDATA [6:4]

分BCD值

0至5

-
[3:0] 0至9 -

 

2.4.3 BCD时寄存器
寄存器 地址 R/W 描述 复位值
BCDHOUR

0x57000078(L 小端)

0x5700007B(B 大端)

R/W字节 BCD时寄存器 未定义

 寄存器位信息:

BCDHOUR 描述 初始状态
保留 [7:6]

-

-
HOURDATA [5:4]

时BCD值

0至2

-
[3:0] 0至9 -

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(153)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示