$treeview $search $mathjax $extrastylesheet
avr-libc  2.0.0
$projectbrief
$projectbrief
$searchbox

AVR Libc Home Page

AVRs

AVR Libc Development Pages

Main Page

User Manual

Library Reference

FAQ

Example Projects

power.h

Go to the documentation of this file.
00001 /* Copyright (c) 2006, 2007, 2008  Eric B. Weddington
00002    Copyright (c) 2011 Frédéric Nadeau
00003    All rights reserved.
00004 
00005    Redistribution and use in source and binary forms, with or without
00006    modification, are permitted provided that the following conditions are met:
00007 
00008    * Redistributions of source code must retain the above copyright
00009      notice, this list of conditions and the following disclaimer.
00010    * Redistributions in binary form must reproduce the above copyright
00011      notice, this list of conditions and the following disclaimer in
00012      the documentation and/or other materials provided with the
00013      distribution.
00014    * Neither the name of the copyright holders nor the names of
00015      contributors may be used to endorse or promote products derived
00016      from this software without specific prior written permission.
00017 
00018   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00019   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00022   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028   POSSIBILITY OF SUCH DAMAGE. */
00029 
00030 /* $Id$ */
00031 
00032 #ifndef _AVR_POWER_H_
00033 #define _AVR_POWER_H_   1
00034 
00035 #include <avr/io.h>
00036 #include <stdint.h>
00037 
00038 
00039 /** \file */
00040 /** \defgroup avr_power <avr/power.h>: Power Reduction Management
00041 
00042 \code #include <avr/power.h>\endcode
00043 
00044 Many AVRs contain a Power Reduction Register (PRR) or Registers (PRRx) that 
00045 allow you to reduce power consumption by disabling or enabling various on-board 
00046 peripherals as needed. Some devices have the XTAL Divide Control Register
00047 (XDIV) which offer similar functionality as System Clock Prescale
00048 Register (CLKPR).
00049 
00050 There are many macros in this header file that provide an easy interface
00051 to enable or disable on-board peripherals to reduce power. See the table below.
00052 
00053 \note Not all AVR devices have a Power Reduction Register (for example
00054 the ATmega8). On those devices without a Power Reduction Register, the
00055 power reduction macros are not available..
00056 
00057 \note Not all AVR devices contain the same peripherals (for example, the LCD
00058 interface), or they will be named differently (for example, USART and 
00059 USART0). Please consult your device's datasheet, or the header file, to 
00060 find out which macros are applicable to your device.
00061 
00062 \note For device using the XTAL Divide Control Register (XDIV), when prescaler
00063 is used, Timer/Counter0 can only be used in asynchronous mode. Keep in mind
00064 that Timer/Counter0 source shall be less than ¼th of peripheral clock.
00065 Therefore, when using a typical 32.768 kHz crystal, one shall not scale
00066 the clock below 131.072 kHz.
00067 
00068 */
00069 
00070 
00071 /** \addtogroup avr_power
00072 
00073 \anchor avr_powermacros
00074 <small>
00075 <center>
00076 <table border="3">
00077   <tr>
00078     <td width="10%"><strong>Power Macro</strong></td>
00079     <td width="15%"><strong>Description</strong></td>
00080   </tr>
00081 
00082   <tr>
00083     <td>power_aca_disable()</td>
00084     <td>Disable the Analog Comparator on PortA.</td>
00085   </tr>
00086 
00087   <tr>
00088     <td>power_aca_enable()</td>
00089     <td>Enable the Analog Comparator on PortA.</td>
00090   </tr>
00091 
00092   <tr>
00093     <td>power_adc_enable()</td>
00094     <td>Enable the Analog to Digital Converter module.</td>
00095   </tr>
00096 
00097   <tr>
00098     <td>power_adc_disable()</td>
00099     <td>Disable the Analog to Digital Converter module.</td>
00100   </tr>
00101 
00102   <tr>
00103     <td>power_adca_disable()</td>
00104     <td>Disable the Analog to Digital Converter module on PortA</td>
00105   </tr>
00106 
00107   <tr>
00108     <td>power_adca_enable()</td>
00109     <td>Enable the Analog to Digital Converter module on PortA</td>
00110   </tr>
00111 
00112   <tr>
00113     <td>power_evsys_disable()</td>
00114     <td>Disable the EVSYS module</td>
00115   </tr>
00116 
00117   <tr>
00118     <td>power_evsys_enable()</td>
00119     <td>Enable the EVSYS module</td>
00120   </tr>
00121 
00122   <tr>
00123     <td>power_hiresc_disable()</td>
00124     <td>Disable the HIRES module on PortC</td>
00125   </tr>
00126 
00127   <tr>
00128     <td>power_hiresc_enable()</td>
00129     <td>Enable the HIRES module on PortC</td>
00130   </tr>
00131 
00132    <tr>
00133     <td>power_lcd_enable()</td>
00134     <td>Enable the LCD module.</td>
00135   </tr>
00136 
00137   <tr>
00138     <td>power_lcd_disable().</td>
00139     <td>Disable the LCD module.</td>
00140   </tr>
00141 
00142   <tr>
00143     <td>power_pga_enable()</td>
00144     <td>Enable the Programmable Gain Amplifier module.</td>
00145   </tr>
00146 
00147   <tr>
00148     <td>power_pga_disable()</td>
00149     <td>Disable the Programmable Gain Amplifier module.</td>
00150   </tr>
00151   
00152   <tr>
00153     <td>power_pscr_enable()</td>
00154     <td>Enable the Reduced Power Stage Controller module.</td>
00155   </tr>
00156 
00157   <tr>
00158     <td>power_pscr_disable()</td>
00159     <td>Disable the Reduced Power Stage Controller module.</td>
00160   </tr>
00161 
00162   <tr>
00163     <td>power_psc0_enable()</td>
00164     <td>Enable the Power Stage Controller 0 module.</td>
00165   </tr>
00166 
00167   <tr>
00168     <td>power_psc0_disable()</td>
00169     <td>Disable the Power Stage Controller 0 module.</td>
00170   </tr>
00171 
00172   <tr>
00173     <td>power_psc1_enable()</td>
00174     <td>Enable the Power Stage Controller 1 module.</td>
00175   </tr>
00176 
00177   <tr>
00178     <td>power_psc1_disable()</td>
00179     <td>Disable the Power Stage Controller 1 module.</td>
00180   </tr>
00181 
00182   <tr>
00183     <td>power_psc2_enable()</td>
00184     <td>Enable the Power Stage Controller 2 module.</td>
00185   </tr>
00186 
00187   <tr>
00188     <td>power_psc2_disable()</td>
00189     <td>Disable the Power Stage Controller 2 module.</td>
00190   </tr>
00191 
00192   <tr>
00193     <td>power_ram0_enable()</td>
00194     <td>Enable the SRAM block 0 .</td>
00195   </tr>
00196 
00197   <tr>
00198     <td>power_ram0_disable()</td>
00199     <td>Disable the SRAM block 0. </td>
00200   </tr>
00201 
00202   <tr>
00203     <td>power_ram1_enable()</td>
00204     <td>Enable the SRAM block 1 .</td>
00205   </tr>
00206 
00207   <tr>
00208     <td>power_ram1_disable()</td>
00209     <td>Disable the SRAM block 1. </td>
00210   </tr>
00211 
00212   <tr>
00213     <td>power_ram2_enable()</td>
00214     <td>Enable the SRAM block 2 .</td>
00215   </tr>
00216 
00217   <tr>
00218     <td>power_ram2_disable()</td>
00219     <td>Disable the SRAM block 2. </td>
00220   </tr>
00221 
00222   <tr>
00223     <td>power_ram3_enable()</td>
00224     <td>Enable the SRAM block 3 .</td>
00225   </tr>
00226 
00227   <tr>
00228     <td>power_ram3_disable()</td>
00229     <td>Disable the SRAM block 3. </td>
00230   </tr>
00231 
00232   <tr>
00233     <td>power_rtc_disable()</td>
00234     <td>Disable the RTC module</td>
00235   </tr>
00236 
00237   <tr>
00238     <td>power_rtc_enable()</td>
00239     <td>Enable the RTC module</td>
00240   </tr>
00241 
00242   <tr>
00243     <td>power_spi_enable()</td>
00244     <td>Enable the Serial Peripheral Interface module.</td>
00245   </tr>
00246 
00247   <tr>
00248     <td>power_spi_disable()</td>
00249     <td>Disable the Serial Peripheral Interface module.</td>
00250   </tr>
00251 
00252   <tr>
00253     <td>power_spic_disable()</td>
00254     <td>Disable the SPI module on PortC</td>
00255   </tr>
00256 
00257   <tr>
00258     <td>power_spic_enable()</td>
00259     <td>Enable the SPI module on PortC</td>
00260   </tr>
00261 
00262   <tr>
00263     <td>power_spid_disable()</td>
00264     <td>Disable the SPI module on PortD</td>
00265   </tr>
00266 
00267   <tr>
00268     <td>power_spid_enable()</td>
00269     <td>Enable the SPI module on PortD</td>
00270   </tr>
00271 
00272   <tr>
00273     <td>power_tc0c_disable()</td>
00274     <td>Disable the TC0 module on PortC</td>
00275   </tr>
00276 
00277   <tr>
00278     <td>power_tc0c_enable()</td>
00279     <td>Enable the TC0 module on PortC</td>
00280   </tr>
00281 
00282   <tr>
00283     <td>power_tc0d_disable()</td>
00284     <td>Disable the TC0 module on PortD</td>
00285   </tr>
00286 
00287   <tr>
00288     <td>power_tc0d_enable()</td>
00289     <td>Enable the TC0 module on PortD</td>
00290   </tr>
00291 
00292   <tr>
00293     <td>power_tc0e_disable()</td>
00294     <td>Disable the TC0 module on PortE</td>
00295   </tr>
00296 
00297   <tr>
00298     <td>power_tc0e_enable()</td>
00299     <td>Enable the TC0 module on PortE</td>
00300   </tr>
00301 
00302   <tr>
00303     <td>power_tc0f_disable()</td>
00304     <td>Disable the TC0 module on PortF</td>
00305   </tr>
00306 
00307   <tr>
00308     <td>power_tc0f_enable()</td>
00309     <td>Enable the TC0 module on PortF</td>
00310   </tr>
00311 
00312   <tr>
00313     <td>power_tc1c_disable()</td>
00314     <td>Disable the TC1 module on PortC</td>
00315   </tr>
00316 
00317   <tr>
00318     <td>power_tc1c_enable()</td>
00319     <td>Enable the TC1 module on PortC</td>
00320   </tr>
00321 
00322   <tr>
00323     <td>power_twic_disable()</td>
00324     <td>Disable the Two Wire Interface module on PortC</td>
00325   </tr>
00326 
00327   <tr>
00328     <td>power_twic_enable()</td>
00329     <td>Enable the Two Wire Interface module on PortC</td>
00330   </tr>
00331 
00332   <tr>
00333     <td>power_twie_disable()</td>
00334     <td>Disable the Two Wire Interface module on PortE</td>
00335   </tr>
00336 
00337   <tr>
00338     <td>power_twie_enable()</td>
00339     <td>Enable the Two Wire Interface module on PortE</td>
00340   </tr>
00341 
00342   <tr>
00343     <td>power_timer0_enable()</td>
00344     <td>Enable the Timer 0 module.</td>
00345   </tr>
00346 
00347   <tr>
00348     <td>power_timer0_disable()</td>
00349     <td>Disable the Timer 0 module.</td>
00350   </tr>
00351 
00352   <tr>
00353     <td>power_timer1_enable()</td>
00354     <td>Enable the Timer 1 module.</td>
00355   </tr>
00356 
00357   <tr>
00358     <td>power_timer1_disable()</td>
00359     <td>Disable the Timer 1 module.</td>
00360   </tr>
00361 
00362   <tr>
00363     <td>power_timer2_enable()</td>
00364     <td>Enable the Timer 2 module.</td>
00365   </tr>
00366 
00367   <tr>
00368     <td>power_timer2_disable()</td>
00369     <td>Disable the Timer 2 module.</td>
00370   </tr>
00371 
00372   <tr>
00373     <td>power_timer3_enable()</td>
00374     <td>Enable the Timer 3 module.</td>
00375   </tr>
00376 
00377   <tr>
00378     <td>power_timer3_disable()</td>
00379     <td>Disable the Timer 3 module.</td>
00380   </tr>
00381 
00382   <tr>
00383     <td>power_timer4_enable()</td>
00384     <td>Enable the Timer 4 module.</td>
00385   </tr>
00386 
00387   <tr>
00388     <td>power_timer4_disable()</td>
00389     <td>Disable the Timer 4 module.</td>
00390   </tr>
00391 
00392   <tr>
00393     <td>power_timer5_enable()</td>
00394     <td>Enable the Timer 5 module.</td>
00395   </tr>
00396 
00397   <tr>
00398     <td>power_timer5_disable()</td>
00399     <td>Disable the Timer 5 module.</td>
00400   </tr>
00401 
00402   <tr>
00403     <td>power_twi_enable()</td>
00404     <td>Enable the Two Wire Interface module.</td>
00405   </tr>
00406 
00407   <tr>
00408     <td>power_twi_disable()</td>
00409     <td>Disable the Two Wire Interface module.</td>
00410   </tr>
00411 
00412   <tr>
00413     <td>power_usart_enable()</td>
00414     <td>Enable the USART module.</td>
00415   </tr>
00416 
00417   <tr>
00418     <td>power_usart_disable()</td>
00419     <td>Disable the USART module.</td>
00420   </tr>
00421 
00422   <tr>
00423     <td>power_usart0_enable()</td>
00424     <td>Enable the USART 0 module.</td>
00425   </tr>
00426 
00427   <tr>
00428     <td>power_usart0_disable()</td>
00429     <td>Disable the USART 0 module.</td>
00430   </tr>
00431 
00432   <tr>
00433     <td>power_usart1_enable()</td>
00434     <td>Enable the USART 1 module.</td>
00435   </tr>
00436 
00437   <tr>
00438     <td>power_usart1_disable()</td>
00439     <td>Disable the USART 1 module.</td>
00440   </tr>
00441 
00442   <tr>
00443     <td>power_usart2_enable()</td>
00444     <td>Enable the USART 2 module.</td>
00445   </tr>
00446 
00447   <tr>
00448     <td>power_usart2_disable()</td>
00449     <td>Disable the USART 2 module.</td>
00450   </tr>
00451 
00452   <tr>
00453     <td>power_usart3_enable()</td>
00454     <td>Enable the USART 3 module.</td>
00455   </tr>
00456 
00457   <tr>
00458     <td>power_usart3_disable()</td>
00459     <td>Disable the USART 3 module.</td>
00460   </tr>
00461 
00462   <tr>
00463     <td>power_usartc0_disable()</td>
00464     <td> Disable the USART0 module on PortC</td>
00465   </tr>
00466 
00467   <tr>
00468     <td>power_usartc0_enable()</td>
00469     <td> Enable the USART0 module on PortC</td>
00470   </tr>
00471 
00472   <tr>
00473     <td>power_usartd0_disable()</td>
00474     <td> Disable the USART0 module on PortD</td>
00475   </tr>
00476 
00477   <tr>
00478     <td>power_usartd0_enable()</td>
00479     <td> Enable the USART0 module on PortD</td>
00480   </tr>
00481 
00482   <tr>
00483     <td>power_usarte0_disable()</td>
00484     <td> Disable the USART0 module on PortE</td>
00485   </tr>
00486 
00487   <tr>
00488     <td>power_usarte0_enable()</td>
00489     <td> Enable the USART0 module on PortE</td>
00490   </tr>
00491 
00492   <tr>
00493     <td>power_usartf0_disable()</td>
00494     <td> Disable the USART0 module on PortF</td>
00495   </tr>
00496 
00497   <tr>
00498     <td>power_usartf0_enable()</td>
00499     <td> Enable the USART0 module on PortF</td>
00500   </tr>
00501 
00502   <tr>
00503     <td>power_usb_enable()</td>
00504     <td>Enable the USB module.</td>
00505   </tr>
00506 
00507   <tr>
00508     <td>power_usb_disable()</td>
00509     <td>Disable the USB module.</td>
00510   </tr>
00511 
00512   <tr>
00513     <td>power_usi_enable()</td>
00514     <td>Enable the Universal Serial Interface module.</td>
00515   </tr>
00516 
00517   <tr>
00518     <td>power_usi_disable()</td>
00519     <td>Disable the Universal Serial Interface module.</td>
00520   </tr>
00521 
00522   <tr>
00523     <td>power_vadc_enable()</td>
00524     <td>Enable the Voltage ADC module.</td>
00525   </tr>
00526 
00527   <tr>
00528     <td>power_vadc_disable()</td>
00529     <td>Disable the Voltage ADC module.</td>
00530   </tr>
00531 
00532   <tr>
00533     <td>power_all_enable()</td>
00534     <td>Enable all modules.</td>
00535   </tr>
00536 
00537   <tr>
00538     <td>power_all_disable()</td>
00539     <td>Disable all modules.</td>
00540   </tr>
00541 </table>
00542 </center>
00543 </small>
00544 
00545 @} */
00546 
00547 #if defined(__AVR_HAVE_PRR_PRADC)
00548 #define power_adc_enable()      (PRR &= (uint8_t)~(1 << PRADC))
00549 #define power_adc_disable()     (PRR |= (uint8_t)(1 << PRADC))
00550 #endif
00551 
00552 #if defined(__AVR_HAVE_PRR_PRCAN)
00553 #define power_can_enable()      (PRR &= (uint8_t)~(1 << PRCAN))
00554 #define power_can_disable()     (PRR |= (uint8_t)(1 << PRCAN))
00555 #endif
00556 
00557 #if defined(__AVR_HAVE_PRR_PRLCD)
00558 #define power_lcd_enable()      (PRR &= (uint8_t)~(1 << PRLCD))
00559 #define power_lcd_disable()     (PRR |= (uint8_t)(1 << PRLCD))
00560 #endif
00561 
00562 #if defined(__AVR_HAVE_PRR_PRLIN)
00563 #define power_lin_enable()      (PRR &= (uint8_t)~(1 << PRLIN))
00564 #define power_lin_disable()     (PRR |= (uint8_t)(1 << PRLIN))
00565 #endif
00566 
00567 #if defined(__AVR_HAVE_PRR_PRPSC)
00568 #define power_psc_enable()      (PRR &= (uint8_t)~(1 << PRPSC))
00569 #define power_psc_disable()     (PRR |= (uint8_t)(1 << PRPSC))
00570 #endif
00571 
00572 #if defined(__AVR_HAVE_PRR_PRPSC0)
00573 #define power_psc0_enable()     (PRR &= (uint8_t)~(1 << PRPSC0))
00574 #define power_psc0_disable()    (PRR |= (uint8_t)(1 << PRPSC0))
00575 #endif
00576 
00577 #if defined(__AVR_HAVE_PRR_PRPSC1)
00578 #define power_psc1_enable()     (PRR &= (uint8_t)~(1 << PRPSC1))
00579 #define power_psc1_disable()    (PRR |= (uint8_t)(1 << PRPSC1))
00580 #endif
00581 
00582 #if defined(__AVR_HAVE_PRR_PRPSC2)
00583 #define power_psc2_enable()     (PRR &= (uint8_t)~(1 << PRPSC2))
00584 #define power_psc2_disable()    (PRR |= (uint8_t)(1 << PRPSC2))
00585 #endif
00586 
00587 #if defined(__AVR_HAVE_PRR_PRPSCR)
00588 #define power_pscr_enable()     (PRR &= (uint8_t)~(1 << PRPSCR))
00589 #define power_pscr_disable()    (PRR |= (uint8_t)(1 << PRPSCR))
00590 #endif
00591 
00592 #if defined(__AVR_HAVE_PRR_PRSPI)
00593 #define power_spi_enable()      (PRR &= (uint8_t)~(1 << PRSPI))
00594 #define power_spi_disable()     (PRR |= (uint8_t)(1 << PRSPI))
00595 #endif
00596 
00597 #if defined(__AVR_HAVE_PRR_PRTIM0)
00598 #define power_timer0_enable()   (PRR &= (uint8_t)~(1 << PRTIM0))
00599 #define power_timer0_disable()  (PRR |= (uint8_t)(1 << PRTIM0))
00600 #endif
00601 
00602 #if defined(__AVR_HAVE_PRR_PRTIM1)
00603 #define power_timer1_enable()   (PRR &= (uint8_t)~(1 << PRTIM1))
00604 #define power_timer1_disable()  (PRR |= (uint8_t)(1 << PRTIM1))
00605 #endif
00606 
00607 #if defined(__AVR_HAVE_PRR_PRTIM2)
00608 #define power_timer2_enable()   (PRR &= (uint8_t)~(1 << PRTIM2))
00609 #define power_timer2_disable()  (PRR |= (uint8_t)(1 << PRTIM2))
00610 #endif
00611 
00612 #if defined(__AVR_HAVE_PRR_PRTWI)
00613 #define power_twi_enable()      (PRR &= (uint8_t)~(1 << PRTWI))
00614 #define power_twi_disable()     (PRR |= (uint8_t)(1 << PRTWI))
00615 #endif
00616 
00617 #if defined(__AVR_HAVE_PRR_PRUSART)
00618 #define power_usart_enable()    (PRR &= (uint8_t)~(1 << PRUSART))
00619 #define power_usart_disable()   (PRR |= (uint8_t)(1 << PRUSART))
00620 #endif
00621 
00622 #if defined(__AVR_HAVE_PRR_PRUSART0)
00623 #define power_usart0_enable()   (PRR &= (uint8_t)~(1 << PRUSART0))
00624 #define power_usart0_disable()  (PRR |= (uint8_t)(1 << PRUSART0))
00625 #endif
00626 
00627 #if defined(__AVR_HAVE_PRR_PRUSART1)
00628 #define power_usart1_enable()   (PRR &= (uint8_t)~(1 << PRUSART1))
00629 #define power_usart1_disable()  (PRR |= (uint8_t)(1 << PRUSART1))
00630 #endif
00631 
00632 #if defined(__AVR_HAVE_PRR_PRUSI)
00633 #define power_usi_enable()      (PRR &= (uint8_t)~(1 << PRUSI))
00634 #define power_usi_disable()     (PRR |= (uint8_t)(1 << PRUSI))
00635 #endif
00636 
00637 #if defined(__AVR_HAVE_PRR0_PRADC)
00638 #define power_adc_enable()      (PRR0 &= (uint8_t)~(1 << PRADC))
00639 #define power_adc_disable()     (PRR0 |= (uint8_t)(1 << PRADC))
00640 #endif
00641 
00642 #if defined(__AVR_HAVE_PRR0_PRCO)
00643 #define power_clock_output_enable()     (PRR0 &= (uint8_t)~(1 << PRCO))
00644 #define power_clock_output_disable()    (PRR0 |= (uint8_t)(1 << PRCO))
00645 #endif
00646 
00647 #if defined(__AVR_HAVE_PRR0_PRCRC)
00648 #define power_crc_enable()              (PRR0 &= (uint8_t)~(1 << PRCRC))
00649 #define power_crc_disable()             (PRR0 |= (uint8_t)(1 << PRCRC))
00650 #endif
00651 
00652 #if defined(__AVR_HAVE_PRR0_PRCU)
00653 #define power_crypto_enable()           (PRR0 &= (uint8_t)~(1 << PRCU))
00654 #define power_crypto_disable()          (PRR0 |= (uint8_t)(1 << PRCU))
00655 #endif
00656 
00657 #if defined(__AVR_HAVE_PRR0_PRDS)
00658 #define power_irdriver_enable()         (PRR0 &= (uint8_t)~(1 << PRDS))
00659 #define power_irdriver_disable()        (PRR0 |= (uint8_t)(1 << PRDS))
00660 #endif
00661 
00662 #if defined(__AVR_HAVE_PRR0_PRLFR)
00663 #define power_lfreceiver_enable()       (PRR0 &= (uint8_t)~(1 << PRLFR))
00664 #define power_lfreceiver_disable()      (PRR0 |= (uint8_t)(1 << PRLFR))
00665 #endif
00666 
00667 #if defined(__AVR_HAVE_PRR0_PRLFRS)
00668 #define power_lfrs_enable()             (PRR0 &= (uint8_t)~(1 << PRLFRS))
00669 #define power_lfrs_disable()            (PRR0 |= (uint8_t)(1 << PRLFRS))
00670 #endif
00671 
00672 #if defined(__AVR_HAVE_PRR0_PRLIN)
00673 #define power_lin_enable()              (PRR0 &= (uint8_t)~(1 << PRLIN))
00674 #define power_lin_disable()             (PRR0 |= (uint8_t)(1 << PRLIN))
00675 #endif
00676 
00677 #if defined(__AVR_HAVE_PRR0_PRPGA)
00678 #define power_pga_enable()              (PRR0 &= (uint8_t)~(1 << PRPGA))
00679 #define power_pga_disable()             (PRR0 |= (uint8_t)(1 << PRPGA))
00680 #endif
00681 
00682 #if defined(__AVR_HAVE_PRR0_PRRXDC)
00683 #define power_receive_dsp_control_enable()  (PRR0 &= (uint8_t)~(1 << PRRXDC))
00684 #define power_receive_dsp_control_disable() (PRR0 |= (uint8_t)(1 << PRRXDC))
00685 #endif
00686 
00687 #if defined(__AVR_HAVE_PRR0_PRSPI)
00688 #define power_spi_enable()              (PRR0 &= (uint8_t)~(1 << PRSPI))
00689 #define power_spi_disable()             (PRR0 |= (uint8_t)(1 << PRSPI))
00690 #endif
00691 
00692 #if defined(__AVR_HAVE_PRR0_PRT0)
00693 #define power_timer0_enable()           (PRR0 &= (uint8_t)~(1 << PRT0))
00694 #define power_timer0_disable()          (PRR0 |= (uint8_t)(1 << PRT0))
00695 #endif
00696 
00697 #if defined(__AVR_HAVE_PRR0_PRTIM0)
00698 #define power_timer0_enable()           (PRR0 &= (uint8_t)~(1 << PRTIM0))
00699 #define power_timer0_disable()          (PRR0 |= (uint8_t)(1 << PRTIM0))
00700 #endif
00701 
00702 #if defined(__AVR_HAVE_PRR0_PRT1)
00703 #define power_timer1_enable()           (PRR0 &= (uint8_t)~(1 << PRT1))
00704 #define power_timer1_disable()          (PRR0 |= (uint8_t)(1 << PRT1))
00705 #endif
00706 
00707 #if defined(__AVR_HAVE_PRR0_PRTIM1)
00708 #define power_timer1_enable()           (PRR0 &= (uint8_t)~(1 << PRTIM1))
00709 #define power_timer1_disable()          (PRR0 |= (uint8_t)(1 << PRTIM1))
00710 #endif
00711 
00712 #if defined(__AVR_HAVE_PRR0_PRT2)
00713 #define power_timer2_enable()           (PRR0 &= (uint8_t)~(1 << PRT2))
00714 #define power_timer2_disable()          (PRR0 |= (uint8_t)(1 << PRT2))
00715 #endif
00716 
00717 #if defined(__AVR_HAVE_PRR0_PRTIM2)
00718 #define power_timer2_enable()           (PRR0 &= (uint8_t)~(1 << PRTIM2))
00719 #define power_timer2_disable()          (PRR0 |= (uint8_t)(1 << PRTIM2))
00720 #endif
00721 
00722 #if defined(__AVR_HAVE_PRR0_PRT3)
00723 #define power_timer3_enable()           (PRR0 &= (uint8_t)~(1 << PRT3))
00724 #define power_timer3_disable()          (PRR0 |= (uint8_t)(1 << PRT3))
00725 #endif
00726 
00727 #if defined(__AVR_HAVE_PRR0_PRTM)
00728 #define power_timermodulator_enable()   (PRR0 &= (uint8_t)~(1 << PRTM))
00729 #define power_timermodulator_disable()  (PRR0 |= (uint8_t)(1 << PRTM))
00730 #endif
00731 
00732 #if defined(__AVR_HAVE_PRR0_PRTWI)
00733 #define power_twi_enable()              (PRR0 &= (uint8_t)~(1 << PRTWI))
00734 #define power_twi_disable()             (PRR0 |= (uint8_t)(1 << PRTWI))
00735 #endif
00736 
00737 #if defined(__AVR_HAVE_PRR0_PRTWI1)
00738 #define power_twi1_enable()             (PRR0 &= (uint8_t)~(1 << PRTWI1))
00739 #define power_twi1_disable()            (PRR0 |= (uint8_t)(1 << PRTWI1))
00740 #endif
00741 
00742 #if defined(__AVR_HAVE_PRR0_PRTXDC)
00743 #define power_transmit_dsp_control_enable()   (PRR0 &= (uint8_t)~(1 << PRTXDC))
00744 #define power_transmit_dsp_control_disable()  (PRR0 |= (uint8_t)(1 << PRTXDC))
00745 #endif
00746 
00747 #if defined(__AVR_HAVE_PRR0_PRUSART0)
00748 #define power_usart0_enable()           (PRR0 &= (uint8_t)~(1 << PRUSART0))
00749 #define power_usart0_disable()          (PRR0 |= (uint8_t)(1 << PRUSART0))
00750 #endif
00751 
00752 #if defined(__AVR_HAVE_PRR0_PRUSART1)
00753 #define power_usart1_enable()           (PRR0 &= (uint8_t)~(1 << PRUSART1))
00754 #define power_usart1_disable()          (PRR0 |= (uint8_t)(1 << PRUSART1))
00755 #endif
00756 
00757 #if defined(__AVR_HAVE_PRR0_PRVADC)
00758 #define power_vadc_enable()             (PRR0 &= (uint8_t)~(1 << PRVADC))
00759 #define power_vadc_disable()            (PRR0 |= (uint8_t)(1 << PRVADC))
00760 #endif
00761 
00762 #if defined(__AVR_HAVE_PRR0_PRVM)
00763 #define power_voltage_monitor_enable()  (PRR0 &= (uint8_t)~(1 << PRVM))
00764 #define power_voltage_monitor_disable() (PRR0 |= (uint8_t)(1 << PRVM))
00765 #endif
00766 
00767 #if defined(__AVR_HAVE_PRR0_PRVRM)
00768 #define power_vrm_enable()              (PRR0 &= (uint8_t)~(1 << PRVRM))
00769 #define power_vrm_disable()             (PRR0 |= (uint8_t)(1 << PRVRM))
00770 #endif
00771 
00772 #if defined(__AVR_HAVE_PRR1_PRAES)
00773 #define power_aes_enable()              (PRR1 &= (uint8_t)~(1 << PRAES))
00774 #define power_aes_disable()             (PRR1 |= (uint8_t)(1 << PRAES))
00775 #endif
00776 
00777 #if defined(__AVR_HAVE_PRR1_PRCI)
00778 #define power_cinterface_enable()       (PRR1 &= (uint8_t)~(1 << PRCI))
00779 #define power_cinterface_disable()      (PRR1 |= (uint8_t)(1 << PRCI))
00780 #endif
00781 
00782 #if defined(__AVR_HAVE_PRR1_PRHSSPI)
00783 #define power_hsspi_enable()            (PRR1 &= (uint8_t)~(1 << PRHSSPI))
00784 #define power_hsspi_disable()           (PRR1 |= (uint8_t)(1 << PRHSSPI))
00785 #endif
00786 
00787 #if defined(__AVR_HAVE_PRR1_PRKB)
00788 #define power_kb_enable()               (PRR1 &= (uint8_t)~(1 << PRKB))
00789 #define power_kb_disable()              (PRR1 |= (uint8_t)(1 << PRKB))
00790 #endif
00791 
00792 #if defined(__AVR_HAVE_PRR1_PRLFPH)
00793 #define power_lfph_enable()             (PRR1 &= (uint8_t)~(1 << PRLFPH))
00794 #define power_lfph_disable()            (PRR1 |= (uint8_t)(1 << PRLFPH))
00795 #endif
00796 
00797 #if defined(__AVR_HAVE_PRR1_PRLFR)
00798 #define power_lfreceiver_enable()       (PRR1 &= (uint8_t)~(1 << PRLFR))            
00799 #define power_lfreceiver_disable()      (PRR1 |= (uint8_t)(1 << PRLFR))            
00800 #endif
00801 
00802 #if defined(__AVR_HAVE_PRR1_PRLFTP)
00803 #define power_lftp_enable()             (PRR1 &= (uint8_t)~(1 << PRLFTP))
00804 #define power_lftp_disable()            (PRR1 |= (uint8_t)(1 << PRLFTP))
00805 #endif
00806 
00807 #if defined(__AVR_HAVE_PRR1_PRSCI)
00808 #define power_sci_enable()              (PRR1 &= (uint8_t)~(1 << PRSCI))
00809 #define power_sci_disable()             (PRR1 |= (uint8_t)(1 << PRSCI))
00810 #endif
00811 
00812 #if defined(__AVR_HAVE_PRR1_PRSPI)
00813 #define power_spi_enable()              (PRR1 &= (uint8_t)~(1 << PRSPI))
00814 #define power_spi_disable()             (PRR1 |= (uint8_t)(1 << PRSPI))
00815 #endif
00816 
00817 #if defined(__AVR_HAVE_PRR1_PRT1)
00818 #define power_timer1_enable()           (PRR1 &= (uint8_t)~(1 << PRT1))
00819 #define power_timer1_disable()          (PRR1 |= (uint8_t)(1 << PRT1))
00820 #endif
00821 
00822 #if defined(__AVR_HAVE_PRR1_PRT2)
00823 #define power_timer2_enable()           (PRR1 &= (uint8_t)~(1 << PRT2))
00824 #define power_timer2_disable()          (PRR1 |= (uint8_t)(1 << PRT2))
00825 #endif
00826 
00827 #if defined(__AVR_HAVE_PRR1_PRT3)
00828 #define power_timer3_enable()           (PRR1 &= (uint8_t)~(1 << PRT3))
00829 #define power_timer3_disable()          (PRR1 |= (uint8_t)(1 << PRT3))
00830 #endif
00831 
00832 #if defined(__AVR_HAVE_PRR1_PRT4)
00833 #define power_timer4_enable()           (PRR1 &= (uint8_t)~(1 << PRT4))
00834 #define power_timer4_disable()          (PRR1 |= (uint8_t)(1 << PRT4))
00835 #endif
00836 
00837 #if defined(__AVR_HAVE_PRR1_PRT5)
00838 #define power_timer5_enable()           (PRR1 &= (uint8_t)~(1 << PRT5))
00839 #define power_timer5_disable()          (PRR1 |= (uint8_t)(1 << PRT5))
00840 #endif
00841 
00842 #if defined(__AVR_HAVE_PRR1_PRTIM3)
00843 #define power_timer3_enable()           (PRR1 &= (uint8_t)~(1 << PRTIM3))
00844 #define power_timer3_disable()          (PRR1 |= (uint8_t)(1 << PRTIM3))
00845 #endif
00846 
00847 #if defined(__AVR_HAVE_PRR1_PRTIM4)
00848 #define power_timer4_enable()           (PRR1 &= (uint8_t)~(1 << PRTIM4))
00849 #define power_timer4_disable()          (PRR1 |= (uint8_t)(1 << PRTIM4))
00850 #endif
00851 
00852 #if defined(__AVR_HAVE_PRR1_PRTIM5)
00853 #define power_timer5_enable()           (PRR1 &= (uint8_t)~(1 << PRTIM5))
00854 #define power_timer5_disable()          (PRR1 |= (uint8_t)(1 << PRTIM5))
00855 #endif
00856 
00857 #if defined(__AVR_HAVE_PRR1_PRTRX24)
00858 #define power_transceiver_enable()      (PRR1 &= (uint8_t)~(1 << PRTRX24))
00859 #define power_transceiver_disable()     (PRR1 |= (uint8_t)(1 << PRTRX24))
00860 #endif
00861 
00862 #if defined(__AVR_HAVE_PRR1_PRUSART1)
00863 #define power_usart1_enable()           (PRR1 &= (uint8_t)~(1 << PRUSART1))
00864 #define power_usart1_disable()          (PRR1 |= (uint8_t)(1 << PRUSART1))
00865 #endif
00866 
00867 #if defined(__AVR_HAVE_PRR1_PRUSART2)
00868 #define power_usart2_enable()           (PRR1 &= (uint8_t)~(1 << PRUSART2))
00869 #define power_usart2_disable()          (PRR1 |= (uint8_t)(1 << PRUSART2))
00870 #endif
00871 
00872 #if defined(__AVR_HAVE_PRR1_PRUSART3)
00873 #define power_usart3_enable()           (PRR1 &= (uint8_t)~(1 << PRUSART3))
00874 #define power_usart3_disable()          (PRR1 |= (uint8_t)(1 << PRUSART3))
00875 #endif
00876 
00877 #if defined(__AVR_HAVE_PRR1_PRUSB)
00878 #define power_usb_enable()              (PRR1 &= (uint8_t)~(1 << PRUSB))
00879 #define power_usb_disable()             (PRR1 |= (uint8_t)(1 << PRUSB))
00880 #endif
00881 
00882 #if defined(__AVR_HAVE_PRR1_PRUSBH)
00883 #define power_usbh_enable()             (PRR1 &= (uint8_t)~(1 << PRUSBH))
00884 #define power_usbh_disable()            (PRR1 |= (uint8_t)(1 << PRUSBH))
00885 #endif
00886 
00887 #if defined(__AVR_HAVE_PRR2_PRDF)
00888 #define power_data_fifo_enable()        (PRR2 &= (uint8_t)~(1 << PRDF))
00889 #define power_data_fifo_disable()       (PRR2 |= (uint8_t)(1 << PRDF))
00890 #endif
00891 
00892 #if defined(__AVR_HAVE_PRR2_PRIDS)
00893 #define power_id_scan_enable()          (PRR2 &= (uint8_t)~(1 << PRIDS))
00894 #define power_id_scan_disable()         (PRR2 |= (uint8_t)(1 << PRIDS))
00895 #endif
00896 
00897 #if defined(__AVR_HAVE_PRR2_PRRAM0)
00898 #define power_ram0_enable()             (PRR2 &= (uint8_t)~(1 << PRRAM0))
00899 #define power_ram0_disable()            (PRR2 |= (uint8_t)(1 << PRRAM0))
00900 #endif
00901 
00902 #if defined(__AVR_HAVE_PRR2_PRRAM1)
00903 #define power_ram1_enable()             (PRR2 &= (uint8_t)~(1 << PRRAM1))
00904 #define power_ram1_disable()            (PRR2 |= (uint8_t)(1 << PRRAM1))
00905 #endif
00906 
00907 #if defined(__AVR_HAVE_PRR2_PRRAM2)
00908 #define power_ram2_enable()             (PRR2 &= (uint8_t)~(1 << PRRAM2))
00909 #define power_ram2_disable()            (PRR2 |= (uint8_t)(1 << PRRAM2))
00910 #endif
00911 
00912 #if defined(__AVR_HAVE_PRR2_PRRAM3)
00913 #define power_ram3_enable()             (PRR2 &= (uint8_t)~(1 << PRRAM3))
00914 #define power_ram3_disable()            (PRR2 |= (uint8_t)(1 << PRRAM3))
00915 #endif
00916 
00917 #if defined(__AVR_HAVE_PRR2_PRRS)
00918 #define power_rssi_buffer_enable()      (PRR2 &= (uint8_t)~(1 << PRRS))
00919 #define power_rssi_buffer_disable()     (PRR2 |= (uint8_t)(1 << PRRS))
00920 #endif
00921 
00922 #if defined(__AVR_HAVE_PRR2_PRSF)
00923 #define power_preamble_rssi_fifo_enable()       (PRR2 &= (uint8_t)~(1 << PRSF))
00924 #define power_preamble_rssi_fifo_disable()      (PRR2 |= (uint8_t)(1 << PRSF))
00925 #endif
00926 
00927 #if defined(__AVR_HAVE_PRR2_PRSPI2)
00928 #define power_spi2_enable()             (PRR2 &= (uint8_t)~(1 << PRSPI2))
00929 #define power_spi2_disable()            (PRR2 |= (uint8_t)(1 << PRSPI2))
00930 #endif
00931 
00932 #if defined(__AVR_HAVE_PRR2_PRSSM)
00933 #define power_sequencer_state_machine_enable()  (PRR2 &= (uint8_t)~(1 << PRSSM))
00934 #define power_sequencer_state_machine_disable() (PRR2 |= (uint8_t)(1 << PRSSM))
00935 #endif
00936 
00937 #if defined(__AVR_HAVE_PRR2_PRTM)
00938 #define power_tx_modulator_enable()     (PRR2 &= (uint8_t)~(1 << PRTM))
00939 #define power_tx_modulator_disable()    (PRR2 |= (uint8_t)(1 << PRTM))
00940 #endif
00941 
00942 #if defined(__AVR_HAVE_PRR2_PRTWI2)
00943 #define power_twi2_enable()             (PRR2 &= (uint8_t)~(1 << PRTWI2))
00944 #define power_twi2_disable()            (PRR2 |= (uint8_t)(1 << PRTWI2))
00945 #endif
00946 
00947 #if defined(__AVR_HAVE_PRR2_PRXA)
00948 #define power_rx_buffer_A_enable()      (PRR2 &= (uint8_t)~(1 << PRXA))
00949 #define power_rx_buffer_A_disable()     (PRR2 |= (uint8_t)(1 << PRXA))
00950 #endif
00951 
00952 #if defined(__AVR_HAVE_PRR2_PRXB)
00953 #define power_rx_buffer_B_enable()      (PRR2 &= (uint8_t)~(1 << PRXB))
00954 #define power_rx_buffer_B_disable()     (PRR2 |= (uint8_t)(1 << PRXB))
00955 #endif
00956 
00957 #if defined(__AVR_HAVE_PRGEN_AES)
00958 #define power_aes_enable()              (PR_PRGEN &= (uint8_t)~(PR_AES_bm))
00959 #define power_aes_disable()             (PR_PRGEN |= (uint8_t)PR_AES_bm)
00960 #endif
00961 
00962 #if defined(__AVR_HAVE_PRGEN_DMA)
00963 #define power_dma_enable()              (PR_PRGEN &= (uint8_t)~(PR_DMA_bm))
00964 #define power_dma_disable()             (PR_PRGEN |= (uint8_t)PR_DMA_bm)
00965 #endif
00966 
00967 #if defined(__AVR_HAVE_PRGEN_EBI)
00968 #define power_ebi_enable()              (PR_PRGEN &= (uint8_t)~(PR_EBI_bm))
00969 #define power_ebi_disable()             (PR_PRGEN |= (uint8_t)PR_EBI_bm)
00970 #endif
00971 
00972 #if defined(__AVR_HAVE_PRGEN_EDMA)
00973 #define power_edma_enable()             (PR_PRGEN &= (uint8_t)~(PR_EDMA_bm))
00974 #define power_edma_disable()            (PR_PRGEN |= (uint8_t)PR_EDMA_bm)
00975 #endif
00976 
00977 #if defined(__AVR_HAVE_PRGEN_EVSYS)
00978 #define power_evsys_enable()            (PR_PRGEN &= (uint8_t)~(PR_EVSYS_bm))
00979 #define power_evsys_disable()           (PR_PRGEN |= (uint8_t)PR_EVSYS_bm)
00980 #endif
00981 
00982 #if defined(__AVR_HAVE_PRGEN_LCD)
00983 #define power_lcd_enable()              (PR_PRGEN &= (uint8_t)~(PR_LCD_bm))
00984 #define power_lcd_disable()             (PR_PRGEN |= (uint8_t)PR_LCD_bm)
00985 #endif
00986 
00987 #if defined(__AVR_HAVE_PRGEN_RTC)
00988 #define power_rtc_enable()              (PR_PRGEN &= (uint8_t)~(PR_RTC_bm))
00989 #define power_rtc_disable()             (PR_PRGEN |= (uint8_t)PR_RTC_bm)
00990 #endif
00991 
00992 #if defined(__AVR_HAVE_PRGEN_USB)
00993 #define power_usb_enable()              (PR_PRGEN &= (uint8_t)~(PR_USB_bm))
00994 #define power_usb_disable()             (PR_PRGEN &= (uint8_t)(PR_USB_bm))
00995 #endif
00996 
00997 #if defined(__AVR_HAVE_PRGEN_XCL)
00998 #define power_xcl_enable()              (PR_PRGEN &= (uint8_t)~(PR_XCL_bm))
00999 #define power_xcl_disable()             (PR_PRGEN |= (uint8_t)PR_XCL_bm)
01000 #endif
01001 
01002 #if defined(__AVR_HAVE_PRPA_AC)
01003 #define power_aca_enable()      (PR_PRPA &= (uint8_t)~(PR_AC_bm))
01004 #define power_aca_disable()     (PR_PRPA |= (uint8_t)PR_AC_bm)
01005 #endif
01006 
01007 #if defined(__AVR_HAVE_PRPA_ADC)
01008 #define power_adca_enable()     (PR_PRPA &= (uint8_t)~(PR_ADC_bm))
01009 #define power_adca_disable()    (PR_PRPA |= (uint8_t)PR_ADC_bm)
01010 #endif
01011 
01012 #if defined(__AVR_HAVE_PRPA_DAC)
01013 #define power_daca_enable()     (PR_PRPA &= (uint8_t)~(PR_DAC_bm))
01014 #define power_daca_disable()    (PR_PRPA |= (uint8_t)PR_DAC_bm)
01015 #endif
01016 
01017 #if defined(__AVR_HAVE_PRPB_AC)
01018 #define power_acb_enable()      (PR_PRPB &= (uint8_t)~(PR_AC_bm))
01019 #define power_acb_disable()     (PR_PRPB |= (uint8_t)PR_AC_bm)
01020 #endif
01021 
01022 #if defined(__AVR_HAVE_PRPB_ADC)
01023 #define power_adcb_enable()     (PR_PRPB &= (uint8_t)~(PR_ADC_bm))
01024 #define power_adcb_disable()    (PR_PRPB |= (uint8_t)PR_ADC_bm)
01025 #endif
01026 
01027 #if defined(__AVR_HAVE_PRPB_DAC)
01028 #define power_dacb_enable()     (PR_PRPB &= (uint8_t)~(PR_DAC_bm))
01029 #define power_dacb_disable()    (PR_PRPB |= (uint8_t)PR_DAC_bm)
01030 #endif
01031 
01032 #if defined(__AVR_HAVE_PRPC_HIRES)
01033 #define power_hiresc_enable()   (PR_PRPC &= (uint8_t)~(PR_HIRES_bm))
01034 #define power_hiresc_disable()  (PR_PRPC |= (uint8_t)PR_HIRES_bm)
01035 #endif
01036 
01037 #if defined(__AVR_HAVE_PRPC_SPI)
01038 #define power_spic_enable()     (PR_PRPC &= (uint8_t)~(PR_SPI_bm))
01039 #define power_spic_disable()    (PR_PRPC |= (uint8_t)PR_SPI_bm)
01040 #endif
01041 
01042 #if defined(__AVR_HAVE_PRPC_TC0)
01043 #define power_tc0c_enable()     (PR_PRPC &= (uint8_t)~(PR_TC0_bm))
01044 #define power_tc0c_disable()    (PR_PRPC |= (uint8_t)PR_TC0_bm)
01045 #endif
01046 
01047 #if defined(__AVR_HAVE_PRPC_TC1)
01048 #define power_tc1c_enable()     (PR_PRPC &= (uint8_t)~(PR_TC1_bm))
01049 #define power_tc1c_disable()    (PR_PRPC |= (uint8_t)PR_TC1_bm)
01050 #endif
01051 
01052 #if defined(__AVR_HAVE_PRPC_TC4)
01053 #define power_tc4c_enable()     (PR_PRPC  &= (uint8_t)~(PR_TC4_bm))
01054 #define power_tc4c_disable()    (PR_PRPC  |= (uint8_t)PR_TC4_bm)
01055 #endif
01056 
01057 #if defined(__AVR_HAVE_PRPC_TC5)
01058 #define power_tc5c_enable()     (PR_PRPC  &= (uint8_t)~(PR_TC5_bm))
01059 #define power_tc5c_disable()    (PR_PRPC  |= (uint8_t)PR_TC5_bm)
01060 #endif
01061 
01062 #if defined(__AVR_HAVE_PRPC_TWI)
01063 #define power_twic_enable()     (PR_PRPC &= (uint8_t)~(PR_TWI_bm))
01064 #define power_twic_disable()    (PR_PRPC |= (uint8_t)PR_TWI_bm)
01065 #endif
01066 
01067 #if defined(__AVR_HAVE_PRPC_USART0)
01068 #define power_usartc0_enable()  (PR_PRPC &= (uint8_t)~(PR_USART0_bm))
01069 #define power_usartc0_disable() (PR_PRPC |= (uint8_t)PR_USART0_bm)
01070 #endif
01071 
01072 #if defined(__AVR_HAVE_PRPC_USART1)
01073 #define power_usartc1_enable()  (PR_PRPC &= (uint8_t)~(PR_USART1_bm))
01074 #define power_usartc1_disable() (PR_PRPC |= (uint8_t)PR_USART1_bm)
01075 #endif
01076 
01077 #if defined(__AVR_HAVE_PRPD_HIRES)
01078 #define power_hiresd_enable()   (PR_PRPD &= (uint8_t)~(PR_HIRES_bm))
01079 #define power_hiresd_disable()  (PR_PRPD |= (uint8_t)PR_HIRES_bm)
01080 #endif
01081 
01082 #if defined(__AVR_HAVE_PRPD_SPI)
01083 #define power_spid_enable()     (PR_PRPD &= (uint8_t)~(PR_SPI_bm))
01084 #define power_spid_disable()    (PR_PRPD |= (uint8_t)PR_SPI_bm)
01085 #endif
01086 
01087 #if defined(__AVR_HAVE_PRPD_TC0)
01088 #define power_tc0d_enable()     (PR_PRPD &= (uint8_t)~(PR_TC0_bm))
01089 #define power_tc0d_disable()    (PR_PRPD |= (uint8_t)PR_TC0_bm)
01090 #endif
01091 
01092 #if defined(__AVR_HAVE_PRPD_TC1)
01093 #define power_tc1d_enable()     (PR_PRPD &= (uint8_t)~(PR_TC1_bm))
01094 #define power_tc1d_disable()    (PR_PRPD |= (uint8_t)PR_TC1_bm)
01095 #endif
01096 
01097 #if defined(__AVR_HAVE_PRPD_TC5)
01098 #define power_tc5d_enable()     (PR_PRPD  &= (uint8_t)~(PR_TC5_bm))
01099 #define power_tc5d_disable()    (PR_PRPD  |= (uint8_t)PR_TC5_bm)
01100 #endif
01101 
01102 #if defined(__AVR_HAVE_PRPD_TWI)
01103 #define power_twid_enable()     (PR_PRPD &= (uint8_t)~(PR_TWI_bm))
01104 #define power_twid_disable()    (PR_PRPD |= (uint8_t)PR_TWI_bm)
01105 #endif
01106 
01107 #if defined(__AVR_HAVE_PRPD_USART0)
01108 #define power_usartd0_enable()  (PR_PRPD &= (uint8_t)~(PR_USART0_bm))
01109 #define power_usartd0_disable() (PR_PRPD |= (uint8_t)PR_USART0_bm)
01110 #endif
01111 
01112 #if defined(__AVR_HAVE_PRPD_USART1)
01113 #define power_usartd1_enable()  (PR_PRPD &= (uint8_t)~(PR_USART1_bm))
01114 #define power_usartd1_disable() (PR_PRPD |= (uint8_t)PR_USART1_bm)
01115 #endif
01116 
01117 #if defined(__AVR_HAVE_PRPE_HIRES)
01118 #define power_hirese_enable()   (PR_PRPE &= (uint8_t)~(PR_HIRES_bm))
01119 #define power_hirese_disable()  (PR_PRPE |= (uint8_t)PR_HIRES_bm)
01120 #endif
01121 
01122 #if defined(__AVR_HAVE_PRPE_SPI)
01123 #define power_spie_enable()     (PR_PRPE &= (uint8_t)~(PR_SPI_bm))
01124 #define power_spie_disable()    (PR_PRPE |= (uint8_t)PR_SPI_bm)
01125 #endif
01126 
01127 #if defined(__AVR_HAVE_PRPE_TC0)
01128 #define power_tc0e_enable()     (PR_PRPE &= (uint8_t)~(PR_TC0_bm))
01129 #define power_tc0e_disable()    (PR_PRPE |= (uint8_t)PR_TC0_bm)
01130 #endif
01131 
01132 #if defined(__AVR_HAVE_PRPE_TC1)
01133 #define power_tc1e_enable()     (PR_PRPE &= (uint8_t)~(PR_TC1_bm))
01134 #define power_tc1e_disable()    (PR_PRPE |= (uint8_t)PR_TC1_bm)
01135 #endif
01136 
01137 #if defined(__AVR_HAVE_PRPE_TWI)
01138 #define power_twie_enable()     (PR_PRPE &= (uint8_t)~(PR_TWI_bm))
01139 #define power_twie_disable()    (PR_PRPE |= (uint8_t)PR_TWI_bm)
01140 #endif
01141 
01142 #if defined(__AVR_HAVE_PRPE_USART0)
01143 #define power_usarte0_enable()  (PR_PRPE &= (uint8_t)~(PR_USART0_bm))
01144 #define power_usarte0_disable() (PR_PRPE |= (uint8_t)PR_USART0_bm)
01145 #endif
01146 
01147 #if defined(__AVR_HAVE_PRPE_USART1)
01148 #define power_usarte1_enable()  (PR_PRPE &= (uint8_t)~(PR_USART1_bm))
01149 #define power_usarte1_disable() (PR_PRPE |= (uint8_t)PR_USART1_bm)
01150 #endif
01151 
01152 #if defined(__AVR_HAVE_PRPF_HIRES)
01153 #define power_hiresf_enable()   (PR_PRPF &= (uint8_t)~(PR_HIRES_bm))
01154 #define power_hiresf_disable()  (PR_PRPF |= (uint8_t)PR_HIRES_bm)
01155 #endif
01156 
01157 #if defined(__AVR_HAVE_PRPF_SPI)
01158 #define power_spif_enable()     (PR_PRPF &= (uint8_t)~(PR_SPI_bm))
01159 #define power_spif_disable()    (PR_PRPF |= (uint8_t)PR_SPI_bm)
01160 #endif
01161 
01162 #if defined(__AVR_HAVE_PRPF_TC0)
01163 #define power_tc0f_enable()     (PR_PRPF &= (uint8_t)~(PR_TC0_bm))
01164 #define power_tc0f_disable()    (PR_PRPF |= (uint8_t)PR_TC0_bm)
01165 #endif
01166 
01167 #if defined(__AVR_HAVE_PRPF_TC1)
01168 #define power_tc1f_enable()     (PR_PRPF &= (uint8_t)~(PR_TC1_bm))
01169 #define power_tc1f_disable()    (PR_PRPF |= (uint8_t)PR_TC1_bm)
01170 #endif
01171 
01172 #if defined(__AVR_HAVE_PRPF_TWI)
01173 #define power_twif_enable()     (PR_PRPF &= (uint8_t)~(PR_TWI_bm))
01174 #define power_twif_disable()    (PR_PRPF |= (uint8_t)PR_TWI_bm)
01175 #endif
01176 
01177 #if defined(__AVR_HAVE_PRPF_USART0)
01178 #define power_usartf0_enable()  (PR_PRPF &= (uint8_t)~(PR_USART0_bm))
01179 #define power_usartf0_disable() (PR_PRPF |= (uint8_t)PR_USART0_bm)
01180 #endif
01181 
01182 #if defined(__AVR_HAVE_PRPF_USART1)
01183 #define power_usartf1_enable()  (PR_PRPF &= (uint8_t)~(PR_USART1_bm))
01184 #define power_usartf1_disable() (PR_PRPF |= (uint8_t)PR_USART1_bm)
01185 #endif
01186 
01187 static __inline void
01188 __attribute__ ((__always_inline__))
01189 __power_all_enable()
01190 {
01191 #ifdef __AVR_HAVE_PRR
01192     PRR &= (uint8_t)~(__AVR_HAVE_PRR);
01193 #endif
01194 
01195 #ifdef __AVR_HAVE_PRR0
01196     PRR0 &= (uint8_t)~(__AVR_HAVE_PRR0);
01197 #endif
01198 
01199 #ifdef __AVR_HAVE_PRR1
01200     PRR1 &= (uint8_t)~(__AVR_HAVE_PRR1);
01201 #endif
01202 
01203 #ifdef __AVR_HAVE_PRR2
01204    PRR2 &= (uint8_t)~(__AVR_HAVE_PRR2);
01205 #endif
01206 
01207 #ifdef __AVR_HAVE_PRGEN
01208     PR_PRGEN &= (uint8_t)~(__AVR_HAVE_PRGEN);
01209 #endif
01210 
01211 #ifdef __AVR_HAVE_PRPA
01212     PR_PRPA &= (uint8_t)~(__AVR_HAVE_PRPA);
01213 #endif
01214 
01215 #ifdef __AVR_HAVE_PRPB
01216     PR_PRPB &= (uint8_t)~(__AVR_HAVE_PRPB);
01217 #endif
01218 
01219 #ifdef __AVR_HAVE_PRPC
01220     PR_PRPC &= (uint8_t)~(__AVR_HAVE_PRPC);
01221 #endif
01222 
01223 #ifdef __AVR_HAVE_PRPD
01224     PR_PRPD &= (uint8_t)~(__AVR_HAVE_PRPD);
01225 #endif
01226 
01227 #ifdef __AVR_HAVE_PRPE
01228     PR_PRPE &= (uint8_t)~(__AVR_HAVE_PRPE);
01229 #endif
01230 
01231 #ifdef __AVR_HAVE_PRPF
01232     PR_PRPF &= (uint8_t)~(__AVR_HAVE_PRPF);
01233 #endif
01234 }
01235 
01236 static __inline void
01237 __attribute__ ((__always_inline__))
01238 __power_all_disable()
01239 {
01240 #ifdef __AVR_HAVE_PRR
01241     PRR |= (uint8_t)(__AVR_HAVE_PRR);
01242 #endif
01243 
01244 #ifdef __AVR_HAVE_PRR0
01245     PRR0 |= (uint8_t)(__AVR_HAVE_PRR0);
01246 #endif
01247 
01248 #ifdef __AVR_HAVE_PRR1
01249     PRR1 |= (uint8_t)(__AVR_HAVE_PRR1);
01250 #endif
01251 
01252 #ifdef __AVR_HAVE_PRR2
01253     PRR2 |= (uint8_t)(__AVR_HAVE_PRR2);
01254 #endif
01255 
01256 #ifdef __AVR_HAVE_PRGEN
01257     PR_PRGEN |= (uint8_t)(__AVR_HAVE_PRGEN);
01258 #endif
01259 
01260 #ifdef __AVR_HAVE_PRPA
01261     PR_PRPA |= (uint8_t)(__AVR_HAVE_PRPA);
01262 #endif
01263 
01264 #ifdef __AVR_HAVE_PRPB
01265     PR_PRPB |= (uint8_t)(__AVR_HAVE_PRPB);
01266 #endif
01267 
01268 #ifdef __AVR_HAVE_PRPC
01269     PR_PRPC |= (uint8_t)(__AVR_HAVE_PRPC);
01270 #endif
01271 
01272 #ifdef __AVR_HAVE_PRPD
01273     PR_PRPD |= (uint8_t)(__AVR_HAVE_PRPD);
01274 #endif
01275 
01276 #ifdef __AVR_HAVE_PRPE
01277     PR_PRPE |= (uint8_t)(__AVR_HAVE_PRPE);
01278 #endif
01279 
01280 #ifdef __AVR_HAVE_PRPF
01281     PR_PRPF |= (uint8_t)(__AVR_HAVE_PRPF);
01282 #endif
01283 }
01284 
01285 #ifndef __DOXYGEN__
01286 #ifndef power_all_enable
01287 #define power_all_enable() __power_all_enable()
01288 #endif
01289 
01290 #ifndef power_all_disable
01291 #define power_all_disable() __power_all_disable()
01292 #endif
01293 #endif  /* !__DOXYGEN__ */
01294 
01295 
01296 #if defined(__AVR_AT90CAN32__) \
01297 || defined(__AVR_AT90CAN64__) \
01298 || defined(__AVR_AT90CAN128__) \
01299 || defined(__AVR_AT90PWM1__) \
01300 || defined(__AVR_AT90PWM2__) \
01301 || defined(__AVR_AT90PWM2B__) \
01302 || defined(__AVR_AT90PWM3__) \
01303 || defined(__AVR_AT90PWM3B__) \
01304 || defined(__AVR_AT90PWM81__) \
01305 || defined(__AVR_AT90PWM161__) \
01306 || defined(__AVR_AT90PWM216__) \
01307 || defined(__AVR_AT90PWM316__) \
01308 || defined(__AVR_AT90SCR100__) \
01309 || defined(__AVR_AT90USB646__) \
01310 || defined(__AVR_AT90USB647__) \
01311 || defined(__AVR_AT90USB82__) \
01312 || defined(__AVR_AT90USB1286__) \
01313 || defined(__AVR_AT90USB1287__) \
01314 || defined(__AVR_AT90USB162__) \
01315 || defined(__AVR_ATA5505__) \
01316 || defined(__AVR_ATA5272__) \
01317 || defined(__AVR_ATA6617C__) \
01318 || defined(__AVR_ATA664251__) \
01319 || defined(__AVR_ATmega1280__) \
01320 || defined(__AVR_ATmega1281__) \
01321 || defined(__AVR_ATmega1284__) \
01322 || defined(__AVR_ATmega128RFA1__) \
01323 || defined(__AVR_ATmega1284RFR2__) \
01324 || defined(__AVR_ATmega128RFR2__) \
01325 || defined(__AVR_ATmega1284P__) \
01326 || defined(__AVR_ATmega162__) \
01327 || defined(__AVR_ATmega164A__) \
01328 || defined(__AVR_ATmega164P__) \
01329 || defined(__AVR_ATmega164PA__) \
01330 || defined(__AVR_ATmega165__) \
01331 || defined(__AVR_ATmega165A__) \
01332 || defined(__AVR_ATmega165P__) \
01333 || defined(__AVR_ATmega165PA__) \
01334 || defined(__AVR_ATmega168__) \
01335 || defined(__AVR_ATmega168A__) \
01336 || defined(__AVR_ATmega168P__) \
01337 || defined(__AVR_ATmega168PA__) \
01338 || defined(__AVR_ATmega168PB__) \
01339 || defined(__AVR_ATmega169__) \
01340 || defined(__AVR_ATmega169A__) \
01341 || defined(__AVR_ATmega169P__) \
01342 || defined(__AVR_ATmega169PA__) \
01343 || defined(__AVR_ATmega16M1__) \
01344 || defined(__AVR_ATmega16U2__) \
01345 || defined(__AVR_ATmega16U4__) \
01346 || defined(__AVR_ATmega2560__) \
01347 || defined(__AVR_ATmega2561__) \
01348 || defined(__AVR_ATmega2564RFR2__) \
01349 || defined(__AVR_ATmega256RFR2__) \
01350 || defined(__AVR_ATmega324A__) \
01351 || defined(__AVR_ATmega324P__) \
01352 || defined(__AVR_ATmega324PA__) \
01353 || defined(__AVR_ATmega324PB__) \
01354 || defined(__AVR_ATmega325__) \
01355 || defined(__AVR_ATmega325A__) \
01356 || defined(__AVR_ATmega325P__) \
01357 || defined(__AVR_ATmega325PA__) \
01358 || defined(__AVR_ATmega3250__) \
01359 || defined(__AVR_ATmega3250A__) \
01360 || defined(__AVR_ATmega3250P__) \
01361 || defined(__AVR_ATmega3250PA__) \
01362 || defined(__AVR_ATmega328__) \
01363 || defined(__AVR_ATmega328P__) \
01364 || defined(__AVR_ATmega328PB__) \
01365 || defined(__AVR_ATmega329__) \
01366 || defined(__AVR_ATmega329A__) \
01367 || defined(__AVR_ATmega329P__) \
01368 || defined(__AVR_ATmega329PA__) \
01369 || defined(__AVR_ATmega3290__) \
01370 || defined(__AVR_ATmega3290A__) \
01371 || defined(__AVR_ATmega3290P__) \
01372 || defined(__AVR_ATmega3290PA__) \
01373 || defined(__AVR_ATmega32C1__) \
01374 || defined(__AVR_ATmega32M1__) \
01375 || defined(__AVR_ATmega32U2__) \
01376 || defined(__AVR_ATmega32U4__) \
01377 || defined(__AVR_ATmega32U6__) \
01378 || defined(__AVR_ATmega48__) \
01379 || defined(__AVR_ATmega48A__) \
01380 || defined(__AVR_ATmega48PA__) \
01381 || defined(__AVR_ATmega48PB__) \
01382 || defined(__AVR_ATmega48P__) \
01383 || defined(__AVR_ATmega640__) \
01384 || defined(__AVR_ATmega649P__) \
01385 || defined(__AVR_ATmega644__) \
01386 || defined(__AVR_ATmega644A__) \
01387 || defined(__AVR_ATmega644P__) \
01388 || defined(__AVR_ATmega644PA__) \
01389 || defined(__AVR_ATmega645__) \
01390 || defined(__AVR_ATmega645A__) \
01391 || defined(__AVR_ATmega645P__) \
01392 || defined(__AVR_ATmega6450__) \
01393 || defined(__AVR_ATmega6450A__) \
01394 || defined(__AVR_ATmega6450P__) \
01395 || defined(__AVR_ATmega649__) \
01396 || defined(__AVR_ATmega649A__) \
01397 || defined(__AVR_ATmega64M1__) \
01398 || defined(__AVR_ATmega64C1__) \
01399 || defined(__AVR_ATmega88A__) \
01400 || defined(__AVR_ATmega88PA__) \
01401 || defined(__AVR_ATmega88PB__) \
01402 || defined(__AVR_ATmega6490__) \
01403 || defined(__AVR_ATmega6490A__) \
01404 || defined(__AVR_ATmega6490P__) \
01405 || defined(__AVR_ATmega644RFR2__) \
01406 || defined(__AVR_ATmega64RFR2__) \
01407 || defined(__AVR_ATmega88__) \
01408 || defined(__AVR_ATmega88P__) \
01409 || defined(__AVR_ATmega8U2__) \
01410 || defined(__AVR_ATmega16U2__) \
01411 || defined(__AVR_ATmega32U2__) \
01412 || defined(__AVR_ATtiny48__) \
01413 || defined(__AVR_ATtiny88__) \
01414 || defined(__AVR_ATtiny87__) \
01415 || defined(__AVR_ATtiny167__) \
01416 || defined(__DOXYGEN__)
01417 
01418 
01419 /** \addtogroup avr_power
01420 
01421 Some of the newer AVRs contain a System Clock Prescale Register (CLKPR) that
01422 allows you to decrease the system clock frequency and the power consumption
01423 when the need for processing power is low.
01424 On some earlier AVRs (ATmega103, ATmega64, ATmega128), similar
01425 functionality can be achieved through the XTAL Divide Control Register.
01426 Below are two macros and an enumerated type that can be used to
01427 interface to the Clock Prescale Register or
01428 XTAL Divide Control Register.
01429 
01430 \note Not all AVR devices have a clock prescaler. On those devices
01431 without a Clock Prescale Register or XTAL Divide Control Register, these
01432 macros are not available.
01433 */
01434 
01435 
01436 /** \addtogroup avr_power
01437 \code 
01438 typedef enum
01439 {
01440     clock_div_1 = 0,
01441     clock_div_2 = 1,
01442     clock_div_4 = 2,
01443     clock_div_8 = 3,
01444     clock_div_16 = 4,
01445     clock_div_32 = 5,
01446     clock_div_64 = 6,
01447     clock_div_128 = 7,
01448     clock_div_256 = 8,
01449     clock_div_1_rc = 15, // ATmega128RFA1 only
01450 } clock_div_t;
01451 \endcode
01452 Clock prescaler setting enumerations for device using
01453 System Clock Prescale Register.
01454 
01455 \code
01456 typedef enum
01457 {
01458     clock_div_1 = 1,
01459     clock_div_2 = 2,
01460     clock_div_4 = 4,
01461     clock_div_8 = 8,
01462     clock_div_16 = 16,
01463     clock_div_32 = 32,
01464     clock_div_64 = 64,
01465     clock_div_128 = 128
01466 } clock_div_t;
01467 \endcode
01468 Clock prescaler setting enumerations for device using
01469 XTAL Divide Control Register.
01470 
01471 */
01472 #ifndef __DOXYGEN__
01473 typedef enum
01474 {
01475     clock_div_1 = 0,
01476     clock_div_2 = 1,
01477     clock_div_4 = 2,
01478     clock_div_8 = 3,
01479     clock_div_16 = 4,
01480     clock_div_32 = 5,
01481     clock_div_64 = 6,
01482     clock_div_128 = 7,
01483     clock_div_256 = 8
01484 #if defined(__AVR_ATmega128RFA1__) \
01485 || defined(__AVR_ATmega2564RFR2__) \
01486 || defined(__AVR_ATmega1284RFR2__) \
01487 || defined(__AVR_ATmega644RFR2__) \
01488 || defined(__AVR_ATmega256RFR2__) \
01489 || defined(__AVR_ATmega128RFR2__) \
01490 || defined(__AVR_ATmega64RFR2__)
01491     , clock_div_1_rc = 15
01492 #endif
01493 } clock_div_t;
01494 
01495 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01496 #endif  /* !__DOXYGEN__ */
01497 
01498 /**
01499    \ingroup avr_power
01500    \fn clock_prescale_set(clock_div_t x)
01501 
01502 Set the clock prescaler register select bits, selecting a system clock
01503 division setting. This function is inlined, even if compiler
01504 optimizations are disabled.
01505 
01506 The type of \c x is \c clock_div_t.
01507 
01508 \note For device with XTAL Divide Control Register (XDIV), \c x can actually range
01509 from 1 to 129. Thus, one does not need to use \c clock_div_t type as argument.
01510 */
01511 void clock_prescale_set(clock_div_t __x)
01512 {
01513     uint8_t __tmp = _BV(CLKPCE);
01514     __asm__ __volatile__ (
01515         "in __tmp_reg__,__SREG__" "\n\t"
01516         "cli" "\n\t"
01517         "sts %1, %0" "\n\t"
01518         "sts %1, %2" "\n\t"
01519         "out __SREG__, __tmp_reg__"
01520         : /* no outputs */
01521         : "d" (__tmp),
01522           "M" (_SFR_MEM_ADDR(CLKPR)),
01523           "d" (__x)
01524         : "r0");
01525 }
01526 
01527 /** \addtogroup avr_power
01528 \def clock_prescale_get()
01529 Gets and returns the clock prescaler register setting. The return type is \c clock_div_t.
01530 
01531 \note For device with XTAL Divide Control Register (XDIV), return can actually
01532 range from 1 to 129. Care should be taken has the return value could differ from the
01533 typedef enum clock_div_t. This should only happen if clock_prescale_set was previously
01534 called with a value other than those defined by \c clock_div_t.
01535 */
01536 #define clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
01537 
01538 #elif defined(__AVR_ATmega16HVB__) \
01539 || defined(__AVR_ATmega16HVBREVB__) \
01540 || defined(__AVR_ATmega32HVB__) \
01541 || defined(__AVR_ATmega32HVBREVB__)
01542 
01543 typedef enum
01544 {
01545     clock_div_1 = 0,
01546     clock_div_2 = 1,
01547     clock_div_4 = 2,
01548     clock_div_8 = 3
01549 } clock_div_t;
01550 
01551 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01552 
01553 void clock_prescale_set(clock_div_t __x)
01554 {
01555     uint8_t __tmp = _BV(CLKPCE);
01556     __asm__ __volatile__ (
01557         "in __tmp_reg__,__SREG__" "\n\t"
01558         "cli" "\n\t"
01559         "sts %1, %0" "\n\t"
01560         "sts %1, %2" "\n\t"
01561         "out __SREG__, __tmp_reg__"
01562         : /* no outputs */
01563         : "d" (__tmp),
01564           "M" (_SFR_MEM_ADDR(CLKPR)),
01565           "d" (__x)
01566         : "r0");
01567 }
01568 
01569 #define clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)))
01570 
01571 #elif defined(__AVR_ATA5790__) \
01572 || defined (__AVR_ATA5790N__) \
01573 || defined (__AVR_ATA5791__) \
01574 || defined (__AVR_ATA5795__)
01575 
01576 typedef enum
01577 {
01578     clock_div_1 = 0,
01579     clock_div_2 = 1,
01580     clock_div_4 = 2,
01581     clock_div_8 = 3,
01582     clock_div_16 = 4,
01583     clock_div_32 = 5,
01584     clock_div_64 = 6,
01585     clock_div_128 = 7,
01586 } clock_div_t;
01587 
01588 static __inline__ void system_clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01589 
01590 void system_clock_prescale_set(clock_div_t __x)
01591 {
01592     uint8_t __tmp = _BV(CLKPCE);
01593     __asm__ __volatile__ (
01594         "in __tmp_reg__,__SREG__" "\n\t"
01595         "cli" "\n\t"
01596         "out %1, %0" "\n\t"
01597         "out %1, %2" "\n\t"
01598         "out __SREG__, __tmp_reg__"
01599         : /* no outputs */
01600         : "d" (__tmp),
01601           "I" (_SFR_IO_ADDR(CLKPR)),
01602           "d" (__x)
01603         : "r0");
01604 }
01605 
01606 #define system_clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)))
01607 
01608 typedef enum
01609 {
01610     timer_clock_div_reset = 0,
01611     timer_clock_div_1 = 1,
01612     timer_clock_div_2 = 2,
01613     timer_clock_div_4 = 3,
01614     timer_clock_div_8 = 4,
01615     timer_clock_div_16 = 5,
01616     timer_clock_div_32 = 6,
01617     timer_clock_div_64 = 7
01618 } timer_clock_div_t;
01619 
01620 static __inline__ void timer_clock_prescale_set(timer_clock_div_t) __attribute__((__always_inline__));
01621 
01622 void timer_clock_prescale_set(timer_clock_div_t __x)
01623 {
01624     uint8_t __t;
01625     __asm__ __volatile__ (
01626         "in __tmp_reg__,__SREG__" "\n\t"
01627         "cli" "\n\t"
01628         "in %[temp],%[clkpr]" "\n\t"
01629         "out %[clkpr],%[enable]" "\n\t"
01630         "andi %[temp],%[not_CLTPS]" "\n\t"
01631         "or %[temp], %[set_value]" "\n\t"
01632         "out %[clkpr],%[temp]" "\n\t"
01633         "sei" "\n\t"
01634         "out __SREG__,__tmp_reg__" "\n\t"
01635         : /* no outputs */
01636         : [temp] "r" (__t),
01637           [clkpr] "I" (_SFR_IO_ADDR(CLKPR)),
01638           [enable] "r" (_BV(CLKPCE)),
01639           [not_CLTPS] "M" (0xFF & (~ ((1 << CLTPS2) | (1 << CLTPS1) | (1 << CLTPS0)))),
01640           [set_value] "r" ((__x & 7) << 3)
01641         : "r0");
01642 }
01643 
01644 #define timer_clock_prescale_get()  (timer_clock_div_t)(CLKPR & (uint8_t)((1<<CLTPS0)|(1<<CLTPS1)|(1<<CLTPS2)))
01645 
01646 #elif defined(__AVR_ATA6285__) \
01647 || defined(__AVR_ATA6286__)
01648 
01649 typedef enum
01650 {
01651     clock_div_1 = 0,
01652     clock_div_2 = 1,
01653     clock_div_4 = 2,
01654     clock_div_8 = 3,
01655     clock_div_16 = 4,
01656     clock_div_32 = 5,
01657     clock_div_64 = 6,
01658     clock_div_128 = 7
01659 } clock_div_t;
01660 
01661 static __inline__ void system_clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01662 
01663 void system_clock_prescale_set(clock_div_t __x)
01664 {
01665     uint8_t __t;
01666     __asm__ __volatile__ (
01667         "in __tmp_reg__,__SREG__" "\n\t"
01668         "cli" "\n\t"
01669         "in %[temp],%[clpr]" "\n\t"
01670         "out %[clpr],%[enable]" "\n\t"
01671         "andi %[temp],%[not_CLKPS]" "\n\t"
01672         "or %[temp], %[set_value]" "\n\t"
01673         "out %[clpr],%[temp]" "\n\t"
01674         "sei" "\n\t"
01675         "out __SREG__,__tmp_reg__" "\n\t"
01676         : /* no outputs */
01677         : [temp] "r" (__t),
01678           [clpr] "I" (_SFR_IO_ADDR(CLKPR)),
01679           [enable] "r" _BV(CLPCE),
01680           [not_CLKPS] "M" (0xFF & (~ ((1 << CLKPS2) | (1 << CLKPS1) | (1 << CLKPS0)))),
01681           [set_value] "r" (__x & 7)
01682         : "r0");
01683 }
01684 
01685 #define system_clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)))
01686 
01687 typedef enum
01688 {
01689     timer_clock_div_reset = 0,
01690     timer_clock_div_1 = 1,
01691     timer_clock_div_2 = 2,
01692     timer_clock_div_4 = 3,
01693     timer_clock_div_8 = 4,
01694     timer_clock_div_16 = 5,
01695     timer_clock_div_32 = 6,
01696     timer_clock_div_64 = 7
01697 } timer_clock_div_t;
01698 
01699 static __inline__ void timer_clock_prescale_set(timer_clock_div_t) __attribute__((__always_inline__));
01700 
01701 void timer_clock_prescale_set(timer_clock_div_t __x)
01702 {
01703     uint8_t __t;
01704     __asm__ __volatile__ (
01705         "in __tmp_reg__,__SREG__" "\n\t"
01706         "cli" "\n\t"
01707         "in %[temp],%[clpr]" "\n\t"
01708         "out %[clpr],%[enable]" "\n\t"
01709         "andi %[temp],%[not_CLTPS]" "\n\t"
01710         "or %[temp], %[set_value]" "\n\t"
01711         "out %[clpr],%[temp]" "\n\t"
01712         "sei" "\n\t"
01713         "out __SREG__,__tmp_reg__" "\n\t"
01714         : /* no outputs */
01715         : [temp] "r" (__t),
01716           [clpr] "I" (_SFR_IO_ADDR(CLKPR)),
01717           [enable] "r" (_BV(CLPCE)),      
01718           [not_CLTPS] "M" (0xFF & (~ ((1 << CLTPS2) | (1 << CLTPS1) | (1 << CLTPS0)))),
01719           [set_value] "r" ((__x & 7) << 3)
01720         : "r0");
01721 }
01722 
01723 #define timer_clock_prescale_get()  (timer_clock_div_t)(CLKPR & (uint8_t)((1<<CLTPS0)|(1<<CLTPS1)|(1<<CLTPS2)))
01724 
01725 #elif defined(__AVR_ATtiny24__) \
01726 || defined(__AVR_ATtiny24A__) \
01727 || defined(__AVR_ATtiny44__) \
01728 || defined(__AVR_ATtiny44A__) \
01729 || defined(__AVR_ATtiny84__) \
01730 || defined(__AVR_ATtiny84A__) \
01731 || defined(__AVR_ATtiny25__) \
01732 || defined(__AVR_ATtiny45__) \
01733 || defined(__AVR_ATtiny85__) \
01734 || defined(__AVR_ATtiny261A__) \
01735 || defined(__AVR_ATtiny261__) \
01736 || defined(__AVR_ATtiny461__) \
01737 || defined(__AVR_ATtiny461A__) \
01738 || defined(__AVR_ATtiny861__) \
01739 || defined(__AVR_ATtiny861A__) \
01740 || defined(__AVR_ATtiny2313__) \
01741 || defined(__AVR_ATtiny2313A__) \
01742 || defined(__AVR_ATtiny4313__) \
01743 || defined(__AVR_ATtiny13__) \
01744 || defined(__AVR_ATtiny13A__) \
01745 || defined(__AVR_ATtiny43U__) \
01746 
01747 typedef enum
01748 {
01749     clock_div_1 = 0,
01750     clock_div_2 = 1,
01751     clock_div_4 = 2,
01752     clock_div_8 = 3,
01753     clock_div_16 = 4,
01754     clock_div_32 = 5,
01755     clock_div_64 = 6,
01756     clock_div_128 = 7,
01757     clock_div_256 = 8
01758 } clock_div_t;
01759 
01760 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01761 
01762 void clock_prescale_set(clock_div_t __x)
01763 {
01764     uint8_t __tmp = _BV(CLKPCE);
01765     __asm__ __volatile__ (
01766         "in __tmp_reg__,__SREG__" "\n\t"
01767         "cli" "\n\t"
01768         "out %1, %0" "\n\t"
01769         "out %1, %2" "\n\t"
01770         "out __SREG__, __tmp_reg__"
01771         : /* no outputs */
01772         : "d" (__tmp),
01773           "I" (_SFR_IO_ADDR(CLKPR)),
01774           "d" (__x)
01775         : "r0");
01776 }
01777 
01778 
01779 #define clock_prescale_get()  (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
01780 
01781 #elif defined(__AVR_ATmega64__) \
01782 || defined(__AVR_ATmega103__) \
01783 || defined(__AVR_ATmega128__)
01784 
01785 //Enum is declared for code compatibility
01786 typedef enum
01787 {
01788     clock_div_1 = 1,
01789     clock_div_2 = 2,
01790     clock_div_4 = 4,
01791     clock_div_8 = 8,
01792     clock_div_16 = 16,
01793     clock_div_32 = 32,
01794     clock_div_64 = 64,
01795     clock_div_128 = 128
01796 } clock_div_t;
01797 
01798 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01799 
01800 void clock_prescale_set(clock_div_t __x)
01801 {
01802     if((__x <= 0) || (__x > 129))
01803     {
01804         return;//Invalid value.
01805     }
01806     else
01807     {
01808         uint8_t __tmp = 0;
01809         //Algo explained:
01810         //1 - Clear XDIV in order for it to accept a new value (actually only
01811         //    XDIVEN need to be cleared, but clearing XDIV is faster than
01812         //    read-modify-write since we will rewrite XDIV later anyway)
01813         //2 - wait 8 clock cycle for stability, see datasheet erreta
01814         //3 - Exist if requested prescaller is 1
01815         //4 - Calculate XDIV6..0 value = 129 - __x
01816         //5 - Set XDIVEN bit in calculated value
01817         //6 - write XDIV with calculated value
01818         //7 - wait 8 clock cycle for stability, see datasheet erreta
01819         __asm__ __volatile__ (
01820             "in __tmp_reg__,__SREG__" "\n\t"
01821             "cli" "\n\t"
01822             "out %1, __zero_reg__" "\n\t"
01823             "nop" "\n\t"
01824             "nop" "\n\t"
01825             "nop" "\n\t"
01826             "nop" "\n\t"
01827             "nop" "\n\t"
01828             "nop" "\n\t"
01829             "nop" "\n\t"
01830             "nop" "\n\t"
01831             "cpi %0, 0x01" "\n\t"
01832             "breq L_%=" "\n\t"
01833             "ldi %2, 0x81" "\n\t" //129
01834             "sub %2, %0" "\n\t"
01835             "ori %2, 0x80" "\n\t" //128
01836             "out %1, %2" "\n\t"
01837             "nop" "\n\t"
01838             "nop" "\n\t"
01839             "nop" "\n\t"
01840             "nop" "\n\t"
01841             "nop" "\n\t"
01842             "nop" "\n\t"
01843             "nop" "\n\t"
01844             "nop" "\n\t"
01845             "L_%=: " "out __SREG__, __tmp_reg__"
01846             : /* no outputs */
01847             :"d" (__x),
01848              "I" (_SFR_IO_ADDR(XDIV)),
01849              "d" (__tmp)
01850             : "r0");
01851     }
01852 }
01853 
01854 static __inline__ clock_div_t clock_prescale_get(void) __attribute__((__always_inline__));
01855 
01856 clock_div_t clock_prescale_get(void)
01857 {
01858     if(bit_is_clear(XDIV, XDIVEN))
01859     {
01860         return 1;
01861     }
01862     else
01863     {
01864         return (clock_div_t)(129 - (XDIV & 0x7F));
01865     }
01866 }
01867  
01868 #elif defined(__AVR_ATtiny4__) \
01869 || defined(__AVR_ATtiny5__) \
01870 || defined(__AVR_ATtiny9__) \
01871 || defined(__AVR_ATtiny10__) \
01872 || defined(__AVR_ATtiny20__) \
01873 || defined(__AVR_ATtiny40__) \
01874 
01875 typedef enum 
01876 { 
01877     clock_div_1 = 0, 
01878     clock_div_2 = 1, 
01879     clock_div_4 = 2, 
01880     clock_div_8 = 3, 
01881     clock_div_16 = 4, 
01882     clock_div_32 = 5, 
01883     clock_div_64 = 6, 
01884     clock_div_128 = 7, 
01885     clock_div_256 = 8 
01886 } clock_div_t; 
01887 
01888 static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
01889 
01890 void clock_prescale_set(clock_div_t __x)
01891 {
01892     uint8_t __tmp = 0xD8;
01893     __asm__ __volatile__ (
01894         "in __tmp_reg__,__SREG__" "\n\t"
01895         "cli" "\n\t"
01896         "out %1, %0" "\n\t"
01897         "out %2, %3" "\n\t"
01898         "out __SREG__, __tmp_reg__"
01899         : /* no outputs */
01900         : "d" (__tmp),
01901           "I" (_SFR_IO_ADDR(CCP)),
01902           "I" (_SFR_IO_ADDR(CLKPSR)),
01903           "d" (__x)
01904         : "r16");
01905 }
01906 
01907 #define clock_prescale_get()  (clock_div_t)(CLKPSR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
01908  
01909 #endif
01910 
01911 #endif /* _AVR_POWER_H_ */
 All Data Structures Files Functions Variables Typedefs Enumerations Defines