00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef _TIMER16_DRV_H_
00045 #define _TIMER16_DRV_H_
00046
00047
00048
00049 #include "config.h"
00050
00051
00052
00053 #ifndef FOSC
00054 # error You must define FOSC in "config.h" file
00055 #endif
00056
00057 #ifndef TIMER16_1 // 16-bit TIMER 1 Defintion
00058 #define TIMER16_1 0x01
00059 #endif
00060 #ifndef TIMER16_3 // 16-bit TIMER 3 Defintion
00061 #define TIMER16_3 0x03
00062 #endif
00063 #ifndef BOTH_TIMER16 // Both the 16-bit TIMERs Defintion
00064 #define BOTH_TIMER16 0xFF
00065 #endif
00066
00067
00068
00069
00070 #define Timer16_get_counter() ( timer16_get_counter() ) // c.f. "timer16_drv.c" file
00071 #define Timer16_get_capture() ( timer16_get_capture() ) // c.f. "timer16_drv.c" file
00072
00073 #define Timer16_set_pwm_a(value) ( Timer16_set_compare_a(value) ) // c.f. above !
00074 #define Timer16_set_pwm_b(value) ( Timer16_set_compare_b(value) ) // c.f. above !
00075 #define Timer16_set_pwm_c(value) ( Timer16_set_compare_c(value) ) // c.f. above !
00076 #define Timer16_get_pwm_a() ( Timer16_get_compare_a() ) // c.f. above !
00077 #define Timer16_get_pwm_b() ( Timer16_get_compare_b() ) // c.f. above !
00078 #define Timer16_get_pwm_c() ( Timer16_get_compare_c() ) // c.f. above !
00079
00080 #define Timer16_off() Timer16_set_clock(TIMER16_NO_CLOCK)
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 #ifndef USE_TIMER16
00102 # error You must define USE_TIMER16 to TIMER16_1 or TIMER16_3 or BOTH_TIMER16 in "config.h" file
00103 # elif (USE_TIMER16 == TIMER16_1)
00104
00105
00106
00107 # define Timer16_select(timer16_num) // Empty !
00108
00109 # define Timer16_clear() ( TCCR1B=0, TCCR1A=0, TCCR1C=0, TCNT1H=0, TCNT1L= 0, OCR1AH=0, OCR1AL=0, \
00110 OCR1BH=0, OCR1BL=0, OCR1CH=0, OCR1CL=0, ICR1H=0, ICR1L=0 )
00111
00112 # define Timer16_set_counter(value) ( TCNT1H = ((U8)(value>>8)), TCNT1L = ((U8)(value)))
00113 # define Timer16_get_counter_low() ((U16)(TCNT1L))
00114 # define Timer16_get_counter_high() ((U16)(TCNT1H))
00115
00116 # define Timer16_set_compare_a(value) ( OCR1AH = ((U8)(value>>8)), OCR1AL = ((U8)(value)))
00117 # define Timer16_set_compare_b(value) ( OCR1BH = ((U8)(value>>8)), OCR1BL = ((U8)(value)))
00118 # define Timer16_set_compare_c(value) ( OCR1CH = ((U8)(value>>8)), OCR1CL = ((U8)(value)))
00119 # define Timer16_get_compare_a() ( OCR1A ) // The temporary register is not used
00120 # define Timer16_get_compare_b() ( OCR1B ) // The temporary register is not used
00121 # define Timer16_get_compare_c() ( OCR1C ) // The temporary register is not used
00122
00123 # define Timer16_set_capture(value) { ICR1H = ((U8)(value>>8)); ICR1L = ((U8)(value)); }
00124 # define Timer16_get_capture_low() ((U16)(ICR1L))
00125 # define Timer16_get_capture_high() ((U16)(ICR1H))
00126
00127 # define Timer16_set_mode_output_a(conf) ( TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM1A0) )
00128 # define Timer16_set_mode_output_b(conf) ( TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM1B0) )
00129 # define Timer16_set_mode_output_c(conf) ( TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM1C0) )
00130 # define Timer16_get_mode_output_a() ((TCCR1A & TIMER16_COMP_MODE_MASK_A) >> COM1A0 )
00131 # define Timer16_get_mode_output_b() ((TCCR1A & TIMER16_COMP_MODE_MASK_B) >> COM1B0 )
00132 # define Timer16_get_mode_output_c() ((TCCR1A & TIMER16_COMP_MODE_MASK_C) >> COM1C0 )
00133
00134 # define Timer16_set_waveform_mode(conf) ( TCCR1A = (TCCR1A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM10), \
00135 TCCR1B = (TCCR1B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM12) )
00136 # define Timer16_get_waveform_mode() (((TCCR1A & TIMER16_WGM_RA_MASK) >> WGM10) | \
00137 (((TCCR1B & TIMER16_WGM_RB_MASK) >> WGM12) << 0x2) )
00138
00139 # define Timer16_set_clock(value) ( TCCR1B = (TCCR1B & (~TIMER16_CLK_MASK)) | (value << CS10) )
00140 # define Timer16_get_clock() (((TCCR1B & TIMER16_CLK_MASK) >> CS10) )
00141
00142 # define Timer16_set_input_filter() ( TCCR1B |= (1<<ICNC1) )
00143 # define Timer16_clear_input_filter() ( TCCR1B &= ~(1<<ICNC1) )
00144 # define Timer16_get_input_filter() ((TCCR1B & (1<<ICNC1)) >> ICNC1 )
00145
00146 # define Timer16_set_input_rising_edge() ( TCCR1B |= (1<<ICES1) )
00147 # define Timer16_set_input_falling_edge()( TCCR1B &= ~(1<<ICES1) )
00148 # define Timer16_get_input_capture_edge()((TCCR1B & (1<<ICES1)) >> ICES1 )
00149
00150 # define Timer16_set_compare_force_a() ( TCCR1C |= (1<<FOC1A) )
00151 # define Timer16_set_compare_force_b() ( TCCR1C |= (1<<FOC1B) )
00152 # define Timer16_set_compare_force_c() ( TCCR1C |= (1<<FOC1C) )
00153 # define Timer16_clear_compare_force_a() ( TCCR1C &= ~(1<<FOC1A) )
00154 # define Timer16_clear_compare_force_b() ( TCCR1C &= ~(1<<FOC1B) )
00155 # define Timer16_clear_compare_force_c() ( TCCR1C &= ~(1<<FOC1C) )
00156 # define Timer16_get_compare_force_a() ((TCCR1C & (1<<FOC1A)) >> FOC1A )
00157 # define Timer16_get_compare_force_b() ((TCCR1C & (1<<FOC1B)) >> FOC1B )
00158 # define Timer16_get_compare_force_c() ((TCCR1C & (1<<FOC1C)) >> FOC1C )
00159
00160 # define Timer16_overflow_it_enable() ( TIMSK1 |= (1<<TOIE1) )
00161 # define Timer16_overflow_it_disable() ( TIMSK1 &= ~(1<<TOIE1) )
00162 # define Timer16_compare_a_it_enable() ( TIMSK1 |= (1<<OCIE1A) )
00163 # define Timer16_compare_a_it_disable() ( TIMSK1 &= ~(1<<OCIE1A) )
00164 # define Timer16_compare_b_it_enable() ( TIMSK1 |= (1<<OCIE1B) )
00165 # define Timer16_compare_b_it_disable() ( TIMSK1 &= ~(1<<OCIE1B) )
00166 # define Timer16_compare_c_it_enable() ( TIMSK1 |= (1<<OCIE1C) )
00167 # define Timer16_compare_c_it_disable() ( TIMSK1 &= ~(1<<OCIE1C) )
00168 # define Timer16_capture_it_enable() ( TIMSK1 |= (1<<ICIE1) )
00169 # define Timer16_capture_it_disable() ( TIMSK1 &= ~(1<<ICIE1) )
00170 # define Timer16_get_overflow_it_mask() ((TIMSK1 & (1<<TOIE1) ) >> TOIE1 )
00171 # define Timer16_get_compare_a_it_mask() ((TIMSK1 & (1<<OCIE1A)) >> OCIE1A )
00172 # define Timer16_get_compare_b_it_mask() ((TIMSK1 & (1<<OCIE1B)) >> OCIE1B )
00173 # define Timer16_get_compare_c_it_mask() ((TIMSK1 & (1<<OCIE1C)) >> OCIE1C )
00174 # define Timer16_get_capture_it_mask() ((TIMSK1 & (1<<ICIE1) ) >> ICIE1 )
00175
00176 # define Timer16_clear_overflow_it() ( TIFR1 |= (1<<TOV1) )
00177 # define Timer16_clear_compare_a_it() ( TIFR1 |= (1<<OCF1A) )
00178 # define Timer16_clear_compare_b_it() ( TIFR1 |= (1<<OCF1B) )
00179 # define Timer16_clear_compare_c_it() ( TIFR1 |= (1<<OCF1C) )
00180 # define Timer16_clear_capture_it() ( TIFR1 |= (1<<ICF1) )
00181 # define Timer16_get_overflow_it() ((TIFR1 & (1<<TOV1) ) >> TOV1 )
00182 # define Timer16_get_compare_a_it() ((TIFR1 & (1<<OCF1A)) >> OCF1A )
00183 # define Timer16_get_compare_b_it() ((TIFR1 & (1<<OCF1B)) >> OCF1B )
00184 # define Timer16_get_compare_c_it() ((TIFR1 & (1<<OCF1C)) >> OCF1C )
00185 # define Timer16_get_capture_it() ((TIFR1 & (1<<ICF1) ) >> ICF1 )
00186
00187 # elif USE_TIMER16 == TIMER16_3
00188
00189
00190
00191 # define Timer16_select(timer16_num) // Empty !
00192
00193 # define Timer16_clear() { TCCR3B=0; TCCR3A=0; TCCR3C=0; TCNT3H=0; TCNT3L= 0; OCR3AH=0; OCR3AL=0; \
00194 OCR3BH=0; OCR3BL=0; OCR3CH=0; OCR3CL=0; ICR3H=0, ICR3L=0; }
00195
00196 # define Timer16_set_counter(value) ( TCNT3H = ((U8)(value>>8)), TCNT3L = ((U8)(value)))
00197 # define Timer16_get_counter_low() ((U16)(TCNT3L))
00198 # define Timer16_get_counter_high() ((U16)(TCNT3H))
00199
00200 # define Timer16_set_compare_a(value) { OCR3AH = ((U8)(value>>8)); OCR3AL = ((U8)(value)); }
00201 # define Timer16_set_compare_b(value) { OCR3BH = ((U8)(value>>8)); OCR3BL = ((U8)(value)); }
00202 # define Timer16_set_compare_c(value) { OCR3CH = ((U8)(value>>8)); OCR3CL = ((U8)(value)); }
00203 # define Timer16_get_compare_a() ( OCR3A ) // The temporary register is not used
00204 # define Timer16_get_compare_b() ( OCR3B ) // The temporary register is not used
00205 # define Timer16_get_compare_c() ( OCR3C ) // The temporary register is not used
00206
00207 # define Timer16_set_capture(value) { ICR3H = ((U8)(value>>8)); ICR3L = ((U8)(value)); }
00208 # define Timer16_get_capture_low() ((U16)(ICR3L))
00209 # define Timer16_get_capture_high() ((U16)(ICR3H))
00210
00211 # define Timer16_set_mode_output_a(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM3A0) )
00212 # define Timer16_set_mode_output_b(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM3B0) )
00213 # define Timer16_set_mode_output_c(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM3C0) )
00214 # define Timer16_get_mode_output_a() ((TCCR3A & TIMER16_COMP_MODE_MASK_A) >> COM3A0 )
00215 # define Timer16_get_mode_output_b() ((TCCR3A & TIMER16_COMP_MODE_MASK_B) >> COM3B0 )
00216 # define Timer16_get_mode_output_c() ((TCCR3A & TIMER16_COMP_MODE_MASK_C) >> COM3C0 )
00217
00218 # define Timer16_set_waveform_mode(conf) ( TCCR3A = (TCCR3A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM30), \
00219 TCCR3B = (TCCR3B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM32) )
00220 # define Timer16_get_waveform_mode() (((TCCR3A & TIMER16_WGM_RA_MASK) >> WGM30) | \
00221 (((TCCR3B & TIMER16_WGM_RB_MASK) >> WGM32) << 0x2) )
00222
00223 # define Timer16_set_clock(value) ( TCCR3B = (TCCR3B & (~TIMER16_CLK_MASK)) | (value << CS30) )
00224 # define Timer16_get_clock() (((TCCR3B & TIMER16_CLK_MASK) >> CS30) )
00225
00226 # define Timer16_set_input_filter() ( TCCR3B |= (1<<ICNC3) )
00227 # define Timer16_clear_input_filter() ( TCCR3B &= ~(1<<ICNC3) )
00228 # define Timer16_get_input_filter() ((TCCR3B & (1<<ICNC3)) >> ICNC3 )
00229
00230 # define Timer16_set_input_rising_edge() ( TCCR3B |= (1<<ICES3) )
00231 # define Timer16_set_input_falling_edge()( TCCR3B &= ~(1<<ICES3) )
00232 # define Timer16_get_input_capture_edge()((TCCR3B & (1<<ICES3)) >> ICES3 )
00233
00234 # define Timer16_set_compare_force_a() ( TCCR3C |= (1<<FOC3A) )
00235 # define Timer16_set_compare_force_b() ( TCCR3C |= (1<<FOC3B) )
00236 # define Timer16_set_compare_force_c() ( TCCR3C |= (1<<FOC3C) )
00237 # define Timer16_clear_compare_force_a() ( TCCR3C &= ~(1<<FOC3A) )
00238 # define Timer16_clear_compare_force_b() ( TCCR3C &= ~(1<<FOC3B) )
00239 # define Timer16_clear_compare_force_c() ( TCCR3C &= ~(1<<FOC3C) )
00240 # define Timer16_get_compare_force_a() ((TCCR3C & (1<<FOC3A)) >> FOC3A )
00241 # define Timer16_get_compare_force_b() ((TCCR3C & (1<<FOC3B)) >> FOC3B )
00242 # define Timer16_get_compare_force_c() ((TCCR3C & (1<<FOC3C)) >> FOC3C )
00243
00244 # define Timer16_overflow_it_enable() ( TIMSK3 |= (1<<TOIE3) )
00245 # define Timer16_overflow_it_disable() ( TIMSK3 &= ~(1<<TOIE3) )
00246 # define Timer16_compare_a_it_enable() ( TIMSK3 |= (1<<OCIE3A) )
00247 # define Timer16_compare_a_it_disable() ( TIMSK3 &= ~(1<<OCIE3A) )
00248 # define Timer16_compare_b_it_enable() ( TIMSK3 |= (1<<OCIE3B) )
00249 # define Timer16_compare_b_it_disable() ( TIMSK3 &= ~(1<<OCIE3B) )
00250 # define Timer16_compare_c_it_enable() ( TIMSK3 |= (1<<OCIE3C) )
00251 # define Timer16_compare_c_it_disable() ( TIMSK3 &= ~(1<<OCIE3C) )
00252 # define Timer16_capture_it_enable() ( TIMSK3 |= (1<<ICIE3) )
00253 # define Timer16_capture_it_disable() ( TIMSK3 &= ~(1<<ICIE3) )
00254 # define Timer16_get_overflow_it_mask() ((TIMSK3 & (1<<TOIE3) ) >> TOIE3 )
00255 # define Timer16_get_compare_a_it_mask() ((TIMSK3 & (1<<OCIE3A)) >> OCIE3A )
00256 # define Timer16_get_compare_b_it_mask() ((TIMSK3 & (1<<OCIE3B)) >> OCIE3B )
00257 # define Timer16_get_compare_c_it_mask() ((TIMSK3 & (1<<OCIE3C)) >> OCIE3C )
00258 # define Timer16_get_capture_it_mask() ((TIMSK3 & (1<<ICIE3) ) >> ICIE3 )
00259
00260 # define Timer16_clear_overflow_it() ( TIFR3 |= (1<<TOV3) )
00261 # define Timer16_clear_compare_a_it() ( TIFR3 |= (1<<OCF3A) )
00262 # define Timer16_clear_compare_b_it() ( TIFR3 |= (1<<OCF3B) )
00263 # define Timer16_clear_compare_c_it() ( TIFR3 |= (1<<OCF3C) )
00264 # define Timer16_clear_capture_it() ( TIFR3 |= (1<<ICF3) )
00265 # define Timer16_get_overflow_it() ((TIFR3 & (1<<TOV3) ) >> TOV3 )
00266 # define Timer16_get_compare_a_it() ((TIFR3 & (1<<OCF3A)) >> OCF3A )
00267 # define Timer16_get_compare_b_it() ((TIFR3 & (1<<OCF3B)) >> OCF3B )
00268 # define Timer16_get_compare_c_it() ((TIFR3 & (1<<OCF3C)) >> OCF3C )
00269 # define Timer16_get_capture_it() ((TIFR3 & (1<<ICF3) ) >> ICF3 )
00270
00271 # elif USE_TIMER16 == BOTH_TIMER16
00272
00273
00274
00275 extern U8 timer16_selected; // $$$-- EXTERNAL DECLARATION --$$$
00276 # define Timer16_select(timer16_num) (timer16_selected=timer16_num)
00277
00278 # define Timer16_clear() ((timer16_selected==TIMER16_1)? \
00279 (TCCR1B=0, TCCR1A=0, TCCR1C=0, TCNT1H=0, TCNT1L= 0, OCR1AH=0, OCR1AL=0, \
00280 OCR1BH=0, OCR1BL=0, OCR1CH=0, OCR1CL=0, ICR1H=0, ICR1L=0 ) \
00281 : \
00282 (TCCR3B=0, TCCR3A=0, TCCR3C=0, TCNT3H=0, TCNT3L= 0, OCR3AH=0, OCR3AL=0, \
00283 OCR3BH=0, OCR3BL=0, OCR3CH=0, OCR3CL=0, ICR3H=0, ICR3L=0 ) )
00284
00285 # define Timer16_set_counter(value) ((timer16_selected==TIMER16_1)? \
00286 (TCNT1H = ((U8)(value>>8)), TCNT1L = ((U8)(value)) ) \
00287 : \
00288 (TCNT3H = ((U8)(value>>8)), TCNT3L = ((U8)(value)) ) )
00289 # define Timer16_get_counter_low() ((timer16_selected==TIMER16_1)? ((U16)(TCNT1L)) : ((U16)(TCNT3L)) )
00290 # define Timer16_get_counter_high() ((timer16_selected==TIMER16_1)? ((U16)(TCNT1H)) : ((U16)(TCNT3H)) )
00291
00292 # define Timer16_set_compare_a(value) ((timer16_selected==TIMER16_1)? \
00293 (OCR1AH = ((U8)(value>>8)), OCR1AL = ((U8)(value)) ) \
00294 : \
00295 (OCR3AH = ((U8)(value>>8)), OCR3AL = ((U8)(value)) ) )
00296 # define Timer16_set_compare_b(value) ((timer16_selected==TIMER16_1)? \
00297 (OCR1BH = ((U8)(value>>8)), OCR1BL = ((U8)(value)) ) \
00298 : \
00299 (OCR3BH = ((U8)(value>>8)), OCR3BL = ((U8)(value)) ) )
00300 # define Timer16_set_compare_c(value) ((timer16_selected==TIMER16_1)? \
00301 (OCR3CH = ((U8)(value>>8)), OCR3CL = ((U8)(value)) ) \
00302 : \
00303 (OCR1CH = ((U8)(value>>8)), OCR1CL = ((U8)(value)) ) )
00304 # define Timer16_get_compare_a() ((timer16_selected==TIMER16_1)? (OCR1A) : (OCR3A) ) // The temporary register is not used
00305 # define Timer16_get_compare_b() ((timer16_selected==TIMER16_1)? (OCR1B) : (OCR3B) ) // The temporary register is not used
00306 # define Timer16_get_compare_c() ((timer16_selected==TIMER16_1)? (OCR1C) : (OCR3C) ) // The temporary register is not used
00307
00308 # define Timer16_set_capture(value) ((timer16_selected==TIMER16_1)? \
00309 (ICR1H = ((U8)(value>>8)), ICR1L = ((U8)(value))) \
00310 : \
00311 (ICR3H = ((U8)(value>>8)), ICR3L = ((U8)(value))) )
00312 # define Timer16_get_capture_low() ((timer16_selected==TIMER16_1)? ((U16)(ICR1L)) : ((U16)(ICR3L)) )
00313 # define Timer16_get_capture_high() ((timer16_selected==TIMER16_1)? ((U16)(ICR1H)) : ((U16)(ICR3H)) )
00314
00315 # define Timer16_set_mode_output_a(conf) ((timer16_selected==TIMER16_1)? \
00316 (TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM1A0)) \
00317 : \
00318 (TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM3A0)) )
00319 # define Timer16_set_mode_output_b(conf) ((timer16_selected==TIMER16_1)? \
00320 (TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM1B0)) \
00321 : \
00322 (TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM3B0)) )
00323 # define Timer16_set_mode_output_c(conf) ((timer16_selected==TIMER16_1)? \
00324 (TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM1C0)) \
00325 : \
00326 (TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM3C0)) )
00327 # define Timer16_get_mode_output_a() ((timer16_selected==TIMER16_1)? \
00328 ((TCCR1A & TIMER16_COMP_MODE_MASK_A) >> COM1A0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_A) >> COM3A0 ) )
00329 # define Timer16_get_mode_output_b() ((timer16_selected==TIMER16_1)? \
00330 ((TCCR1A & TIMER16_COMP_MODE_MASK_B) >> COM1B0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_B) >> COM3B0) )
00331 # define Timer16_get_mode_output_c() ((timer16_selected==TIMER16_1)? \
00332 ((TCCR1A & TIMER16_COMP_MODE_MASK_C) >> COM1C0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_C) >> COM3C0) )
00333
00334 # define Timer16_set_waveform_mode(conf) ((timer16_selected==TIMER16_1)? \
00335 (TCCR1A = (TCCR1A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM10) , \
00336 TCCR1B = (TCCR1B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM12) ) \
00337 : \
00338 (TCCR3A = (TCCR3A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM30) , \
00339 TCCR3B = (TCCR3B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM32) ) )
00340 # define Timer16_get_waveform_mode() ((timer16_selected==TIMER16_1)? \
00341 (((TCCR1A & TIMER16_WGM_RA_MASK) >> WGM10) | (((TCCR1B & TIMER16_WGM_RB_MASK) >> WGM12) << 0x2)) \
00342 : \
00343 (((TCCR3A & TIMER16_WGM_RA_MASK) >> WGM30) | (((TCCR3B & TIMER16_WGM_RB_MASK) >> WGM32) << 0x2)) )
00344
00345 # define Timer16_set_clock(value) ((timer16_selected==TIMER16_1)? \
00346 (TCCR1B = (TCCR1B & (~TIMER16_CLK_MASK)) | (value << CS10)) \
00347 : \
00348 (TCCR3B = (TCCR3B & (~TIMER16_CLK_MASK)) | (value << CS30)) )
00349
00350 # define Timer16_get_clock() ((timer16_selected==TIMER16_1)? \
00351 (((TCCR1B & TIMER16_CLK_MASK) >> CS10)) : (((TCCR3B & TIMER16_CLK_MASK) >> CS30)) )
00352
00353 # define Timer16_set_input_filter() ((timer16_selected==TIMER16_1)? \
00354 (TCCR1B |= (1<<ICNC1)) : ( TCCR3B |= (1<<ICNC3)) )
00355 # define Timer16_clear_input_filter() ((timer16_selected==TIMER16_1)? \
00356 (TCCR1B &= ~(1<<ICNC1)) : ( TCCR3B &= ~(1<<ICNC3)) )
00357 # define Timer16_get_input_filter() ((timer16_selected==TIMER16_1)? \
00358 ((TCCR1B & (1<<ICNC1)) >> ICNC1) : ((TCCR3B & (1<<ICNC3)) >> ICNC3) )
00359
00360 # define Timer16_set_input_rising_edge() ((timer16_selected==TIMER16_1)? \
00361 (TCCR1B |= (1<<ICES1)) : (TCCR3B |= (1<<ICES3)) )
00362 # define Timer16_set_input_falling_edge() ((timer16_selected==TIMER16_1)? \
00363 (TCCR1B &= ~(1<<ICES1)) : ( TCCR3B &= ~(1<<ICES3)) )
00364 # define Timer16_get_input_capture_edge() ((timer16_selected==TIMER16_1)? \
00365 ((TCCR1B & (1<<ICES1)) >> ICES1) : ((TCCR3B & (1<<ICES3)) >> ICES3) )
00366
00367 # define Timer16_set_compare_force_a() ((timer16_selected==TIMER16_1)? \
00368 (TCCR1C |= (1<<FOC1A)) : (TCCR3C |= (1<<FOC3A)) )
00369 # define Timer16_set_compare_force_b() ((timer16_selected==TIMER16_1)? \
00370 (TCCR1C |= (1<<FOC1B)) : (TCCR3C |= (1<<FOC3B)) )
00371 # define Timer16_set_compare_force_c() ((timer16_selected==TIMER16_1)? \
00372 (TCCR1C |= (1<<FOC1C)) : (TCCR3C |= (1<<FOC3C)) )
00373 # define Timer16_clear_compare_force_a() ((timer16_selected==TIMER16_1)? \
00374 (TCCR1C &= ~(1<<FOC1A ) : (TCCR3C &= ~(1<<FOC3A)) )
00375 # define Timer16_clear_compare_force_b() ((timer16_selected==TIMER16_1)? \
00376 (TCCR1C &= ~(1<<FOC1B)) : (TCCR3C &= ~(1<<FOC3B)) )
00377 # define Timer16_clear_compare_force_c() ((timer16_selected==TIMER16_1)? \
00378 (TCCR1C &= ~(1<<FOC1C)) : (TCCR3C &= ~(1<<FOC3C)) )
00379 # define Timer16_get_compare_force_a() ((timer16_selected==TIMER16_1)? \
00380 ((TCCR1C & (1<<FOC1A)) >> FOC1A) : ((TCCR3C & (1<<FOC3A)) >> FOC3A) )
00381 # define Timer16_get_compare_force_b() ((timer16_selected==TIMER16_1)? \
00382 ((TCCR1C & (1<<FOC1B)) >> FOC1B) : ((TCCR3C & (1<<FOC3B)) >> FOC3B) )
00383 # define Timer16_get_compare_force_c() ((timer16_selected==TIMER16_1)? \
00384 ((TCCR1C & (1<<FOC1C)) >> FOC1C) : ((TCCR3C & (1<<FOC3C)) >> FOC3C) )
00385
00386 # define Timer16_overflow_it_enable() ((timer16_selected==TIMER16_1)? \
00387 (TIMSK1 |= (1<<TOIE1)) : (TIMSK3 |= (1<<TOIE3)) )
00388 # define Timer16_overflow_it_disable() ((timer16_selected==TIMER16_1)? \
00389 (TIMSK1 &= ~(1<<TOIE1)) : (TIMSK3 &= ~(1<<TOIE3)) )
00390 # define Timer16_compare_a_it_enable() ((timer16_selected==TIMER16_1)? \
00391 (TIMSK1 |= (1<<OCIE1A)) : (TIMSK3 |= (1<<OCIE3A)) )
00392 # define Timer16_compare_a_it_disable() ((timer16_selected==TIMER16_1)? \
00393 (TIMSK1 &= ~(1<<OCIE1A)) : (TIMSK3 &= ~(1<<OCIE3A)) )
00394 # define Timer16_compare_b_it_enable() ((timer16_selected==TIMER16_1)? \
00395 (TIMSK1 |= (1<<OCIE1B)) : (TIMSK3 |= (1<<OCIE3B)) )
00396 # define Timer16_compare_b_it_disable() ((timer16_selected==TIMER16_1)? \
00397 (TIMSK1 &= ~(1<<OCIE1B)) : (TIMSK3 &= ~(1<<OCIE3B)) )
00398 # define Timer16_compare_c_it_enable() ((timer16_selected==TIMER16_1)? \
00399 (TIMSK1 |= (1<<OCIE1C)) : (TIMSK3 |= (1<<OCIE3C)) )
00400 # define Timer16_compare_c_it_disable() ((timer16_selected==TIMER16_1)? \
00401 (TIMSK1 &= ~(1<<OCIE1C)) : (TIMSK3 &= ~(1<<OCIE3C)) )
00402 # define Timer16_capture_it_enable() ((timer16_selected==TIMER16_1)? \
00403 (TIMSK1 |= (1<<ICIE1)) : (TIMSK3 |= (1<<ICIE3)) )
00404 # define Timer16_capture_it_disable() ((timer16_selected==TIMER16_1)? \
00405 (TIMSK1 &= ~(1<<ICIE1)) : (TIMSK3 &= ~(1<<ICIE3)) )
00406 # define Timer16_get_overflow_it_mask() ((timer16_selected==TIMER16_1)? \
00407 ((TIMSK1 & (1<<TOIE1)) >> TOIE1) : ((TIMSK3 & (1<<TOIE3)) >> TOIE3) )
00408 # define Timer16_get_compare_a_it_mask() ((timer16_selected==TIMER16_1)? \
00409 ((TIMSK1 & (1<<OCIE1A)) >> OCIE1A) : ((TIMSK3 & (1<<OCIE3A)) >> OCIE3A) )
00410 # define Timer16_get_compare_b_it_mask() ((timer16_selected==TIMER16_1)? \
00411 ((TIMSK1 & (1<<OCIE1B)) >> OCIE1B) : ((TIMSK3 & (1<<OCIE3B)) >> OCIE3B) )
00412 # define Timer16_get_compare_c_it_mask() ((timer16_selected==TIMER16_1)? \
00413 ((TIMSK1 & (1<<OCIE1C)) >> OCIE1C) : ((TIMSK3 & (1<<OCIE3C)) >> OCIE3C) )
00414 # define Timer16_get_capture_it_mask() ((timer16_selected==TIMER16_1)? \
00415 ((TIMSK1 & (1<<ICIE1)) >> ICIE1) : ((TIMSK3 & (1<<ICIE3)) >> ICIE3) )
00416
00417 # define Timer16_clear_overflow_it() ((timer16_selected==TIMER16_1)? \
00418 (TIFR1 |= (1<<TOV1)) : (TIFR3 |= (1<<TOV3)) )
00419 # define Timer16_clear_compare_a_it() ((timer16_selected==TIMER16_1)? \
00420 (TIFR1 |= (1<<OCF1A)) : (TIFR3 |= (1<<OCF3A)) )
00421 # define Timer16_clear_compare_b_it() ((timer16_selected==TIMER16_1)? \
00422 (TIFR1 |= (1<<OCF1B)) : (TIFR3 |= (1<<OCF3B)) )
00423 # define Timer16_clear_compare_c_it() ((timer16_selected==TIMER16_1)? \
00424 (TIFR1 |= (1<<OCF1C)) : (TIFR3 |= (1<<OCF3C)) )
00425 # define Timer16_clear_capture_it() ((timer16_selected==TIMER16_1)? \
00426 (TIFR1 |= (1<<ICF1)) : (TIFR3 |= (1<<ICF3)) )
00427 # define Timer16_get_overflow_it() ((timer16_selected==TIMER16_1)? \
00428 ((TIFR1 & (1<<TOV1)) >> TOV1) : ((TIFR3 & (1<<TOV3)) >> TOV3) )
00429 # define Timer16_get_compare_a_it() ((timer16_selected==TIMER16_1)? \
00430 ((TIFR1 & (1<<OCF1A)) >> OCF1A) : ((TIFR3 & (1<<OCF3A)) >> OCF3A) )
00431 # define Timer16_get_compare_b_it() ((timer16_selected==TIMER16_1)? \
00432 ((TIFR1 & (1<<OCF1B)) >> OCF1B) : ((TIFR3 & (1<<OCF3B)) >> OCF3B) )
00433 # define Timer16_get_compare_c_it() ((timer16_selected==TIMER16_1)? \
00434 ((TIFR1 & (1<<OCF1C)) >> OCF1C) : ((TIFR3 & (1<<OCF3C)) >> OCF3C) )
00435 # define Timer16_get_capture_it() ((timer16_selected==TIMER16_1)? \
00436 ((TIFR1 & (1<<ICF1)) >> ICF1) : ((TIFR3 & (1<<ICF3)) >> ICF3) )
00437
00438 #else
00439 #error USE_TIMER16 definition is not referenced in "timer16_drv.h" file
00440 #endif
00441
00442
00443
00444
00445 #define TIMER16_COMP_MODE_NORMAL (0)
00446 #define TIMER16_COMP_MODE_TOGGLE (1)
00447 #define TIMER16_COMP_MODE_CLEAR_OC (2)
00448 #define TIMER16_COMP_MODE_SET_OC (3)
00449 #define TIMER16_COMP_MODE_MASK_A (3<<COM1A0)
00450 #define TIMER16_COMP_MODE_MASK_B (3<<COM1B0)
00451 #define TIMER16_COMP_MODE_MASK_C (3<<COM1C0)
00452
00453 #define TIMER16_WGM_NORMAL (0)
00454 #define TIMER16_WGM_CTC_OCR (4)
00455 #define TIMER16_WGM_CTC_ICR (12)
00456 #define TIMER16_WGM_PWM_PC8 (1)
00457 #define TIMER16_WGM_PWM_PC9 (2)
00458 #define TIMER16_WGM_PWM_PC10 (3)
00459 #define TIMER16_WGM_PWM_PC_ICR (10)
00460 #define TIMER16_WGM_PWM_PC_OCR (11)
00461 #define TIMER16_WGM_PWM_PFC_ICR (8)
00462 #define TIMER16_WGM_PWM_PFC_OCR (9)
00463 #define TIMER16_WGM_FAST_PWM8 (5)
00464 #define TIMER16_WGM_FAST_PWM9 (6)
00465 #define TIMER16_WGM_FAST_PWM10 (7)
00466 #define TIMER16_WGM_FAST_PWM_ICR (14)
00467 #define TIMER16_WGM_FAST_PWM_OCR (15)
00468 #define TIMER16_WGM_RA_MASK (3<<WGM10)
00469 #define TIMER16_WGM_RB_MASK (3<<WGM12)
00470
00471 #define TIMER16_NO_CLOCK (0)
00472 #define TIMER16_CLKIO_BY_1 (1)
00473 #define TIMER16_CLKIO_BY_8 (2)
00474 #define TIMER16_CLKIO_BY_64 (3)
00475 #define TIMER16_CLKIO_BY_256 (4)
00476 #define TIMER16_CLKIO_BY_1024 (5)
00477 #define TIMER16_EXT_CLOCK_FALLING_EDGE (6)
00478 #define TIMER16_EXT_CLOCK_RISING_EDGE (7)
00479 #define TIMER16_CLK_MASK (7<<CS10)
00480
00481
00482
00483
00484
00485
00495 extern U16 timer16_get_counter(void);
00496
00497
00498
00508 extern U16 timer16_get_capture(void);
00509
00510
00511
00512 #endif // _TIMER16_DRV_H_
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542