avr-libc-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-libc-commit] [2396] Pitchumani Sivanupandi:


From: Joerg Wunsch
Subject: [avr-libc-commit] [2396] Pitchumani Sivanupandi:
Date: Wed, 08 May 2013 11:20:56 +0000

Revision: 2396
          http://svn.sv.gnu.org/viewvc/?view=rev&root=avr-libc&revision=2396
Author:   joerg_wunsch
Date:     2013-05-08 11:20:55 +0000 (Wed, 08 May 2013)
Log Message:
-----------
Pitchumani Sivanupandi:

Specialize clock_prescale_set/get for mega hvb devices

Modified Paths:
--------------
    trunk/avr-libc/ChangeLog
    trunk/avr-libc/NEWS
    trunk/avr-libc/include/avr/power.h

Modified: trunk/avr-libc/ChangeLog
===================================================================
--- trunk/avr-libc/ChangeLog    2013-05-04 11:26:23 UTC (rev 2395)
+++ trunk/avr-libc/ChangeLog    2013-05-08 11:20:55 UTC (rev 2396)
@@ -1,3 +1,8 @@
+2013-01-15  Pitchumani Sivanupandi  <address@hidden>
+
+       * include/avr/power.h: Specialize clock_prescale_set/get
+       for mega hvb devices
+4
 2013-05-03 Mike Rice <address@hidden>
 
     * Deleted function iso_weeknum(), replaced with iso_week_date()

Modified: trunk/avr-libc/NEWS
===================================================================
--- trunk/avr-libc/NEWS 2013-05-04 11:26:23 UTC (rev 2395)
+++ trunk/avr-libc/NEWS 2013-05-08 11:20:55 UTC (rev 2396)
@@ -12,6 +12,7 @@
   [#37778] _MemoryBarrier() in cpufunc.h error on compile
   [#38135] Install a dummy stdfix-avrlibc.h
   [no-id]  XXX_vect_num not consistent io90pwmx.h, iousbxx6_7.h
+  [no-id]  Specialize clock_prescale_set/get for mega hvb devices
 
 * New devices supported:
 

Modified: trunk/avr-libc/include/avr/power.h
===================================================================
--- trunk/avr-libc/include/avr/power.h  2013-05-04 11:26:23 UTC (rev 2395)
+++ trunk/avr-libc/include/avr/power.h  2013-05-08 11:20:55 UTC (rev 2396)
@@ -1537,10 +1537,6 @@
 || defined(__AVR_ATmega3290__) \
 || defined(__AVR_ATmega3290A__) \
 || defined(__AVR_ATmega32C1__) \
-|| defined(__AVR_ATmega32HVB__) \
-|| defined(__AVR_ATmega32HVBREVB__) \
-|| defined(__AVR_ATmega16HVB__) \
-|| defined(__AVR_ATmega16HVBREVB__) \
 || defined(__AVR_ATmega32M1__) \
 || defined(__AVR_ATmega32U2__) \
 || defined(__AVR_ATmega32U4__) \
@@ -1693,7 +1689,39 @@
 */
 #define clock_prescale_get()  (clock_div_t)(CLKPR & 
(uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
 
+#elif defined(__AVR_ATmega16HVB__) \
+|| defined(__AVR_ATmega16HVBREVB__) \
+|| defined(__AVR_ATmega32HVB__) \
+|| defined(__AVR_ATmega32HVBREVB__)
 
+typedef enum
+{
+    clock_div_1 = 0,
+    clock_div_2 = 1,
+    clock_div_4 = 2,
+    clock_div_8 = 3
+} clock_div_t;
+
+static __inline__ void clock_prescale_set(clock_div_t) 
__attribute__((__always_inline__));
+
+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");
+}
+
+#define clock_prescale_get()  (clock_div_t)(CLKPR & 
(uint8_t)((1<<CLKPS0)|(1<<CLKPS1)))
+
 #elif defined(__AVR_ATtiny24__) \
 || defined(__AVR_ATtiny24A__) \
 || defined(__AVR_ATtiny44__) \




reply via email to

[Prev in Thread] Current Thread [Next in Thread]