Example #1
0
// erase flash, make sure pointer is in the segment you wish to erase, otherwise you may erase you program or some data
void CCFlashClass::erase(unsigned char *flash)
{
  disableWatchDog();        // Disable WDT
  FCTL3 = FWKEY;            // Clear LOCK
  FCTL1 = FWKEY+ERASE;      //Enable segment erase
  *flash = 0;               // Dummy write, erase Segment
  FCTL3 = FWKEY+LOCK;       // Done, set LOCK
  enableWatchDog();         // Enable WDT
}
Example #2
0
// save in to flash (at segment boundary)
void CCFlashClass::write(unsigned char *flash, unsigned char *src, int len)
{
 disableWatchDog();        // Disable WDT
 FCTL3 = FWKEY;            // Clear LOCK
 FCTL1 = FWKEY+WRT;        // Enable write
 while(len--)      // Copy data
   *(flash++) = *(src++);
 FCTL1 = FWKEY;            //Done. Clear WRT
 FCTL3 = FWKEY+LOCK;       // Set LOCK
 enableWatchDog();         // Enable WDT
}
Example #3
0
/*
 * setNormalMode
 *
 * Revert from low power mode
 */
void CC430CORE::setNormalMode(void)
{
  // Configure PMM and SCLK for RF operation
  _SET_VCORE_8MHZ(1);
  
  // Enable WDT again
  enableWatchDog();

  // Recover old port selections
  P1SEL = portSelection[0];
  P2SEL = portSelection[1];
  P3SEL = portSelection[2];
}
Example #4
0
/**
 * sleepUntil
 * 
 * Put panStamp into Power-down state until the RTC alarm is triggered
 * Here the RTC module is used in calendar mode and hexadecimal format
 * This function uses RTC connected to an external 32.768KHz crystal
 * in order to exit (interrupt) from the power-down state
 * 
 * @param day Day of month (1 to 31)
 * @param dow Day of week (0 to 6)
 * @param hour Hour (0 to 23)
 * @param min Minutes day (0 to 59)
 */
void CC430RTC::sleepUntil(char day, char dow, char hour, char min) 
{
  if ((day < 0) && (dow < 0) && (hour < 0) && (min < 0))
    return;

  RTC_SET_ACLK_XT1();                 // Connect ACLK to 32.768 KHz crystal

  disableWatchDog();                  // Stop WDT

  if (day > 0)
  {
    RTC_SET_DAY_ALARM(day);
    RTC_ENABLE_DAY_ALARM();
  }
  else if (dow > 0)
  {
    RTC_SET_DOW_ALARM(dow);
    RTC_ENABLE_DOW_ALARM();
  }

  if (hour > 0)
  {
    RTC_SET_HOUR_ALARM(hour);
    RTC_ENABLE_HOUR_ALARM();
  }

  if (min > 0)
  {
    RTC_SET_MIN_ALARM(min);
    RTC_ENABLE_MIN_ALARM();
  }

  RTC_SET_CALENDAR_MODE();            // RTC set to calendar mode
  RTC_ENABLE_ALARM();                 // Enable RTC alarm
  RTC_ISR_ENABLE();                   // Enable RTC interrupt

  __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 with interrupts

  enableWatchDog();                   // Enable WDT again
}