sam3n: update clock and kdebug modules to use lastest register definion convention
[bertos.git] / bertos / cpu / arm / hw / init_at91.c
index 9c3eeb208c92fc03ff5062490598e8de25928dfb..1bba1c223e044aaceecb5ebe4570b7ecef5cc186 100644 (file)
@@ -150,8 +150,22 @@ void __init2(void);
  */
 void __init1(void)
 {
-       /* Use 2 cycles for flash access. */
-       MC_FMR = MC_FWS_2R3W;
+       /*
+        * Compute number of master clock cycles in 1.5us.
+        * Needed by flash writing functions.
+        * The maximum FMCN value is 0xFF and 0 can be used only if
+        * master clock is less than 33kHz.
+        */
+       #define MCN  DIV_ROUNDUP(CPU_FREQ, 666667UL)
+       #define FMCN (CPU_FREQ <= 33333UL ? 0 : (MCN < 0xFF ? MCN : 0xFF))
+
+       #if CPU_FREQ < 30000000UL
+               /* Use 1 cycles for flash access. */
+               MC_FMR = FMCN << MC_FMCN_SHIFT | MC_FWS_1R2W;
+       #else
+               /* Use 2 cycles for flash access. */
+               MC_FMR = FMCN << MC_FMCN_SHIFT | MC_FWS_2R3W;
+       #endif
 
         /* Disable all interrupts. Useful for debugging w/o target reset. */
        AIC_EOICR = 0xFFFFFFFF;