source: rtos_arduino/trunk/arduino_lib/hardware/arduino/samd/libraries/EnergySaving/src/EnergySaving.cpp@ 224

Last change on this file since 224 was 224, checked in by ertl-honda, 8 years ago

1.7.10のファイルに更新

File size: 2.4 KB
Line 
1#include "EnergySaving.h"
2
3void EnergySaving::begin(unsigned int mode, unsigned int inter_pin, voidFuncPtr callback)
4{
5 if((mode == WAKE_EXT_INTERRUPT) && (inter_pin !=2) && (inter_pin!=0) && (inter_pin!=1))
6 {
7 NVMCTRL->CTRLB.bit.SLEEPPRM = 3;
8
9 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
10 pinMode(inter_pin,INPUT_PULLUP);
11
12 attachInterrupt(inter_pin,callback, CHANGE);
13 enable_eic_wake(inter_pin);
14 set_clk();
15
16 }
17 else return;
18}
19
20
21void EnergySaving::begin(unsigned int mode)
22{
23 if(mode == WAKE_RTC_ALARM)
24 {
25 //RTCInt.begin(TIME_H24);
26
27 GCLK->CLKCTRL.bit.CLKEN = 0; //disable GCLK module
28 while (GCLK->STATUS.bit.SYNCBUSY);
29
30 GCLK->GENCTRL.bit.RUNSTDBY = 1; //GCLK6 run standby
31 while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY);
32
33 GCLK->CLKCTRL.bit.CLKEN = 1; //disable GCLK module
34 while (GCLK->STATUS.bit.SYNCBUSY);
35
36 NVMCTRL->CTRLB.bit.SLEEPPRM = 3;
37
38 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
39
40 }
41 else return;
42
43}
44
45
46void EnergySaving::standby(void)
47{
48 __DSB();
49 __WFI();
50
51}
52
53
54void EnergySaving::set_clk(void)
55{
56 GCLK->CLKCTRL.bit.CLKEN = 0; //disable GCLK module
57 while (GCLK->STATUS.bit.SYNCBUSY);
58
59 GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK6 | GCLK_CLKCTRL_ID( GCM_EIC )) ; //EIC clock switched on GCLK6
60 while (GCLK->STATUS.bit.SYNCBUSY);
61
62 GCLK->GENCTRL.reg = (GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_OSCULP32K | GCLK_GENCTRL_ID(6)); //source for GCLK6 is OSCULP32K
63 while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY);
64
65 GCLK->GENCTRL.bit.RUNSTDBY = 1; //GCLK6 run standby
66 while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY);
67
68}
69
70
71void EnergySaving::enable_eic_wake(unsigned int inter_pin)
72{
73 switch(inter_pin)
74 {
75 case 3:
76 EIC->WAKEUP.bit.WAKEUPEN9 = 1;
77 break;
78 case 4:
79 EIC->WAKEUP.bit.WAKEUPEN14 = 1;
80 break;
81 case 5:
82 EIC->WAKEUP.bit.WAKEUPEN15 = 1;
83 break;
84 case 6:
85 //EIC->WAKEUP.bit.WAKEUPEN20 = 1; //non si pu嘆 usare
86 break;
87 case 7:
88 //EIC->WAKEUP.bit.WAKEUPEN21 = 1; //non si pu嘆 usare
89 break;
90 case 8:
91 EIC->WAKEUP.bit.WAKEUPEN6 = 1;
92 break;
93 case 9:
94 EIC->WAKEUP.bit.WAKEUPEN7 = 1;
95 break;
96 case 10:
97 //EIC->WAKEUP.bit.WAKEUPEN18 = 1; //non si pu嘆 usare
98 break;
99 case 11:
100 //EIC->WAKEUP.bit.WAKEUPEN16 = 1; //non c'竪
101 break;
102 case 12:
103 //EIC->WAKEUP.bit.WAKEUPEN19 = 1; //non si pu嘆 usare
104 break;
105 case 13:
106 //EIC->WAKEUP.bit.WAKEUPEN17 = 1; //non c'竪
107 break;
108 default:
109 break;
110 }
111}
Note: See TracBrowser for help on using the repository browser.