[经验] 【实时时钟RTC】MSP430系统实时时钟RTC学习日志(完善中)

qinkaiabc   2014-2-21 12:29 楼主
读取实时时钟:
1、  RTCRDY 为0时,不能取读取实时时钟

RT0PS源于ACLK,为了实时时钟日历的正确的运行,ACLK必须是32768Hz。(易出错)
定时:
一、每小时闹一次:每一小时的15分钟闹一次:
1、将RTCAMIN设置成15;2、设置RTCAMIN的AE位和清除闹钟寄存器的其它所有AE位
3、AF会在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等时刻被置位。


二、在每天04:00:00时刻闹:
1、RTCAHOUR位置位成4;2、设置RTCHOUR的AE位和复位闹钟寄存器的所有其它AE位
3、AF就会在03:59:59到04:00:00时刻被置位。


三、在每天06:30:00时刻闹:

1、 将RTCAHOUR设置成6,将RTCAMIN 设置成30。
2、设置RTCAHOUR和RTCAMIN的AE位,即可使能闹钟
3、 AF位将会在每一个06:29:59到06:30:00的过渡时刻被置位


四、在每周二 06:30:00时刻闹:

1、  RTCADOW位设置成2,RTCAHOUR设置成6,RTCAMIN将要被设置成30。
2、  设置RTCADOW、RTCAHOUR和RTCAMIN的AE位,闹钟即被使能。
3、  AF位将会在RTCDOW位从1 到2的过渡后和06:29:59到06:30:00的过渡时刻被置位。


五、在每月第五天的06:30:00时刻闹:

1、  RTCADAY位将要设置成5,RTCAHOUR位将要被设置成6,RTCAMIN位将要被设置成30。
2、  设置RTCADAY位、RTCAHOUR位和RTCAMIN位的AE位,闹钟即被使能。
3、  AF位将要在06:29:59到06:30:00的过渡时刻和RTCADAY等于5的时刻被置位。


实时时钟模式下的间隔时间中断:

RTCCTL01 = RTCBCD+RTCMODE+RTCTEVIE+RTCAIE;

RTCMODE: 0:Counter  1: Calendar
置位RTCAIE 位就使能了时钟中断功能
置位RTCTEVIE 位就使能时间间隔中断功能,置位RTCTEVIFG
RTCTEV:00 分钟跳变
01 小时跳变
10 每天凌晨(00:00)
11 每天正午(12:00)
以上均在RTCMODE=1模式下。
//天中断。置位RTCRDYIE 位会使能中断,RTCRDY 位触发实时时钟中断RTCRDYIFG


计数器模式中的实时时钟中断
时间间隔中断:
实时时钟中断(RTCTEVIFG)
配置成8位、16位、24位或者32位中的一种溢出时引发一个触发事件。触发事件可由RTCTEV位进行选择
置位RTCTEVIE位使能中断

在计数器模式中,三个中断源是可用的,其分别是RT0PSIFG、RT1PSIFG和RTCTEVIFG。RTCAIFG位和RTCRDYIFG位被清除。RTCRDYIE和RTCAIE位可以忽略。

1通过设置RT0IP位,可以选择使RT0PSIFG位用来生成间歇中断。
2在计数器模式,RT0PS位时钟源,源自于ACLK或者SMCLK,也可以是基于ACLK或者SMCLK时钟源的2分频、4分频、8分频、16分频、32分频、64分频、128分频和256分频作为时钟源。
3设置RT0PSIE位可以使能中断。

1通过设置RT1IP位,可以选择地让RT1PSIFG位用来生成间歇中断。
2在计数器模式下,RT1PS位时钟源,源于ACLK、SMCLK或者是RT0PS位的输出,也可以是以上时钟源的2分频、4分频、8分频、16分频、32 分频、64分频、128分频和256分频后产生新的时钟源作为时钟。
3设置RT1PSIE位可以使能中断。


一个简单而安全读取实时时钟寄存器的方法是利用RTCRDYIFG中断标志位。置位RTCRDYIE位使能
RTCRDYIFG中断。一旦中断使能,在RTCRDY位上升沿的时候将会产生中断,致使RTCRDYIFG被置位。在这
一点上,这一应用几乎有完整的一秒钟安全地去读取任一个实时时钟寄存器。这一同步的处理方式防止在时间
跳变的过程中读取时间值。当中断得到响应的时候,RTCRDYIFG会自动复位,也可以软件复位。
在计数器模式下,RTCRDY位保持复位。可以不关心RTCRDYIE位,并且RTCRDYIFG维持复位。


资料:
http://www.jdzj.com/pic/Class347/Class410/20080804043437.html
设置RTC时间:

  1. void main(void)
  2. {
  3.   WDTCTL = WDTPW + WDTHOLD;             // Stop Watchdog Timer
  4.   RTCCTL01 = RTCBCD+RTCHOLD+RTCMODE+RTCTEVIE+RTCAIE;
  5.                                         // RTC enable, BCD mode,
  6.                                         // alarm every Minute,
  7.                                         // enable RTC interrupt
  8.   // Init time
  9.   RTCSEC =  0x00;                       // Set Seconds
  10.   RTCMIN =  0x32;                       // Set Minutes
  11.   RTCHOUR = 0x10;                       // Set Hours
  12.   // Init date
  13.   RTCDOW =  0x03;                       // Set DOW
  14.   RTCDAY =  0x30;                       // Set Day
  15.   RTCMON =  0x04;                       // Set Month
  16.   RTCYEAR = 0x2008;                     // Set Year
  17.   RTCCTL01 &= ~RTCHOLD;                 // Enable RTC
  18.   P1DIR |= 0x01;                        // Set P1.0 to output direction
  19.   __bis_SR_register(LPM3_bits + GIE);   // Enter LPM3 w/ interrupt
  20. }
  21. 读取RTC时间:
  22. //
  23. //                                                                           //
  24. //                 读取RTC时钟                                               //
  25. //                                                                           //
  26. //
  27. unsigned long GetTime(void)
  28. {
  29.   int hour,minute,second                             ;
  30.   unsigned long time                                 ;
  31.   for(;RTCCTL01&RTCRDY;)        _NOP()               ; // 等待RTC有效                              
  32.   for(;!(RTCCTL01&RTCRDY);)     _NOP()               ;                                    
  33.   hour    = GetRTCHOUR()                             ;
  34.   minute  = GetRTCMIN()                              ;
  35.   second  = GetRTCSEC()                              ;
  36.   time    = (unsigned long)hour*1000000
  37.            +(unsigned long)minute*1000
  38.            +(unsigned long)second                    ;
  39.   return time                                        ;
  40. }

分享自:http://t.cn/zOiB5oB


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复