Add watchdog driver.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 11 Jan 2012 14:40:24 +0000 (14:40 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 11 Jan 2012 14:40:24 +0000 (14:40 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@5245 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/arm/drv/wdt_arm.h
bertos/cpu/arm/hw/init_at91.c

index 2e631bd6472e837e73d7eab488dce61b436fb52e..64f21eef91f98e8d168f6e3a848c2cbd8ec16e5a 100644 (file)
 #define DRV_WDT_ARM_H
 
 #include <cfg/compiler.h> // INLINE
+#include <cfg/macros.h> // BV
 
-#warning TODO: This module is not implemented for at91 CPUs
+#if CPU_ARM_AT91
+       #include <io/arm.h>
 
-INLINE void wdt_start(uint32_t _timeout) { (void) _timeout; /* implement me */ }
-INLINE void wdt_stop(void) { /*implement me */ }
-INLINE void wdt_reset(void) { /* implement me */ }
+       INLINE void wdt_start(uint32_t _timeout) { (void) _timeout; /* implement me */ }
+       INLINE void wdt_stop(void) { WDT_MR = BV(WDT_WDDIS); }
+       INLINE void wdt_reset(void)
+       {
+               #if (ARCH & ARCH_BOOT)
+                       WDT_CR = WDT_KEY | BV(WDT_WDRSTT);
+               #endif
+       }
+#else
+       #error "Missing watchdog support for yout CPU"
+#endif
 
 #endif //DRV_WDT_ARM_H
index fc7ffaf47ed265935de926ce8ec61d98e89ccf3a..f803c5954fed2786e11e28fa297c0546b2b1aec2 100644 (file)
@@ -39,6 +39,8 @@
 #include <io/arm.h>
 #include <cfg/macros.h>
 
+#include "cfg/cfg_wdt.h"
+
 #define USE_FIXED_PLL 1
 
 #define XTAL_FREQ 18432000UL
@@ -171,8 +173,10 @@ void __init1(void)
        AIC_EOICR = 0xFFFFFFFF;
        AIC_IDCR =  0xFFFFFFFF;
 
-        /* The watchdog is enabled after processor reset. Disable it. */
-       WDT_MR = BV(WDT_WDDIS);
+       #if CONFIG_WATCHDOG == 0
+               /* The watchdog is enabled after processor reset. Disable it. */
+               WDT_MR = BV(WDT_WDDIS);
+       #endif
 
         /*
          * Enable the main oscillator. Set startup time of 6 * 8 slow