S3C2440A 第十七章——实时时钟

十七章:实时时钟

简介:

    当系统断电后,实时时钟可以通过备用电源继续运转。实时时钟可以通过STRB/LDRB ARM操作来传输8位数据作为二-十进制(BCD)。这个数据包括年月日时分秒。实时时钟单元外接一个32.768KHz的晶振,同时他操作时钟函数。

特性:

    二-十进制(BCD)数:年月日时分秒

    闰年产生器

    时钟函数:时钟中断和从断电模式醒来

    解决2000年问题

    独立电源引脚(RTCVDD

    支持RTOS内核滴答时钟的微秒滴答时钟中断

 

实时时钟时钟操作

 S3C2440A 第十七章——实时时钟

闰年产生器:

    闰年产生器通过从BCDDATE寄存器, BCDMON寄存器, 以及BCDYEAR寄存器获得的数据可以决定每个月最后是28天,29天,30天还是31天。而这部分就是通过考虑是否是闰年来决定当月又多少天。而一个8位的计数器只能表示两个BCD数字,因此当年份后面两个数字为00时,他不能决定这年是不是闰年。例如,他不能判断1900和2000是不是闰年。而为了解决这个问题,S3C2440A中的RTC模块有一个硬件线性逻辑来确定2000年是闰年。需要注意1900年不是闰年而2000年是。因此在S3C2440A中数字00表示的是2000年而不是1900年。

 

读/写寄存器

    RTCCON寄存器的bit[0]必须被设置为高电平来写RTC模块中的BCD寄存器。而CPU要分别读取寄存器: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秒钟的偏差。而在这种情况下,用户应该重读BCDYEAR 到 BCDSEC寄存器。

 

备用电源操作:

    RTC逻辑可以通过备用电源驱动,而该备用电源通过RTCVDD引脚进入RTC模块为其提供电源。当系统电源关闭后,CPU与RTC逻辑的接口就被堵塞了,而此时备用电源仅可以驱动晶振电路和BCD计数器电路以获得最小的电量损耗。

 

时钟函数:

在断电模式和正常模式,RTC会在特定的时刻产生时钟信号。在正常操作模式下,时钟中断被**。而在断电模式下,电源管理唤醒信号被**同时时钟中断被**。而RTC时钟寄存器(RTCALM))决定了时钟使能/失能状态以及时钟时间设置条件。

 

滴答时钟中断:

    RTC滴答时钟用作中断请求。TICNT寄存器有一个中断使能位和中断计数。当滴答时钟中断发生时,计数值清0。然后中断的周期可以通过以下计算:

周期 = (n+1)/128秒,n:滴答时钟计数值(1~127)

    这个RTC滴答时钟也许可以用于实时操作系统(RTOS)的内核时钟。如果通过RTC滴答时钟产生时钟,那么与实时操作系统相关的函数将总是与实时时钟同步。

32.768KHZ X-TAL 连接实例

S3C2440A 第十七章——实时时钟

 

实时时钟专用寄存器:

实时时钟控制寄存器(RTCCON)

    RTCCON寄存器由4位组成,分别为RTCEN(他控制BCD寄存器的读写使能位), CLKSEL, CNTSEL, 和CLKRST。

    RTCEN位可以控制CPU与RTC间所有的接口,因此在系统重启后他应该设为1在RTC控制程序中来使能数据读/写。同时在断电之前RTCEN位应该清为0以防止偶然写入RTC寄存器。

寄存器

地址

R/W

描述

重启值

RTCCON

0x57000040(L)

0x57000043(B)

R/W

(by byte)

RTC控制寄存器

0x0

RTCCON

Bit

描述

初始化值

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

注:

    1.  所有的RTC寄存器都可以通过STRB和LDRB指令或者字符指针以字节单元的形式调用。

    2.  (L):小端。(B):大端。

 

 

滴答时间计数寄存器(TICNT)

寄存器

地址

R/W

描述

重启值

TICNT

0x57000044(L)

0x57000047(B)

R/W

(by byte)

滴答时间计数寄存器

0x0

TICNT

Bit

描述

初始化值

TICK INT Enable

[7]

滴答时间中断使能。

0=不使能 ,1=使能

0

TICK Time

Count

[6:0]

滴答时间计数值(1~127)。

这个计数值内部减少,在工作时,用户不能读这个计数器的值

000000

 

 

 

RTC时钟控制寄存器(RTCALM)

    RTC时钟控制寄存器决定时钟使能和时钟时间,需要注意的是,当在断电模式时,只有通过INT_RTC和PMWKUP RTC时钟控制寄存器才能产生时钟信号,而在正常模式下,只要INT_RTC RTC时钟控制寄存器就可以了。

寄存器

地址

R/W

描述

重启值

RTCALM

0x57000050(L)

0x57000053(B)

R/W

(by byte)

RTC时钟控制寄存器

0x0


RTCALM

Bit

描述

初始化值

Reserved

[7]

 

0

ALMEN

[6]

全球时钟使能。

0=不使能 ,1=使能

0

YEAREN

[5]

年时钟使能。

0=不使能 ,1=使能

0

MONREN

[4]

月时钟使能。

0=不使能 ,1=使能

0

DATEEN

[3]

日时钟使能。

0=不使能 ,1=使能

0

HOUREN

[2]

时时钟使能。

0=不使能 ,1=使能

0

