This is the code used on my video series "Hybrid Supercapacitor Car Battery" for my own hardware monitoring system. THe videos can be found on madelectronengineering.com

Dependencies:   BurstSPI Fonts INA219 mbed LPC1114_WakeInterruptIn

Fork of SharpMemoryLCD by Paul Staron

Committer:
madelectroneng
Date:
Tue Dec 26 21:30:09 2017 +0000
Revision:
2:0c49a8f32f6e
Inital setup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madelectroneng 2:0c49a8f32f6e 1 #ifdef TARGET_LPC812
madelectroneng 2:0c49a8f32f6e 2
madelectroneng 2:0c49a8f32f6e 3 #include "WakeUp.h"
madelectroneng 2:0c49a8f32f6e 4
madelectroneng 2:0c49a8f32f6e 5 Callback<void()> WakeUp::callback;
madelectroneng 2:0c49a8f32f6e 6 float WakeUp::cycles_per_ms = 10.0;
madelectroneng 2:0c49a8f32f6e 7
madelectroneng 2:0c49a8f32f6e 8 void WakeUp::set_ms(uint32_t ms)
madelectroneng 2:0c49a8f32f6e 9 {
madelectroneng 2:0c49a8f32f6e 10 //Enable clock to register interface:
madelectroneng 2:0c49a8f32f6e 11 LPC_SYSCON->SYSAHBCLKCTRL |= 1<<9;
madelectroneng 2:0c49a8f32f6e 12
madelectroneng 2:0c49a8f32f6e 13 //Clear the counter:
madelectroneng 2:0c49a8f32f6e 14 LPC_WKT->CTRL |= 1<<2;
madelectroneng 2:0c49a8f32f6e 15 if (ms != 0) {
madelectroneng 2:0c49a8f32f6e 16 //Enable clock to register interface:
madelectroneng 2:0c49a8f32f6e 17 LPC_SYSCON->SYSAHBCLKCTRL |= 1<<9;
madelectroneng 2:0c49a8f32f6e 18
madelectroneng 2:0c49a8f32f6e 19 //Set 10kHz timer as source, and just to be sure clear status bit
madelectroneng 2:0c49a8f32f6e 20 LPC_WKT->CTRL = 3;
madelectroneng 2:0c49a8f32f6e 21
madelectroneng 2:0c49a8f32f6e 22 //Enable the 10kHz timer
madelectroneng 2:0c49a8f32f6e 23 LPC_PMU->DPDCTRL |= (1<<2) | (1<<3);
madelectroneng 2:0c49a8f32f6e 24
madelectroneng 2:0c49a8f32f6e 25 //Set interrupts
madelectroneng 2:0c49a8f32f6e 26 NVIC_SetVector(WKT_IRQn, (uint32_t)WakeUp::irq_handler);
madelectroneng 2:0c49a8f32f6e 27 NVIC_EnableIRQ(WKT_IRQn);
madelectroneng 2:0c49a8f32f6e 28
madelectroneng 2:0c49a8f32f6e 29 //Load the timer
madelectroneng 2:0c49a8f32f6e 30 LPC_WKT->COUNT = (uint32_t)((float)ms * cycles_per_ms);
madelectroneng 2:0c49a8f32f6e 31
madelectroneng 2:0c49a8f32f6e 32 } else {
madelectroneng 2:0c49a8f32f6e 33 //Disable clock to register interface:
madelectroneng 2:0c49a8f32f6e 34 LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<9);
madelectroneng 2:0c49a8f32f6e 35
madelectroneng 2:0c49a8f32f6e 36 //Disable the 10kHz timer
madelectroneng 2:0c49a8f32f6e 37 LPC_PMU->DPDCTRL &= ~((1<<2) | (1<<3));
madelectroneng 2:0c49a8f32f6e 38 }
madelectroneng 2:0c49a8f32f6e 39 }
madelectroneng 2:0c49a8f32f6e 40
madelectroneng 2:0c49a8f32f6e 41 void WakeUp::irq_handler(void)
madelectroneng 2:0c49a8f32f6e 42 {
madelectroneng 2:0c49a8f32f6e 43 //Clear status
madelectroneng 2:0c49a8f32f6e 44 LPC_WKT->CTRL |= 2;
madelectroneng 2:0c49a8f32f6e 45
madelectroneng 2:0c49a8f32f6e 46 //Disable clock to register interface:
madelectroneng 2:0c49a8f32f6e 47 LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<9);
madelectroneng 2:0c49a8f32f6e 48
madelectroneng 2:0c49a8f32f6e 49 //Disable the 10kHz timer
madelectroneng 2:0c49a8f32f6e 50 LPC_PMU->DPDCTRL &= ~((1<<2) | (1<<3));
madelectroneng 2:0c49a8f32f6e 51
madelectroneng 2:0c49a8f32f6e 52 callback.call();
madelectroneng 2:0c49a8f32f6e 53 }
madelectroneng 2:0c49a8f32f6e 54
madelectroneng 2:0c49a8f32f6e 55 void WakeUp::calibrate(void)
madelectroneng 2:0c49a8f32f6e 56 {
madelectroneng 2:0c49a8f32f6e 57 cycles_per_ms = 10.0;
madelectroneng 2:0c49a8f32f6e 58 set_ms(1100);
madelectroneng 2:0c49a8f32f6e 59 wait_ms(100);
madelectroneng 2:0c49a8f32f6e 60
madelectroneng 2:0c49a8f32f6e 61 uint32_t prevread = LPC_WKT->COUNT;
madelectroneng 2:0c49a8f32f6e 62 uint32_t read = LPC_WKT->COUNT;
madelectroneng 2:0c49a8f32f6e 63 while( read != prevread) {
madelectroneng 2:0c49a8f32f6e 64 prevread = read;
madelectroneng 2:0c49a8f32f6e 65 read = LPC_WKT->COUNT;
madelectroneng 2:0c49a8f32f6e 66 }
madelectroneng 2:0c49a8f32f6e 67
madelectroneng 2:0c49a8f32f6e 68 uint32_t ticks = 11000 - read;
madelectroneng 2:0c49a8f32f6e 69
madelectroneng 2:0c49a8f32f6e 70 cycles_per_ms = ticks / 100.0;
madelectroneng 2:0c49a8f32f6e 71 set_ms(0);
madelectroneng 2:0c49a8f32f6e 72 }
madelectroneng 2:0c49a8f32f6e 73
madelectroneng 2:0c49a8f32f6e 74 #endif