yoshi kuwae yoshi
/
DeepSleep-m0-wdt
a
Fork of DeepSleep-m0-wdt by
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); 00004 00005 Serial pc(USBTX, USBRX); 00006 00007 extern "C" 00008 void WDT_IRQHandler(void) { 00009 LPC_WWDT->MOD |= (1<<3); 00010 LPC_WWDT->MOD &= ~(1<<2); 00011 led2 = !led2; 00012 } 00013 00014 void initWDT (float s) { 00015 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15); 00016 LPC_SYSCON->PDRUNCFG &= ~(1<<6); // WDT on 00017 LPC_SYSCON->PDSLEEPCFG &= ~(1<<6); // WDT on 00018 LPC_SYSCON->WDTOSCCTRL = (1<<5)|(0x1f<<0); // 500kHz / 64 00019 00020 LPC_WWDT->CLKSEL = (1<<0); // Set CLK src to PCLK 00021 uint32_t clk = 500000 / 64 / 4; // WD has a fixed /4 prescaler, PCLK default is /4 00022 LPC_WWDT->TC = s * (float)clk; 00023 LPC_WWDT->WARNINT = 0; 00024 LPC_WWDT->MOD = (1<<0); // Enabled but Reset disable 00025 00026 LPC_WWDT->FEED = 0xAA; 00027 LPC_WWDT->FEED = 0x55; 00028 00029 LPC_SYSCON->STARTERP1 |= (1<<12); 00030 NVIC_ClearPendingIRQ(WDT_IRQn); 00031 NVIC_EnableIRQ(WDT_IRQn); 00032 } 00033 00034 void PowerDown () { 00035 LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; 00036 LPC_PMU->PCON = (2<<0); 00037 SCB->SCR |= (1<<2); 00038 __WFI(); 00039 } 00040 00041 void DeepSleep () { 00042 LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; 00043 LPC_PMU->PCON = (1<<0); 00044 SCB->SCR |= (1<<2); 00045 __WFI(); 00046 } 00047 00048 void Sleep () { 00049 LPC_PMU->PCON = 0; 00050 SCB->SCR &= ~(1<<2); 00051 __WFI(); 00052 } 00053 00054 int main() { 00055 int i; 00056 00057 pc.baud(9600); 00058 pc.printf("low power\r\n"); 00059 00060 for (i = 0; i < 6; i ++) { 00061 led1 = !led1; 00062 wait(0.2); 00063 } 00064 00065 for (;;) { 00066 00067 pc.printf("enter sleep\r\n"); 00068 wait_ms(10); 00069 00070 initWDT(1); 00071 wait_ms(10); 00072 // Sleep(); 00073 DeepSleep(); 00074 // PowerDown(); 00075 00076 pc.printf("wake up\r\n"); 00077 for (i = 0; i < 6; i ++) { 00078 led1 = !led1; 00079 wait(0.2); 00080 } 00081 00082 for (;;); 00083 00084 } 00085 }
Generated on Tue Jul 12 2022 17:54:45 by 1.7.2