1 #ifndef CONTIKI_CLOCK_AVR_H
2 #define CONTIKI_CLOCK_AVR_H
4 #if defined (__AVR_ATmega128__)
6 #define AVR_OUTPUT_COMPARE_INT TIMER0_COMP_vect
21 OCR0 = F_CPU/1024UL/CLOCK_CONF_SECOND; \
28 TCCR0 = _BV(CS00) | _BV(CS01) | _BV(CS02) | _BV(WGM01); \
39 #elif defined (__AVR_ATmega128RFA1__) && 0
42 #define AVR_OUTPUT_COMPARE_INT TIMER0_COMPA_vect
56 OCR0A = F_CPU/1024/CLOCK_CONF_SECOND - 1; \
63 TCCR0A = _BV(WGM01); \
64 TCCR0B = _BV(CS00) | _BV(CS02); \
73 TIMSK0 = _BV (OCIE0A);
76 #elif defined (__AVR_ATmega1284P__) || (__AVR_AT90USB1287__) || (__AVR_ATmega1281__) || defined (__AVR_ATmega128RFA1__)
84 #if AVR_CONF_USE32KCRYSTAL
85 #define AVR_OUTPUT_COMPARE_INT TIMER2_COMPA_vect
99 OCR2A = 32768/8/CLOCK_CONF_SECOND - 1; \
106 TCCR2A = _BV(WGM21); \
107 TCCR2B = _BV(CS21); \
116 TIMSK2 = _BV (OCIE2A);
121 #error "Please define CPU clock speed for your platform. #define F_CPU 8000000UL is typical."
123 #if CLOCK_CONF_SECOND == 0
124 #error "Please define timer ticks per second for your platform. #define CLOCK_CONF_SECOND 128 is typical."
127 #ifdef AVR_CONF_TMR0_PRESCALE
128 #elif F_CPU/CLOCK_CONF_SECOND < 256
129 #define AVR_CONF_TMR0_PRESCALE 1
130 #elif F_CPU/CLOCK_CONF_SECOND < 256 * 8
131 #define AVR_CONF_TMR0_PRESCALE 8
132 #elif F_CPU/CLOCK_CONF_SECOND < 256 * 64
133 #define AVR_CONF_TMR0_PRESCALE 64
134 #elif F_CPU/CLOCK_CONF_SECOND < 256 * 256
135 #define AVR_CONF_TMR0_PRESCALE 256
137 #define AVR_CONF_TMR0_PRESCALE 1024
140 #if F_CPU/CLOCK_CONF_SECOND/AVR_CONF_TMR0_PRESCALE > 255
141 #error "Can not prescale CPU clock to get specified ticks per second. F_CPU/CLOCK_CONF_SECOND/1024 must be less than 256."
144 #if AVR_CONF_TMR0_PRESCALE == 1
145 #define AVR_TCCR0B_CONF _BV(CS00)
146 #elif AVR_CONF_TMR0_PRESCALE == 8
147 #define AVR_TCCR0B_CONF _BV(CS01)
148 #elif AVR_CONF_TMR0_PRESCALE == 64
149 #define AVR_TCCR0B_CONF _BV(CS01) | _BV(CS00)
150 #elif AVR_CONF_TMR0_PRESCALE == 256
151 #define AVR_TCCR0B_CONF _BV(CS02)
152 #elif AVR_CONF_TMR0_PRESCALE == 1024
153 #define AVR_TCCR0B_CONF _BV(CS02) | _BV(CS00)
155 #error "Prescale factor not supported. Allowed values are 1,8,64,256,1024."
158 #define AVR_OUTPUT_COMPARE_INT TIMER0_COMPA_vect
173 OCR0A = F_CPU/AVR_CONF_TMR0_PRESCALE/CLOCK_CONF_SECOND - 1; \
180 TCCR0A = _BV(WGM01); \
181 TCCR0B = AVR_TCCR0B_CONF; \
190 TIMSK0 = _BV (OCIE0A);
193 #elif defined (__AVR_ATmega644__) || defined (__AVR_ATmega328P__)
204 OCR0A = F_CPU/256UL/CLOCK_CONF_SECOND - 1; \
211 TCCR0A = _BV(WGM01); \
212 TCCR0B = _BV(CS02); \
221 TIMSK0 = _BV (OCIE0A);
223 #define AVR_OUTPUT_COMPARE_INT TIMER0_COMPA_vect
225 #elif defined (__AVR_ATmega8515__) || defined (__AVR_ATmega16__) || defined (__AVR_ATmega32__)
227 #define AVR_OUTPUT_COMPARE_INT TIMER0_COMP_vect
239 OCR0 = F_CPU/256UL/CLOCK_CONF_SECOND; \
246 TCCR0 = _BV(CS02) | _BV(WGM01); \
257 #elif defined (__AVR_ATmega8__)
259 #define AVR_OUTPUT_COMPARE_INT TIMER2_COMP_vect
271 OCR2 = F_CPU/256UL/CLOCK_CONF_SECOND; \
278 TCCR2 = _BV(CS22) | _BV(CS21) | _BV(WGM21); \
289 #error "Setup CPU in clock-avr.h"
292 #endif //CONTIKI_CLOCK_AVR_H