MINEN

[1]

分时钟使能。

0=不使能 ,1=使能

0

SECEN

[0]

秒时钟使能。

0=不使能 ,1=使能

0

 

时钟秒数据寄存器(ALMSEC)

寄存器

地址

R/W

描述

重启值

ALMSEC

0x57000054(L)

0x57000057(B)

R/W

(by byte)

时钟秒数据寄存器

0x0


ALMSEC

Bit

描述

初始化值

Reserved

[7]

 

0

SECDATA

[6:4]

时钟秒的BCD

0~5

000

[3:0]

0~9

0000

 

时钟分数据寄存器(ALMMIN)

寄存器

地址

R/W

描述

重启值

ALMMIN

0x57000058(L)

0x5700005B(B)

R/W

(by byte)

时钟分数据寄存器

0x0


ALMMIN

Bit

描述

初始化值

Reserved

[7]

 

0

MINDATA

[6:4]

时钟分的BCD

0~5

000

[3:0]

0~9

0000

 

时钟时数据寄存器(ALMHOUR)

寄存器

地址

R/W

描述

重启值

ALMHOUR

0x5700005C(L)

0x5700005F(B)

R/W

(by byte)

时钟时数据寄存器

0x0


ALMHOUR

Bit

描述

初始化值

Reserved

[7:6]

 

0

HOURDATA

[5:4]

时钟时的BCD

0~2

00

[3:0]

0~9

0000

 

时钟日数据寄存器(ALMDATE)

寄存器

地址

R/W

描述

重启值

ALMDATE

0x57000060(L)

0x57000063(B)

R/W

(by byte)

时钟日数据寄存器

0x01


ALMDATE

Bit

描述

初始化值

Reserved

[7:6]

 

00

DATEDATA

[5:4]

时钟日的BCD值从0到28.29.30,31

0~3

00

[3:0]

0~9

0001


时钟月数据寄存器(ALMMON) 

寄存器

地址

R/W

描述

重启值

ALMMON

0x57000064(L)

0x57000067(B)

R/W

(by byte)

时钟月数据寄存器

0x01


ALMMON

Bit

描述

初始化值

Reserved

[7:5]

 

00

MONDATA

[4]

时钟月的BCD

0~1

0

[3:0]

0~9

0001

 

时钟年数据寄存器(ALMYEAR)

寄存器

地址

R/W

描述

重启值

ALMYEAR

0x57000068(L)

0x5700006B(B)

R/W

(by byte)

时钟年数据寄存器

0x0


ALMYEAR

Bit

描述

初始化值

YEARDATA

[7:0]

时钟年的BCD

00~99

0x0

 

BCD秒数据寄存器(BCDSEC)

寄存器

地址

R/W

描述

重启值

BCDSEC

0x57000070(L)

0x57000073(B)

R/W

(by byte)

BCD秒数据寄存器

未定义


BCDSEC

Bit

描述

初始化值

SECDATA

[6:4]

BCD秒的BCD

0~5

000

[3:0]

0~9

0000

 

BCD分数据寄存器(BCDMIN)

寄存器

地址

R/W

描述

重启值

BCDMIN

0x57000074(L)

0x57000077(B)

R/W

(by byte)

BCD分数据寄存器

未定义


BCDMIN

Bit

描述

初始化值

MINDATA

[6:4]

BCD分的BCD

0~5

000

[3:0]

0~9

0000

 

BCD时数据寄存器(BCDHOUR)

寄存器

地址

R/W

描述

重启值

BCDHOUR

0x57000078(L)

0x5700007B(B)

R/W

(by byte)

BCD时数据寄存器

未定义


BCDHOUR

Bit

描述

初始化值

Reserved

[7:6]

 

0

HOURDATA

[5:4]

BCD时的BCD

0~2

00

[3:0]

0~9

0000


BCD日期数据寄存器(BCDDATE) 

寄存器

地址

R/W

描述

重启值

BCDDATE

0x5700007C(L)

0x5700007F(B)

R/W

(by byte)

BCD日期数据寄存器

未定义


BCDDATE

Bit

描述

初始化值

Reserved

[7:6]

 

00

DATEDATA

[5:4]

BCD日的BCD

0~3

00

[3:0]

0~9

0001

 

BCD星期数据寄存器(BCDDAY)

寄存器

地址

R/W

描述

重启值

BCDDAY

0x57000080(L)

0x57000083(B)

R/W

(by byte)

BCD星期数据寄存器

未定义


BCDYEAR

Bit

描述

初始化值

Reserved

[7:3]

 

 

DAYDATA

[2:0]

BCD的星期值

1~7

0x0

 

BCD月数据寄存器(BCDMON)

寄存器

地址

R/W

描述

重启值

BCDMON

0x57000084(L)

0x57000087(B)

R/W

(by byte)

BCD月数据寄存器

未定义


BCDMON

Bit

描述

初始化值

Reserved

[7:5]

 

00

MONDATA

[4]

BCD月的BCD

0~1

0

[3:0]

0~9

0001

 

BCD年数据寄存器(BCDYEAR)

寄存器

地址

R/W

描述

重启值

BCDYEAR

0x57000088(L)

0x5700008B(B)

R/W

(by byte)

BCD年数据寄存器

未定义


BCDYEAR

Bit

描述

初始化值

YEARDATA

[7:0]

BCD年的BCD

00~99

0x0