void Board::sleep(void) { if (sleepMode_ == SleepMode_None) { SysCtrlSleep(); } else { SysCtrlPowerModeSet(sleepMode_); SysCtrlDeepSleep(); } }
void zclEnergyHarvester_Init( byte task_id ) { zclEnergyHarvester_TaskID = task_id; // This app is part of the Home Automation Profile zclHA_Init( &zclSampleLight_SimpleDesc ); // Register for a test endpoint afRegister( &testEp ); zcl_registerPlugin( ZCL_CLUSTER_ID_MS_ILLUMINANCE_MEASUREMENT, ZCL_CLUSTER_ID_MS_ALL, zclEnergyHarvester_HdlIncoming ); ZDO_RegisterForZDOMsg( zclEnergyHarvester_TaskID, End_Device_Bind_rsp ); #if DEV_TYPE == COORDINATOR ZDO_RegisterForZDOMsg( zclEnergyHarvester_TaskID, Device_annce ); #else adc_Init(); // Configure signal from off-chip timer to be wake-up signal GPIODirModeSet( GPIO_B_BASE, GPIO_PIN_3 , GPIO_DIR_MODE_IN ); // Configure deep sleep in power mode 3, woken up by off-chip timer SysCtrlDeepSleepSetting(); SysCtrlPowerModeSet( SYS_CTRL_PM_3 ); GPIODirModeSet( GPIO_B_BASE, GPIO_PIN_4 , GPIO_DIR_MODE_IN ); HWREG( SYS_CTRL_IWE ) = 0x02; GPIOPowIntTypeSet( GPIO_B_BASE, GPIO_PIN_4, GPIO_POW_RISING_EDGE ); GPIOPowIntClear( GPIO_B_BASE, GPIO_PIN_4 ); GPIOPowIntEnable( GPIO_B_BASE, GPIO_PIN_4 ); // Done with off-chip timer acknowledge GPIOPinWrite( GPIO_B_BASE, GPIO_PIN_5, GPIO_PIN_5 ); #endif }
/** * Puts the board to sleep */ void board_sleep() { SysCtrlPowerModeSet(SYS_CTRL_PM_NOACTION); SysCtrlSleep(); }
//***************************************************************************** // // Configure sleep timer, put system into deep sleep and watch sleep timer // interrupt wakeup system again // //***************************************************************************** int main(void) { uint32_t ui32Val; // // Set the clocking to run directly from the external crystal/oscillator. // (no ext 32k osc, no internal osc) // SysCtrlClockSet(false, false, SYS_CTRL_SYSDIV_32MHZ); // // Set IO clock to the same as system clock // SysCtrlIOClockSet(SYS_CTRL_SYSDIV_32MHZ); // // Set up the serial console to use for displaying messages. This is // just for this example program and is not needed for SSI operation. // InitConsole(); // // Display the setup on the console. // UARTprintf("Sleepmode timer\n"); // // Disable UART0 when in deep sleep // SysCtrlPeripheralDeepSleepDisable(SYS_CTRL_PERIPH_UART0); // // Let system enter powermode 2 when going to deep sleep // SysCtrlPowerModeSet(SYS_CTRL_PM_2); // // Enable the Sleep Timer wakeup // GPIOIntWakeupEnable(GPIO_IWE_SM_TIMER); // // Enable sleep mode interrupt // IntEnable(INT_SMTIM); // // Set timer to 10000 above current value // ui32Val = SleepModeTimerCountGet(); SleepModeTimerCompareSet(ui32Val + 10000); // // Display the timer value on the console. // UARTprintf("Timer val = %d\n", ui32Val); // // Wait for UART to be flushed // while(UARTBusy(UART0_BASE)) { } // // Go to sleep // SysCtrlDeepSleep(); // // Display the timer value on the console. // ui32Val = SleepModeTimerCountGet(); UARTprintf("Timer val = %d (after wakeup)\n", ui32Val); // // Done - enter an infinite loop. // while(1) { } }