AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page User Manual Library Reference FAQ Alphabetical Index Example Projects

power.h

このファイルのドキュメントを参照する
00001 /* Copyright (c) 2006, 2007, 2008  Eric B. Weddington
00002    All rights reserved.
00003 
00004    Redistribution and use in source and binary forms, with or without
00005    modification, are permitted provided that the following conditions are met:
00006 
00007    * Redistributions of source code must retain the above copyright
00008      notice, this list of conditions and the following disclaimer.
00009    * Redistributions in binary form must reproduce the above copyright
00010      notice, this list of conditions and the following disclaimer in
00011      the documentation and/or other materials provided with the
00012      distribution.
00013    * Neither the name of the copyright holders nor the names of
00014      contributors may be used to endorse or promote products derived
00015      from this software without specific prior written permission.
00016 
00017   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00021   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00022   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00023   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00024   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00025   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00026   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00027   POSSIBILITY OF SUCH DAMAGE. */
00028 
00029 /* $Id: power.h 2213 2011-02-16 08:44:23Z aboyapati $ */
00030 
00031 #ifndef _AVR_POWER_H_
00032 #define _AVR_POWER_H_   1
00033 
00034 #include <avr/io.h>
00035 #include <stdint.h>
00036 
00037 
00038 /** \file */
00039 /** \defgroup avr_power <avr/power.h>: Power Reduction Management
00040 
00041 \code #include <avr/power.h>\endcode
00042 
00043 Many AVRs contain a Power Reduction Register (PRR) or Registers (PRRx) that 
00044 allow you to reduce power consumption by disabling or enabling various on-board 
00045 peripherals as needed.
00046 
00047 There are many macros in this header file that provide an easy interface
00048 to enable or disable on-board peripherals to reduce power. See the table below.
00049 
00050 \note Not all AVR devices have a Power Reduction Register (for example
00051 the ATmega128). On those devices without a Power Reduction Register, these 
00052 macros are not available.
00053 
00054 \note Not all AVR devices contain the same peripherals (for example, the LCD
00055 interface), or they will be named differently (for example, USART and 
00056 USART0). Please consult your device's datasheet, or the header file, to 
00057 find out which macros are applicable to your device.
00058 
00059 */
00060 
00061 
00062 /** \addtogroup avr_power
00063 
00064 \anchor avr_powermacros
00065 <small>
00066 <center>
00067 <table border="3">
00068   <tr>
00069     <td width="10%"><strong>Power Macro</strong></td>
00070     <td width="15%"><strong>Description</strong></td>
00071     <td width="75%"><strong>Applicable for device</strong></td>
00072   </tr>
00073 
00074   <tr>
00075     <td>power_adc_enable()</td>
00076     <td>Enable the Analog to Digital Converter module.</td>
00077     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00078   </tr>
00079 
00080   <tr>
00081     <td>power_adc_disable()</td>
00082     <td>Disable the Analog to Digital Converter module.</td>
00083     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00084   </tr>
00085 
00086   <tr>
00087     <td>power_lcd_enable()</td>
00088     <td>Enable the LCD module.</td>
00089     <td>ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490</td>
00090   </tr>
00091 
00092   <tr>
00093     <td>power_lcd_disable().</td>
00094     <td>Disable the LCD module.</td>
00095     <td>ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490</td>
00096   </tr>
00097 
00098   <tr>
00099     <td>power_pscr_enable()</td>
00100     <td>Enable the Reduced Power Stage Controller module.</td>
00101     <td>AT90PWM81</td>
00102   </tr>
00103 
00104   <tr>
00105     <td>power_pscr_disable()</td>
00106     <td>Disable the Reduced Power Stage Controller module.</td>
00107     <td>AT90PWM81</td>
00108   </tr>
00109 
00110   <tr>
00111     <td>power_psc0_enable()</td>
00112     <td>Enable the Power Stage Controller 0 module.</td>
00113     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00114   </tr>
00115 
00116   <tr>
00117     <td>power_psc0_disable()</td>
00118     <td>Disable the Power Stage Controller 0 module.</td>
00119     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00120   </tr>
00121 
00122   <tr>
00123     <td>power_psc1_enable()</td>
00124     <td>Enable the Power Stage Controller 1 module.</td>
00125     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00126   </tr>
00127 
00128   <tr>
00129     <td>power_psc1_disable()</td>
00130     <td>Disable the Power Stage Controller 1 module.</td>
00131     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00132   </tr>
00133 
00134   <tr>
00135     <td>power_psc2_enable()</td>
00136     <td>Enable the Power Stage Controller 2 module.</td>
00137     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM81</td>
00138   </tr>
00139 
00140   <tr>
00141     <td>power_psc2_disable()</td>
00142     <td>Disable the Power Stage Controller 2 module.</td>
00143     <td>AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM81</td>
00144   </tr>
00145 
00146   <tr>
00147     <td>power_spi_enable()</td>
00148     <td>Enable the Serial Peripheral Interface module.</td>
00149     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00150   </tr>
00151 
00152   <tr>
00153     <td>power_spi_disable()</td>
00154     <td>Disable the Serial Peripheral Interface module.</td>
00155     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00156   </tr>
00157 
00158   <tr>
00159     <td>power_timer0_enable()</td>
00160     <td>Enable the Timer 0 module.</td>
00161     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM216, AT90PWM316, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00162   </tr>
00163 
00164   <tr>
00165     <td>power_timer0_disable()</td>
00166     <td>Disable the Timer 0 module.</td>
00167     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00168   </tr>
00169 
00170   <tr>
00171     <td>power_timer1_enable()</td>
00172     <td>Enable the Timer 1 module.</td>
00173     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00174   </tr>
00175 
00176   <tr>
00177     <td>power_timer1_disable()</td>
00178     <td>Disable the Timer 1 module.</td>
00179     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00180   </tr>
00181 
00182   <tr>
00183     <td>power_timer2_enable()</td>
00184     <td>Enable the Timer 2 module.</td>
00185     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00186   </tr>
00187 
00188   <tr>
00189     <td>power_timer2_disable()</td>
00190     <td>Disable the Timer 2 module.</td>
00191     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00192   </tr>
00193 
00194   <tr>
00195     <td>power_timer3_enable()</td>
00196     <td>Enable the Timer 3 module.</td>
00197     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287</td>
00198   </tr>
00199 
00200   <tr>
00201     <td>power_timer3_disable()</td>
00202     <td>Disable the Timer 3 module.</td>
00203     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287</td>
00204   </tr>
00205 
00206   <tr>
00207     <td>power_timer4_enable()</td>
00208     <td>Enable the Timer 4 module.</td>
00209     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561</td>
00210   </tr>
00211 
00212   <tr>
00213     <td>power_timer4_disable()</td>
00214     <td>Disable the Timer 4 module.</td>
00215     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561</td>
00216   </tr>
00217 
00218   <tr>
00219     <td>power_timer5_enable()</td>
00220     <td>Enable the Timer 5 module.</td>
00221     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561</td>
00222   </tr>
00223 
00224   <tr>
00225     <td>power_timer5_disable()</td>
00226     <td>Disable the Timer 5 module.</td>
00227     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561</td>
00228   </tr>
00229 
00230   <tr>
00231     <td>power_twi_enable()</td>
00232     <td>Enable the Two Wire Interface module.</td>
00233     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168</td>
00234   </tr>
00235 
00236   <tr>
00237     <td>power_twi_disable()</td>
00238     <td>Disable the Two Wire Interface module.</td>
00239     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168</td>
00240   </tr>
00241 
00242   <tr>
00243     <td>power_usart_enable()</td>
00244     <td>Enable the USART module.</td>
00245     <td>AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00246   </tr>
00247 
00248   <tr>
00249     <td>power_usart_disable()</td>
00250     <td>Disable the USART module.</td>
00251     <td>AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B</td>
00252   </tr>
00253 
00254   <tr>
00255     <td>power_usart0_enable()</td>
00256     <td>Enable the USART 0 module.</td>
00257     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00258   </tr>
00259 
00260   <tr>
00261     <td>power_usart0_disable()</td>
00262     <td>Disable the USART 0 module.</td>
00263     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega3250A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega48, ATmega88, ATmega168</td>
00264   </tr>
00265 
00266   <tr>
00267     <td>power_usart1_enable()</td>
00268     <td>Enable the USART 1 module.</td>
00269     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644</td>
00270   </tr>
00271 
00272   <tr>
00273     <td>power_usart1_disable()</td>
00274     <td>Disable the USART 1 module.</td>
00275     <td>ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATmega164P, ATmega324P, ATmega644</td>
00276   </tr>
00277 
00278   <tr>
00279     <td>power_usart2_enable()</td>
00280     <td>Enable the USART 2 module.</td>
00281     <td>ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561</td>
00282   </tr>
00283 
00284   <tr>
00285     <td>power_usart2_disable()</td>
00286     <td>Disable the USART 2 module.</td>
00287     <td>ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561</td>
00288   </tr>
00289 
00290   <tr>
00291     <td>power_usart3_enable()</td>
00292     <td>Enable the USART 3 module.</td>
00293     <td>ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561</td>
00294   </tr>
00295 
00296   <tr>
00297     <td>power_usart3_disable()</td>
00298     <td>Disable the USART 3 module.</td>
00299     <td>ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561</td>
00300   </tr>
00301 
00302   <tr>
00303     <td>power_usb_enable()</td>
00304     <td>Enable the USB module.</td>
00305     <td>AT90USB646, AT90USB647, AT90USB1286, AT90USB1287</td>
00306   </tr>
00307 
00308   <tr>
00309     <td>power_usb_disable()</td>
00310     <td>Disable the USB module.</td>
00311     <td>AT90USB646, AT90USB647, AT90USB1286, AT90USB1287</td>
00312   </tr>
00313 
00314   <tr>
00315     <td>power_usi_enable()</td>
00316     <td>Enable the Universal Serial Interface module.</td>
00317     <td>ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00318   </tr>
00319 
00320   <tr>
00321     <td>power_usi_disable()</td>
00322     <td>Disable the Universal Serial Interface module.</td>
00323     <td>ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00324   </tr>
00325 
00326   <tr>
00327     <td>power_vadc_enable()</td>
00328     <td>Enable the Voltage ADC module.</td>
00329     <td>ATmega406</td>
00330   </tr>
00331 
00332   <tr>
00333     <td>power_vadc_disable()</td>
00334     <td>Disable the Voltage ADC module.</td>
00335     <td>ATmega406</td>
00336   </tr>
00337 
00338   <tr>
00339     <td>power_all_enable()</td>
00340     <td>Enable all modules.</td>
00341     <td>ATxmega6A4, ATxmega32A4, ATxmega64A1, ATxmega64A1U, ATxmega64A3, ATxmegaA1, ATxmegaA1U, ATxmega128A3, ATxmega192A3, ATxmega256A3, ATxmegaA3B, ATxmega16D4, ATxmega32D4, ATxmega64D3, ATxmega128D3, ATxmega192D3, ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega325A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00342   </tr>
00343 
00344   <tr>
00345     <td>power_all_disable()</td>
00346     <td>Disable all modules.</td>
00347     <td>ATxmega6A4, ATxmega32A4, ATxmega64A1, ATxmega64A1U, ATxmega64A3, ATxmegaA1, ATxmegaA1U, ATxmega128A3, ATxmega192A3, ATxmega256A3, ATxmegaA3B, ATxmega16D4, ATxmega32D4, ATxmega64D3, ATxmega128D3,ATxmega192D3, ATmega640, ATmega1280, ATmega1281, ATmega128RFA1, ATmega2560, ATmega2561, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, ATmega165, ATmega165P, ATmega325, ATmega325A, ATmega3250, ATmega325A, ATmega645, ATmega6450, ATmega169, ATmega169P, ATmega329, ATmega329A, ATmega3290, ATmega3290A, ATmega649, ATmega6490, ATmega164P, ATmega324P, ATmega644, ATmega406, ATmega48, ATmega88, ATmega168, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861</td>
00348   </tr>
00349 </table>
00350 </center>
00351 </small>
00352 
00353 @} */
00354 
00355 // Xmega A series has AES, EBI and DMA bits
00356 // Include any other device on need basis
00357 #if defined(__AVR_ATxmega16A4__) \
00358 || defined(__AVR_ATxmega32A4__) \
00359 || defined(__AVR_ATxmega64A1__) \
00360 || defined(__AVR_ATxmega64A1U__) \
00361 || defined(__AVR_ATxmega64A3__) \
00362 || defined(__AVR_ATxmega128A1__) \
00363 || defined(__AVR_ATxmega128A1U__) \
00364 || defined(__AVR_ATxmega128A3__) \
00365 || defined(__AVR_ATxmega192A3__) \
00366 || defined(__AVR_ATxmega256A3__) \
00367 || defined(__AVR_ATxmega256A3B__)
00368 
00369 #define power_aes_enable()  (PR_PRGEN &= (uint8_t)~(PR_AES_bm))
00370 #define power_aes_disable() (PR_PRGEN |= (uint8_t)PR_AES_bm)
00371 
00372 #define power_ebi_enable()  (PR_PRGEN &= (uint8_t)~(PR_EBI_bm))
00373 #define power_ebi_disable() (PR_PRGEN |= (uint8_t)PR_EBI_bm)
00374 
00375 #define power_dma_enable()    (PR_PRGEN &= (uint8_t)~(PR_DMA_bm))
00376 #define power_dma_disable()   (PR_PRGEN |= (uint8_t)PR_DMA_bm)
00377 
00378 #define power_daca_enable()     (PR_PRPA &= (uint8_t)~(PR_DAC_bm))
00379 #define power_daca_disable()    (PR_PRPA |= (uint8_t)PR_DAC_bm)
00380 #define power_dacb_enable()     (PR_PRPB &= (uint8_t)~(PR_DAC_bm))
00381 #define power_dacb_disable()    (PR_PRPB |= (uint8_t)PR_DAC_bm)
00382 
00383 #define power_usartc1_enable()  (PR_PRPC &= (uint8_t)~(PR_USART1_bm))
00384 #define power_usartc1_disable() (PR_PRPC |= (uint8_t)PR_USART1_bm)
00385 #define power_usartd1_enable()  (PR_PRPD &= (uint8_t)~(PR_USART1_bm))
00386 #define power_usartd1_disable() (PR_PRPD |= (uint8_t)PR_USART1_bm)
00387 #define power_usarte1_enable()  (PR_PRPE &= (uint8_t)~(PR_USART1_bm))
00388 #define power_usarte1_disable() (PR_PRPE |= (uint8_t)PR_USART1_bm)
00389 #define power_usartf1_enable()  (PR_PRPF &= (uint8_t)~(PR_USART1_bm))
00390 #define power_usartf1_disable() (PR_PRPF |= (uint8_t)PR_USART1_bm)
00391 
00392 #define power_all_enable() \
00393 do { \
00394     PR_PRGEN &= (uint8_t)~(PR_AES_bm|PR_EBI_bm|PR_RTC_bm|PR_EVSYS_bm|PR_DMA_bm); \
00395     PR_PRPA &= (uint8_t)~(PR_DAC_bm|PR_ADC_bm|PR_AC_bm); \
00396     PR_PRPB &= (uint8_t)~(PR_DAC_bm|PR_ADC_bm|PR_AC_bm); \
00397     PR_PRPC &= (uint8_t)~(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00398     PR_PRPD &= (uint8_t)~(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00399     PR_PRPE &= (uint8_t)~(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00400     PR_PRPF &= (uint8_t)~(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00401 } while(0)
00402 
00403 
00404 #define power_all_disable() \
00405 do { \
00406     PR_PRGEN|= (uint8_t)(PR_AES_bm|PR_EBI_bm|PR_RTC_bm|PR_EVSYS_bm|PR_DMA_bm); \
00407     PR_PRPA |= (uint8_t)(PR_DAC_bm|PR_ADC_bm|PR_AC_bm); \
00408     PR_PRPB |= (uint8_t)(PR_DAC_bm|PR_ADC_bm|PR_AC_bm); \
00409     PR_PRPC |= (uint8_t)(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00410     PR_PRPD |= (uint8_t)(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00411     PR_PRPE |= (uint8_t)(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00412     PR_PRPF |= (uint8_t)(PR_TWI_bm|PR_USART1_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00413 #endif
00414 
00415 #if defined(__AVR_ATxmega16A4__) \
00416 || defined(__AVR_ATxmega16D4__) \
00417 || defined(__AVR_ATxmega32A4__) \
00418 || defined(__AVR_ATxmega32D4__) \
00419 || defined(__AVR_ATxmega64A1__) \
00420 || defined(__AVR_ATxmega64A1U__) \
00421 || defined(__AVR_ATxmega64A3__) \
00422 || defined(__AVR_ATxmega64D3__) \
00423 || defined(__AVR_ATxmega128A1__) \
00424 || defined(__AVR_ATxmega128A1U__) \
00425 || defined(__AVR_ATxmega128A3__) \
00426 || defined(__AVR_ATxmega128D3__) \
00427 || defined(__AVR_ATxmega192A3__) \
00428 || defined(__AVR_ATxmega192D3__) \
00429 || defined(__AVR_ATxmega256A3__) \
00430 || defined(__AVR_ATxmega256A3B__)
00431 
00432 
00433 #define power_rtc_enable()  (PR_PRGEN &= (uint8_t)~(PR_RTC_bm))
00434 #define power_rtc_disable() (PR_PRGEN |= (uint8_t)PR_RTC_bm)
00435 
00436 #define power_evsys_enable()    (PR_PRGEN &= (uint8_t)~(PR_EVSYS_bm))
00437 #define power_evsys_disable()   (PR_PRGEN |= (uint8_t)PR_EVSYS_bm)
00438 
00439 #define power_adca_enable()     (PR_PRPA &= (uint8_t)~(PR_ADC_bm))
00440 #define power_adca_disable()    (PR_PRPA |= (uint8_t)PR_ADC_bm)
00441 #define power_adcb_enable()     (PR_PRPB &= (uint8_t)~(PR_ADC_bm))
00442 #define power_adcb_disable()    (PR_PRPB |= (uint8_t)PR_ADC_bm)
00443 
00444 #define power_aca_enable()      (PR_PRPA &= (uint8_t)~(PR_AC_bm))
00445 #define power_aca_disable()     (PR_PRPA |= (uint8_t)PR_AC_bm)
00446 #define power_acb_enable()      (PR_PRPB &= (uint8_t)~(PR_AC_bm))
00447 #define power_acb_disable()     (PR_PRPB |= (uint8_t)PR_AC_bm)
00448 
00449 #define power_twic_enable()     (PR_PRPC &= (uint8_t)~(PR_TWI_bm))
00450 #define power_twic_disable()    (PR_PRPC |= (uint8_t)PR_TWI_bm)
00451 #define power_twid_enable()     (PR_PRPD &= (uint8_t)~(PR_TWI_bm))
00452 #define power_twid_disable()    (PR_PRPD |= (uint8_t)PR_TWI_bm)
00453 #define power_twie_enable()     (PR_PRPE &= (uint8_t)~(PR_TWI_bm))
00454 #define power_twie_disable()    (PR_PRPE |= (uint8_t)PR_TWI_bm)
00455 #define power_twif_enable()     (PR_PRPF &= (uint8_t)~(PR_TWI_bm))
00456 #define power_twif_disable()    (PR_PRPF |= (uint8_t)PR_TWI_bm)
00457 
00458 #define power_usartc0_enable()  (PR_PRPC &= (uint8_t)~(PR_USART0_bm))
00459 #define power_usartc0_disable() (PR_PRPC |= (uint8_t)PR_USART0_bm)
00460 #define power_usartd0_enable()  (PR_PRPD &= (uint8_t)~(PR_USART0_bm))
00461 #define power_usartd0_disable() (PR_PRPD |= (uint8_t)PR_USART0_bm)
00462 #define power_usarte0_enable()  (PR_PRPE &= (uint8_t)~(PR_USART0_bm))
00463 #define power_usarte0_disable() (PR_PRPE |= (uint8_t)PR_USART0_bm)
00464 #define power_usartf0_enable()  (PR_PRPF &= (uint8_t)~(PR_USART0_bm))
00465 #define power_usartf0_disable() (PR_PRPF |= (uint8_t)PR_USART0_bm)
00466 
00467 #define power_spic_enable()     (PR_PRPC &= (uint8_t)~(PR_SPI_bm))
00468 #define power_spic_disable()    (PR_PRPC |= (uint8_t)PR_SPI_bm)
00469 #define power_spid_enable()     (PR_PRPD &= (uint8_t)~(PR_SPI_bm))
00470 #define power_spid_disable()    (PR_PRPD |= (uint8_t)PR_SPI_bm)
00471 #define power_spie_enable()     (PR_PRPE &= (uint8_t)~(PR_SPI_bm))
00472 #define power_spie_disable()    (PR_PRPE |= (uint8_t)PR_SPI_bm)
00473 #define power_spif_enable()     (PR_PRPF &= (uint8_t)~(PR_SPI_bm))
00474 #define power_spif_disable()    (PR_PRPF |= (uint8_t)PR_SPI_bm)
00475 
00476 #define power_hiresc_enable()   (PR_PRPC &= (uint8_t)~(PR_HIRES_bm))
00477 #define power_hiresc_disable()  (PR_PRPC |= (uint8_t)PR_HIRES_bm)
00478 #define power_hiresd_enable()   (PR_PRPD &= (uint8_t)~(PR_HIRES_bm))
00479 #define power_hiresd_disable()  (PR_PRPD |= (uint8_t)PR_HIRES_bm)
00480 #define power_hirese_enable()   (PR_PRPE &= (uint8_t)~(PR_HIRES_bm))
00481 #define power_hirese_disable()  (PR_PRPE |= (uint8_t)PR_HIRES_bm)
00482 #define power_hiresf_enable()   (PR_PRPF &= (uint8_t)~(PR_HIRES_bm))
00483 #define power_hiresf_disable()  (PR_PRPF |= (uint8_t)PR_HIRES_bm)
00484 
00485 #define power_tc1c_enable()     (PR_PRPC &= (uint8_t)~(PR_TC1_bm))
00486 #define power_tc1c_disable()    (PR_PRPC |= (uint8_t)PR_TC1_bm)
00487 #define power_tc1d_enable()     (PR_PRPD &= (uint8_t)~(PR_TC1_bm))
00488 #define power_tc1d_disable()    (PR_PRPD |= (uint8_t)PR_TC1_bm)
00489 #define power_tc1e_enable()     (PR_PRPE &= (uint8_t)~(PR_TC1_bm))
00490 #define power_tc1e_disable()    (PR_PRPE |= (uint8_t)PR_TC1_bm)
00491 #define power_tc1f_enable()     (PR_PRPF &= (uint8_t)~(PR_TC1_bm))
00492 #define power_tc1f_disable()    (PR_PRPF |= (uint8_t)PR_TC1_bm)
00493 
00494 #define power_tc0c_enable()     (PR_PRPC &= (uint8_t)~(PR_TC0_bm))
00495 #define power_tc0c_disable()    (PR_PRPC |= (uint8_t)PR_TC0_bm)
00496 #define power_tc0d_enable()     (PR_PRPD &= (uint8_t)~(PR_TC0_bm))
00497 #define power_tc0d_disable()    (PR_PRPD |= (uint8_t)PR_TC0_bm)
00498 #define power_tc0e_enable()     (PR_PRPE &= (uint8_t)~(PR_TC0_bm))
00499 #define power_tc0e_disable()    (PR_PRPE |= (uint8_t)PR_TC0_bm)
00500 #define power_tc0f_enable()     (PR_PRPF &= (uint8_t)~(PR_TC0_bm))
00501 #define power_tc0f_disable()    (PR_PRPF |= (uint8_t)PR_TC0_bm)
00502 
00503 #endif
00504 
00505 #if defined(__AVR_ATxmega16D4__) \
00506 || defined(__AVR_ATxmega32D4__) \
00507 || defined(__AVR_ATxmega64D3__) \
00508 || defined(__AVR_ATxmega128D3__) \
00509 || defined(__AVR_ATxmega192D3__) 
00510 
00511 #define power_all_enable() \
00512 do { \
00513     PR_PRGEN &= (uint8_t)~(PR_RTC_bm|PR_EVSYS_bm); \
00514     PR_PRPA &= (uint8_t)~(PR_ADC_bm|PR_AC_bm); \
00515     PR_PRPB &= (uint8_t)~(PR_ADC_bm|PR_AC_bm); \
00516     PR_PRPC &= (uint8_t)~(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00517     PR_PRPD &= (uint8_t)~(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00518     PR_PRPE &= (uint8_t)~(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00519     PR_PRPF &= (uint8_t)~(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00520 } while(0)
00521 
00522 
00523 #define power_all_disable() \
00524 do { \
00525     PR_PRGEN|= (uint8_t)(PR_EBI_bm|PR_RTC_bm|PR_EVSYS_bm|PR_DMA_bm); \
00526     PR_PRPA |= (uint8_t)(PR_ADC_bm|PR_AC_bm); \
00527     PR_PRPB |= (uint8_t)(PR_ADC_bm|PR_AC_bm); \
00528     PR_PRPC |= (uint8_t)(PR_TWI_bm|R_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00529     PR_PRPD |= (uint8_t)(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00530     PR_PRPE |= (uint8_t)(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00531     PR_PRPF |= (uint8_t)(PR_TWI_bm|PR_USART0_bm|PR_SPI_bm|PR_HIRES_bm|PR_TC1_bm|PR_TC0_bm); \
00532 } while(0)
00533 
00534 #endif
00535 
00536 #elif defined(__AVR_ATmega640__) \
00537 || defined(__AVR_ATmega1280__) \
00538 || defined(__AVR_ATmega1281__) \
00539 || defined(__AVR_ATmega2560__) \
00540 || defined(__AVR_ATmega2561__) 
00541 
00542 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00543 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00544 
00545 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00546 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00547 
00548 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00549 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00550 
00551 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00552 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00553 
00554 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00555 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00556 
00557 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00558 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00559 
00560 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
00561 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
00562 
00563 #define power_timer4_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM4))
00564 #define power_timer4_disable()  (PRR1 |= (uint8_t)(1 << PRTIM4))
00565 
00566 #define power_timer5_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM5))
00567 #define power_timer5_disable()  (PRR1 |= (uint8_t)(1 << PRTIM5))
00568 
00569 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
00570 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
00571 
00572 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
00573 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
00574 
00575 #define power_usart2_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART2))
00576 #define power_usart2_disable()  (PRR1 |= (uint8_t)(1 << PRUSART2))
00577 
00578 #define power_usart3_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART3))
00579 #define power_usart3_disable()  (PRR1 |= (uint8_t)(1 << PRUSART3))
00580 
00581 #define power_all_enable() \
00582 do{ \
00583     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)); \
00584     PRR1 &= (uint8_t)~((1<<PRTIM3)|(1<<PRTIM4)|(1<<PRTIM5)|(1<<PRTIM5)|(1<<PRUSART1)|(1<<PRUSART2)|(1<<PRUSART3)); \
00585 }while(0)
00586 
00587 #define power_all_disable() \
00588 do{ \
00589     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)); \
00590     PRR1 |= (uint8_t)((1<<PRTIM3)|(1<<PRTIM4)|(1<<PRTIM5)|(1<<PRTIM5)|(1<<PRUSART1)|(1<<PRUSART2)|(1<<PRUSART3)); \
00591 }while(0)
00592 
00593 
00594 #elif defined(__AVR_ATmega128RFA1__)
00595 
00596 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00597 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00598 
00599 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00600 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00601 
00602 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00603 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00604 
00605 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00606 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00607 
00608 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00609 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00610 
00611 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00612 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00613 
00614 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
00615 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
00616 
00617 #define power_timer4_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM4))
00618 #define power_timer4_disable()  (PRR1 |= (uint8_t)(1 << PRTIM4))
00619 
00620 #define power_timer5_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM5))
00621 #define power_timer5_disable()  (PRR1 |= (uint8_t)(1 << PRTIM5))
00622 
00623 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
00624 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
00625 
00626 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
00627 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
00628 
00629 #define power_all_enable() \
00630 do{ \
00631     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)); \
00632     PRR1 &= (uint8_t)~((1<<PRTIM3)|(1<<PRTIM4)|(1<<PRTIM5)|(1<<PRTIM5)|(1<<PRUSART1)); \
00633 }while(0)
00634 
00635 #define power_all_disable() \
00636 do{ \
00637     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)); \
00638     PRR1 |= (uint8_t)((1<<PRTIM3)|(1<<PRTIM4)|(1<<PRTIM5)|(1<<PRTIM5)|(1<<PRUSART1)); \
00639 }while(0)
00640 
00641 
00642 #elif defined(__AVR_AT90USB646__) \
00643 || defined(__AVR_AT90USB647__) \
00644 || defined(__AVR_AT90USB1286__) \
00645 || defined(__AVR_AT90USB1287__)
00646 
00647 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00648 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00649 
00650 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00651 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00652 
00653 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00654 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00655 
00656 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00657 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00658 
00659 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00660 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00661 
00662 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00663 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00664 
00665 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
00666 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
00667 
00668 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
00669 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
00670 
00671 #define power_usb_enable()      (PRR1 &= (uint8_t)~(1 << PRUSB))
00672 #define power_usb_disable()     (PRR1 |= (uint8_t)(1 << PRUSB))
00673 
00674 #define power_all_enable() \
00675 do{ \
00676     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00677     PRR1 &= (uint8_t)~((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00678 }while(0)
00679 
00680 #define power_all_disable() \
00681 do{ \
00682     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00683     PRR1 |= (uint8_t)((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00684 }while(0)
00685 
00686 
00687 #elif defined(__AVR_ATmega32U4__) \
00688 || defined(__AVR_ATmega16U4__)
00689 
00690 
00691 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00692 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00693 
00694 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
00695 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
00696 
00697 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00698 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00699 
00700 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00701 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00702 
00703 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00704 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00705 
00706 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00707 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00708 
00709 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00710 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00711 
00712 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
00713 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
00714 
00715 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
00716 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
00717 
00718 #define power_usb_enable()      (PRR1 &= (uint8_t)~(1 << PRUSB))
00719 #define power_usb_disable()     (PRR1 |= (uint8_t)(1 << PRUSB))
00720 
00721 #define power_all_enable() \
00722 do{ \
00723     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRUSART0)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00724     PRR1 &= (uint8_t)~((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00725 }while(0)
00726 
00727 #define power_all_disable() \
00728 do{ \
00729     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRUSART0)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00730     PRR1 |= (uint8_t)((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00731 }while(0)
00732 
00733 
00734 #elif defined(__AVR_ATmega32U6__)
00735 
00736 
00737 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00738 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00739 
00740 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00741 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00742 
00743 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00744 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00745 
00746 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00747 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00748 
00749 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00750 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00751 
00752 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00753 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00754 
00755 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
00756 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
00757 
00758 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
00759 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
00760 
00761 #define power_usb_enable()      (PRR1 &= (uint8_t)~(1 << PRUSB))
00762 #define power_usb_disable()     (PRR1 |= (uint8_t)(1 << PRUSB))
00763 
00764 #define power_all_enable() \
00765 do{ \
00766     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00767     PRR1 &= (uint8_t)~((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00768 }while(0)
00769 
00770 #define power_all_disable() \
00771 do{ \
00772     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)); \
00773     PRR1 |= (uint8_t)((1<<PRTIM3)|(1<<PRUSART1)|(1<<PRUSB)); \
00774 }while(0)
00775 
00776 
00777 #elif defined(__AVR_AT90PWM1__)
00778 
00779 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00780 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00781 
00782 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00783 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00784 
00785 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
00786 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
00787 
00788 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00789 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00790 
00791 /* Power Stage Controller 0 */
00792 #define power_psc0_enable()     (PRR &= (uint8_t)~(1 << PRPSC0))
00793 #define power_psc0_disable()    (PRR |= (uint8_t)(1 << PRPSC0))
00794 
00795 /* Power Stage Controller 1 */
00796 #define power_psc1_enable()     (PRR &= (uint8_t)~(1 << PRPSC1))
00797 #define power_psc1_disable()    (PRR |= (uint8_t)(1 << PRPSC1))
00798 
00799 /* Power Stage Controller 2 */
00800 #define power_psc2_enable()     (PRR &= (uint8_t)~(1 << PRPSC2))
00801 #define power_psc2_disable()    (PRR |= (uint8_t)(1 << PRPSC2))
00802 
00803 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC0)|(1<<PRPSC1)|(1<<PRPSC2)))
00804 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC0)|(1<<PRPSC1)|(1<<PRPSC2)))
00805 
00806 
00807 #elif defined(__AVR_AT90PWM2__) \
00808 || defined(__AVR_AT90PWM2B__) \
00809 || defined(__AVR_AT90PWM3__) \
00810 || defined(__AVR_AT90PWM3B__) \
00811 || defined(__AVR_AT90PWM216__) \
00812 || defined(__AVR_AT90PWM316__)
00813 
00814 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00815 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00816 
00817 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00818 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00819 
00820 #define power_usart_enable()    (PRR &= (uint8_t)~(1 << PRUSART))
00821 #define power_usart_disable()   (PRR |= (uint8_t)(1 << PRUSART))
00822 
00823 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
00824 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
00825 
00826 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00827 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00828 
00829 /* Power Stage Controller 0 */
00830 #define power_psc0_enable()     (PRR &= (uint8_t)~(1 << PRPSC0))
00831 #define power_psc0_disable()    (PRR |= (uint8_t)(1 << PRPSC0))
00832 
00833 /* Power Stage Controller 1 */
00834 #define power_psc1_enable()     (PRR &= (uint8_t)~(1 << PRPSC1))
00835 #define power_psc1_disable()    (PRR |= (uint8_t)(1 << PRPSC1))
00836 
00837 /* Power Stage Controller 2 */
00838 #define power_psc2_enable()     (PRR &= (uint8_t)~(1 << PRPSC2))
00839 #define power_psc2_disable()    (PRR |= (uint8_t)(1 << PRPSC2))
00840 
00841 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC0)|(1<<PRPSC1)|(1<<PRPSC2)))
00842 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC0)|(1<<PRPSC1)|(1<<PRPSC2)))
00843 
00844 
00845 #elif defined(__AVR_AT90PWM81__)
00846 
00847 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00848 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00849 
00850 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00851 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00852 
00853 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00854 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00855 
00856 /* Reduced Power Stage Controller */
00857 #define power_pscr_enable()     (PRR &= (uint8_t)~(1 << PRPSCR))
00858 #define power_pscr_disable()    (PRR |= (uint8_t)(1 << PRPSCR))
00859 
00860 /* Power Stage Controller 2 */
00861 #define power_psc2_enable()     (PRR &= (uint8_t)~(1 << PRPSC2))
00862 #define power_psc2_disable()    (PRR |= (uint8_t)(1 << PRPSC2))
00863 
00864 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTIM1)|(1<<PRPSCR)|(1<<PRPSC2)))
00865 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTIM1)|(1<<PRPSCR)|(1<<PRPSC2)))
00866 
00867 
00868 #elif defined(__AVR_ATmega165__) \
00869 || defined(__AVR_ATmega165A__) \
00870 || defined(__AVR_ATmega165P__) \
00871 || defined(__AVR_ATmega325__) \
00872 || defined(__AVR_ATmega325A__) \
00873 || defined(__AVR_ATmega3250__) \
00874 || defined(__AVR_ATmega3250A__) \
00875 || defined(__AVR_ATmega645__) \
00876 || defined(__AVR_ATmega645A__) \
00877 || defined(__AVR_ATmega645P__) \
00878 || defined(__AVR_ATmega6450__) \
00879 || defined(__AVR_ATmega6450A__) \
00880 || defined(__AVR_ATmega6450P__)
00881 
00882 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00883 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00884 
00885 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00886 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00887 
00888 #define power_usart0_enable()   (PRR &= (uint8_t)~(1 << PRUSART0))
00889 #define power_usart0_disable()  (PRR |= (uint8_t)(1 << PRUSART0))
00890 
00891 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00892 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00893 
00894 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM1)))
00895 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM1)))
00896 
00897 
00898 #elif defined(__AVR_ATmega169__) \
00899 || defined(__AVR_ATmega169A__) \
00900 || defined(__AVR_ATmega169P__) \
00901 || defined(__AVR_ATmega169PA__) \
00902 || defined(__AVR_ATmega329__) \
00903 || defined(__AVR_ATmega329A__) \
00904 || defined(__AVR_ATmega329P__) \
00905 || defined(__AVR_ATmega329PA__) \
00906 || defined(__AVR_ATmega3290__) \
00907 || defined(__AVR_ATmega3290A__) \
00908 || defined(__AVR_ATmega3290P__) \
00909 || defined(__AVR_ATmega649__) \
00910 || defined(__AVR_ATmega649A__) \
00911 || defined(__AVR_ATmega649P__) \
00912 || defined(__AVR_ATmega6490__) \
00913 || defined(__AVR_ATmega6490A__) \
00914 || defined(__AVR_ATmega6490P__)
00915 
00916 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00917 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00918 
00919 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00920 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00921 
00922 #define power_usart0_enable()   (PRR &= (uint8_t)~(1 << PRUSART0))
00923 #define power_usart0_disable()  (PRR |= (uint8_t)(1 << PRUSART0))
00924 
00925 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00926 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00927 
00928 #define power_lcd_enable()      (PRR &= (uint8_t)~(1 << PRLCD))
00929 #define power_lcd_disable()     (PRR |= (uint8_t)(1 << PRLCD))
00930 
00931 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM1)|(1<<PRLCD)))
00932 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM1)|(1<<PRLCD)))
00933 
00934 
00935 #elif defined(__AVR_ATmega164A__) \
00936 || defined(__AVR_ATmega164P__) \
00937 || defined(__AVR_ATmega324A__) \
00938 || defined(__AVR_ATmega324P__) \
00939 || defined(__AVR_ATmega324PA__) \
00940 || defined(__AVR_ATmega644P__) \
00941 || defined(__AVR_ATmega644A__) \
00942 || defined(__AVR_ATmega644PA__)
00943 
00944 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00945 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00946 
00947 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00948 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00949 
00950 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
00951 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
00952 
00953 #define power_usart1_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART1))
00954 #define power_usart1_disable()  (PRR0 |= (uint8_t)(1 << PRUSART1))
00955 
00956 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00957 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00958 
00959 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00960 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00961 
00962 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00963 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00964 
00965 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00966 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00967 
00968 #define power_all_enable()      (PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRUSART1)|(1<<PRTIM0)|(1<<PRTIM2)|(1<<PRTWI)))
00969 #define power_all_disable()     (PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRUSART1)|(1<<PRTIM0)|(1<<PRTIM2)|(1<<PRTWI)))
00970 
00971 
00972 #elif defined(__AVR_ATmega644__)
00973 
00974 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00975 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00976 
00977 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
00978 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
00979 
00980 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
00981 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
00982 
00983 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
00984 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
00985 
00986 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
00987 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
00988 
00989 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
00990 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
00991 
00992 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
00993 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
00994 
00995 #define power_all_enable()      (PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRTWI)))
00996 #define power_all_disable()     (PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRTWI)))
00997 
00998 
00999 #elif defined(__AVR_ATmega406__)
01000 
01001 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
01002 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
01003 
01004 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
01005 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
01006 
01007 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
01008 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
01009 
01010 /* Voltage ADC */
01011 #define power_vadc_enable()     (PRR0 &= (uint8_t)~(1 << PRVADC))
01012 #define power_vadc_disable()    (PRR0 |= (uint8_t)(1 << PRVADC))
01013 
01014 #define power_all_enable()      (PRR0 &= (uint8_t)~((1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRVADC)))
01015 #define power_all_disable()     (PRR0 |= (uint8_t)((1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRVADC)))
01016 
01017 
01018 #elif defined(__AVR_ATmega48__) \
01019 || defined(__AVR_ATmega48A__) \
01020 || defined(__AVR_ATmega48P__) \
01021 || defined(__AVR_ATmega88__) \
01022 || defined(__AVR_ATmega88A__) \
01023 || defined(__AVR_ATmega88P__) \
01024 || defined(__AVR_ATmega88PA__) \
01025 || defined(__AVR_ATmega168__) \
01026 || defined(__AVR_ATmega168A__) \
01027 || defined(__AVR_ATmega168P__) \
01028 || defined(__AVR_ATmega328__) \
01029 || defined(__AVR_ATmega328P__) \
01030 || defined(__AVR_ATtiny48__) \
01031 || defined(__AVR_ATtiny88__)
01032 
01033 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
01034 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
01035 
01036 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
01037 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
01038 
01039 #define power_usart0_enable()   (PRR &= (uint8_t)~(1 << PRUSART0))
01040 #define power_usart0_disable()  (PRR |= (uint8_t)(1 << PRUSART0))
01041 
01042 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01043 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01044 
01045 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
01046 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
01047 
01048 #define power_timer2_enable()   (PRR &= (uint8_t)~(1 << PRTIM2))
01049 #define power_timer2_disable()  (PRR |= (uint8_t)(1 << PRTIM2))
01050 
01051 #define power_twi_enable()      (PRR &= (uint8_t)~(1 << PRTWI))
01052 #define power_twi_disable()     (PRR |= (uint8_t)(1 << PRTWI))
01053 
01054 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRTWI)))
01055 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRTWI)))
01056 
01057 
01058 #elif defined(__AVR_ATtiny24__) \
01059 || defined(__AVR_ATtiny24A__) \
01060 || defined(__AVR_ATtiny44__) \
01061 || defined(__AVR_ATtiny44A__) \
01062 || defined(__AVR_ATtiny84__) \
01063 || defined(__AVR_ATtiny84A__) \
01064 || defined(__AVR_ATtiny25__) \
01065 || defined(__AVR_ATtiny45__) \
01066 || defined(__AVR_ATtiny85__) \
01067 || defined(__AVR_ATtiny261__) \
01068 || defined(__AVR_ATtiny261A__) \
01069 || defined(__AVR_ATtiny461__) \
01070 || defined(__AVR_ATtiny461A__) \
01071 || defined(__AVR_ATtiny861__) \
01072 || defined(__AVR_ATtiny861A__) \
01073 || defined(__AVR_ATtiny43U__)
01074 
01075 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
01076 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
01077 
01078 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01079 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01080 
01081 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
01082 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
01083 
01084 /* Universal Serial Interface */
01085 #define power_usi_enable()      (PRR &= (uint8_t)~(1 << PRUSI))
01086 #define power_usi_disable()     (PRR |= (uint8_t)(1 << PRUSI))
01087 
01088 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRUSI)))
01089 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRUSI)))
01090 
01091 
01092 #elif defined(__AVR_ATmega1284P__)
01093 
01094 
01095 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
01096 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
01097 
01098 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
01099 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
01100 
01101 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
01102 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
01103 
01104 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
01105 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
01106 
01107 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
01108 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
01109 
01110 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
01111 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
01112 
01113 #define power_timer3_enable()   (PRR1 &= (uint8_t)~(1 << PRTIM3))
01114 #define power_timer3_disable()  (PRR1 |= (uint8_t)(1 << PRTIM3))
01115 
01116 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
01117 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
01118 
01119 #define power_usart1_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART1))
01120 #define power_usart1_disable()  (PRR0 |= (uint8_t)(1 << PRUSART1))
01121 
01122 #define power_all_enable() \
01123 do{ \
01124     PRR0 &= (uint8_t)~((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)|(1<<PRUSART1)); \
01125     PRR1 &= (uint8_t)~(1<<PRTIM3); \
01126 }while(0)
01127 
01128 #define power_all_disable() \
01129 do{ \
01130     PRR0 |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRTIM2)|(1<<PRUSART0)|(1<<PRUSART1)); \
01131     PRR1 |= (uint8_t)(1<<PRTIM3); \
01132 }while(0)
01133 
01134 
01135 #elif defined(__AVR_ATmega32HVB__) \
01136 || defined(__AVR_ATmega32HVBREVB__) \
01137 || defined(__AVR_ATmega16HVB__) \
01138 || defined(__AVR_ATmega16HVBREVB__)
01139 
01140 
01141 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
01142 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
01143 
01144 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
01145 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
01146 
01147 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
01148 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
01149 
01150 /* Voltage ADC */
01151 #define power_vadc_enable()     (PRR0 &= (uint8_t)~(1 << PRVADC))
01152 #define power_vadc_disable()    (PRR0 |= (uint8_t)(1 << PRVADC))
01153 
01154 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
01155 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
01156 
01157 #define power_vrm_enable()      (PRR0 &= (uint8_t)~(1 << PRVRM))
01158 #define power_vrm_disable()     (PRR0 |= (uint8_t)(1 << PRVRM))
01159 
01160 #define power_all_enable()      (PRR0 &= (uint8_t)~((1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRVADC)|(1<<PRSPI)|(1<<PRVRM)))
01161 #define power_all_disable()     (PRR0 |= (uint8_t)((1<<PRTWI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRVADC)|(1<<PRSPI)|(1<<PRVRM)))
01162 
01163 
01164 #elif defined(__AVR_ATmega16M1__) \
01165 || defined(__AVR_ATmega32C1__) \
01166 || defined(__AVR_ATmega32M1__) \
01167 || defined(__AVR_ATmega64C1__) \
01168 || defined(__AVR_ATmega64M1__)
01169 
01170 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
01171 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
01172 
01173 #define power_lin_enable()      (PRR &= (uint8_t)~(1 << PRLIN))
01174 #define power_lin_disable()     (PRR |= (uint8_t)(1 << PRLIN))
01175 
01176 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
01177 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
01178 
01179 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01180 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01181 
01182 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
01183 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
01184 
01185 #define power_psc_enable()      (PRR &= (uint8_t)~(1 << PRPSC))
01186 #define power_psc_disable()     (PRR |= (uint8_t)(1 << PRPSC))
01187 
01188 #define power_can_enable()      (PRR &= (uint8_t)~(1 << PRCAN))
01189 #define power_can_disable()     (PRR |= (uint8_t)(1 << PRCAN))
01190 
01191 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRLIN)|(1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC)|(1<<PRCAN)))
01192 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRLIN)|(1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRPSC)|(1<<PRCAN)))
01193 
01194 
01195 #elif defined(__AVR_ATtiny167__) \
01196 || defined(__AVR_ATtiny87__)
01197 
01198 
01199 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
01200 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
01201 
01202 #define power_usi_enable()      (PRR &= (uint8_t)~(1 << PRUSI))
01203 #define power_usi_disable()     (PRR |= (uint8_t)(1 << PRUSI))
01204 
01205 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01206 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01207 
01208 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
01209 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
01210 
01211 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
01212 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
01213 
01214 #define power_lin_enable()      (PRR &= (uint8_t)~(1 << PRLIN))
01215 #define power_lin_disable()     (PRR |= (uint8_t)(1 << PRLIN))
01216 
01217 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRUSI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRSPI)|(1<<PRLIN)))
01218 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRUSI)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRSPI)|(1<<PRLIN)))
01219 
01220 
01221 #elif defined(__AVR_AT90USB82__) \
01222 || defined(__AVR_AT90USB162__) \
01223 || defined(__AVR_ATmega8U2__) \
01224 || defined(__AVR_ATmega16U2__) \
01225 || defined(__AVR_ATmega32U2__)
01226 
01227 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
01228 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
01229 
01230 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
01231 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
01232 
01233 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
01234 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
01235 
01236 #define power_usb_enable()      (PRR1 &= (uint8_t)~(1 << PRUSB))
01237 #define power_usb_disable()     (PRR1 |= (uint8_t)(1 << PRUSB))
01238 
01239 #define power_usart1_enable()   (PRR1 &= (uint8_t)~(1 << PRUSART1))
01240 #define power_usart1_disable()  (PRR1 |= (uint8_t)(1 << PRUSART1))
01241 
01242 #define power_all_enable() \
01243 do{ \
01244     PRR0 &= (uint8_t)~((1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)); \
01245     PRR1 &= (uint8_t)~((1<<PRUSB)|(1<<PRUSART1)); \
01246 }while(0)
01247 
01248 #define power_all_disable() \
01249 do{ \
01250     PRR0 |= (uint8_t)((1<<PRSPI)|(1<<PRTIM0)|(1<<PRTIM1)); \
01251     PRR1 |= (uint8_t)((1<<PRUSB)|(1<<PRUSART1)); \
01252 }while(0)
01253 
01254 
01255 #elif defined(__AVR_AT90SCR100__)
01256 
01257 #define power_usart0_enable()   (PRR0 &= (uint8_t)~(1 << PRUSART0))
01258 #define power_usart0_disable()  (PRR0 |= (uint8_t)(1 << PRUSART0))
01259 
01260 #define power_spi_enable()      (PRR0 &= (uint8_t)~(1 << PRSPI))
01261 #define power_spi_disable()     (PRR0 |= (uint8_t)(1 << PRSPI))
01262 
01263 #define power_timer1_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM1))
01264 #define power_timer1_disable()  (PRR0 |= (uint8_t)(1 << PRTIM1))
01265 
01266 #define power_timer0_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM0))
01267 #define power_timer0_disable()  (PRR0 |= (uint8_t)(1 << PRTIM0))
01268 
01269 #define power_timer2_enable()   (PRR0 &= (uint8_t)~(1 << PRTIM2))
01270 #define power_timer2_disable()  (PRR0 |= (uint8_t)(1 << PRTIM2))
01271 
01272 #define power_twi_enable()      (PRR0 &= (uint8_t)~(1 << PRTWI))
01273 #define power_twi_disable()     (PRR0 |= (uint8_t)(1 << PRTWI))
01274 
01275 #define power_usbh_enable()     (PRR1 &= (uint8_t)~(1 << PRUSBH))
01276 #define power_usbh_disable()    (PRR1 |= (uint8_t)(1 << PRUSBH))
01277 
01278 #define power_usb_enable()      (PRR1 &= (uint8_t)~(1 << PRUSB))
01279 #define power_usb_disable()     (PRR1 |= (uint8_t)(1 << PRUSB))
01280 
01281 #define power_hsspi_enable()    (PRR1 &= (uint8_t)~(1 << PRHSSPI))
01282 #define power_hsspi_disable()   (PRR1 |= (uint8_t)(1 << PRHSSPI))
01283 
01284 #define power_sci_enable()      (PRR1 &= (uint8_t)~(1 << PRSCI))
01285 #define power_sci_disable()     (PRR1 |= (uint8_t)(1 << PRSCI))
01286 
01287 #define power_aes_enable()      (PRR1 &= (uint8_t)~(1 << PRAES))
01288 #define power_aes_disable()     (PRR1 |= (uint8_t)(1 << PRAES))
01289 
01290 #define power_kb_enable()       (PRR1 &= (uint8_t)~(1 << PRKB))
01291 #define power_kb_disable()      (PRR1 |= (uint8_t)(1 << PRKB))
01292 
01293 #define power_all_enable() \
01294 do{ \
01295     PRR0 &= (uint8_t)~((1<<PRUSART0)|(1<<PRSPI)|(1<<PRTIM1)|(1<<PRTIM0)|(1<<PRTIM2)|(1<<PRTWI)); \
01296     PRR1 &= (uint8_t)~((1<<PRUSBH)|(1<<PRUSB)|(1<<PRHSSPI)|(1<<PRSCI)|(1<<PRAES)|(1<<PRKB)); \
01297 }while(0)
01298 
01299 #define power_all_disable() \
01300 do{ \
01301     PRR0 |= (uint8_t)((1<<PRUSART0)|(1<<PRSPI)|(1<<PRTIM1)|(1<<PRTIM0)|(1<<PRTIM2)|(1<<PRTWI)); \
01302     PRR1 |= (uint8_t)((1<<PRUSBH)|(1<<PRUSB)|(1<<PRHSSPI)|(1<<PRSCI)|(1<<PRAES)|(1<<PRKB)); \
01303 }while(0)
01304 
01305 
01306 #elif defined(__AVR_ATtiny4__) \
01307 || defined(__AVR_ATtiny5__) \
01308 || defined(__AVR_ATtiny9__) \
01309 || defined(__AVR_ATtiny10__) \
01310 || defined(__AVR_ATtiny13A__) \
01311 
01312 #define power_adc_enable()   (PRR &= (uint8_t)~(1 << PRADC))
01313 #define power_adc_disable()  (PRR |= (uint8_t)(1 << PRADC))
01314 
01315 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01316 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01317 
01318 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRTIM0)))
01319 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRTIM0)))
01320 
01321 
01322 #elif defined(__AVR_ATtiny20__) \
01323 || defined(__AVR_ATtiny40__)
01324 
01325 #define power_adc_enable()   (PRR &= (uint8_t)~(1 << PRADC))
01326 #define power_adc_disable()  (PRR |= (uint8_t)(1 << PRADC))
01327 
01328 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
01329 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
01330 
01331 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
01332 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
01333 
01334 #define power_spi_enable()   (PRR &= (uint8_t)~(1 << PRSPI))
01335 #define power_spi_disable()  (PRR |= (uint8_t)(1 << PRSPI))
01336 
01337 #define power_twi_enable()   (PRR &= (uint8_t)~(1 << PRTWI))
01338 #define power_twi_disable()  (PRR |= (uint8_t)(1 << PRTWI))
01339 
01340 #define power_all_enable()      (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRSPI)|(1<<PRTWI)))
01341 #define power_all_disable()     (PRR |= (uint8_t)((1<<PRADC)|(1<<PRTIM0)|(1<<PRTIM1)|(1<<PRSPI)|(1<<PRTWI)))
01342 
01343 #endif
01344 
01345 
01346 #if defined(__AVR_AT90CAN32__) \
01347 || defined(__AVR_AT90CAN64__) \
01348 || defined(__AVR_AT90CAN128__) \
01349 || defined(__AVR_AT90PWM1__) \
01350 || defined(__AVR_AT90PWM2__) \
01351 || defined(__AVR_AT90PWM2B__) \
01352 || defined(__AVR_AT90PWM3__) \
01353 || defined(__AVR_AT90PWM3B__) \
01354 || defined(__AVR_AT90PWM216__) \
01355 || defined(__AVR_AT90PWM316__) \
01356 || defined(__AVR_AT90SCR100__) \
01357 || defined(__AVR_AT90USB646__) \
01358 || defined(__AVR_AT90USB647__) \
01359 || defined(__AVR_AT90USB82__) \
01360 || defined(__AVR_AT90USB1286__) \
01361 || defined(__AVR_AT90USB1287__) \
01362 || defined(__AVR_AT90USB162__) \
01363 || defined(__AVR_ATmega1280__) \
01364 || defined(__AVR_ATmega1281__) \
01365 || defined(__AVR_ATmega128RFA1__) \
01366 || defined(__AVR_ATmega1284P__) \
01367 || defined(__AVR_ATmega162__) \
01368 || defined(__AVR_ATmega164A__) \
01369 || defined(__AVR_ATmega164P__) \
01370 || defined(__AVR_ATmega165__) \
01371 || defined(__AVR_ATmega165A__) \
01372 || defined(__AVR_ATmega165P__) \
01373 || defined(__AVR_ATmega168__) \
01374 || defined(__AVR_ATmega168P__) \
01375 || defined(__AVR_ATmega169__) \
01376 || defined(__AVR_ATmega169A__) \
01377 || defined(__AVR_ATmega169P__) \
01378 || defined(__AVR_ATmega169PA__) \
01379 || defined(__AVR_ATmega16U4__) \
01380 || defined(__AVR_ATmega2560__) \
01381 || defined(__AVR_ATmega2561__) \
01382 || defined(__AVR_ATmega324A__) \
01383 || defined(__AVR_ATmega324P__) \
01384 || defined(__AVR_ATmega325__) \
01385 || defined(__AVR_ATmega325A__) \
01386 || defined(__AVR_ATmega3250__) \
01387 || defined(__AVR_ATmega3250A__) \
01388 || defined(__AVR_ATmega328P__) \
01389 || defined(__AVR_ATmega329__) \
01390 || defined(__AVR_ATmega329A__) \
01391 || defined(__AVR_ATmega329P__) \
01392 || defined(__AVR_ATmega329PA__) \
01393 || defined(__AVR_ATmega3290__) \
01394 || defined(__AVR_ATmega3290A__) \
01395 || defined(__AVR_ATmega32C1__) \
01396 || defined(__AVR_ATmega32HVB__) \
01397 || defined(__AVR_ATmega32HVBREVB__) \
01398 || defined(__AVR_ATmega16HVB__) \
01399 || defined(__AVR_ATmega16HVBREVB__) \
01400 || defined(__AVR_ATmega32M1__) \
01401 || defined(__AVR_ATmega32U2__) \
01402 || defined(__AVR_ATmega32U4__) \
01403 || defined(__AVR_ATmega32U6__) \
01404 || defined(__AVR_ATmega48__) \
01405 || defined(__AVR_ATmega48P__) \
01406 || defined(__AVR_ATmega640__) \
01407 || defined(__AVR_ATmega649P__) \
01408 || defined(__AVR_ATmega644__) \
01409 || defined(__AVR_ATmega644A__) \
01410 || defined(__AVR_ATmega644P__) \
01411 || defined(__AVR_ATmega644PA__) \
01412 || defined(__AVR_ATmega645__) \
01413 || defined(__AVR_ATmega645A__) \
01414 || defined(__AVR_ATmega645P__) \
01415 || defined(__AVR_ATmega6450__) \
01416 || defined(__AVR_ATmega6450A__) \
01417 || defined(__AVR_ATmega6450P__) \
01418 || defined(__AVR_ATmega649__) \
01419 || defined(__AVR_ATmega649A__) \
01420 || defined(__AVR_ATmega6490__) \
01421 || defined(__AVR_ATmega6490A__) \
01422 || defined(__AVR_ATmega6490P__) \
01423 || defined(__AVR_ATmega88__) \
01424 || defined(__AVR_ATmega88P__) \
01425 || defined(__AVR_ATtiny48__) \
01426 || defined(__AVR_ATtiny167__) \
01427 || defined(__DOXYGEN__)
01428 
01429 
01430 /** \addtogroup avr_power
01431 
01432 Some of the newer AVRs contain a System Clock Prescale Register (CLKPR) that
01433 allows you to decrease the system clock frequency and the power consumption
01434 when the need for processing power is low. Below are two macros and an
01435 enumerated type that can be used to interface to the Clock Prescale Register.
01436 
01437 \note Not all AVR devices have a Clock Prescale Register. On those devices
01438 without a Clock Prescale Register, these macros are not available.
01439 */
01440 
01441 
01442 /** \addtogroup avr_power
01443 \code 
01444 typedef enum
01445 {
01446     clock_div_1 = 0,
01447     clock_div_2 = 1,
01448     clock_div_4 = 2,
01449     clock_div_8 = 3,
01450     clock_div_16 = 4,
01451     clock_div_32 = 5,
01452     clock_div_64 = 6,
01453     clock_div_128 = 7,
01454     clock_div_256 = 8,
01455     clock_div_1_rc = 15, // ATmega128RFA1 only
01456 } clock_div_t;
01457 \endcode
01458 Clock prescaler setting enumerations.
01459 
01460 */
01461 typedef enum
01462 {
01463     clock_div_1 = 0,
01464     clock_div_2 = 1,
01465     clock_div_4 = 2,
01466     clock_div_8 = 3,
01467     clock_div_16 = 4,
01468     clock_div_32 = 5,
01469     clock_div_64 = 6,
01470     clock_div_128 = 7,
01471     clock_div_256 = 8
01472 #if defined(__AVR_ATmega128RFA1__)
01473     , clock_div_1_rc = 15
01474 #endif
01475 } clock_div_t;
01476 
01477 
01478 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01479 
01480 /** \addtogroup avr_power
01481 \code clock_prescale_set(x) \endcode
01482 
01483 Set the clock prescaler register select bits, selecting a system clock
01484 division setting. This function is inlined, even if compiler
01485 optimizations are disabled.
01486 
01487 The type of x is clock_div_t.
01488 */
01489 void clock_prescale_set(clock_div_t __x)
01490 {
01491     uint8_t __tmp = _BV(CLKPCE);
01492     __asm__ __volatile__ (
01493         "in __tmp_reg__,__SREG__" "\n\t"
01494         "cli" "\n\t"
01495         "sts %1, %0" "\n\t"
01496         "sts %1, %2" "\n\t"
01497         "out __SREG__, __tmp_reg__"
01498         : /* no outputs */
01499         : "d" (__tmp),
01500           "M" (_SFR_MEM_ADDR(CLKPR)),
01501           "d" (__x)
01502         : "r0");
01503 }
01504 
01505 /** \addtogroup avr_power
01506 \code clock_prescale_get() \endcode
01507 Gets and returns the clock prescaler register setting. The return type is clock_div_t.
01508 
01509 */
01510 #define clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
01511 
01512 
01513 #elif defined(__AVR_ATtiny24__) \
01514 || defined(__AVR_ATtiny24A__) \
01515 || defined(__AVR_ATtiny44__) \
01516 || defined(__AVR_ATtiny44A__) \
01517 || defined(__AVR_ATtiny84__) \
01518 || defined(__AVR_ATtiny84A__) \
01519 || defined(__AVR_ATtiny25__) \
01520 || defined(__AVR_ATtiny45__) \
01521 || defined(__AVR_ATtiny85__) \
01522 || defined(__AVR_ATtiny261A__) \
01523 || defined(__AVR_ATtiny261__) \
01524 || defined(__AVR_ATtiny461__) \
01525 || defined(__AVR_ATtiny461A__) \
01526 || defined(__AVR_ATtiny861__) \
01527 || defined(__AVR_ATtiny861A__) \
01528 || defined(__AVR_ATtiny2313__) \
01529 || defined(__AVR_ATtiny2313A__) \
01530 || defined(__AVR_ATtiny4313__) \
01531 || defined(__AVR_ATtiny13__) \
01532 || defined(__AVR_ATtiny13A__) \
01533 || defined(__AVR_ATtiny43U__) \
01534 
01535 typedef enum
01536 {
01537     clock_div_1 = 0,
01538     clock_div_2 = 1,
01539     clock_div_4 = 2,
01540     clock_div_8 = 3,
01541     clock_div_16 = 4,
01542     clock_div_32 = 5,
01543     clock_div_64 = 6,
01544     clock_div_128 = 7,
01545     clock_div_256 = 8
01546 } clock_div_t;
01547 
01548 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01549 
01550 void clock_prescale_set(clock_div_t __x)
01551 {
01552     uint8_t __tmp = _BV(CLKPCE);
01553     __asm__ __volatile__ (
01554         "in __tmp_reg__,__SREG__" "\n\t"
01555         "cli" "\n\t"
01556         "out %1, %0" "\n\t"
01557         "out %1, %2" "\n\t"
01558         "out __SREG__, __tmp_reg__"
01559         : /* no outputs */
01560         : "d" (__tmp),
01561           "I" (_SFR_IO_ADDR(CLKPR)),
01562           "d" (__x)
01563         : "r0");
01564 }
01565 
01566 
01567 #define clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
01568 
01569 
01570 #endif
01571 
01572 
01573 
01574 
01575 #endif /* _AVR_POWER_H_ */

Automatically generated by Doxygen 1.7.2 on Wed Feb 16 2011.

翻訳更新:2011年10月8日 by cega