MSP430系統(tǒng)實時時鐘RTC學習日志
1通過設(shè)置RT0IP位,可以選擇使RT0PSIFG位用來生成間歇中斷。
2在計數(shù)器模式,RT0PS位時鐘源,源自于ACLK或者SMCLK,也可以是基于ACLK或者SMCLK時鐘源的2分頻、4分頻、8分頻、16分頻、32分頻、64分頻、128分頻和256分頻作為時鐘源。
3設(shè)置RT0PSIE位可以使能中斷。
1通過設(shè)置RT1IP位,可以選擇地讓RT1PSIFG位用來生成間歇中斷。
2在計數(shù)器模式下,RT1PS位時鐘源,源于ACLK、SMCLK或者是RT0PS位的輸出,也可以是以上時鐘源的2分頻、4分頻、8分頻、16分頻、32 分頻、64分頻、128分頻和256分頻后產(chǎn)生新的時鐘源作為時鐘。
3設(shè)置RT1PSIE位可以使能中斷。
一個簡單而安全讀取實時時鐘寄存器的方法是利用RTCRDYIFG中斷標志位。置位RTCRDYIE位使能
RTCRDYIFG中斷。一旦中斷使能,在RTCRDY位上升沿的時候?qū)a(chǎn)生中斷,致使RTCRDYIFG被置位。在這
一點上,這一應用幾乎有完整的一秒鐘安全地去讀取任一個實時時鐘寄存器。這一同步的處理方式防止在時間
跳變的過程中讀取時間值。當中斷得到響應的時候,RTCRDYIFG會自動復位,也可以軟件復位。
在計數(shù)器模式下,RTCRDY位保持復位??梢圆魂P(guān)心RTCRDYIE位,并且RTCRDYIFG維持復位。
資料:
http://www.jdzj.com/pic/Class347/Class410/20080804043437.html
設(shè)置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 ;
for(;RTCCTL01&RTCRDY;) _NOP() ; // 等待RTC有效
for(;!(RTCCTL01&RTCRDY);) _NOP() ;
hour = GetRTCHOUR() ;
minute = GetRTCMIN() ;
second = GetRTCSEC() ;
time = (unsigned long)hour*1000000
+(unsigned long)minute*1000
+(unsigned long)second ;
return time ;
}
評論