timer16_drv.h

Go to the documentation of this file.
00001 /*This file is prepared for Doxygen automatic documentation generation.*/
00013 
00014 /* Copyright (c) 2009 Atmel Corporation. All rights reserved.
00015  *
00016  * Redistribution and use in source and binary forms, with or without
00017  * modification, are permitted provided that the following conditions are met:
00018  *
00019  * 1. Redistributions of source code must retain the above copyright notice,
00020  * this list of conditions and the following disclaimer.
00021  *
00022  * 2. Redistributions in binary form must reproduce the above copyright notice,
00023  * this list of conditions and the following disclaimer in the documentation
00024  * and/or other materials provided with the distribution.
00025  *
00026  * 3. The name of Atmel may not be used to endorse or promote products derived
00027  * from this software without specific prior written permission.
00028  *
00029  * 4. This software may only be redistributed and used in connection with an Atmel
00030  * AVR product.
00031  *
00032  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
00033  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00034  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY AND
00035  * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
00036  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00037  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00038  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00039  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00040  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00041  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00042  */
00043 
00044 #ifndef _TIMER16_DRV_H_
00045 #define _TIMER16_DRV_H_
00046 
00047 //_____ I N C L U D E S ________________________________________________________
00048 
00049 #include "config.h"
00050 
00051 //_____ G E N E R A L    D E F I N I T I O N S _________________________________
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 //_____ M A C R O S ____________________________________________________________
00068 
00069     // ---------- To order the loading (reading) of 16-bit registers
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     // ---------- Two ways to have a look on the things
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     // ---------- If no clock, the timer is off !
00080 #define Timer16_off()                 Timer16_set_clock(TIMER16_NO_CLOCK)
00081 
00082 //_____ D E F .  &   M A C R O S   for   H W   C O N F . _______________________
00083 
00084     //----- CARE WITH THE ORDER WHEN 16-BIT REGISTERS ARE READ
00085     //      ==================================================
00086     //----- For sensitive 16-bit registers (c.f. temporary reg), the macros are:
00087     //-----     *  Timer16_get_nnn_low()
00088     //-----     *  Timer16_get_nnn_high()
00089     //----- For instance, in your main, do not write:
00090     //-----     short_temp = ((Timer16_get_nnn_high())<<8) | (Timer16_get_nnn_low());
00091     //-----   or
00092     //-----     short_temp = (Timer16_get_nnn_low()) | ((Timer16_get_nnn_high())<<8);
00093     //-----   because IAR and ImageCraft doesn't evaluate the operandes in the same order!
00094     //-----
00095     //----- The good way to write a READ (load) sequence is in 2 times:
00096     //-----     short_temp  =  Timer16_get_nnn_low();
00097     //-----     short_temp |= (Timer16_get_nnn_high() << 8 );
00098     //-----
00099     //----- Otherwise a macro "Timer16_get_nnn()" exits and call "timer16_get_counter()" function
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     // ---------- Macros
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     // ---------- Macros
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     // ---------- Macros
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 //_____ T I M E R   D E F I N I T I O N S ______________________________________
00443 
00444     // ---------- Pre-definitions for "conf" field for Timer16_set(get)_mode_output_x(conf) macros
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     // ---------- Pre-definitions for "conf" field for Timer16_set_waveform_mode(conf) macro
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     // ---------- Pre-definitions for "value" field for Timer16_set_clock(value) macro
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 //_____ D E C L A R A T I O N S ________________________________________________
00483 
00484 //------------------------------------------------------------------------------
00485 //  @fn timer16_get_counter
00495 extern  U16 timer16_get_counter(void);
00496 
00497 //------------------------------------------------------------------------------
00498 //  @fn timer16_get_capture
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 

Generated on Wed Sep 23 09:17:02 2009 for ATMEL by  doxygen 1.5.3