Contiki-Inga 3.x
xmega_powerreduction.c
1 #include <xmega_powerreduction.h>
2 
3 /*
4  #define __PORT_PULLUP(port, mask) { \
5  PORTCFG.MPCMASK = mask ; \
6  port.PIN0CTRL = PORT_OPC_PULLUP_gc; \
7  }
8 
9  __PORT_PULLUP(PORTA, 0xFC); // dont pullup LEDs here (0xFC)
10  __PORT_PULLUP(PORTB, 0xFF);
11  //__PORT_PULLUP(PORTC, 0xFF); // Dont pullup SPI
12  //__PORT_PULLUP(PORTD, 0xFF);
13  __PORT_PULLUP(PORTE, 0xFF);
14  __PORT_PULLUP(PORTF, 0xDF);
15  __PORT_PULLUP(PORTR, 0x03);
16  */
17 
18 void xmega_pr_set(uint8_t pr)
19 {
20  PR.PRGEN = pr;
21 }
22 
23 // Disable JTAG in SW Mode
24 void xmega_pr_jtag_enable()
25 {
26  MCU_MCUCR = MCU_JTAGD_bm;
27 }
28 
29 void xmega_pr_porta_set(uint8_t pr)
30 {
31  PR.PRPA = pr; // Power Reduction Port A
32 }
33 
34 void xmega_pr_portb_set(uint8_t pr)
35 {
36  PR.PRPB = pr; // Power Reduction Port B
37 }
38 
39 void xmega_pr_dac_enable(void)
40 {
41  xmega_pr_porta_set(PR_DAC_bm);
42  xmega_pr_portb_set(PR_DAC_bm);
43 }
44 
45 void xmega_pr_adc_enable(void)
46 {
47  xmega_pr_porta_set(PR_ADC_bm);
48  xmega_pr_portb_set(PR_ADC_bm);
49 }
50 
51 void xmega_pr_ac_enable(void)
52 {
53  xmega_pr_porta_set(PR_AC_bm);
54  xmega_pr_portb_set(PR_AC_bm);
55 }
56 
57 // Disable TWI on Port C,D,E,F
58 void xmega_pr_twi_enable(void)
59 {
60  PR.PRPC |= PR_TWI_bm;
61  PR.PRPD |= PR_TWI_bm;
62  PR.PRPE |= PR_TWI_bm;
63  PR.PRPF |= PR_TWI_bm;
64 }
65 
66 // Disable HiResolution Mode on Port C,D,E,F
67 void xmega_pr_hires_enable(void)
68 {
69  PR.PRPC |= PR_HIRES_bm;
70  PR.PRPD |= PR_HIRES_bm;
71  PR.PRPE |= PR_HIRES_bm;
72  PR.PRPF |= PR_HIRES_bm;
73 }
74 
75 void xmega_pr_usart1_enable(void)
76 {
77  PR.PRPC |= PR_USART1_bm;
78  PR.PRPD |= PR_USART1_bm;
79  PR.PRPE |= PR_USART1_bm;
80  PR.PRPF |= PR_USART1_bm;
81 }
82 
83 void xmega_pr_usart0_enable(void)
84 {
85  PR.PRPC |= PR_USART0_bm;
86  PR.PRPD |= PR_USART0_bm;
87  PR.PRPE |= PR_USART0_bm;
88  PR.PRPF |= PR_USART0_bm;
89 }
90 
91 void xmega_pr_tc1_enable(void)
92 {
93  PR.PRPC |= PR_TC1_bm;
94  PR.PRPD |= PR_TC1_bm;
95  PR.PRPE |= PR_TC1_bm;
96  PR.PRPF |= PR_TC1_bm;
97 }
98 
99 void xmega_pr_tc0_enable(void)
100 {
101  PR.PRPC |= PR_TC0_bm;
102  PR.PRPD |= PR_TC0_bm;
103  PR.PRPE |= PR_TC0_bm;
104  PR.PRPF |= PR_TC0_bm;
105 }
106 
107 void xmega_pr_spi_enable(void)
108 {
109  PR.PRPC |= PR_SPI_bm;
110  PR.PRPD |= PR_SPI_bm;
111  PR.PRPE |= PR_SPI_bm;
112  PR.PRPF |= PR_SPI_bm;
113 }
114 
115 void xmega_pr_nvm_enable(void)
116 {
117  NVM.CTRLB |= NVM_FPRM_bm | NVM_EPRM_bm; // Enable Flash and EEPROM Power Reduction
118 }
119 
120 void xmega_powerreduction_enable(void)
121 {
122  #if POWERREDUCTION_USB
123  xmega_pr_set(PR_USB_bm);
124  #endif
125 
126  #if POWERREDUCTION_AES
127  xmega_pr_set(PR_AES_bm);
128  #endif
129 
130  #if POWERREDUCTION_EBI
131  xmega_pr_set(PR_EBI_bm);
132  #endif
133 
134  #if POWERREDUCTION_DMA
135  xmega_pr_set(PR_DMA_bm);
136  #endif
137 
138  #if POWERREDUCTION_EVSYS
139  xmega_pr_set(PR_EVSYS_bm);
140  #endif
141 
142  #if POWERREDUCTION_RTC
143  xmega_pr_set(PR_RTC_bm);
144  #endif
145 
146  #ifdef PR_ENABLE
147  // power save modes
148  // xmega_pr_set(PR_USB_bm | PR_AES_bm | PR_EBI_bm | PR_DMA_bm | PR_EVSYS_bm); // PR_RTC_bm | PR_EVSYS_bm
149 
150  #endif
151 
152  #if POWERREDUCTION_DAC
153  xmega_pr_dac_enable();
154  #endif
155 
156  #if POWERREDUCTION_ADC
157  xmega_pr_adc_enable();
158  #endif
159 
160  #if POWERREDUCTION_AC
161  xmega_pr_ac_enable();
162  #endif
163 
164  #if POWERREDUCTION_TWI
165  xmega_pr_twi_enable();
166  #endif
167 
168  #if POWERREDUCTION_HIRES
169  xmega_pr_hires_enable();
170  #endif
171 
172  #if POWERREDUCTION_USART0
173  xmega_pr_usart0_enable();
174  #endif
175 
176  #if POWERREDUCTION_USART1
177  xmega_pr_usart1_enable();
178  #endif
179 
180  #if POWERREDUCTION_TC0
181  xmega_pr_tc0_enable();
182  #endif
183 
184  #if POWERREDUCTION_TC1
185  xmega_pr_tc1_enable();
186  #endif
187 
188  #if POWERREDUCTION_SPI
189  xmega_pr_spi_enable();
190  #endif
191 
192  /*
193  PR.PRPC |= PR_USART0_bm; // - SPI used for Radio Chip - TC0 used for contiki
194  PR.PRPD |= PR_TC0_bm | PR_USART0_bm | PR_SPI_bm;
195  PR.PRPE |= PR_TC0_bm | PR_SPI_bm; // PR_USART0 - Usart used as stdout
196  PR.PRPF |= PR_TC0_bm | PR_SPI_bm;
197  */
198 
199  // Enable JTag PowerReduction in SW Mode
200  #if POWERREDUCTION_JTAG
201  xmega_pr_jtag_enable();
202  #endif
203 }