Use avr libc for wdt cpu specific. Comply the wdt interface function. Clean code.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 2 Dec 2008 13:41:22 +0000 (13:41 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 2 Dec 2008 13:41:22 +0000 (13:41 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1953 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/avr/drv/wdt_avr.h
bertos/drv/wdt.h

index 109390eb0c93108eeae83b918798153947ebf6c3..0edb5d160756982747f970d5b44db13ddce5d0fa 100644 (file)
  *
  * \brief Watchdog interface for AVR architecture.
  *
+ * \note The AVR LibC already provvide the api to manange
+ * the watchdog on AVR architecture. In LibC also define several
+ * macro to set the timeout value (see documentation for more detail).
+ *
  * \version $Id$
  *
  * \author Daniele Basile <asterix@develer.com>
 #include <cfg/compiler.h> // INLINE
 
 #include <avr/io.h>
-
-#if CPU_AVR_ATMEGA1281
-       #define WDT_CRTL_REG WDTCSR
-#else
-       #define WDT_CRTL_REG WDTCR
-#endif
+#include <avr/wdt.h>
 
 /**
  * Reset the watchdog timer.
+ *
+ * This functions is already definded to avr libc,
+ * we use it.
  */
-INLINE void wdt_reset(void)
-{
-       __asm__ __volatile__ ("wdr");
-}
-
-INLINE void wdt_enable(bool flag)
-{
-       IRQ_DISABLE;
-       if (flag)
-       {
-               WDT_CRTL_REG |= BV(WDE);
-       }
-       else
-       {
-               WDT_CRTL_REG |= BV(WDCE) | BV(WDE);
-               WDT_CRTL_REG &= ~BV(WDE);
-       }
-       IRQ_ENABLE;
-}
+// void wdt_reset(void)
 
 /**
- * Set watchdog timeout.
+ * Start the watchdog timer that fire at the select
+ * timeout.
+ *
+ * \param timeout, you can use the macro that are defineded in
+ * avr/wdt.h.
+ *
+ * (from avr libc documentation)
+ * WDTO_15MS
+ * WDTO_30MS
+ * WDTO_60MS
+ * WDTO_120MS
+ * WDTO_250MS
+ * WDTO_500MS
+ * WDTO_1S
+ * WDTO_2S
+ * WDTO_4S
+ * WDTO_8S
  */
-INLINE void wdt_setTimeout(uint32_t timeout)
+INLINE void wdt_start(uint32_t _timeout)
 {
-       IRQ_DISABLE;
-       wdt_reset();
-       WDT_CRTL_REG |= BV(WDCE) | BV(WDE);
-       WDT_CRTL_REG = timeout;
-       IRQ_ENABLE;
+       uint8_t timeout = _timeout;
+
+       wdt_enable(timeout);
 }
 
 /**
- * Init watchdog timer.
+ * Stop watchdog timer.
  */
-INLINE void wdt_init(void)
+INLINE void wdt_stop(void)
 {
-       WDT_CRTL_REG |= BV(WDCE) | BV(WDE);
+       wdt_disable();
 }
 
 
index 0cb221c3a18aa9a6a9d1a5aa528c04e931aade74..6e2cde30f1c574261c33edfb62ffc137991a596a 100644 (file)
@@ -66,8 +66,8 @@
 #endif /* CONFIG_WATCHDOG */
 
 
-
 #if OS_HOSTED || !CONFIG_WATCHDOG
+
        /**
         * Reset the watchdog timer.
         */
        }
 
        /**
-        * Set watchdog timer timeout.
+        * Start the watchdog timer that fire at the select
+        * timeout.
         *
-        * \param timeout  0: 16.3ms, 7: 2.1s
+        * \param timeout, this value is target dependant.
+        * See the target documentation for more detail.
         */
-       INLINE void wdt_init(uint8_t timeout)
+       INLINE void wdt_start(uint32_t timeout)
        {
        #if CONFIG_WATCHDOG
                #if OS_QT
                        (void)timeout;
                #elif OS_POSIX
                        (void)timeout; // NOP
-               #else
-                       #error unknown CPU
                #endif
        #endif /* CONFIG_WATCHDOG */
-               (void)timeout;
-       }
-
-       INLINE void wdt_start(void)
-       {
-#if CONFIG_WATCHDOG
-               #if OS_QT
-                       // NOP
-               #elif OS_POSIX
-                       // NOP
-               #else
-                       #error unknown CPU
-               #endif
-#endif /* CONFIG_WATCHDOG */
+               (void)timeout; // NOP
        }
 
        INLINE void wdt_stop(void)
        {
-#if CONFIG_WATCHDOG
+       #if CONFIG_WATCHDOG
                #if OS_QT
                        // NOP
                #elif OS_POSIX
                #else
                        #error unknown CPU
                #endif
-#endif /* CONFIG_WATCHDOG */
+       #endif /* CONFIG_WATCHDOG */
        }
 #endif /* OS_HOSTED || !CONFIG_WATCHDOG */