找回密码
 注册
关于网站域名变更的通知
查看: 356|回复: 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的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。) h& v  N9 e: f, `7 h" v" P
1 RTC介绍
9 i% a: c0 N9 J+ A9 `7 }在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。8 t2 _, S% {. j  y" Z

9 h) o/ @  Q* Z2 RTC控制器
5 x  g  ^9 f: X7 w6 t
* G( }0 j7 k: w/ I% T2 m实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。6 L7 r; R! {& D2 Z

5 {# H& d& K7 r% A) p        ● 时钟数据采用BCD 编码。7 c: x3 x, Q1 U' m2 D/ w
        ● 能够对闰年的年月日进行自动处理。1 a. M; N: G/ ?' R# r& R' c: |
        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。6 l$ y' q' J+ |  d
        ● 具有独立的电源输入。
& o/ \2 F) l; q        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
/ F% H. N( ^7 E* u; T
1 o' X. W* z# v3 T, I8 B: {! r3 RTC控制器寄存器详解( q4 m1 T/ W) y5 J$ ^
" I* r) K4 _5 V8 K2 L7 R
如表3所示为相关寄存器描述。3 E$ i) T" E! ^0 V6 R
. ^4 O$ w  i4 r0 n' l, E
如表4所示为BCD秒寄存器描述。6 E# n% L' O5 b( c

7 j7 Y$ D6 \( C( b" w. x3 R% N如表5所示为BCD分钟寄存器描述。
: o; M* o! J5 t

) @2 h0 Y+ }, z* o: R7 ~如表6所示为BCD小时寄存器描述。, V6 l& A: d: t
% B7 l, G% {" x3 ~+ c; s% S
如表7所示为BCD日期寄存器描述。% O; N" H3 [0 L( w# [2 R' U

- F( D6 N! \0 R! E# G如表8所示为BCD星期寄存器描述。
! b1 R% ~$ m, L$ `

( l" N, t% J# C3 |9 J+ e如表9所示为BCD月寄存器描述。  a, w* s  k) d6 B5 e6 R; [
+ |  h, {2 V) ]9 N& Q
如表10所示为BCD年寄存器描述。( S: e* A/ H% g* s* |2 g, J
  p* n, l' ^$ }  h

, L/ w7 f5 o5 R5 B3 p4 RTC应用示例
% V8 W' a% T* Y" Y& v0 X# f! ]
  m* c4 q  x4 {& h1).相关寄存器定义
; }3 R- A; F4 E. g$ T/ g, L. r+ N2 J, n$ D/ J9 x6 y7 f% N. W
7 J/ G% t5 X+ S, l7 p! @, p2 k0 K

/ d2 z% }6 U" d+ f

    . \; J- a4 _  Y- d5 ^; T9 E
  • 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)- b0 ~/ |1 ~4 u, n8 J9 u
& s' T% q! g- k/ p2 D) y9 m1 l

2 A9 r0 R2 G) q' y* J复制代码
5 `) N( i7 c* ^  N9 t
# l. G' T9 M2 U( ~0 g& f
7 B# F3 B+ N/ k' l
2).主程序
! B5 _2 f. @8 P: I# {& `  G1 A, @  ]$ S! ]5 Z
下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。
- S) q" v7 p( h0 z( M! @# T' I9 G) F3 M/ I5 _

  x6 D3 V, L0 V, T- \# f+ ]$ p# |. [* h0 Q. \+ t6 M; I( h
    2 y4 j( ?9 m' n8 b8 Y  W
  • 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;
  •         }
    0 p. e8 j/ X1 N! U; X. _. A

& Z$ f$ J4 J3 w$ l/ f. J  h% M
3 o$ O5 Z7 ]( S6 L# g8 d
复制代码
& n0 o& Y6 N2 N$ \0 x$ Q( b

( i6 A) k) B; D0 d* l3 \' b6 F; w4 n% A& P' B
3).实验过程及现象:
" d) [* M/ j; h# X- R9 P; S" ^4 ]
$ ~! A4 K$ d' z& j编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。
; M+ k9 ]' q- R( _0 P1 ^
+ D5 C( l* I5 n" `' }
, X9 O# K9 I8 U' }2 [$ z7 v; r0 d8 F( O% o& z; O4 a. P. q

    $ O6 ~( Y$ A9 Y
  • hour 12 : min 59 : sec 17
  •         hour 12 : min 59 : sec 18
  •         hour 12 : min 59 : sec 19
  •         hour 12 : min 59 : sec 20
    7 O2 w0 K) b; l* D

/ d, T% Q. }/ g7 I! x: _3 k

# ]  y6 Y; x) U) w0 A复制代码
: m9 i: O/ F3 y
+ @1 x5 ]% B: P' r* V
* w: Q4 }7 N, o& i) v

4 _/ F/ W, P/ Z& i9 d/ B+ ^% |
4 z( O, ~, E( P8 `& A9 f
+ g/ V  e' c: e" Y  ?
* {: @/ e/ `8 }

+ S1 C: P' I$ T4 h
, `; M, `3 {* L; Z  }: X

6 j) c+ I3 B, Q9 k. T5 j
6 _4 N# [  S8 Z+ m- s
  ?- q, e: U( N  O3 C, S/ t+ K7 c

该用户从未签到

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-8-11 13:39 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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