【實時時鐘RTC】MSP430系統實時時鐘RTC學習日誌(完善中)

bandaoyu發表於2012-01-06

2012.1.11

讀取實時時鐘:

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等等時刻被置位。

 

二、在每天040000時刻鬧:

1RTCAHOUR位置位成4;2、設定RTCHOUR的AE位和復位鬧鐘暫存器的所有其它AE位

3、AF就會在03:59:59到04:00:00時刻被置位。

 

三、在每天063000時刻鬧:

 

1、 將RTCAHOUR設定成6,將RTCAMIN 設定成30。

2、設定RTCAHOUR和RTCAMIN的AE位,即可使能鬧鐘

3、 AF位將會在每一個06:29:59到06:30:00的過渡時刻被置位

 

四、在每週二 063000時刻鬧:

 

1、  RTCADOW位設定成2,RTCAHOUR設定成6,RTCAMIN將要被設定成30。

2、  設定RTCADOW、RTCAHOUR和RTCAMIN的AE位,鬧鐘即被使能。

3、  AF位將會在RTCDOW位從1 到2的過渡後和06:29:59到06:30:00的過渡時刻被置位。

 

五、在每月第五天的063000時刻鬧:

 

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

RTCTEV00 分鐘跳變

01 小時跳變

10 每天凌晨(00:00)

11 每天正午(12:00)

以上均在RTCMODE=1模式下。

//天中斷。置位RTCRDYIE 位會使能中斷,RTCRDY 位觸發實時時鐘中斷RTCRDYIFG

 

 

計數器模式中的實時時鐘中斷

時間間隔中斷:

實時時鐘中斷(RTCTEVIFG)

配置成8位、16位、24位或者32位中的一種溢位時引發一個觸發事件。觸發事件可由RTCTEV位進行選擇

置位RTCTEVIE位使能中斷

 

在計數器模式中,三個中斷源是可用的,其分別是RT0PSIFGRT1PSIFGRTCTEVIFG。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時間:

 void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop Watchdog Timer

  RTCCTL01 = RTCBCD+RTCHOLD+RTCMODE+RTCTEVIE+RTCAIE;
                                        // RTC enable, BCD mode,
                                        // alarm every Minute,
                                        // enable RTC interrupt
  // Init time
 RTCSEC =  0x00;                       // Set Seconds
  RTCMIN =  0x32;                       // Set Minutes
  RTCHOUR = 0x10;                       // Set Hours

  // Init date
  RTCDOW =  0x03;                       // Set DOW
  RTCDAY =  0x30;                       // Set Day
  RTCMON =  0x04;                       // Set Month
  RTCYEAR = 0x2008;                     // Set Year

 RTCCTL01 &= ~RTCHOLD;                 // Enable RTC

  P1DIR |= 0x01;                        // Set P1.0 to output direction

  __bis_SR_register(LPM3_bits + GIE);   // Enter LPM3 w/ interrupt
}

讀取RTC時間:

//
//                                                                           //
//                 讀取RTC時鐘                                               //
//                                                                           //
//
unsigned long GetTime(void)
{
  int hour,minute,second                             ;
  unsigned long time       

相關文章