
Using DHT11 sensor, sdWrite, wdt. Need to sleep more then this.
Dependencies: DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed
ARCH_GPRS_Sleep.cpp
00001 #include "mbed.h" 00002 #include "ARCH_GPRS_Sleep.h" 00003 #include "ARCH_GPRS_HW.h" 00004 00005 void Stalker3_0_sleep::gotoSleep() // goto sleep mode, untill wdt interrupt 00006 { 00007 LPC_PMU->PCON |= 0x01; /* ????????? */ 00008 LPC_SYSCON->PDSLEEPCFG |= (1UL << 3); /* ??BOD??????? */ 00009 SCB->SCR &= ~(1UL << 2); /* ?????? */ 00010 __wfi(); 00011 } 00012 00013 void Stalker3_0_sleep::wdtClkSetup(unsigned long clksrc) 00014 { 00015 /* Freq = 0.5Mhz, div_sel is 0x1F, divided by 64. WDT_OSC should be 7.8125khz */ 00016 LPC_SYSCON->WDTOSCCTRL = (0x1<<5)|0x1F; 00017 LPC_SYSCON->PDRUNCFG &= ~(0x1<<6); /* Let WDT clock run */ 00018 00019 /* Enables clock for WDT */ 00020 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15); 00021 LPC_WWDT->CLKSEL = clksrc; /* Select clock source */ 00022 00023 } 00024 00025 void Stalker3_0_sleep::wdtInit(long tc) // init wdt 00026 { 00027 uint32_t regVal; 00028 00029 LPC_WWDT->TC = tc; 00030 00031 regVal = WDEN; 00032 LPC_WWDT->MOD = regVal; 00033 00034 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */ 00035 LPC_WWDT->FEED = 0x55; 00036 00037 NVIC_EnableIRQ(WDT_IRQn); 00038 NVIC_SetPriority(WDT_IRQn, 2); 00039 return; 00040 00041 } 00042 00043 void Stalker3_0_sleep::init() 00044 { 00045 00046 } 00047 00048 void Stalker3_0_sleep::sleep(long ts) // sleep for ts (s) 00049 { 00050 00051 workMode = MODE_SLEEP; 00052 wdtInit(0x2dc6c0); 00053 00054 for(int i=0; i<ts; i++) 00055 { 00056 gotoSleep(); 00057 } 00058 00059 workMode = MODE_WORKING; 00060 feed(); 00061 } 00062 00063 void Stalker3_0_sleep::wakeUp() // wake up from sleep 00064 { 00065 00066 } 00067 00068 void Stalker3_0_sleep::feed() // watch dog feed 00069 { 00070 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */ 00071 LPC_WWDT->FEED = 0x55; 00072 return; 00073 } 00074 00075 Stalker3_0_sleep wdt_sleep; 00076 00077 extern "C"{ 00078 00079 void WDT_IRQHandler(void) 00080 { 00081 00082 if(wdt_sleep.workMode == MODE_WORKING) // WORKING MODE, AND NO FEET WDT, RESET!!! 00083 { 00084 NVIC_SystemReset(); 00085 } 00086 LPC_WWDT->MOD &= ~WDTOF; /* clear the time-out flag and interrupt flag */ 00087 LPC_WWDT->MOD &= ~WDINT; /* clear the time-out flag and interrupt flag */ 00088 wdt_sleep.wdtInit(0x2dc6c0); 00089 } 00090 }
Generated on Thu Jul 14 2022 23:53:26 by
