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