changeset 2192:93a41cbd95d0

* src/lpc2xxx_misc.c: Fixed issue with VPBDIV initialisation on non lpc22xx parts code.
author asl
date Mon, 08 May 2006 17:51:03 +0000
parents 8d1deabc0273
children 72aa9ecbdad9
files packages/hal/arm/lpc2xxx/var/current/ChangeLog packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c
diffstat 2 files changed, 16 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/lpc2xxx/var/current/ChangeLog
+++ b/packages/hal/arm/lpc2xxx/var/current/ChangeLog
@@ -1,9 +1,14 @@
+2006-05-08  Andy Jackson <andy@grapevinetech.co.uk>
+ 
+	* src/lpc2xxx_misc.c: Fixed issue with VPBDIV initialisation on
+	non lpc22xx parts code.
+
 2006-05-08  Sergei Gavrikov  <sg@belvok.com>
 
 	* src/lpc2xxx.misc (hal_hardware_init): Call HAL_PLF_HARDWARE_INIT
 	for any platform specific initialization.
 
-2006-02-14  Andy Jackson <andy@grapevinetech.co.uk>
+2006-05-07  Andy Jackson <andy@grapevinetech.co.uk>
 
 	* cdl/hal_arm_lpc2xxx.cdl: Added CYGHWR_HAL_ARM_LPC2XXX_FAMILY,
 	CYGNUM_HAL_ARM_LPC2XXX_VPBDIV, CYGNUM_HAL_ARM_LPC2XXX_XCLKDIV
--- a/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c
+++ b/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c
@@ -201,9 +201,9 @@ cyg_uint32 lpc_get_vpbdiv(void)
 
 // Set the VPBDIV register. The vpb bits are 1:0 and the xclk bits are 5:4. The
 // mapping of values passed to this routine to field values is:
-//		4 = divide by 4 (register bits 00)
-//		2 = divide by 2 (register bits 10)
-//		1 = divide by 1 (register bits 01)
+//       4 = divide by 4 (register bits 00)
+//       2 = divide by 2 (register bits 10)
+//       1 = divide by 1 (register bits 01)
 // This routine assumes that only these values can occur. As they are
 // generated in the CDL hopefully this should be the case. Fortunately
 // writing 11 merely causes the previous value to be retained.
@@ -217,16 +217,18 @@ void lpc_set_vpbdiv(int vpbdiv, int xclk
     HAL_WRITE_UINT32(CYGARC_HAL_LPC2XXX_REG_SCB_BASE +
                      CYGARC_HAL_LPC2XXX_REG_VPBDIV,
                      ((xclkdiv & 0x3) << 4) | (vpbdiv & 0x3));
+    lpc_xclk = lpc_cclk / xclkdiv;
 #else
     HAL_WRITE_UINT32(CYGARC_HAL_LPC2XXX_REG_SCB_BASE + 
                      CYGARC_HAL_LPC2XXX_REG_VPBDIV, vpbdiv & 0x3);
+    lpc_xclk = 0;        // Obvious bad value
 #endif
     
     lpc_pclk = lpc_cclk / vpbdiv;
-    lpc_xclk = lpc_cclk / xclkdiv;
 }
 
-// Perform variant setup
+// Perform variant setup. This optionally calls into the platform
+// HAL if it has defined HAL_PLF_HARDWARE_INIT.
 void hal_hardware_init(void)
 {
     lpc_cclk = CYGNUM_HAL_ARM_LPC2XXX_CLOCK_SPEED;
@@ -234,6 +236,8 @@ void hal_hardware_init(void)
 #ifdef CYGHWR_HAL_ARM_LPC2XXX_FAMILY_LPC22XX
     lpc_set_vpbdiv(CYGNUM_HAL_ARM_LPC2XXX_VPBDIV,
                    CYGNUM_HAL_ARM_LPC2XXX_XCLKDIV);
+#else
+    lpc_set_vpbdiv(CYGNUM_HAL_ARM_LPC2XXX_VPBDIV, 1);
 #endif
 
 #ifdef HAL_PLF_HARDWARE_INIT
@@ -312,7 +316,7 @@ void hal_interrupt_acknowledge(int vecto
                          CYGARC_HAL_LPC2XXX_REG_EXTINT, vector);
       }
     
-    //
+    // Acknowledge interrupt in the VIC
     HAL_WRITE_UINT32(CYGARC_HAL_LPC2XXX_REG_VIC_BASE + 
                      CYGARC_HAL_LPC2XXX_REG_VICVECTADDR, 0);  
 }