changeset 2584:71f31d556765

* cdl/lpc2xxx_wallclock.cdl: Moved CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT and CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC to lpc2xxx_wallclock.cxx * src/lpc2xxx_wallclock.cxx: Some small changes to support LPC24xx devices
author asl
date Tue, 04 Nov 2008 16:18:12 +0000
parents a75fc899d9d1
children 2f250a337a5e
files packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx
diffstat 3 files changed, 38 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog
+++ b/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog
@@ -1,3 +1,10 @@
+2008-11-01  Uwe Kindler <uwe_kindler@web.de>
+
+	* cdl/lpc2xxx_wallclock.cdl: Moved CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT
+	  and CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC to lpc2xxx_wallclock.cxx
+	* src/lpc2xxx_wallclock.cxx: Some small changes to support LPC24xx
+          devices
+    
 2007-07-12  Hans Rosenfeld  <rosenfeld@grumpf.hope-2000.org>
 
 	* lpc2xxx: driver for on-chip RTC unit
--- a/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl
+++ b/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl
@@ -53,7 +53,7 @@ cdl_package CYGPKG_DEVICES_WALLCLOCK_ARM
 
     parent        CYGPKG_IO_WALLCLOCK
     active_if     CYGPKG_IO_WALLCLOCK
-    active_if     CYGPKG_HAL_ARM_LPC2XXX
+    active_if     CYGPKG_HAL_ARM_LPC2XXX || CYGPKG_HAL_ARM_LPC24XX
 
     requires      { CYGHWR_HAL_ARM_LPC2XXX_IDLE_PWRSAVE == 0 }
     compile       lpc2xxx_wallclock.cxx
@@ -68,19 +68,4 @@ cdl_package CYGPKG_DEVICES_WALLCLOCK_ARM
         default_value 1
         implements    CYGINT_WALLCLOCK_IMPLEMENTATIONS
     }
-
-    cdl_option CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT {
-        display    "RTC prescaler integer portion"
-        flavor     data
-        calculated { ((CYGNUM_HAL_ARM_LPC2XXX_CLOCK_SPEED / 
-                       CYGNUM_HAL_ARM_LPC2XXX_VPBDIV) / 32768) - 1 }
-    }
-
-    cdl_option CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC {
-        display    "RTC prescaler fractional portion"
-        flavor     data
-        calculated { ((CYGNUM_HAL_ARM_LPC2XXX_CLOCK_SPEED / 
-                       CYGNUM_HAL_ARM_LPC2XXX_VPBDIV) -
-                      ((CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT + 1) * 32768)) }
-    }
 }
--- a/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx
+++ b/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx
@@ -2,7 +2,7 @@
 //
 //      lpc2xxx_wallclock.cxx
 //
-//      Wallclock implementation for LPC2xxx
+//      Wallclock implementation for LPC2xxx and LPC24xxx
 //
 //==========================================================================
 //####ECOSGPLCOPYRIGHTBEGIN####
@@ -40,9 +40,9 @@
 //#####DESCRIPTIONBEGIN####
 //
 // Author(s):     Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
-// Contributors:  
+// Contributors:  Uwe Kindler <uwe_kindler@web.de 
 // Date:          2007-06-19
-// Purpose:       Wallclock driver for LPC2xxx
+// Purpose:       Wallclock driver for LPC2xxx and LPC24xx
 //
 //####DESCRIPTIONEND####
 //
@@ -59,6 +59,30 @@
 #include <cyg/io/wallclock.hxx>
 #include <cyg/io/wallclock/wallclock.inl>
 
+//
+// The LPC2xxx variant HAL provides the CPU clock and the peripheral divider
+// VPBDIV. The LPC24xx variant HAL provides the RTC clock directly be means
+// of CYGNUM_HAL_ARM_LPC24XX_RTC_CLK. 
+//
+#ifdef CYGNUM_HAL_ARM_LPC2XXX_VPBDIV
+#define LPC2XXX_RTC_CLK (CYGNUM_HAL_ARM_LPC2XXX_CLOCK_SPEED / \
+                         CYGNUM_HAL_ARM_LPC2XXX_VPBDIV)
+#endif // CYGNUM_HAL_ARM_LPC2XXX_VPBDIV
+
+#ifdef CYGNUM_HAL_ARM_LPC24XX_RTC_CLK
+#define LPC2XXX_RTC_CLK (CYGNUM_HAL_ARM_LPC24XX_RTC_CLK)
+#endif // CYGNUM_HAL_ARM_LPC2XXX_VPBDIV
+
+
+#define CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT                     \
+        ((LPC2XXX_RTC_CLK / 32768) - 1)
+
+#define CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC                    \
+        (LPC2XXX_RTC_CLK -                                       \
+        ((CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT + 1) * 32768))
+
+
+
 /*
  * I don't like to write LOTS OF CAPITALIZED TEXT.
  * This code is intended for LPC2xxx processors _only_, so there is nothing
@@ -101,7 +125,9 @@ Cyg_WallClock::init_hw_seconds(void)
   rtc->ciir = 0x0;
   rtc->amr  = 0xf;
   
-  /* initialize prescaler */
+  // initialize prescaler - if the RTC id driven by an external 32.768 crystal
+  // clock then initializing the prescaler is not required but writing the
+  // registers here should not cause any trouble
   rtc->preint  = CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT;
   rtc->prefrac = CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC;