找回密码
 注册
关于网站域名变更的通知
查看: 378|回复: 2
打印 上一主题 下一主题

RTC介绍、寄存器详解以及应用示例

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-10-19 14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
实时时钟的缩写是RTC(Real_time clock)。RTC 是集成电路,通常称为时钟芯片。RTC通常情况下需要外接32.768kHz晶体,匹配电容、备份电源元件。RTC除了I/O口的定位不同,还有功能上的区别,比如与mcu接口,现在常用的是I2C接口(距离短,可以与其他器件共用)还有RAM的数量、静态功耗大小、中断的数量,特别是精度的区别。 RTC的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。9 b3 Y) i! Z7 o7 \# Q( y: _
1 RTC介绍) i2 n# ~- W) L! c" T
在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。
, \+ U3 x, r# ?% |$ Y9 G

8 T; Y+ w6 F# o1 d& x% i7 Y2 RTC控制器: b/ h9 M+ E7 r

/ x! ~9 M: D" o- F+ a实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。
, J  ?" W' X" I$ {2 o+ Z; m! d4 S; `) D6 G) x' z9 B2 J
        ● 时钟数据采用BCD 编码。
' w6 E  t5 j( x1 C8 e4 [% `        ● 能够对闰年的年月日进行自动处理。
. G2 d# b; a' N6 H# N  e: d( V        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。
* Q6 b2 l7 N$ P1 T6 c        ● 具有独立的电源输入。$ r, o6 X) v' t  b
        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
- c. Z2 \3 ?! O! I* N' [+ y" m4 k$ {- ?
3 RTC控制器寄存器详解( X, X- j* a2 ?9 O
3 ^0 l( q' E3 I8 [8 E+ C
如表3所示为相关寄存器描述。
) f* }4 x! c9 q8 [

$ h  C. j3 z3 ]% g5 c2 f7 \如表4所示为BCD秒寄存器描述。  Y- p; I& B2 _! o. U4 z

$ U: N/ C8 ]  b% y  t如表5所示为BCD分钟寄存器描述。1 B* m$ ~9 D5 f! R: x( V
. N( c# F" P7 u3 c. k2 c, E* `) \
如表6所示为BCD小时寄存器描述。' z; j# d- k0 c0 q6 @- w4 ]+ e
; ^1 z- A# O6 p' p. y
如表7所示为BCD日期寄存器描述。3 }, t2 W1 ~  R8 Y, w" s2 n

: n. x" i' X& B7 ?! i5 [: G如表8所示为BCD星期寄存器描述。4 c' |1 O) ?( D: \* l% B" }

6 n( L2 H) D  T+ c0 t$ ]$ s如表9所示为BCD月寄存器描述。
, P( d" l6 v" X; O0 P" Q0 t$ Q$ X
/ l; c- [% P2 g6 i& i$ K* Q
如表10所示为BCD年寄存器描述。
; ?# g' U6 t% u% I0 i5 P1 U9 K4 H; F4 j! j

2 i. d" Y4 h" U; h4 RTC应用示例
/ p/ o) j7 q) N* r9 m7 y5 ?, A& K, S6 u! E" y0 U
1).相关寄存器定义
. G  Y) p9 @% t' Q1 B, [! X9 ]0 w% s; y3 e
' R" c# D$ c) D& A+ l$ S% Y
/ h3 o2 c% _/ @
    : c+ o& r3 u3 ^3 k
  • typedef struct {
  •                         unsigned int BCDSEC;
  •                         unsigned int BCDMIN;
  •                         unsigned int BCDHOUR;
  •                         unsigned int BCDDATE;
  •                         unsigned int BCDDAY;
  •                         unsigned int BCDMON;
  •                         unsigned int BCDYEAR;
  •         }rtcbcd;
  •         #define RTCBCD (* (volatile rtcbcd *)0xEA300070)
    6 A1 U' _6 n2 E- R, G7 x* y6 P

