Rev 1415 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 537 | andfri | 1 | #ifndef TIMER_CFG_H_ |
| 2 | #define TIMER_CFG_H_ |
||
| 3 | |||
| 4 | #include <config.h> |
||
| 5 | |||
| 6 | //#define TIMER_DEBUG_CONFIG |
||
| 7 | |||
| 8 | /*----------------------------------------------------------------------------- |
||
| 9 | * Configuration |
||
| 10 | *---------------------------------------------------------------------------*/ |
||
| 11 | #ifndef TIMER_NUM_TIMERS |
||
| 12 | # error TIMER_NUM_TIMERS is not defined! Edit config.inc. |
||
| 13 | #endif |
||
| 14 | |||
| 15 | #ifndef TIMER_USE_TIMER |
||
| 16 | # error TIMER_USE_TIMER is not defined! Edit config.inc. |
||
| 17 | #endif |
||
| 18 | |||
| 19 | #ifndef TIMER_TICKFREQ |
||
| 20 | # warning Using default TIMER_TICKFREQ value of 1000. |
||
| 21 | # define TIMER_TICKFREQ 1000 |
||
| 22 | #endif |
||
| 23 | |||
| 24 | #if defined(__AVR_ATmega8__) |
||
| 25 | #define TIMER0_MAX 255 |
||
| 26 | #define TIMER0_VECTOR TIMER0_OVF_vect |
||
| 27 | #define TIMER0_RELOAD(_t_) TCNT0 = ( 256 - _t_ ); |
||
| 28 | #define TIMER0_INIT() TIFR=(1<<TOV0);TIMSK|=(1<<TOIE0); |
||
| 29 | #define TIMER0_SET_PRESCALER_1() TCCR0=1; |
||
| 30 | #define TIMER0_SET_PRESCALER_8() TCCR0=2; |
||
| 31 | #define TIMER0_SET_PRESCALER_64() TCCR0=3; |
||
| 32 | #define TIMER0_SET_PRESCALER_256() TCCR0=4; |
||
| 33 | #define TIMER0_SET_PRESCALER_1024() TCCR0=5; |
||
| 34 | #define TIMER1_MAX 65535 |
||
| 35 | #define TIMER1_VECTOR TIMER1_COMPA_vect |
||
| 36 | #define TIMER1_COMPARE_REG OCR1A |
||
| 37 | #define TIMER1_INIT() TCCR1A=0;TIFR=(1<<OCF1A);TIMSK|=(1<<OCIE1A); |
||
| 38 | #define TIMER1_SET_PRESCALER_1() TCCR1B=(1<<WGM12)|1; |
||
| 39 | #define TIMER1_SET_PRESCALER_8() TCCR1B=(1<<WGM12)|2; |
||
| 40 | #define TIMER1_SET_PRESCALER_64() TCCR1B=(1<<WGM12)|3; |
||
| 41 | #define TIMER1_SET_PRESCALER_256() TCCR1B=(1<<WGM12)|4; |
||
| 42 | #define TIMER1_SET_PRESCALER_1024() TCCR1B=(1<<WGM12)|5; |
||
| 43 | #define TIMER2_MAX 255 |
||
| 44 | #define TIMER2_VECTOR TIMER2_COMP_vect |
||
| 45 | #define TIMER2_COMPARE_REG OCR2 |
||
| 46 | #define TIMER2_INIT() TIFR=(1<<OCF2);TIMSK|=(1<<OCIE2); |
||
| 47 | #define TIMER2_SET_PRESCALER_1() TCCR2=(1<<WGM21)|1; |
||
| 48 | #define TIMER2_SET_PRESCALER_8() TCCR2=(1<<WGM21)|2; |
||
| 49 | #define TIMER2_SET_PRESCALER_64() TCCR2=(1<<WGM21)|4; |
||
| 50 | #define TIMER2_SET_PRESCALER_256() TCCR2=(1<<WGM21)|6; |
||
| 51 | #define TIMER2_SET_PRESCALER_1024() TCCR2=(1<<WGM21)|7; |
||
| 52 | |||
| 1468 | arune | 53 | #elif defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) |
| 537 | andfri | 54 | #define TIMER0_MAX 255 |
| 55 | #define TIMER0_VECTOR TIMER0_COMPA_vect |
||
| 56 | #define TIMER0_COMPARE_REG OCR0A |
||
| 57 | #define TIMER0_INIT() TCCR0A=(1<<WGM01);TIFR0=(1<<OCF0A);TIMSK0|=(1<<OCIE0A); |
||
| 58 | #define TIMER0_SET_PRESCALER_1() TCCR0B=1; |
||
| 59 | #define TIMER0_SET_PRESCALER_8() TCCR0B=2; |
||
| 60 | #define TIMER0_SET_PRESCALER_64() TCCR0B=3; |
||
| 61 | #define TIMER0_SET_PRESCALER_256() TCCR0B=4; |
||
| 62 | #define TIMER0_SET_PRESCALER_1024() TCCR0B=5; |
||
| 63 | #define TIMER1_MAX 65535 |
||
| 64 | #define TIMER1_VECTOR TIMER1_COMPA_vect |
||
| 65 | #define TIMER1_COMPARE_REG OCR1A |
||
| 66 | #define TIMER1_INIT() TCCR1A=0;TIFR1=(1<<OCF1A);TIMSK1|=(1<<OCIE1A); |
||
| 67 | #define TIMER1_SET_PRESCALER_1() TCCR1B=(1<<WGM12)|1; |
||
| 68 | #define TIMER1_SET_PRESCALER_8() TCCR1B=(1<<WGM12)|2; |
||
| 69 | #define TIMER1_SET_PRESCALER_64() TCCR1B=(1<<WGM12)|3; |
||
| 70 | #define TIMER1_SET_PRESCALER_256() TCCR1B=(1<<WGM12)|4; |
||
| 71 | #define TIMER1_SET_PRESCALER_1024() TCCR1B=(1<<WGM12)|5; |
||
| 72 | #define TIMER2_MAX 255 |
||
| 73 | #define TIMER2_VECTOR TIMER2_COMPA_vect |
||
| 74 | #define TIMER2_COMPARE_REG OCR2A |
||
| 75 | #define TIMER2_INIT() TCCR2A=(1<<WGM21);TIFR2=(1<<OCF2A);TIMSK2|=(1<<OCIE2A); |
||
| 76 | #define TIMER2_SET_PRESCALER_1() TCCR2B=1; |
||
| 77 | #define TIMER2_SET_PRESCALER_8() TCCR2B=2; |
||
| 78 | #define TIMER2_SET_PRESCALER_64() TCCR2B=4; |
||
| 79 | #define TIMER2_SET_PRESCALER_256() TCCR2B=6; |
||
| 80 | #define TIMER2_SET_PRESCALER_1024() TCCR2B=7; |
||
| 81 | |||
| 82 | #else |
||
| 83 | # error AVR not supported! |
||
| 84 | #endif |
||
| 85 | |||
| 86 | #if TIMER_USE_TIMER == 0 |
||
| 87 | #define TIMER_MAX TIMER0_MAX |
||
| 88 | #define TIMER_VECTOR TIMER0_VECTOR |
||
| 89 | #if defined(TIMER0_RELOAD) |
||
| 90 | # define TIMER_RELOAD TIMER0_RELOAD |
||
| 91 | #endif |
||
| 92 | #if defined(TIMER0_COMPARE_REG) |
||
| 93 | # define TIMER_COMPARE_REG TIMER0_COMPARE_REG |
||
| 94 | #endif |
||
| 95 | #define TIMER_INIT TIMER0_INIT |
||
| 96 | #define TIMER_SET_PRESCALER_1 TIMER0_SET_PRESCALER_1 |
||
| 97 | #define TIMER_SET_PRESCALER_8 TIMER0_SET_PRESCALER_8 |
||
| 98 | #define TIMER_SET_PRESCALER_64 TIMER0_SET_PRESCALER_64 |
||
| 99 | #define TIMER_SET_PRESCALER_256 TIMER0_SET_PRESCALER_256 |
||
| 100 | #define TIMER_SET_PRESCALER_1024 TIMER0_SET_PRESCALER_1024 |
||
| 101 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 102 | # warning Using Timer 0. |
||
| 103 | #endif |
||
| 104 | |||
| 105 | #elif TIMER_USE_TIMER == 1 |
||
| 106 | #define TIMER_MAX TIMER1_MAX |
||
| 107 | #define TIMER_VECTOR TIMER1_VECTOR |
||
| 108 | #if defined(TIMER1_RELOAD) |
||
| 109 | # define TIMER_RELOAD TIMER1_RELOAD |
||
| 110 | #endif |
||
| 111 | #if defined(TIMER1_COMPARE_REG) |
||
| 112 | # define TIMER_COMPARE_REG TIMER1_COMPARE_REG |
||
| 113 | #endif |
||
| 114 | #define TIMER_INIT TIMER1_INIT |
||
| 115 | #define TIMER_SET_PRESCALER_1 TIMER1_SET_PRESCALER_1 |
||
| 116 | #define TIMER_SET_PRESCALER_8 TIMER1_SET_PRESCALER_8 |
||
| 117 | #define TIMER_SET_PRESCALER_64 TIMER1_SET_PRESCALER_64 |
||
| 118 | #define TIMER_SET_PRESCALER_256 TIMER1_SET_PRESCALER_256 |
||
| 119 | #define TIMER_SET_PRESCALER_1024 TIMER1_SET_PRESCALER_1024 |
||
| 120 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 121 | # warning Using Timer 1. |
||
| 122 | #endif |
||
| 123 | |||
| 124 | #elif TIMER_USE_TIMER == 2 |
||
| 125 | #define TIMER_MAX TIMER2_MAX |
||
| 126 | #define TIMER_VECTOR TIMER2_VECTOR |
||
| 127 | #if defined(TIMER2_RELOAD) |
||
| 128 | # define TIMER_RELOAD TIMER2_RELOAD |
||
| 129 | #endif |
||
| 130 | #if defined(TIMER2_COMPARE_REG) |
||
| 131 | # define TIMER_COMPARE_REG TIMER2_COMPARE_REG |
||
| 132 | #endif |
||
| 133 | #define TIMER_INIT TIMER2_INIT |
||
| 134 | #define TIMER_SET_PRESCALER_1 TIMER2_SET_PRESCALER_1 |
||
| 135 | #define TIMER_SET_PRESCALER_8 TIMER2_SET_PRESCALER_8 |
||
| 136 | #define TIMER_SET_PRESCALER_64 TIMER2_SET_PRESCALER_64 |
||
| 137 | #define TIMER_SET_PRESCALER_256 TIMER2_SET_PRESCALER_256 |
||
| 138 | #define TIMER_SET_PRESCALER_1024 TIMER2_SET_PRESCALER_1024 |
||
| 139 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 140 | # warning Using Timer 2. |
||
| 141 | #endif |
||
| 142 | |||
| 143 | #else |
||
| 144 | # error Invalid timer selected! |
||
| 145 | #endif |
||
| 146 | |||
| 147 | |||
| 148 | /* Find a suitable prescaler setting. Prescalers 1, 8, 64, 256 and 1024 are |
||
| 149 | * available in all timers, so consider only these for simplicity. */ |
||
| 150 | #define TIMER_PRESCALE 1 |
||
| 151 | #define TIMER_COUNTS_PER_TICK (F_CPU/TIMER_PRESCALE/TIMER_TICKFREQ-1) |
||
| 152 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 153 | # warning Trying prescaler 1... |
||
| 154 | #endif |
||
| 155 | |||
| 156 | #if TIMER_COUNTS_PER_TICK > TIMER_MAX |
||
| 157 | #undef TIMER_PRESCALE |
||
| 158 | #undef TIMER_COUNTS_PER_TICK |
||
| 159 | #define TIMER_PRESCALE 8 |
||
| 160 | #define TIMER_COUNTS_PER_TICK (F_CPU/TIMER_PRESCALE/TIMER_TICKFREQ-1) |
||
| 161 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 162 | # warning Trying prescaler 8... |
||
| 163 | #endif |
||
| 164 | #endif |
||
| 165 | |||
| 166 | #if TIMER_COUNTS_PER_TICK > TIMER_MAX |
||
| 167 | #undef TIMER_PRESCALE |
||
| 168 | #undef TIMER_COUNTS_PER_TICK |
||
| 169 | #define TIMER_PRESCALE 64 |
||
| 170 | #define TIMER_COUNTS_PER_TICK (F_CPU/TIMER_PRESCALE/TIMER_TICKFREQ-1) |
||
| 171 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 172 | # warning Trying prescaler 64... |
||
| 173 | #endif |
||
| 174 | #endif |
||
| 175 | |||
| 176 | #if TIMER_COUNTS_PER_TICK > TIMER_MAX |
||
| 177 | #undef TIMER_PRESCALE |
||
| 178 | #undef TIMER_COUNTS_PER_TICK |
||
| 179 | #define TIMER_PRESCALE 256 |
||
| 180 | #define TIMER_COUNTS_PER_TICK (F_CPU/TIMER_PRESCALE/TIMER_TICKFREQ-1) |
||
| 181 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 182 | # warning Trying prescaler 256... |
||
| 183 | #endif |
||
| 184 | #endif |
||
| 185 | |||
| 186 | #if TIMER_COUNTS_PER_TICK > TIMER_MAX |
||
| 187 | #undef TIMER_PRESCALE |
||
| 188 | #undef TIMER_COUNTS_PER_TICK |
||
| 189 | #define TIMER_PRESCALE 1024 |
||
| 190 | #define TIMER_COUNTS_PER_TICK (F_CPU/TIMER_PRESCALE/TIMER_TICKFREQ-1) |
||
| 191 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 192 | # warning Trying prescaler 1024... |
||
| 193 | #endif |
||
| 194 | #endif |
||
| 195 | |||
| 196 | #if TIMER_COUNTS_PER_TICK > TIMER_MAX |
||
| 197 | # error Invalid frequency selection! |
||
| 198 | #endif |
||
| 199 | |||
| 200 | #if defined(TIMER_DEBUG_CONFIG) |
||
| 201 | # warning Prescaler ok! |
||
| 202 | #endif |
||
| 203 | |||
| 204 | #if TIMER_PRESCALE == 1 |
||
| 205 | # define TIMER_SET_PRESCALER TIMER_SET_PRESCALER_1 |
||
| 206 | # if defined(TIMER_DEBUG_CONFIG) |
||
| 207 | # warning Using prescaler 1. |
||
| 208 | # endif |
||
| 209 | #elif TIMER_PRESCALE == 8 |
||
| 210 | # define TIMER_SET_PRESCALER TIMER_SET_PRESCALER_8 |
||
| 211 | # if defined(TIMER_DEBUG_CONFIG) |
||
| 212 | # warning Using prescaler 8. |
||
| 213 | # endif |
||
| 214 | #elif TIMER_PRESCALE == 64 |
||
| 215 | # define TIMER_SET_PRESCALER TIMER_SET_PRESCALER_64 |
||
| 216 | # if defined(TIMER_DEBUG_CONFIG) |
||
| 217 | # warning Using prescaler 64. |
||
| 218 | # endif |
||
| 219 | #elif TIMER_PRESCALE == 256 |
||
| 220 | # define TIMER_SET_PRESCALER TIMER_SET_PRESCALER_256 |
||
| 221 | # if defined(TIMER_DEBUG_CONFIG) |
||
| 222 | # warning Using prescaler 256. |
||
| 223 | # endif |
||
| 224 | #elif TIMER_PRESCALE == 1024 |
||
| 225 | # define TIMER_SET_PRESCALER TIMER_SET_PRESCALER_1024 |
||
| 226 | # if defined(TIMER_DEBUG_CONFIG) |
||
| 227 | # warning Using prescaler 1024. |
||
| 228 | # endif |
||
| 229 | #endif |
||
| 230 | |||
| 231 | #endif /*TIMER_CFG_H_*/ |