needs more commenting, log file errors, LED feedback

Dependencies:   ARCH_GPRS_V2_HW Blinker GPRSInterface HTTPClient_GPRS RTC_WorkingLibrary SDFileSystem USBDevice mbed

Fork of finalv2 by Cellular building monitoring

Committer:
mbotkinl
Date:
Fri May 08 14:57:00 2015 +0000
Revision:
5:96d91bbd6c14
Parent:
0:77d82c39b97c
Final working version

Who changed what in which revision?

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