# HG changeset patch # User asl # Date 1225815492 0 # Node ID 71f31d5567652d1dd939679f020ba3cd4a1ba207 # Parent a75fc899d9d11e63a7c18ba7b4cb4309a28a5bda * 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 diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog b/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog --- 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 + + * 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 * lpc2xxx: driver for on-chip RTC unit diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl b/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl --- 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)) } - } } diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx b/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx --- 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 -// Contributors: +// Contributors: Uwe Kindler #include +// +// 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;