Using DHT11 sensor, sdWrite, wdt. Need to sleep more then this.

Dependencies:   DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed

Committer:
seedteam20
Date:
Wed Apr 01 16:16:13 2015 +0000
Revision:
0:b6b64c1e74bb
Using DHT11 sensor and wdt. Not fully going to sleep.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seedteam20 0:b6b64c1e74bb 1 #include "mbed.h"
seedteam20 0:b6b64c1e74bb 2 #include "ARCH_GPRS_Sleep.h"
seedteam20 0:b6b64c1e74bb 3 #include "ARCH_GPRS_HW.h"
seedteam20 0:b6b64c1e74bb 4
seedteam20 0:b6b64c1e74bb 5 void Stalker3_0_sleep::gotoSleep() // goto sleep mode, untill wdt interrupt
seedteam20 0:b6b64c1e74bb 6 {
seedteam20 0:b6b64c1e74bb 7 LPC_PMU->PCON |= 0x01; /* ????????? */
seedteam20 0:b6b64c1e74bb 8 LPC_SYSCON->PDSLEEPCFG |= (1UL << 3); /* ??BOD??????? */
seedteam20 0:b6b64c1e74bb 9 SCB->SCR &= ~(1UL << 2); /* ?????? */
seedteam20 0:b6b64c1e74bb 10 __wfi();
seedteam20 0:b6b64c1e74bb 11 }
seedteam20 0:b6b64c1e74bb 12
seedteam20 0:b6b64c1e74bb 13 void Stalker3_0_sleep::wdtClkSetup(unsigned long clksrc)
seedteam20 0:b6b64c1e74bb 14 {
seedteam20 0:b6b64c1e74bb 15 /* Freq = 0.5Mhz, div_sel is 0x1F, divided by 64. WDT_OSC should be 7.8125khz */
seedteam20 0:b6b64c1e74bb 16 LPC_SYSCON->WDTOSCCTRL = (0x1<<5)|0x1F;
seedteam20 0:b6b64c1e74bb 17 LPC_SYSCON->PDRUNCFG &= ~(0x1<<6); /* Let WDT clock run */
seedteam20 0:b6b64c1e74bb 18
seedteam20 0:b6b64c1e74bb 19 /* Enables clock for WDT */
seedteam20 0:b6b64c1e74bb 20 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15);
seedteam20 0:b6b64c1e74bb 21 LPC_WWDT->CLKSEL = clksrc; /* Select clock source */
seedteam20 0:b6b64c1e74bb 22
seedteam20 0:b6b64c1e74bb 23 }
seedteam20 0:b6b64c1e74bb 24
seedteam20 0:b6b64c1e74bb 25 void Stalker3_0_sleep::wdtInit(long tc) // init wdt
seedteam20 0:b6b64c1e74bb 26 {
seedteam20 0:b6b64c1e74bb 27 uint32_t regVal;
seedteam20 0:b6b64c1e74bb 28
seedteam20 0:b6b64c1e74bb 29 LPC_WWDT->TC = tc;
seedteam20 0:b6b64c1e74bb 30
seedteam20 0:b6b64c1e74bb 31 regVal = WDEN;
seedteam20 0:b6b64c1e74bb 32 LPC_WWDT->MOD = regVal;
seedteam20 0:b6b64c1e74bb 33
seedteam20 0:b6b64c1e74bb 34 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */
seedteam20 0:b6b64c1e74bb 35 LPC_WWDT->FEED = 0x55;
seedteam20 0:b6b64c1e74bb 36
seedteam20 0:b6b64c1e74bb 37 NVIC_EnableIRQ(WDT_IRQn);
seedteam20 0:b6b64c1e74bb 38 NVIC_SetPriority(WDT_IRQn, 2);
seedteam20 0:b6b64c1e74bb 39 return;
seedteam20 0:b6b64c1e74bb 40
seedteam20 0:b6b64c1e74bb 41 }
seedteam20 0:b6b64c1e74bb 42
seedteam20 0:b6b64c1e74bb 43 void Stalker3_0_sleep::init()
seedteam20 0:b6b64c1e74bb 44 {
seedteam20 0:b6b64c1e74bb 45
seedteam20 0:b6b64c1e74bb 46 }
seedteam20 0:b6b64c1e74bb 47
seedteam20 0:b6b64c1e74bb 48 void Stalker3_0_sleep::sleep(long ts) // sleep for ts (s)
seedteam20 0:b6b64c1e74bb 49 {
seedteam20 0:b6b64c1e74bb 50
seedteam20 0:b6b64c1e74bb 51 workMode = MODE_SLEEP;
seedteam20 0:b6b64c1e74bb 52 wdtInit(0x2dc6c0);
seedteam20 0:b6b64c1e74bb 53
seedteam20 0:b6b64c1e74bb 54 for(int i=0; i<ts; i++)
seedteam20 0:b6b64c1e74bb 55 {
seedteam20 0:b6b64c1e74bb 56 gotoSleep();
seedteam20 0:b6b64c1e74bb 57 }
seedteam20 0:b6b64c1e74bb 58
seedteam20 0:b6b64c1e74bb 59 workMode = MODE_WORKING;
seedteam20 0:b6b64c1e74bb 60 feed();
seedteam20 0:b6b64c1e74bb 61 }
seedteam20 0:b6b64c1e74bb 62
seedteam20 0:b6b64c1e74bb 63 void Stalker3_0_sleep::wakeUp() // wake up from sleep
seedteam20 0:b6b64c1e74bb 64 {
seedteam20 0:b6b64c1e74bb 65
seedteam20 0:b6b64c1e74bb 66 }
seedteam20 0:b6b64c1e74bb 67
seedteam20 0:b6b64c1e74bb 68 void Stalker3_0_sleep::feed() // watch dog feed
seedteam20 0:b6b64c1e74bb 69 {
seedteam20 0:b6b64c1e74bb 70 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */
seedteam20 0:b6b64c1e74bb 71 LPC_WWDT->FEED = 0x55;
seedteam20 0:b6b64c1e74bb 72 return;
seedteam20 0:b6b64c1e74bb 73 }
seedteam20 0:b6b64c1e74bb 74
seedteam20 0:b6b64c1e74bb 75 Stalker3_0_sleep wdt_sleep;
seedteam20 0:b6b64c1e74bb 76
seedteam20 0:b6b64c1e74bb 77 extern "C"{
seedteam20 0:b6b64c1e74bb 78
seedteam20 0:b6b64c1e74bb 79 void WDT_IRQHandler(void)
seedteam20 0:b6b64c1e74bb 80 {
seedteam20 0:b6b64c1e74bb 81
seedteam20 0:b6b64c1e74bb 82 if(wdt_sleep.workMode == MODE_WORKING) // WORKING MODE, AND NO FEET WDT, RESET!!!
seedteam20 0:b6b64c1e74bb 83 {
seedteam20 0:b6b64c1e74bb 84 NVIC_SystemReset();
seedteam20 0:b6b64c1e74bb 85 }
seedteam20 0:b6b64c1e74bb 86 LPC_WWDT->MOD &= ~WDTOF; /* clear the time-out flag and interrupt flag */
seedteam20 0:b6b64c1e74bb 87 LPC_WWDT->MOD &= ~WDINT; /* clear the time-out flag and interrupt flag */
seedteam20 0:b6b64c1e74bb 88 wdt_sleep.wdtInit(0x2dc6c0);
seedteam20 0:b6b64c1e74bb 89 }
seedteam20 0:b6b64c1e74bb 90 }