找回密码
 注册
关于网站域名变更的通知
查看: 393|回复: 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的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。1 b0 x) m  C7 `( o# E  i
1 RTC介绍% X$ n/ J, p! ^
在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。
- M$ N0 ]  X6 y1 l0 @
+ G2 W9 T0 M8 l' j
2 RTC控制器
& A# O, V  ?- M# T4 q/ w4 p
" [/ n/ m* S- X实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。; e; ^% Y3 t# p& G# G
# [1 ~; y) t/ C/ v. i6 y: t" S
        ● 时钟数据采用BCD 编码。3 w; o& N6 N, P6 P
        ● 能够对闰年的年月日进行自动处理。
# n( Q( e5 P' T2 O2 Y. \: x7 @        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。8 }- Z. J# h" P9 V% p& e' n4 P2 G& _* ], k
        ● 具有独立的电源输入。( }) m5 Y- m( M$ O
        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
" S* v- q, Y( b3 j
5 O. F* i! l' t! C/ c4 ~7 |% `2 `3 RTC控制器寄存器详解" V( o% o2 o7 U4 ~5 j- g4 B4 w7 q

. A+ r! L; F& y* R. V, O: V% x9 ]9 {. w如表3所示为相关寄存器描述。
3 i7 w0 H5 z/ a/ a
( l7 ~, ~, E( G  W* O# R# K0 ^) [' o
如表4所示为BCD秒寄存器描述。
4 d! V! S8 a/ P& A' W& \+ U

# _% N/ b9 E" [7 p) M  U如表5所示为BCD分钟寄存器描述。; J0 u' k1 K" y1 Y$ k% ]3 J" j

/ }4 J. {  F( C% s6 a) Y$ @* ]如表6所示为BCD小时寄存器描述。
+ F& M2 {; y! U2 S
$ Q% c6 \3 X: I2 q7 t! Z( }
如表7所示为BCD日期寄存器描述。2 q6 c* s+ I4 D

; @! d$ Y, a6 G2 Z% b2 W如表8所示为BCD星期寄存器描述。* f2 f8 H* r  K- i! [) i6 s7 V( I( a# o

1 o* Y& X2 [9 i& C5 C如表9所示为BCD月寄存器描述。  A/ m( W4 q' o2 t* `. ?) ]: \

; X7 o, _$ z9 K- R如表10所示为BCD年寄存器描述。
" h# b+ y* \6 [9 I+ b7 g- B. X; i& _2 }/ ?; J" V) W( l7 \
8 c7 E$ a$ K  ], W
4 RTC应用示例
3 ~' @& ]  t% c+ c7 A6 e& @8 a: a- l6 k. _
1).相关寄存器定义
0 \) a/ D7 j8 K0 ?% T0 m) }* M. z2 X7 \* J2 J1 V3 L
0 `! j4 G3 _% b* C
  \- g7 l4 k" [: g5 A
    $ v! `( Q/ o4 Z/ e/ H* }% j* X
  • 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), ]& ]. L, k: J6 I! Y
! n- a  h/ u$ I" @* @

, U- c6 y" U& D) B% c% f复制代码
7 ~0 X# w! y- s1 `& G

. f9 q- J6 \2 K6 v% L
6 b" x8 N+ k/ D9 o8 c2).主程序) e" N# \$ [$ ?; ]; Z1 q

2 {: D" n; g1 O, p$ b下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。& E7 L! Y) z8 A# H

3 ^+ _& H% @: W) @5 }' X0 Y. F4 D; p7 x( ?. X/ }1 C
$ ^6 d3 x: G9 T2 U

    6 ~. U$ |! n) v7 L
  • 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;
  •         }
    $ X, C& r# N3 E0 m* T5 D/ z6 d
# v) F! [: j" K: S% H
; z+ |$ i0 I( v
复制代码; o0 V/ q% t1 Q, [- X
+ o3 g- k# q' V2 W0 h

$ x" _. j5 Y2 C% [$ W% }" p3).实验过程及现象:
2 s7 _1 P2 y" |( W9 y' i
8 }7 V, s* `- S4 r编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。
1 `) W1 C0 s: T, u8 P% @& Z8 g+ H6 y4 V

+ n6 y: ]- l4 d' t6 y5 l% G, D) u! }5 ]: m2 m( a1 I

    2 z/ z' }, w/ c5 _6 `
  • hour 12 : min 59 : sec 17
  •         hour 12 : min 59 : sec 18
  •         hour 12 : min 59 : sec 19
  •         hour 12 : min 59 : sec 20& C6 N5 F/ M6 T2 ~& f, Z' G; ?

  w: S- {: x; ^/ A, e7 u; }
: {$ U9 M$ f5 N& _$ D
复制代码
8 x" o. j, b; J$ i& ?3 l5 V$ b
3 R+ O9 V( m- b/ @$ v1 c2 I; Z$ g
0 I4 ~' G& ?, e4 r! n

2 H/ f6 M' g' O& `& c1 y
7 f) N! B5 |& M5 a% N4 a' @

9 [" Z& F" t6 u2 E& q* V

+ ^; A; V' P/ X
# a" ~5 D# E1 [8 C; T

# w& q2 w$ S3 T3 u3 L$ J0 `9 ]# Z
# `3 Q( N  [3 D
& W1 ?4 a1 O0 U2 K) _5 _' }) _
5 r# P7 \! w$ {* w* j

该用户从未签到

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-11-24 00:57 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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