找回密码
 注册
关于网站域名变更的通知
查看: 396|回复: 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的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。3 P: `# P- ~( T
1 RTC介绍
* h, n8 `$ C1 T- {4 P! {在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。
7 k# v# t1 o3 i0 t' ^! E9 n- D

" y- i6 ]  Z# v  r* T2 RTC控制器/ Q8 O8 ]# O8 ?; N" Y: n3 R
* W0 K8 q. O( F% l. O
实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。
5 r. R& x7 c. x4 x- |0 O
3 J$ I: E5 n3 l. }! e* q. ~& u4 `" Y        ● 时钟数据采用BCD 编码。
2 |8 y% |6 [) T        ● 能够对闰年的年月日进行自动处理。( k2 m" z3 {! E' w. d
        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。9 x* C( _7 |' K/ f$ J
        ● 具有独立的电源输入。2 |% O* T. q, H
        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
7 z5 ^2 Z5 ^' ~. f9 R
& e' C2 T/ ?& h. `8 g3 RTC控制器寄存器详解
! }- L3 L0 H* W/ Q& v& Q7 T% a
: x3 W* }5 ]- _. b9 W6 I3 c如表3所示为相关寄存器描述。9 T$ O' e( m9 h! y

# j; f2 H: N/ k) M+ n# v% s如表4所示为BCD秒寄存器描述。( m2 _4 M" W+ |. E; z! c6 p

3 O7 R" Q+ x: T! W, e% N7 ~0 j如表5所示为BCD分钟寄存器描述。6 ]- M& o8 h2 b" g/ s
4 V% B; s2 _8 P# B
如表6所示为BCD小时寄存器描述。) Q6 I$ N# t- {

" u6 r4 u( U: N9 t如表7所示为BCD日期寄存器描述。
( k' ~/ J* ~5 d6 r& h' [7 H/ p% C
" v5 a. R2 W% x$ z5 s. M* U
如表8所示为BCD星期寄存器描述。
2 O9 S) c0 Y! ?3 J, \. F. T

: z6 D8 G7 U; e+ a+ i  u如表9所示为BCD月寄存器描述。
( N2 B- S: ~+ {0 Z0 w% B/ s

( R/ j3 \$ ~$ a如表10所示为BCD年寄存器描述。4 J$ M3 F( I) O- z
! ~+ P, j* ^8 s

! s4 p4 ]6 `* E% z. ?" Z! ^, B4 RTC应用示例
- Z6 E( f7 t/ |( Z0 E$ d3 d
8 Q8 B' [' f# U8 R/ F- V0 k1).相关寄存器定义% W1 V9 M6 [3 l! T
1 @/ C6 o# x. r
1 \7 X9 Z# S6 d. J, z4 V

7 J  t2 n: L* ]/ p8 z- i# }+ }

    6 E# f: n& D8 ~, X. \& M
  • 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)
    8 b0 g( {" `" M! l0 {
) q' Q# L; u5 S

0 R0 M3 h' t9 S; a, d( E复制代码
, N( d- W9 f  B- Z9 c5 S) Z/ ]

- n9 P6 U9 p, `" I3 F; v
+ L% F" ?6 q7 L1 Y0 w0 D2).主程序( I5 W2 S8 H" c
3 _% V, D, O; R" r- l
下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。, W. F2 S# I% ~( m2 P

" m9 n& [# v4 V/ t4 d* ~# u* T
( i1 n; X+ A! W' [4 {
+ W* S6 R' b5 n. k, D9 ~8 C3 ^
    6 c: {& g$ d" ?
  • 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;
  •         }
    * L6 H0 a# t9 {0 w- F* `7 x1 w* w9 K
: M$ y( p3 M) k1 D
3 g! [, {+ g, Q% C$ j
复制代码3 C' [) L9 o& E, Z  Y. `
' m, ]: V$ L7 l2 x! D
# I9 D5 x* B* i+ z
3).实验过程及现象:0 b7 D* s+ L. F0 k, f- T

% r5 D& f2 l* T. o编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。: M: a0 w5 s/ w* n1 @: }; d- B

6 E! j9 e' f$ p# i+ b& T, @* j2 M: E1 V' q0 G8 w# p

3 q7 x4 s  M$ \1 o

    ; q, \% S* _+ c$ \6 H
  • hour 12 : min 59 : sec 17
  •         hour 12 : min 59 : sec 18
  •         hour 12 : min 59 : sec 19
  •         hour 12 : min 59 : sec 206 F# T# F! z+ ?1 E' p( i; C1 M3 q  I
$ }  d- s2 T% |

2 R2 D4 ?$ ~- x! p& \0 ?8 `! g复制代码

9 w) G6 b0 }0 _6 g0 ~2 K

5 i/ k9 }! ]3 @

" t$ c3 ]/ A' J- [2 s4 d! |
( U( r7 j$ D2 {

- \1 n/ N. h- ]
( X& T4 Z2 }6 Y) Q: O

, A( V( ?4 q2 ?/ |2 \2 q' o
4 }" p& `0 t; B! Y, [

8 s" P9 Z) W6 t: ^: z& S' Y4 d5 \

) D* j* h) s% q+ _
. J4 z" |" ^7 @. X) |8 J) ]7 v9 }; p

9 i/ Z% y2 l. _( T/ F

该用户从未签到

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 03:36 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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