XMEGA Application Note


lowpower_macros.h

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00062 #ifndef LOWPOWER_MACROS_H
00063 #define LOWPOWER_MACROS_H
00064 
00065 
00066 /*============================ MACROS ========================================*/
00068 #define DISABLE_JTAG( ) { \
00069         ENTER_CRITICAL_REGION(); \
00070         CCP = 0xD8; \
00071         MCU_MCUCR = MCU_JTAGD_bm; \
00072         LEAVE_CRITICAL_REGION(); \
00073 }
00074 
00076 #define __PORT_PULLUP(port, mask) { \
00077         PORTCFG.MPCMASK = mask ; \
00078         port.PIN0CTRL = PORT_OPC_PULLUP_gc; \
00079 }
00080 
00081 
00082 /* Create macros according to XMEGA device selection.
00083  *
00084  * Create macros that only set the PRR-bits for peripherals and enable pullup
00085  * on ports/pins that actually exist on the device, according to datasheets.
00086  * (This is a very cautious approach.)
00087  */
00088 
00089 // A1
00090 #if defined(__ATxmega64A1__) || defined(__ATxmega128A1__) || defined(__ATxmega192A1__) || defined(__ATxmega256A1__) || \
00091     defined(__AVR_ATxmega64A1__) || defined(__AVR_ATxmega128A1__) || defined(__AVR_ATxmega192A1__) || defined(__AVR_ATxmega256A1__)
00092 
00094 #define DISABLE_GEN( ) { \
00095         PR.PRGEN |= PR_AES_bm | PR_DMA_bm | PR_EBI_bm | PR_EVSYS_bm | PR_RTC_bm; \
00096 }
00097 
00101 #define DISABLE_TC( ) { \
00102         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00103         PR.PRPD |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00104         PR.PRPE |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00105         PR.PRPF |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00106 }
00107 
00109 #define DISABLE_COM( ) { \
00110         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00111         PR.PRPD |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00112         PR.PRPE |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00113         PR.PRPF |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00114 }
00115 
00117 #define DISABLE_ANLG( ) { \
00118         PR.PRPA |= PR_AC_bm | PR_ADC_bm | PR_DAC_bm; \
00119         PR.PRPB |= PR_AC_bm | PR_ADC_bm | PR_DAC_bm; \
00120 }
00121 
00123 #define ENABLE_PULLUP( ) { \
00124         __PORT_PULLUP(PORTA, 0xFF); \
00125         __PORT_PULLUP(PORTB, 0xFF); \
00126         __PORT_PULLUP(PORTC, 0xFF); \
00127         __PORT_PULLUP(PORTD, 0xFF); \
00128         __PORT_PULLUP(PORTE, 0xFF); \
00129         __PORT_PULLUP(PORTF, 0xFF); \
00130         __PORT_PULLUP(PORTH, 0xFF); \
00131         __PORT_PULLUP(PORTJ, 0xFF); \
00132         __PORT_PULLUP(PORTK, 0xFF); \
00133         __PORT_PULLUP(PORTQ, 0x0F); \
00134         __PORT_PULLUP(PORTR, 0x03); \
00135 }
00136 
00137 
00138 // A3
00139 #elif defined(__ATxmega64A3__) || defined(__ATxmega128A3__) || defined(__ATxmega192A3__) || defined(__ATxmega256A3__) || \
00140       defined(___AVR_ATxmega64A3__) || defined(__AVR_ATxmega128A3__) || defined(__AVR_ATxmega192A3__) || defined(__AVR_ATxmega256A3__)
00141 
00142 #define DISABLE_GEN( ) { \
00143         PR.PRGEN |= PR_AES_bm | PR_DMA_bm | PR_EVSYS_bm | PR_RTC_bm; \
00144 }
00145 
00146 #define DISABLE_TC( ) { \
00147         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00148         PR.PRPD |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00149         PR.PRPE |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00150         PR.PRPF |= PR_HIRES_bm | PR_TC0_bm; \
00151 }
00152 
00153 #define DISABLE_COM( ) { \
00154         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00155         PR.PRPD |= PR_SPI_bm | PR_USART0_bm | PR_USART1_bm; \
00156         PR.PRPE |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00157         PR.PRPF |= PR_USART0_bm; \
00158 }
00159 
00160 #define DISABLE_ANLG( ) { \
00161         PR.PRPA |= PR_AC_bm | PR_ADC_bm; \
00162         PR.PRPB |= PR_AC_bm | PR_ADC_bm | PR_DAC_bm; \
00163 }
00164 
00165 #define ENABLE_PULLUP( ) { \
00166         __PORT_PULLUP(PORTA, 0xFF); \
00167         __PORT_PULLUP(PORTB, 0xFF); \
00168         __PORT_PULLUP(PORTC, 0xFF); \
00169         __PORT_PULLUP(PORTD, 0xFF); \
00170         __PORT_PULLUP(PORTE, 0xFF); \
00171         __PORT_PULLUP(PORTF, 0xFF); \
00172         __PORT_PULLUP(PORTR, 0x03); \
00173 }
00174 
00175 
00176 // A3B
00177 #elif defined(__ATxmega256A3B__) || defined(__AVR_ATxmega256A3B__)
00178 
00179 #define DISABLE_GEN( ) { \
00180         PR.PRGEN |= PR_AES_bm | PR_DMA_bm | PR_EVSYS_bm | PR_RTC_bm; \
00181 }
00182 
00183 #define DISABLE_TC( ) { \
00184         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00185         PR.PRPD |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00186         PR.PRPE |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00187         PR.PRPF |= PR_HIRES_bm | PR_TC0_bm; \
00188 }
00189 
00190 #define DISABLE_COM( ) { \
00191         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00192         PR.PRPD |= PR_SPI_bm | PR_USART0_bm | PR_USART1_bm; \
00193         PR.PRPE |= PR_TWI_bm | PR_USART0_bm; \
00194         PR.PRPF |= PR_USART0_bm; \
00195 }
00196 
00197 #define DISABLE_ANLG( ) { \
00198         PR.PRPA |= PR_AC_bm | PR_ADC_bm; \
00199         PR.PRPB |= PR_AC_bm | PR_ADC_bm | PR_DAC_bm; \
00200 }
00201 
00202 #define ENABLE_PULLUP( ) { \
00203         __PORT_PULLUP(PORTA, 0xFF); \
00204         __PORT_PULLUP(PORTB, 0xFF); \
00205         __PORT_PULLUP(PORTC, 0xFF); \
00206         __PORT_PULLUP(PORTD, 0xFF); \
00207         __PORT_PULLUP(PORTE, 0xFF); \
00208         __PORT_PULLUP(PORTF, 0xDF); \
00209         __PORT_PULLUP(PORTR, 0x03); \
00210 }
00211 
00212 
00213 // A4
00214 #elif defined(__ATxmega16A4__) || defined(__ATxmega32A4__) || defined(__ATxmega64A4__) || defined(__ATxmega128A4__) || \
00215           defined(__AVR_ATxmega16A4__) || defined(__AVR_ATxmega32A4__) || defined(__AVR_ATxmega64A4__) || defined(__AVR_ATxmega128A4__)
00216 
00217 #define DISABLE_GEN( ) { \
00218         PR.PRGEN |= PR_AES_bm | PR_DMA_bm | PR_EVSYS_bm | PR_RTC_bm; \
00219 }
00220 
00221 #define DISABLE_TC( ) { \
00222         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00223         PR.PRPD |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00224         PR.PRPE |= PR_HIRES_bm | PR_TC0_bm; \
00225 }
00226 
00227 #define DISABLE_COM( ) { \
00228         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm | PR_USART1_bm; \
00229         PR.PRPD |= PR_SPI_bm | PR_USART0_bm | PR_USART1_bm; \
00230         PR.PRPE |= PR_TWI_bm | PR_USART0_bm; \
00231 }
00232 
00233 #define DISABLE_ANLG( ) { \
00234         PR.PRPA |= PR_AC_bm | PR_ADC_bm; \
00235         PR.PRPB |= PR_DAC_bm; \
00236 }
00237 
00238 #define ENABLE_PULLUP( ) { \
00239         __PORT_PULLUP(PORTA, 0xFF); \
00240         __PORT_PULLUP(PORTB, 0x0F); \
00241         __PORT_PULLUP(PORTC, 0xFF); \
00242         __PORT_PULLUP(PORTD, 0xFF); \
00243         __PORT_PULLUP(PORTE, 0x0F); \
00244         __PORT_PULLUP(PORTR, 0x03); \
00245 }
00246 
00247 
00248 // D3
00249 #elif defined(__ATxmega64D3__) || defined(__ATxmega128D3__) || defined(__ATxmega192D3__) || defined(__ATxmega256D3__) || \
00250           defined(__AVR_ATxmega64D3__) || defined(__AVR_ATxmega128D3__) || defined(__AVR_ATxmega192D3__) || defined(__AVR_ATxmega256D3__)
00251 #warning Macros for D3 may be outdated!
00252 
00253 #define DISABLE_GEN( ) { \
00254         PR.PRGEN |= PR_EVSYS_bm | PR_RTC_bm; \
00255 }
00256 
00257 #define DISABLE_TC( ) { \
00258         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00259         PR.PRPD |= PR_HIRES_bm | PR_TC0_bm; \
00260         PR.PRPE |= PR_HIRES_bm | PR_TC0_bm; \
00261         PR.PRPF |= PR_HIRES_bm | PR_TC0_bm; \
00262 }
00263 
00264 #define DISABLE_COM( ) { \
00265         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm; \
00266         PR.PRPD |= PR_SPI_bm | PR_USART0_bm; \
00267         PR.PRPE |= PR_USART0_bm; \
00268 }
00269 
00270 #define DISABLE_ANLG( ) { \
00271         PR.PRPA |= PR_AC_bm | PR_ADC_bm; \
00272 }
00273 
00274 #define ENABLE_PULLUP( ) { \
00275         __PORT_PULLUP(PORTA, 0xFF); \
00276         __PORT_PULLUP(PORTB, 0xFF); \
00277         __PORT_PULLUP(PORTC, 0xFF); \
00278         __PORT_PULLUP(PORTD, 0xFF); \
00279         __PORT_PULLUP(PORTE, 0xFF); \
00280         __PORT_PULLUP(PORTF, 0xFF); \
00281         __PORT_PULLUP(PORTR, 0x03); \
00282 }
00283 
00284 
00285 // D4
00286 #elif defined(__ATxmega16D4__) || defined(__ATxmega32D4__) || defined(__ATxmega64D4__) || \
00287           defined(__AVR_ATxmega16D4__) || defined(__AVR_ATxmega32D4__) || defined(__AVR_ATxmega64D4__)
00288 #warning Macros for D4 may be outdated!
00289 
00290 #define DISABLE_GEN( ) { \
00291         PR.PRGEN |= PR_EVSYS_bm | PR_RTC_bm; \
00292 }
00293 
00294 #define DISABLE_TC( ) { \
00295         PR.PRPC |= PR_HIRES_bm | PR_TC0_bm | PR_TC1_bm; \
00296         PR.PRPD |= PR_TC0_bm; \
00297         PR.PRPE |= PR_TC0_bm; \
00298 }
00299 
00300 #define DISABLE_COM( ) { \
00301         PR.PRPC |= PR_SPI_bm | PR_TWI_bm | PR_USART0_bm; \
00302         PR.PRPD |= PR_SPI_bm | PR_USART0_bm; \
00303 }
00304 
00305 #define DISABLE_ANLG( ) { \
00306         PR.PRPA |= PR_AC_bm | PR_ADC_bm; \
00307 }
00308 
00309 #define ENABLE_PULLUP( ) { \
00310         __PORT_PULLUP(PORTA, 0xFF); \
00311         __PORT_PULLUP(PORTB, 0x0F); \
00312         __PORT_PULLUP(PORTC, 0xFF); \
00313         __PORT_PULLUP(PORTD, 0xFF); \
00314         __PORT_PULLUP(PORTE, 0x0F); \
00315         __PORT_PULLUP(PORTR, 0x03); \
00316 }
00317 
00318 
00319 // Unsupported device!
00320 #else
00321 #error Device not supported by lowpower module!
00322 #endif // Device selection.
00323 
00324 
00325 #endif // LOWPOWER_MACROS_H
@DOC_TITLE@
Generated on Mon Nov 9 13:44:26 2009 for XMEGA power consumption evaluation code by doxygen 1.5.9