找回密码
 注册
关于网站域名变更的通知
查看: 397|回复: 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的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。$ Q8 m5 O  y2 s( Q1 @
1 RTC介绍
* o$ E/ i: V+ K) j% c# K- i在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。8 }9 p" a' L, U8 J; @2 ~- M& H

5 [2 P' p1 D7 n1 V2 RTC控制器
! f; P5 i" V: T, j' d/ D0 R
5 h( E4 M: d$ L) b# m! H实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。
* p& n% u5 B- n* @9 m: s7 I* D' _
3 q4 _5 U0 M$ d- k# a( Q        ● 时钟数据采用BCD 编码。
& h$ m# _' a  p/ d9 q# J        ● 能够对闰年的年月日进行自动处理。0 V8 u+ M" L5 S" ]2 f
        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。
+ K$ D. g- V$ q7 ~3 [+ ~+ [        ● 具有独立的电源输入。
5 i! D1 G- @' z        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
+ m' A& j2 z, q9 r' k
( \2 ]6 O: t" {; t3 RTC控制器寄存器详解3 B; S7 A- G- }
* p/ u  b1 v* U9 E$ F; M
如表3所示为相关寄存器描述。: k; b) R! m3 @2 @" e) L3 b, O

( s  m" i9 R7 m( y* z0 ~7 p如表4所示为BCD秒寄存器描述。
6 E- c! E( Q( @: ^0 A  g( _9 F

5 f) V8 f1 v4 J: }  T如表5所示为BCD分钟寄存器描述。+ T; k9 \0 e) V

6 z( h+ Y7 R8 }6 Q0 N2 M) i* X如表6所示为BCD小时寄存器描述。
6 [7 n/ h5 q% B, N% Q( k/ t$ J
4 ]- I  m9 ]$ r" v
如表7所示为BCD日期寄存器描述。
% n1 `( n' T/ A1 X# p& h- C+ b

5 z1 X  D  S( A& j+ ]' ~$ t如表8所示为BCD星期寄存器描述。- ~! N+ L% S! k' j1 Y0 a; _. B
/ [& o0 S9 M+ I! D+ L* u( L; Q
如表9所示为BCD月寄存器描述。
, v( R7 U8 l# f5 q  v4 Y* {
- @% I2 q2 O+ [4 r0 _$ H
如表10所示为BCD年寄存器描述。% N+ `/ A! ~8 P; _6 h3 L

: E$ _2 T% o# h+ Y& d7 D$ x0 F/ o' K# [. _
4 RTC应用示例. L" Y; h$ o! h! Q4 N5 V8 N6 ?! L

/ e; J$ F5 J( z. N+ T1).相关寄存器定义
  j8 x% r! P5 K+ f% }+ Y0 m4 x
  d% p2 c/ {' p
) ~4 q/ k: W% @+ R* o/ Z/ k! J4 w6 o( R

    8 m) F" w7 a2 B
  • 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)  U9 S, V+ w0 O9 y
8 l! F) n* f0 g+ r1 p4 U3 Y
  B  C4 [: Q4 R
复制代码
3 S) S; r  U2 y+ s
" ~2 G# U/ P) y; G3 d! K& w
: |9 u7 V% S0 E4 ?
2).主程序
6 I# @4 H. i  T! ~) M  Y& ?6 c  _! e; H1 y0 J
下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。
! C* _/ G. |5 U, S" e5 }% `! g, |1 {( W0 @% R

9 _6 j5 K1 w0 f) I: G. w/ j! e: L: @9 M& B# H% ^$ h
    / n. v( ^3 k$ K
  • 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;
  •         }8 @3 A( D5 A: q% x" p
1 C7 V& _3 G' t3 C8 _0 l, o

0 N, S1 {7 L0 P7 ]) T7 D" L+ I$ o复制代码1 Q2 a  `* C6 Q+ R/ d$ I( U

; R' d0 B8 `! k
6 m  }& V8 f% O  d/ l2 n  G3).实验过程及现象:
; l9 N9 e$ c% a1 p+ o/ Q
* O4 V0 W) c) n) ~9 h1 ~3 f  H编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。
! D4 h7 ^6 i0 }( r& s4 Y5 V: x5 a

: E: C! n2 A( G& @! q1 q
  u6 U; }" s6 T: c& d" v3 H7 N

    6 r6 @+ P, K  {6 b( r
  • hour 12 : min 59 : sec 17
  •         hour 12 : min 59 : sec 18
  •         hour 12 : min 59 : sec 19
  •         hour 12 : min 59 : sec 20* E; ^$ m5 v  v0 s

9 Q4 }( Y5 z- l

0 i& _# k; J& y. `' \复制代码

6 Q, f4 @3 U7 W
. u$ o% D& B: P. o, J3 B1 J! {. F% ?
& l) a3 Y2 z9 p2 O
0 E* o( H! H4 A! H9 I4 k

3 z- g" L( j2 S( L0 l( W

- D5 [" K. E/ H' T* ]
7 g& m( G! ]9 F6 b% m; _3 s6 u

% d4 [6 k$ Z6 W. K

8 Y& }* E( i( \+ m3 t+ P0 R: ^
' w& `- f/ d. Q  i

7 c" b* L7 E9 ?8 E8 [0 P% b2 x* j# w- \6 ~  i3 }

该用户从未签到

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 11:33 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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