summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/avr/avr/power.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-05-10 16:31:24 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-05-10 16:31:24 +0000
commit31af0dfe5749490f942e5047fd5f3b72419baf2e (patch)
treeb7776bf7414f8e70ef19503850121ef70df88ddc /cpukit/score/cpu/avr/avr/power.h
parent2010-05-10 Joel Sherrill <joel.sherrilL@OARcorp.com> (diff)
downloadrtems-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.h234
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");
}