CONFIG_TIMER_STROBE: be tolerant with missing optional macro.
[bertos.git] / drv / timer_avr.h
index aa0911fee193c3b29354e12e381d83da401d4b94..2cfb016aeb11c9bd2dc0d6efd9e05aba1804f604 100755 (executable)
@@ -1,7 +1,7 @@
 /*!
  * \file
  * <!--
- * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2003, 2004 Develer S.r.l. (http://www.develer.com/)
  * Copyright 2000 Bernardo Innocenti <bernie@develer.com>
  * This file is part of DevLib - See devlib/README for information.
  * -->
  * \brief Low-level timer module for AVR
  */
 
-/*
- * $Log$
- * Revision 1.12  2004/08/10 06:59:45  bernie
- * CONFIG_TIMER_STROBE: Define no-op default macros.
- *
- * Revision 1.11  2004/08/03 15:53:17  aleph
- * Fix spacing
- *
- * Revision 1.10  2004/08/02 20:20:29  aleph
- * Merge from project_ks
- *
- * Revision 1.9  2004/07/22 02:01:14  bernie
- * Use TIMER_PRESCALER consistently.
- *
- * Revision 1.8  2004/07/20 23:50:20  bernie
- * Also define TIMER_PRESCALER.
- *
- * Revision 1.7  2004/07/20 23:49:40  bernie
- * Compute value of OCR_DIVISOR from CLOCK_FREQ.
- *
- * Revision 1.6  2004/07/20 23:48:16  bernie
- * Finally remove redundant protos.
- *
- * Revision 1.5  2004/07/18 22:16:35  bernie
- * Add missing header; Prevent warning for project_ks-specific code.
- *
- * Revision 1.4  2004/06/27 15:22:15  aleph
- * Fix spacing
- *
- * Revision 1.3  2004/06/07 15:57:40  aleph
- * Update to latest AVR timer code
- *
- * Revision 1.2  2004/06/03 11:27:09  bernie
- * Add dual-license information.
- *
- * Revision 1.1  2004/05/23 18:23:30  bernie
- * Import drv/timer module.
- *
- */
-
+/*#*
+ *#* $Log$
+ *#* Revision 1.16  2004/09/06 21:49:26  bernie
+ *#* CONFIG_TIMER_STROBE: be tolerant with missing optional macro.
+ *#*
+ *#* Revision 1.15  2004/08/25 14:12:08  rasky
+ *#* Aggiornato il comment block dei log RCS
+ *#*
+ *#* Revision 1.14  2004/08/24 16:27:01  bernie
+ *#* Add missing headers.
+ *#*
+ *#* Revision 1.13  2004/08/24 14:30:11  bernie
+ *#* Use new-style config macros for drv/timer.c
+ *#*
+ *#* Revision 1.12  2004/08/10 06:59:45  bernie
+ *#* CONFIG_TIMER_STROBE: Define no-op default macros.
+ *#*
+ *#* Revision 1.11  2004/08/03 15:53:17  aleph
+ *#* Fix spacing
+ *#*
+ *#* Revision 1.10  2004/08/02 20:20:29  aleph
+ *#* Merge from project_ks
+ *#*
+ *#* Revision 1.9  2004/07/22 02:01:14  bernie
+ *#* Use TIMER_PRESCALER consistently.
+ *#*/
 #ifndef DRV_TIMER_AVR_H
 #define DRV_TIMER_AVR_H
 
+#include <arch_config.h> // ARCH_BOARD_KC
 #include <avr/wdt.h>
 #include <avr/signal.h>
 
 #endif
 
 
+/*!
+ * Values for CONFIG_TIMER.
+ *
+ * Select which hardware timer interrupt to use for system clock and softtimers.
+ * \note The timer 1 overflow mode set the timer as a 24 kHz PWM.
+ */
+#define TIMER_ON_OUTPUT_COMPARE0  1
+#define TIMER_ON_OVERFLOW1        2
+#define TIMER_ON_OUTPUT_COMPARE2  3
+
+
 /*!
  * \def CONFIG_TIMER_STROBE
  *
@@ -74,7 +72,7 @@
  * TIMER_STROBE_OFF and TIMER_STROBE_INIT and set
  * CONFIG_TIMER_STROBE to 1.
  */
-#ifndef CONFIG_TIMER_STROBE
+#if !defined(CONFIG_TIMER_STROBE) || !CONFIG_TIMER_STROBE
        #define TIMER_STROBE_ON    do {/*nop*/} while(0)
        #define TIMER_STROBE_OFF   do {/*nop*/} while(0)
        #define TIMER_STROBE_INIT  do {/*nop*/} while(0)
@@ -93,7 +91,7 @@
 #define OCR_DIVISOR  (CLOCK_FREQ / TIMER_PRESCALER / TICKS_PER_SEC - 1) /* 191 */
 
 /*! HW dependent timer initialization  */
-#if defined(CONFIG_TIMER_ON_TIMER0)
+#if (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE0)
 
        //! Type of time expressed in ticks of the hardware high-precision timer
        typedef uint8_t hptime_t;
                return TCNT0;
        }
 
-#elif defined(CONFIG_TIMER_ON_TIMER1_OVERFLOW)
+#elif (CONFIG_TIMER == TIMER_ON_OVERFLOW1)
 
        //! Type of time expressed in ticks of the hardware high precision timer
        typedef uint16_t hptime_t;
                return TCNT1;
        }
 
-#elif defined(CONFIG_TIMER_ON_TIMER2)
+#elif (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE2)
 
        //! Type of time expressed in ticks of the hardware high precision timer
        typedef uint8_t hptime_t;
        }
 
 #else
-       #error Choose witch timer to use with CONFIG_TIMER_ON_TIMERx
-#endif /* CONFIG_TIMER_ON_TIMERx */
+       #error Unimplemented value for CONFIG_TIMER
+#endif /* CONFIG_TIMER */
 
 
-#if defined(CONFIG_TIMER_ON_TIMER1_OVERFLOW)
+#if (CONFIG_TIMER == TIMER_ON_OVERFLOW1)
 
        #define DEFINE_TIMER_ISR        \
                static void timer_handler(void)
        #endif
        }
 
-#elif defined (CONFIG_TIMER_ON_TIMER0)
+#elif (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE0)
 
        #define DEFINE_TIMER_ISR        \
                SIGNAL(SIG_OUTPUT_COMPARE0)
 
-#elif defined(CONFIG_TIMER_ON_TIMER2)
+#elif (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE2)
 
        #define DEFINE_TIMER_ISR        \
                SIGNAL(SIG_OUTPUT_COMPARE2)
 
 #else
-       #error Choose witch timer to use with CONFIG_TIMER_ON_TIMERx
-#endif /* CONFIG_TIMER_ON_TIMERx */
+       #error Unimplemented value for CONFIG_TIMER
+#endif /* CONFIG_TIMER */
 
 #endif /* DRV_TIMER_AVR_H */