新闻中心

EEPW首页>嵌入式系统>设计应用> MSP430系统实时时钟RTC学习日志

MSP430系统实时时钟RTC学习日志

作者: 时间:2016-11-25 来源:网络 收藏
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 ;
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 ;
}

上一页 1 2 下一页

评论


技术专区

关闭