void WhoAmI(void) { PrintS(BR_DEVICE_NAME); PrintF("Msp430 Rev:%c HwVer:%d", GetMsp430HardwareRevision(), HardwareVersion()); PrintF("BoardConfig: %d", GetBoardConfiguration()); PrintF("Calibration: %d", ValidCalibration()); PrintF("Errata: %d", Errata()); }
/* 80 us * * conversion time = 13 * ADC12DIV * 1/FreqAdcClock * 13 * 8 * 1/5e6 = 20.8 us */ void BatterySenseCycle(void) { static unsigned char Index = 0; xSemaphoreTake(AdcMutex, portMAX_DELAY); BATTERY_SENSE_ENABLE(); ENABLE_REFERENCE(); /* low_bat_en assertion to bat_sense valid is ~100 ns */ /* Start battery sense conversion */ AdcCheck(); CLEAR_START_ADDR(); ADC12CTL1 |= ADC12CSTARTADD_1; ENABLE_ADC(); WaitForAdcBusy(); /* Convert the ADC count for the battery input into a voltage * ADC12MEM1: Counts Battery Voltage in ADC counts * Result: Battery voltage in millivolts */ unsigned int Value = (unsigned int)(CONVERSION_FACTOR_BATTERY * (double)ADC12MEM1); if (ValidCalibration()) Value += GetBatteryCalibrationValue(); /* smoothing algorithm: cut extreme values (gap > 20) */ unsigned char Prev = (Index == 0) ? MAX_SAMPLES - 1: Index - 1; if (Sample[BATTERY][Prev]) { int Gap = Value - Sample[BATTERY][Prev]; if (Charging()) { if (Gap > GAP_BIG) Gap = GAP_BIG; else if (Gap < GAP_SMALL_NEGATIVE) Gap = GAP_SMALL_NEGATIVE; } else { if (Gap > GAP_SMALL) Gap = GAP_SMALL; else if (Gap < GAP_BIG_NEGATIVE) Gap = GAP_BIG_NEGATIVE; } Sample[BATTERY][Index] = Sample[BATTERY][Prev] + Gap; } else Sample[BATTERY][Index] = Value; if (++Index >= MAX_SAMPLES) Index = 0; BATTERY_SENSE_DISABLE(); EndAdcCycle(); //xSemaphoreGive() }
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; }