/*
* $Log$
+ * 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.
*
#endif
-#define timer_hw_irq() /* Not needed, IRQ timer flag cleared automatically */
+/* Not needed, IRQ timer flag cleared automatically */
+#define timer_hw_irq() do {} while (0)
+
+#define TIMER_PRESCALER 64
/*!
* System timer: additional division after the prescaler
* 12288000 / 64 / 192 (0..191) = 1 ms
*/
-#define OCR_DIVISOR 191
+#define OCR_DIVISOR (CLOCK_FREQ / TIMER_PRESCALER / TICKS_PER_SEC - 1) /* 191 */
/*! HW dependent timer initialization */
#if defined(CONFIG_TIMER_ON_TIMER0)
TIFR = BV(OCF0) | BV(TOV0);
/* Setup Timer/Counter interrupt */
- ASSR = 0x00; /* internal system clock */
- TCCR0 = BV(WGM01) | BV(CS02); /* Clear on Compare match & prescaler = 64. When changing
- prescaler change TIMER_HW_HPTICKS_PER_SEC too */
- TCNT0 = 0x00; /* initialization of Timer/Counter */
+ ASSR = 0x00; /* Internal system clock */
+ TCCR0 = BV(WGM01) /* Clear on Compare match */
+ #if TIMER_PRESCALER == 64
+ | BV(CS02)
+ #else
+ #error Unsupported value of TIMER_PRESCALER
+ #endif
+ ;
+ TCNT0 = 0x00; /* Initialization of Timer/Counter */
OCR0 = OCR_DIVISOR; /* Timer/Counter Output Compare Register */
/* Enable timer interrupts: Timer/Counter2 Output Compare (OCIE2) */
}
//! Frequency of the hardware high precision timer
- #define TIMER_HW_HPTICKS_PER_SEC (CLOCK_FREQ / 64)
+ #define TIMER_HW_HPTICKS_PER_SEC (CLOCK_FREQ / TIMER_PRESCALER)
INLINE hptime_t timer_hw_hpread(void)
{
TIFR = BV(OCF2) | BV(TOV2);
/* Setup Timer/Counter interrupt */
- TCCR2 = BV(WGM21) | BV(CS21) | BV(CS20);
+ TCCR2 = BV(WGM21)
+ #if TIMER_PRESCALER == 64
+ | BV(CS21) | BV(CS20)
+ #else
+ #error Unsupported value of TIMER_PRESCALER
+ #endif
+ ;
/* Clear on Compare match & prescaler = 64, internal sys clock.
When changing prescaler change TIMER_HW_HPTICKS_PER_SEC too */
TCNT2 = 0x00; /* initialization of Timer/Counter */
}
//! Frequency of the hardware high precision timer
- #define TIMER_HW_HPTICKS_PER_SEC (CLOCK_FREQ / 64)
+ #define TIMER_HW_HPTICKS_PER_SEC (CLOCK_FREQ / TIMER_PRESCALER)
INLINE hptime_t timer_hw_hpread(void)
{