]> git.pld-linux.org Git - packages/crossavr-libc.git/blame - 300-avr-libc-bug15254.patch
- synchronized patches with official AVR toolchain 3.4.1.830
[packages/crossavr-libc.git] / 300-avr-libc-bug15254.patch
CommitLineData
9fe267c2
PZ
1diff -Naurp include/avr/power.h include/avr/power.h
2--- include/avr/power.h 2011-12-29 14:21:50.000000000 +0530
3+++ include/avr/power.h 2012-02-06 11:09:16.000000000 +0530
4@@ -1393,10 +1393,6 @@ do{ \
5 || defined(__AVR_ATmega3290__) \
6 || defined(__AVR_ATmega3290A__) \
7 || defined(__AVR_ATmega32C1__) \
8-|| defined(__AVR_ATmega32HVB__) \
9-|| defined(__AVR_ATmega32HVBREVB__) \
10-|| defined(__AVR_ATmega16HVB__) \
11-|| defined(__AVR_ATmega16HVBREVB__) \
12 || defined(__AVR_ATmega32M1__) \
13 || defined(__AVR_ATmega32U2__) \
14 || defined(__AVR_ATmega32U4__) \
15@@ -1512,6 +1508,38 @@ Gets and returns the clock prescaler reg
16 */
17 #define clock_prescale_get() (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
18
19+#elif defined(__AVR_ATmega16HVB__) \
20+|| defined(__AVR_ATmega16HVBREVB__) \
21+|| defined(__AVR_ATmega32HVB__) \
22+|| defined(__AVR_ATmega32HVBREVB__)
23+
24+typedef enum
25+{
26+ clock_div_1 = 0,
27+ clock_div_2 = 1,
28+ clock_div_4 = 2,
29+ clock_div_8 = 3
30+} clock_div_t;
31+
32+static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
33+
34+void clock_prescale_set(clock_div_t __x)
35+{
36+ uint8_t __tmp = _BV(CLKPCE);
37+ __asm__ __volatile__ (
38+ "in __tmp_reg__,__SREG__" "\n\t"
39+ "cli" "\n\t"
40+ "sts %1, %0" "\n\t"
41+ "sts %1, %2" "\n\t"
42+ "out __SREG__, __tmp_reg__"
43+ : /* no outputs */
44+ : "d" (__tmp),
45+ "M" (_SFR_MEM_ADDR(CLKPR)),
46+ "d" (__x)
47+ : "r0");
48+}
49+
50+#define clock_prescale_get() (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)))
51
52 #elif defined(__AVR_ATtiny24__) \
53 || defined(__AVR_ATtiny24A__) \
This page took 0.058056 seconds and 4 git commands to generate.