changeset 2482:872815d742ee

* cdl/hal_arm_at91sam7s.cdl: CDL for crystal vs clock signal. * include/hal_platform_setup.h: Rework flash wait states to remove redundant code when running at > 60MHz. Support clock signal input when starting the main clock.
author asl
date Sun, 11 May 2008 12:57:43 +0000
parents 0854e8c95fe1
children 3071a60a92da
files packages/hal/arm/at91/at91sam7s/current/ChangeLog packages/hal/arm/at91/at91sam7s/current/cdl/hal_arm_at91sam7s.cdl packages/hal/arm/at91/at91sam7s/current/include/hal_platform_setup.h
diffstat 3 files changed, 33 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/at91/at91sam7s/current/ChangeLog
+++ b/packages/hal/arm/at91/at91sam7s/current/ChangeLog
@@ -1,3 +1,11 @@
+2008-05-11  James G. Smith <jsmith@rallysmith.co.uk
+            Andrew Lunn  <andrew@lunn.ch>
+
+	* cdl/hal_arm_at91sam7s.cdl: CDL for crystal vs clock signal.
+	* include/hal_platform_setup.h: Rework flash wait states to remove
+	redundant code when running at > 60MHz. Support clock signal input
+	when starting the main clock.
+
 2008-04-30  John Eigelaar  <jeigelaar@mweb.co.za>
 
 	* include/pkgconf/mlt_arm_at91sam7x512_rom.{h|ldi}: Added the 
--- a/packages/hal/arm/at91/at91sam7s/current/cdl/hal_arm_at91sam7s.cdl
+++ b/packages/hal/arm/at91/at91sam7s/current/cdl/hal_arm_at91sam7s.cdl
@@ -220,10 +220,20 @@ cdl_package CYGPKG_HAL_ARM_AT91SAM7 {
     cdl_option CYGNUM_HAL_ARM_AT91_CLOCK_OSC_MAIN {
         display       "Main oscillator frequency"
         flavor        data
-        legal_values { 3000000 to 20000000} 
+        legal_values  { 3000000 to 20000000} 
         default_value { 18432000 }
         description   "
-            What frequency of crystal is clocking the device."
+            The frequency of the clock input, be it a crystal or a clock 
+            signal"
+    }
+
+    cdl_option CYGNUM_HAL_ARM_AT91_CLOCK_TYPE {
+        display       "Type of main frequency input"
+        flavor        data
+        default_value { "CRYSTAL" }
+        legal_values  { "CRYSTAL" "EXTCLOCK" } 
+        description   "
+            Whether a crystal or a XIN input clock is clocking the device."
     }
 
     cdl_option CYGNUM_HAL_ARM_AT91_PLL_DIVIDER {
--- a/packages/hal/arm/at91/at91sam7s/current/include/hal_platform_setup.h
+++ b/packages/hal/arm/at91/at91sam7s/current/include/hal_platform_setup.h
@@ -60,15 +60,19 @@
         .macro _flash_init
 __flash_init__:
         ldr     r0,=AT91_MC
-#if CYGNUM_HAL_ARM_AT91_CLOCK_SPEED > 30000000
+#if CYGNUM_HAL_ARM_AT91_CLOCK_SPEED > 60000000
+        // When the clock is running faster than 60MHz we need two wait states
+        ldr     r1,=(AT91_MC_FMR_2FWS)
+#else 
+# if CYGNUM_HAL_ARM_AT91_CLOCK_SPEED > 30000000
         // When the clock is running faster than 30MHz we need a wait state
         ldr     r1,=(AT91_MC_FMR_1FWS)
-        str     r1,[r0,#AT91_MC_FMR]
+# else
+        // We have a slow clock, no extra wait states are needed
+        ldr     r1,=AT91_MC_FMR_0FWS
+# endif
 #endif
-#if CYGNUM_HAL_ARM_AT91_CLOCK_SPEED > 60000000
-        ldr     r1,=(AT91_MC_FMR_2FWS)
         str     r1,[r0,#AT91_MC_FMR]
-#endif
         .endm
 
 // Macro to start the main clock.
@@ -79,7 +83,11 @@
         ldr     r1,=(AT91_PMC_MCKR_PRES_CLK|AT91_PMC_MCKR_SLOW_CLK)
         str     r1,[r0,#AT91_PMC_MCKR]
 	// startup time
+#if defined(CYGNUM_HAL_ARM_AT91_CLOCK_TYPE_EXTCLOCK)
+        ldr     r1,=(AT91_PMC_MOR_OSCBYPASS)
+#else
         ldr     r1,=(AT91_PMC_MOR_OSCCOUNT(6)|AT91_PMC_MOR_MOSCEN)
+#endif
         str     r1,[r0,#AT91_PMC_MOR]
 
         // Wait for oscilator start timeout