source: rtos_arduino/trunk/arduino_lib/libraries/Rest/src/rest.cpp@ 136

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

ライブラリとOS及びベーシックなサンプルの追加.

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