void SetRtc(Rtc_t *pRtcData) { // Stop the RTC RTCCTL01 |= RTCHOLD; // These calls are to asm level patch functions provided by TI for the MSP430F5438 unsigned int Year = (pRtcData->YearMsb << 8) + pRtcData->YearLsb; PrintF(">SetRtc Year: %d", Year); RtcYear = (ToBCD(Year / 100) << 8) + ToBCD(Year % 100); PrintF(" %04X", RtcYear); RtcMon = ToBCD(pRtcData->Month); RtcDay = ToBCD(pRtcData->Day); RtcDow = ToBCD(pRtcData->DayOfWeek); RtcHour = ToBCD(pRtcData->Hour); RtcMin = ToBCD(pRtcData->Minute); RtcSec = ToBCD(pRtcData->Second); RestoreRtc(); // Enable the RTC RTCCTL01 &= ~RTCHOLD; EnableTimeStamp(); }
void InitRealTimeClock(void) { RtcInUseMask = 0; // stop it RTCCTL01 = RTCHOLD; // use calibration data to adjust real time clock frequency if (ValidCalibration()) { signed char RtcCalibrationValue = GetRtcCalibrationValue(); if (RtcCalibrationValue < 0) { RtcCalibrationValue = -RtcCalibrationValue; RTCCTL2 = RtcCalibrationValue & RTCCAL_VALUE_MASK; } else { RTCCTL2 = RtcCalibrationValue & RTCCAL_VALUE_MASK; /* adjust up */ RTCCTL2 |= RTCCALS; } } // Set RTC mode and BCD format RTCCTL01 |= RTCMODE | RTCBCD; // set 128 Hz rate for prescale 0 interrupt RTCPS0CTL |= RT0IP_7; // enable 1 pulse per second interrupt using prescale 1 RTCPS1CTL |= RT1IP_6 | RT1PSIE; // 1 Hz calibration output RTCCTL23 |= RTCCALF_3; // setting the peripheral selection bit makes the other I/O control a don't care // P2.4 = 1 Hz RTC calibration output // Direction needs to be set as output RTC_1HZ_PORT_SEL |= RTC_1HZ_BIT; RTC_1HZ_PORT_DIR |= RTC_1HZ_BIT; RestoreRtc(); // Enable the RTC RTCCTL01 &= ~RTCHOLD; }