& A: w: x; R' l( K

/ Z) N# s  Y$ h& J$ ?' T% b1 U复制代码2 x% M% N& w  A& c  L3 S& C

, d+ j0 v, z7 @4 I1 g, g6 L5 ^$ |& @' g' w, E" R
2).主程序
: C$ R$ g: p) e9 e9 d
* c) B# b$ b8 P; M8 V下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。
2 q% g4 t# x7 h9 I+ I
' ~# A( K. ]- e  m7 b& s6 f; q* Z+ l% k7 y. b( Y0 s: N' R
' M, _& Y+ D" K1 `  d- S$ {  ^! ?
    4 X& W9 W# `5 g7 L5 A
  • void rtc_init(void)
  •         {
  •                 RTCCON = 0X01; //使能RTC控制些功能
  •                 RTCBCD.BCDSEC = 0x0; // 2012 03 15, 12:59:00.以BCD码格式写入
  •                 RTCBCD.BCDMIN = 0x59;
  •                 RTCBCD.BCDHOUR =0x12;
  •    &nbsnbsp;            RTCBCD.BCDDATE = 0x15;
  •                 RTCBCD.BCDMON = 0x03;
  •                 RTCBCD.BCDYEAR = 0x12;
  •                 RTCCON = 0; //关闭RTC控制些功能
  •         }
  •         int main()
  •         {
  •                 unsigned int i = 0;
  •                 uart0_init();
  •                 rtc_init(); //初始化时间
  •                 while(1) //循环打印时间
  •                 {
  •                         printf("hour %x : min %x : sec %x\r",RTCBCD.BCDHOUR,RTCBCD.BCDMIN,RTCBCD.BCDSEC);
  •                         for(i=0;i<10000000;i++);
  •                 }
  •                 return 0;
  •         }
      S; |/ A: [" C* p+ t! ~4 I

, x  a5 ^) t# n. c: ~0 ?" Z- o3 Y* p

2 q% O+ B. C* q, g7 s: J' @8 G复制代码) H( L7 J, Q) O, r% C/ \

; J) g5 y" s/ _. S: B7 @: k+ M" p& ^8 ]
3).实验过程及现象:
& [  b7 I1 O. N2 l
- X+ ]# p# ]2 @0 }编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。& B# P6 u3 v1 q$ c: \# Z  b& P8 `
& e$ S; W% y$ I: ?8 g* K

5 I+ n8 |6 Z$ x' C% U+ e  p3 U' _
# b" |5 K" x$ E( y
    / i0 n7 O# S8 m( ~2 `
  • hour 12 : min 59 : sec 17
  •         hour 12 : min 59 : sec 18
  •         hour 12 : min 59 : sec 19
  •         hour 12 : min 59 : sec 20' d6 G4 T) S. t; Y: t# E
2 w* e4 i9 ?! b9 R6 B# x0 L
) h: n- T9 _' J5 C
复制代码
0 V- Z1 b0 G) M! `: c4 h

- u+ J8 G) }2 P$ l  }7 x
8 y0 G2 @8 \6 {7 C- X) v7 ^" ^

, `! O1 Y. N' R  Z

* k& C: _/ U( r# m8 n
( P# u" q6 D" z8 h" D% i) x. q5 n! V

3 m4 L; Y0 v. P8 E' P9 q6 j; {% L

' q; F( W6 T, ]: n

+ N/ y  u  Y, ~, V( X3 H
+ ]4 C8 u  V2 E7 P' {- `( ^( J

$ k! y$ b4 v9 z4 j, `5 R0 n5 q) d% B+ Q' x+ E+ h

该用户从未签到

2#
发表于 2021-10-19 14:43 | 只看该作者
RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU

该用户从未签到

3#
发表于 2021-10-19 16:25 | 只看该作者
实时时钟(RTC)单元可以通过备用电池供电
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-13 00:06 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表