找回密码
 注册
关于网站域名变更的通知
查看: 339|回复: 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 k" x3 G- D. U- Y' c1 RTC介绍
" p( z6 Z6 A& T" M在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。
4 @) A$ [" V) ^9 R
5 C1 _* g. J1 h0 Y) p! ]
2 RTC控制器
3 V3 M7 J3 ~6 s' ~  b
8 V! |$ t0 j1 s6 |" v0 |) D% @实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。6 K9 R7 Y# w+ K# ]

0 r6 U  i# L8 c& E0 W; h        ● 时钟数据采用BCD 编码。0 v2 p+ m# a2 W& P& F
        ● 能够对闰年的年月日进行自动处理。
) @1 ]9 i% w6 |; }        ● 具有告警功能,当系统处于关机状态时,能产生告警中断。+ [. |: n* y: {/ F4 c0 S
        ● 具有独立的电源输入。
! ~$ S) S8 ^0 M3 L7 Q        ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。
% ^" s3 Y. l! \2 V* N
1 E2 N8 W5 q# K$ e$ v) T- u3 RTC控制器寄存器详解, W$ t* v) C; A) v0 G- h# [

6 x  Q* g! M$ }如表3所示为相关寄存器描述。
1 D  I0 ~; N& S" ^& X! h3 b, ?4 q2 H

+ `/ @6 Y) |% _" [( S7 J6 H如表4所示为BCD秒寄存器描述。
- g/ k( c' K  D8 \# i5 R( u" }0 F

9 u2 S, \3 @3 B" {5 Y$ c+ u" m" u如表5所示为BCD分钟寄存器描述。; p1 ?8 Z# u& G/ {: `7 x& S) `" e
1 ]8 c0 \( o& R/ |
如表6所示为BCD小时寄存器描述。- W* U  ^9 d7 E2 i
" s! w, j! I, A" N% Q
如表7所示为BCD日期寄存器描述。0 D# d9 A+ i; b
6 r8 t5 c5 P( U! P; \( Y
如表8所示为BCD星期寄存器描述。
3 i5 t% r# M* j( m' x) ?* Z

( R: I+ X1 B0 h% X$ z4 k: f/ s如表9所示为BCD月寄存器描述。
4 a( W* G3 y9 t3 T* g

  c6 N8 }6 J. l% A* }如表10所示为BCD年寄存器描述。3 R3 B  D0 C( D% @9 P
4 N) Q/ M, d  S- r$ Q: ~

* N8 e  D, H  t  b% }" {4 RTC应用示例
3 ]$ Z+ \8 x- ^# W+ n' D+ L7 E
! k. \! e, j* Q" G$ }. t' E% |$ }1).相关寄存器定义
! c8 h1 R* A' U& E: }2 `  h2 {  T6 Y' f5 Z1 O" F4 m

; [& P9 S& c4 s& W% Z: O
( B6 i; ?  R; b1 ~6 [

    + W! q: y5 E, u# D
  • 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)  F% d, n4 M& c1 h
1 t. F& `2 \. `

2 M1 u. o# \7 ^, X复制代码5 ]3 f/ d2 S! j  ~4 r* I
+ U* y! g9 t; Y" l$ g$ _! _- t

9 K+ V0 `8 Z( x8 `# R; P2).主程序; w6 g3 q8 n' g/ M& }  {- C

, M# @+ L3 W( M/ m5 c& t下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。. G1 o) Y2 r. S* z% O
7 r! V9 a- Z2 q0 R$ t: c( }" b8 Q
! I% p* ?1 a5 B7 Q& M7 e2 A

: y/ k) u0 K- W5 K1 c
    3 e4 A8 `' B9 Y1 U% M1 \/ 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;
  •         }! a& m$ ^& H3 H
( O( Q8 ?$ z7 M
- m" u- x3 [" E
复制代码2 N" A4 @5 S6 A0 S! g
8 \$ l( Y) G! A1 p7 t% N

9 U4 ~) W. q% X) ?3).实验过程及现象:
$ ]; D) l1 H! G7 X" ~3 A8 ^& \& ~2 a2 [7 q) t# I, q, {/ g4 A) Q
编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。
/ c# K; I8 R9 {; Q/ ^/ s! M5 s7 r0 e0 T* r1 @  F/ W" @

% e. J* |$ }1 ?2 b( R
0 E0 M+ K" m9 e8 e- a5 z, w# h
    # s9 ^. l: [9 d, _+ F5 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, L) B$ h% D  L' L1 C3 l! y

1 x4 r& c5 U, B' u1 j- J
: W+ ]5 n, F/ t) {
复制代码
" b5 y1 A4 R' M# ?0 l

( Z$ G5 h( Z8 B% n+ K: C. O9 E$ t

3 J, C1 {8 \8 q; d: P
; i) ^/ t1 V. ?' Z/ f" F

2 h% }, [6 x( o' E6 H( {

1 ^1 y5 q' o3 b9 v
2 G2 }" c+ l8 E

9 {4 M# I/ U' G- n2 j4 [- e# K* _
. \8 s, D0 r! C: J4 ~" r6 h4 ]

! i; o0 o4 x7 k! o( b- }/ _9 I
* c" U2 h. q, {/ J* p
* h/ ]7 A9 t' W- l1 f$ E

该用户从未签到

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-6-21 19:30 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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