MSP430Ware,包含5xx,6xx系列的RTC代码
楼主可以看一下MSP430Ware软件库,里头有针对RTC的软件代码。
RTC驱动库在目录文件夹driverlib/5xx_6xx/rtc.c中, driverlib/5xx_6xx/rtc.h文件包括API函数定义的头文件。
实时时钟(RTC)
MSP430Ware RTC模块提供了一套关于RTC API的函数。这些函数可以校准时钟,在日历模式初始化RTC模块,使能RTC中断等。如果使用RTC_A 模块,计数器模式必须也要初始化。RTC模块在日历模式下能够实时追踪当前时间和日期,在RTC_A 下可以配置为32位计数器。
RTC模式产生多个中断,有2个中断在日历模式下使用。一个中断在计数器模式下用于计数溢出,另一个中断用于时钟分频。RTC驱动库在目录文件夹driverlib/5xx_6xx/rtc.c中, driverlib/5xx_6xx/rtc.h文件包括API函数定义的头文件。RTC API函数分成4组,包括时钟设置,日历模式,计数器模式和中断的使能与配置。
RTC时钟设置函数如下:RTC_startClock;RTC_holdClock;RTC_setCalibrationFrequency;RTC_setCalibrationData。
RTC日历模式初始化和配置函数如下:RTC_calenderInit;RTC_getCalenderTime;RTC_getPrescaleValue;RTC_setPrescaleValue。
RTC计数器模式(只有RTC_A具有)初始化和设置如下:RTC_counterInit;RTC_getCounterValue;RTC_setCounterValue;RTC_counterPrescaleInit;RTC_counterPrescaleHold;RTC_counterPrescaleStart;RTC_getPrescaleValue;RTC_setPrescaleValue。
RTC中断由如下函数设置:RTC_setCalenderAlarm;RTC_setCalenderEvent;RTC_definePrescaleEvent;RTC_enableInterrupt;
RTC_disableInterrupt;RTC_getInterruptStatus;RTC_clearInterrupt。
如下的API函数只有RTC_B具有:RTC_convertBCDToBinary;RTC_convertBinaryToBCD。
下面的代码显示如何初始化RTC,使用当前时间和变量配置RTC API为日历模式。
Calendar currentTime;
WDT_hold(__MSP430_BASEADDRESS_WDT_A);
P1DIR |= BIT0; // 设置P1.0为输出
// 初始化LFXT1
P7SEL |= 0x03; // 选择 XT1
UCSCTL6 &= ~(XT1OFF); // XT1 开启
UCSCTL6 |= XCAP_3; // 使用内部负载电容
// 循环直到 XT1,XT2 和 DCO 错误标志清零
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// 清除 XT2,XT1,DCO 错误标志
// 清除 SFR 错误标志
SFR_clearInterrupt(__MSP430_BASEADDRESS_SFR,OFIFG);
// 测试晶振失效否?
}while (SFR_interruptStatus(__MSP430_BASEADDRESS_SFR__,OFIFG));
// 配置当前日历时间
currentTime.Seconds = 0x00;
currentTime.Minutes = 0x26;
currentTime.Hours = 0x13;
Real-Time Clock (RTC)
currentTime.DayOfWeek = 0x03;
currentTime.DayOfMonth = 0x20;
currentTime.Month = 0x07;
currentTime.Year = 0x2011;
// 初始化RTC日历模式
// 初始化使用BCD日历寄存器格式
RTC_calendarInit (__MSP430_BASEADDRESS_RTC,currentTime,RTC_FORMAT_BCD);
// 配置日历报警时间,每周第5天下午5点
RTC_setCalendarAlarm (__MSP430_BASEADDRESS_RTC,0x00,0x17,RTC_ALARM_OFF,0x05);
// 每秒产生一次中断
RTC_setCalendarEvent (__MSP430_BASEADDRESS_RTC,RTC_CALENDAREVENT_MINUTECHANGE);
// RTC准备状态中断使能,准备读日历寄存器,同时使能日历报警和日历事件。
RTC_enableInterrupt (__MSP430_BASEADDRESS_RTC,RTCRDYIE + RTCTEVIE + RTCAIE);
// 开启RTC时钟
RTC_startClock(__MSP430_BASEADDRESS_RTC__);
回复 沙发 hansonhe 的帖子
老兄!我用过了!但是奇怪的是,我把那个.s43的汇编文件加进去以后,编译没有文件,就是在download的时候会出问题,提示是:
Fatal error:Closing debug session
session aborated!
你是按照MSP430Ware手册中的说明操作的吗?
用这段代码怎么读不出时间
在中断里怎么也读不出时间了,仿真调试看到时间在变。
同样的问题,我这里秒表过几分钟就会慢将近1S的样子