diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-05-10 16:31:24 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-05-10 16:31:24 +0000 |
commit | 31af0dfe5749490f942e5047fd5f3b72419baf2e (patch) | |
tree | b7776bf7414f8e70ef19503850121ef70df88ddc /cpukit/score/cpu/avr/avr/power.h | |
parent | 2010-05-10 Joel Sherrill <joel.sherrilL@OARcorp.com> (diff) | |
download | rtems-31af0dfe5749490f942e5047fd5f3b72419baf2e.tar.bz2 |
2010-05-10 Joel Sherrill <joel.sherrilL@OARcorp.com>
* Makefile.am, cpu_asm.S, avr/boot.h, avr/common.h, avr/crc16.h,
avr/delay.h, avr/eeprom.h, avr/fuse.h, avr/interrupt.h, avr/io.h,
avr/io1200.h, avr/io2313.h, avr/io2323.h, avr/io2333.h, avr/io2343.h,
avr/io43u32x.h, avr/io43u35x.h, avr/io4414.h, avr/io4433.h,
avr/io4434.h, avr/io76c711.h, avr/io8515.h, avr/io8534.h,
avr/io8535.h, avr/io86r401.h, avr/io90pwm1.h, avr/io90pwm216.h,
avr/io90pwm2b.h, avr/io90pwm316.h, avr/io90pwm3b.h, avr/io90pwm81.h,
avr/io90pwmx.h, avr/io90scr100.h, avr/ioa6289.h, avr/ioat94k.h,
avr/iocan128.h, avr/iocan32.h, avr/iocan64.h, avr/iocanxx.h,
avr/iom103.h, avr/iom128.h, avr/iom1280.h, avr/iom1281.h,
avr/iom1284p.h, avr/iom128rfa1.h, avr/iom16.h, avr/iom161.h,
avr/iom162.h, avr/iom163.h, avr/iom164.h, avr/iom165.h,
avr/iom165p.h, avr/iom168.h, avr/iom168p.h, avr/iom169.h,
avr/iom169p.h, avr/iom16hva.h, avr/iom16m1.h, avr/iom16u4.h,
avr/iom2560.h, avr/iom2561.h, avr/iom32.h, avr/iom323.h,
avr/iom324.h, avr/iom325.h, avr/iom3250.h, avr/iom328p.h,
avr/iom329.h, avr/iom3290.h, avr/iom32c1.h, avr/iom32hvb.h,
avr/iom32m1.h, avr/iom32u4.h, avr/iom32u6.h, avr/iom406.h,
avr/iom48.h, avr/iom48p.h, avr/iom64.h, avr/iom640.h, avr/iom644.h,
avr/iom645.h, avr/iom6450.h, avr/iom649.h, avr/iom6490.h,
avr/iom64c1.h, avr/iom64m1.h, avr/iom8.h, avr/iom8515.h,
avr/iom8535.h, avr/iom88.h, avr/iom88p.h, avr/iom8hva.h, avr/iomx8.h,
avr/iomxx0_1.h, avr/iomxx4.h, avr/iomxxhva.h, avr/iotn11.h,
avr/iotn12.h, avr/iotn13.h, avr/iotn13a.h, avr/iotn15.h,
avr/iotn167.h, avr/iotn22.h, avr/iotn2313.h, avr/iotn24.h,
avr/iotn25.h, avr/iotn26.h, avr/iotn261.h, avr/iotn28.h,
avr/iotn43u.h, avr/iotn44.h, avr/iotn45.h, avr/iotn461.h,
avr/iotn48.h, avr/iotn84.h, avr/iotn85.h, avr/iotn861.h,
avr/iotn87.h, avr/iotn88.h, avr/iotnx4.h, avr/iotnx5.h,
avr/iotnx61.h, avr/iousb1286.h, avr/iousb1287.h, avr/iousb162.h,
avr/iousb646.h, avr/iousb647.h, avr/iousb82.h, avr/iousbxx2.h,
avr/iousbxx6_7.h, avr/iox128a1.h, avr/iox128a3.h, avr/iox16a4.h,
avr/iox16d4.h, avr/iox256a3.h, avr/iox256a3b.h, avr/iox32a4.h,
avr/iox32d4.h, avr/iox64a1.h, avr/iox64a3.h, avr/lock.h,
avr/parity.h, avr/pgmspace.h, avr/portpins.h, avr/power.h,
avr/sfr_defs.h, avr/signal.h, avr/sleep.h, avr/version.h, avr/wdt.h,
rtems/asm.h, rtems/score/cpu.h: Update to avr .h files from avr-libc
1.6.8. Tinker with code and includes to eliminate warnings. Now
builds multilib.
* avr/iom169pa.h, avr/iom16a.h, avr/iom16hva2.h, avr/iom16hvb.h,
avr/iom16u2.h, avr/iom324pa.h, avr/iom32u2.h, avr/iom644p.h,
avr/iom644pa.h, avr/iom649p.h, avr/iom64hve.h, avr/iom88pa.h,
avr/iom8u2.h, avr/iotn2313a.h, avr/iotn24a.h, avr/iotn261a.h,
avr/iotn4313.h, avr/iotn44a.h, avr/iotn461a.h, avr/iotn861a.h,
avr/iox128d3.h, avr/iox192a3.h, avr/iox192d3.h, avr/iox256d3.h,
avr/iox64d3.h, avr/signature.h: New files.
Diffstat (limited to 'cpukit/score/cpu/avr/avr/power.h')
-rw-r--r-- | cpukit/score/cpu/avr/avr/power.h | 234 |
1 files changed, 158 insertions, 76 deletions
diff --git a/cpukit/score/cpu/avr/avr/power.h b/cpukit/score/cpu/avr/avr/power.h index b84e78c294..f17166142a 100644 --- a/cpukit/score/cpu/avr/avr/power.h +++ b/cpukit/score/cpu/avr/avr/power.h @@ -40,20 +40,20 @@ \code #include <avr/power.h>\endcode -Many AVRs contain a Power Reduction Register (PRR) or Registers (PRRx) that -allow you to reduce power consumption by disabling or enabling various on-board +Many AVRs contain a Power Reduction Register (PRR) or Registers (PRRx) that +allow you to reduce power consumption by disabling or enabling various on-board peripherals as needed. There are many macros in this header file that provide an easy interface to enable or disable on-board peripherals to reduce power. See the table below. \note Not all AVR devices have a Power Reduction Register (for example -the ATmega128). On those devices without a Power Reduction Register, these +the ATmega128). On those devices without a Power Reduction Register, these macros are not available. \note Not all AVR devices contain the same peripherals (for example, the LCD -interface), or they will be named differently (for example, USART and -USART0). Please consult your device's datasheet, or the header file, to +interface), or they will be named differently (for example, USART and +USART0). Please consult your device's datasheet, or the header file, to find out which macros are applicable to your device. */ @@ -347,10 +347,15 @@ find out which macros are applicable to your device. || defined(__AVR_ATxmega32D4__) \ || defined(__AVR_ATxmega64A1__) \ || defined(__AVR_ATxmega64A3__) \ +|| defined(__AVR_ATxmega64D3__) \ || defined(__AVR_ATxmega128A1__) \ || defined(__AVR_ATxmega128A3__) \ +|| defined(__AVR_ATxmega128D3__) \ +|| defined(__AVR_ATxmega192A3__) \ +|| defined(__AVR_ATxmega192D3__) \ +|| defined(__AVR_ATxmega256D3__) \ || defined(__AVR_ATxmega256A3__) \ -|| defined(__AVR_ATxmega256A3b__) +|| defined(__AVR_ATxmega256A3B__) /* #define power_aes_enable() (PR_PR &= (uint8_t)~(PR_AES_bm)) @@ -477,7 +482,7 @@ do { \ || defined(__AVR_ATmega1280__) \ || defined(__AVR_ATmega1281__) \ || defined(__AVR_ATmega2560__) \ -|| defined(__AVR_ATmega2561__) +|| defined(__AVR_ATmega2561__) #define power_adc_enable() (PRR0 &= (uint8_t)~(1 << PRADC)) #define power_adc_disable() (PRR0 |= (uint8_t)(1 << PRADC)) @@ -625,7 +630,7 @@ do{ \ #elif defined(__AVR_ATmega32U4__) \ -defined(__AVR_ATmega16U4__) +|| defined(__AVR_ATmega16U4__) #define power_adc_enable() (PRR0 &= (uint8_t)~(1 << PRADC)) @@ -806,11 +811,16 @@ do{ \ #elif defined(__AVR_ATmega165__) \ +|| defined(__AVR_ATmega165A__) \ || defined(__AVR_ATmega165P__) \ || defined(__AVR_ATmega325__) \ || defined(__AVR_ATmega3250__) \ || defined(__AVR_ATmega645__) \ -|| defined(__AVR_ATmega6450__) +|| defined(__AVR_ATmega645A__) \ +|| defined(__AVR_ATmega645P__) \ +|| defined(__AVR_ATmega6450__) \ +|| defined(__AVR_ATmega6450A__) \ +|| defined(__AVR_ATmega6450P__) #define power_adc_enable() (PRR &= (uint8_t)~(1 << PRADC)) #define power_adc_disable() (PRR |= (uint8_t)(1 << PRADC)) @@ -829,13 +839,20 @@ do{ \ #elif defined(__AVR_ATmega169__) \ +|| defined(__AVR_ATmega169A__) \ || defined(__AVR_ATmega169P__) \ +|| defined(__AVR_ATmega169PA__) \ || defined(__AVR_ATmega329__) \ || defined(__AVR_ATmega329P__) \ +|| defined(__AVR_ATmega329PA__) \ || defined(__AVR_ATmega3290__) \ || defined(__AVR_ATmega3290P__) \ || defined(__AVR_ATmega649__) \ -|| defined(__AVR_ATmega6490__) +|| defined(__AVR_ATmega649A__) \ +|| defined(__AVR_ATmega649P__) \ +|| defined(__AVR_ATmega6490__) \ +|| defined(__AVR_ATmega6490A__) \ +|| defined(__AVR_ATmega6490P__) #define power_adc_enable() (PRR &= (uint8_t)~(1 << PRADC)) #define power_adc_disable() (PRR |= (uint8_t)(1 << PRADC)) @@ -856,8 +873,11 @@ do{ \ #define power_all_disable() (PRR |= (uint8_t)((1<<PRADC)|(1<<PRSPI)|(1<<PRUSART0)|(1<<PRTIM1)|(1<<PRLCD))) -#elif defined(__AVR_ATmega164P__) \ -|| defined(__AVR_ATmega324P__) +#elif defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) \ +|| defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324P__) \ +|| defined(__AVR_ATmega324PA__) #define power_adc_enable() (PRR0 &= (uint8_t)~(1 << PRADC)) #define power_adc_disable() (PRR0 |= (uint8_t)(1 << PRADC)) @@ -888,6 +908,7 @@ do{ \ #elif defined(__AVR_ATmega644__) \ +|| defined(__AVR_ATmega644A__) \ || defined(__AVR_ATmega644P__) #define power_adc_enable() (PRR0 &= (uint8_t)~(1 << PRADC)) @@ -935,11 +956,16 @@ do{ \ #elif defined(__AVR_ATmega48__) \ +|| defined(__AVR_ATmega48A__) \ || defined(__AVR_ATmega48P__) \ || defined(__AVR_ATmega88__) \ +|| defined(__AVR_ATmega88A__) \ || defined(__AVR_ATmega88P__) \ +|| defined(__AVR_ATmega88PA__) \ || defined(__AVR_ATmega168__) \ +|| defined(__AVR_ATmega168A__) \ || defined(__AVR_ATmega168P__) \ +|| defined(__AVR_ATmega328__) \ || defined(__AVR_ATmega328P__) \ || defined(__AVR_ATtiny48__) \ || defined(__AVR_ATtiny88__) @@ -970,14 +996,19 @@ do{ \ #elif defined(__AVR_ATtiny24__) \ +|| defined(__AVR_ATtiny24A__) \ || defined(__AVR_ATtiny44__) \ +|| defined(__AVR_ATtiny44A__) \ || defined(__AVR_ATtiny84__) \ || defined(__AVR_ATtiny25__) \ || defined(__AVR_ATtiny45__) \ || defined(__AVR_ATtiny85__) \ || defined(__AVR_ATtiny261__) \ +|| defined(__AVR_ATtiny261A__) \ || defined(__AVR_ATtiny461__) \ +|| defined(__AVR_ATtiny461A__) \ || defined(__AVR_ATtiny861__) \ +|| defined(__AVR_ATtiny861A__) \ || defined(__AVR_ATtiny43U__) #define power_adc_enable() (PRR &= (uint8_t)~(1 << PRADC)) @@ -1124,8 +1155,10 @@ do{ \ #elif defined(__AVR_AT90USB82__) \ -|| defined(__AVR_AT90USB162__) - +|| defined(__AVR_AT90USB162__) \ +|| defined(__AVR_ATmega8U2__) \ +|| defined(__AVR_ATmega16U2__) \ +|| defined(__AVR_ATmega32U2__) #define power_spi_enable() (PRR0 &= (uint8_t)~(1 << PRSPI)) #define power_spi_disable() (PRR0 |= (uint8_t)(1 << PRSPI)) @@ -1134,7 +1167,7 @@ do{ \ #define power_timer0_disable() (PRR0 |= (uint8_t)(1 << PRTIM0)) #define power_timer1_enable() (PRR0 &= (uint8_t)~(1 << PRTIM1)) -#define power_timer2_disable() (PRR0 |= (uint8_t)(1 << PRTIM1)) +#define power_timer1_disable() (PRR0 |= (uint8_t)(1 << PRTIM1)) #define power_usb_enable() (PRR1 &= (uint8_t)~(1 << PRUSB)) #define power_usb_disable() (PRR1 |= (uint8_t)(1 << PRUSB)) @@ -1205,21 +1238,22 @@ do{ \ PRR1 |= (uint8_t)((1<<PRUSBH)|(1<<PRUSB)|(1<<PRHSSPI)|(1<<PRSCI)|(1<<PRAES)|(1<<PRKB)); \ }while(0) + +#elif defined(__AVR_ATtiny13A__) + +#define power_adc_enable() (PRR &= (uint8_t)~(1 << PRADC)) +#define power_adc_disable() (PRR |= (uint8_t)(1 << PRADC)) + +#define power_timer0_enable() (PRR &= (uint8_t)~(1 << PRTIM0)) +#define power_timer0_disable() (PRR |= (uint8_t)(1 << PRTIM0)) + +#define power_all_enable() (PRR &= (uint8_t)~((1<<PRADC)|(1<<PRTIM0))) +#define power_all_disable() (PRR |= (uint8_t)((1<<PRADC)|(1<<PRTIM0))) + #endif -#if defined(__AVR_ATmega640__) \ -|| defined(__AVR_ATmega1280__) \ -|| defined(__AVR_ATmega1281__) \ -|| defined(__AVR_ATmega2560__) \ -|| defined(__AVR_ATmega2561__) \ -|| defined(__AVR_AT90USB646__) \ -|| defined(__AVR_AT90USB647__) \ -|| defined(__AVR_AT90USB82__) \ -|| defined(__AVR_AT90USB1286__) \ -|| defined(__AVR_AT90USB1287__) \ -|| defined(__AVR_AT90USB162__) \ -|| defined(__AVR_AT90CAN32__) \ +#if defined(__AVR_AT90CAN32__) \ || defined(__AVR_AT90CAN64__) \ || defined(__AVR_AT90CAN128__) \ || defined(__AVR_AT90PWM1__) \ @@ -1229,38 +1263,69 @@ do{ \ || defined(__AVR_AT90PWM3B__) \ || defined(__AVR_AT90PWM216__) \ || defined(__AVR_AT90PWM316__) \ -|| defined(__AVR_ATmega32M1__) \ +|| defined(__AVR_AT90SCR100__) \ +|| defined(__AVR_AT90USB646__) \ +|| defined(__AVR_AT90USB647__) \ +|| defined(__AVR_AT90USB82__) \ +|| defined(__AVR_AT90USB1286__) \ +|| defined(__AVR_AT90USB1287__) \ +|| defined(__AVR_AT90USB162__) \ +|| defined(__AVR_ATmega1280__) \ +|| defined(__AVR_ATmega1281__) \ +|| defined(__AVR_ATmega128RFA1__) \ || defined(__AVR_ATmega1284P__) \ || defined(__AVR_ATmega162__) \ +|| defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) \ || defined(__AVR_ATmega165__) \ +|| defined(__AVR_ATmega165A__) \ || defined(__AVR_ATmega165P__) \ +|| defined(__AVR_ATmega168__) \ +|| defined(__AVR_ATmega168P__) \ +|| defined(__AVR_ATmega169__) \ +|| defined(__AVR_ATmega169A__) \ +|| defined(__AVR_ATmega169P__) \ +|| defined(__AVR_ATmega169PA__) \ +|| defined(__AVR_ATmega16U4__) \ +|| defined(__AVR_ATmega2560__) \ +|| defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324P__) \ || defined(__AVR_ATmega325__) \ || defined(__AVR_ATmega3250__) \ +|| defined(__AVR_ATmega328P__) \ +|| defined(__AVR_ATmega329__) \ +|| defined(__AVR_ATmega329P__) \ +|| defined(__AVR_ATmega329PA__) \ +|| defined(__AVR_ATmega3290__) \ +|| defined(__AVR_ATmega32C1__) \ || defined(__AVR_ATmega32HVB__) \ +|| defined(__AVR_ATmega32M1__) \ +|| defined(__AVR_ATmega32U4__) \ +|| defined(__AVR_ATmega32U6__) \ +|| defined(__AVR_ATmega48__) \ +|| defined(__AVR_ATmega48P__) \ +|| defined(__AVR_ATmega640__) \ +|| defined(__AVR_ATmega649P__) \ +|| defined(__AVR_ATmega644__) \ +|| defined(__AVR_ATmega644A__) \ +|| defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega644PA__) \ || defined(__AVR_ATmega645__) \ +|| defined(__AVR_ATmega645A__) \ +|| defined(__AVR_ATmega645P__) \ || defined(__AVR_ATmega6450__) \ -|| defined(__AVR_ATmega169__) \ -|| defined(__AVR_ATmega169P__) \ -|| defined(__AVR_ATmega329__) \ -|| defined(__AVR_ATmega3290__) \ +|| defined(__AVR_ATmega6450A__) \ +|| defined(__AVR_ATmega6450P__) \ || defined(__AVR_ATmega649__) \ +|| defined(__AVR_ATmega649A__) \ || defined(__AVR_ATmega6490__) \ -|| defined(__AVR_ATmega48__) \ -|| defined(__AVR_ATmega48P__) \ +|| defined(__AVR_ATmega6490A__) \ +|| defined(__AVR_ATmega6490P__) \ || defined(__AVR_ATmega88__) \ || defined(__AVR_ATmega88P__) \ -|| defined(__AVR_ATmega168__) \ -|| defined(__AVR_ATmega168P__) \ -|| defined(__AVR_ATmega328P__) \ -|| defined(__AVR_ATmega164P__) \ -|| defined(__AVR_ATmega324P__) \ -|| defined(__AVR_ATmega644__) \ -|| defined(__AVR_ATmega644P__) \ || defined(__AVR_ATtiny48__) \ || defined(__AVR_ATtiny167__) \ -|| defined(__AVR_ATmega32U4__) \ -|| defined(__AVR_ATmega32C1__) \ -|| defined(__AVR_AT90SCR100__) \ || defined(__DOXYGEN__) @@ -1277,7 +1342,7 @@ without a Clock Prescale Register, these macros are not available. /** \addtogroup avr_power -\code +\code typedef enum { clock_div_1 = 0, @@ -1288,7 +1353,8 @@ typedef enum clock_div_32 = 5, clock_div_64 = 6, clock_div_128 = 7, - clock_div_256 = 8 + clock_div_256 = 8, + clock_div_1_rc = 15, // ATmega128RFA1 only } clock_div_t; \endcode Clock prescaler setting enumerations. @@ -1304,29 +1370,38 @@ typedef enum clock_div_32 = 5, clock_div_64 = 6, clock_div_128 = 7, - clock_div_256 = 8 + clock_div_256 = 8, +#if defined(__AVR_ATmega128RFA1__) + clock_div_1_rc = 15, +#endif } clock_div_t; +static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__)); + /** \addtogroup avr_power \code clock_prescale_set(x) \endcode -Set the clock prescaler register select bits, selecting a system clock division setting. They type of x is clock_div_t. +Set the clock prescaler register select bits, selecting a system clock +division setting. This function is inlined, even if compiler +optimizations are disabled. + +The type of x is clock_div_t. */ -#define clock_prescale_set(x) \ -{ \ - uint8_t tmp = _BV(CLKPCE); \ - __asm__ __volatile__ ( \ - "in __tmp_reg__,__SREG__" "\n\t" \ - "cli" "\n\t" \ - "sts %1, %0" "\n\t" \ - "sts %1, %2" "\n\t" \ - "out __SREG__, __tmp_reg__" \ - : /* no outputs */ \ - : "d" (tmp), \ - "M" (_SFR_MEM_ADDR(CLKPR)), \ - "d" (x) \ - : "r0"); \ +void clock_prescale_set(clock_div_t __x) +{ + uint8_t __tmp = _BV(CLKPCE); + __asm__ __volatile__ ( + "in __tmp_reg__,__SREG__" "\n\t" + "cli" "\n\t" + "sts %1, %0" "\n\t" + "sts %1, %2" "\n\t" + "out __SREG__, __tmp_reg__" + : /* no outputs */ + : "d" (__tmp), + "M" (_SFR_MEM_ADDR(CLKPR)), + "d" (__x) + : "r0"); } /** \addtogroup avr_power @@ -1338,15 +1413,22 @@ Gets and returns the clock prescaler register setting. The return type is clock_ #elif defined(__AVR_ATtiny24__) \ +|| defined(__AVR_ATtiny24A__) \ || defined(__AVR_ATtiny44__) \ +|| defined(__AVR_ATtiny44A__) \ || defined(__AVR_ATtiny84__) \ || defined(__AVR_ATtiny25__) \ || defined(__AVR_ATtiny45__) \ || defined(__AVR_ATtiny85__) \ +|| defined(__AVR_ATtiny261A__) \ || defined(__AVR_ATtiny261__) \ || defined(__AVR_ATtiny461__) \ +|| defined(__AVR_ATtiny461A__) \ || defined(__AVR_ATtiny861__) \ +|| defined(__AVR_ATtiny861A__) \ || defined(__AVR_ATtiny2313__) \ +|| defined(__AVR_ATtiny2313A__) \ +|| defined(__AVR_ATtiny4313__) \ || defined(__AVR_ATtiny13__) \ || defined(__AVR_ATtiny13A__) \ || defined(__AVR_ATtiny43U__) \ @@ -1365,20 +1447,20 @@ typedef enum } clock_div_t; -#define clock_prescale_set(x) \ -{ \ - uint8_t tmp = _BV(CLKPCE); \ - __asm__ __volatile__ ( \ - "in __tmp_reg__,__SREG__" "\n\t" \ - "cli" "\n\t" \ - "out %1, %0" "\n\t" \ - "out %1, %2" "\n\t" \ - "out __SREG__, __tmp_reg__" \ - : /* no outputs */ \ - : "d" (tmp), \ - "I" (_SFR_IO_ADDR(CLKPR)), \ - "d" (x) \ - : "r0"); \ +void clock_prescale_set(clock_div_t __x) +{ + uint8_t __tmp = _BV(CLKPCE); + __asm__ __volatile__ ( + "in __tmp_reg__,__SREG__" "\n\t" + "cli" "\n\t" + "out %1, %0" "\n\t" + "out %1, %2" "\n\t" + "out __SREG__, __tmp_reg__" + : /* no outputs */ + : "d" (__tmp), + "I" (_SFR_IO_ADDR(CLKPR)), + "d" (__x) + : "r0"); } |