📄 timer16_drv.h
字号:
OCR3BH=0; OCR3BL=0; OCR3CH=0; OCR3CL=0; ICR3H=0, ICR3L=0; }
// ----------
# define Timer16_set_counter(value) ( TCNT3H = ((U8)(value>>8)), TCNT3L = ((U8)(value)))
# define Timer16_get_counter_low() ((U16)(TCNT3L))
# define Timer16_get_counter_high() ((U16)(TCNT3H))
// ----------
# define Timer16_set_compare_a(value) { OCR3AH = ((U8)(value>>8)); OCR3AL = ((U8)(value)); }
# define Timer16_set_compare_b(value) { OCR3BH = ((U8)(value>>8)); OCR3BL = ((U8)(value)); }
# define Timer16_set_compare_c(value) { OCR3CH = ((U8)(value>>8)); OCR3CL = ((U8)(value)); }
# define Timer16_get_compare_a() ( OCR3A ) // The temporary register is not used
# define Timer16_get_compare_b() ( OCR3B ) // The temporary register is not used
# define Timer16_get_compare_c() ( OCR3C ) // The temporary register is not used
// ----------
# define Timer16_set_capture(value) { ICR3H = ((U8)(value>>8)); ICR3L = ((U8)(value)); }
# define Timer16_get_capture_low() ((U16)(ICR3L))
# define Timer16_get_capture_high() ((U16)(ICR3H))
// ----------
# define Timer16_set_mode_output_a(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM3A0) )
# define Timer16_set_mode_output_b(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM3B0) )
# define Timer16_set_mode_output_c(conf) ( TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM3C0) )
# define Timer16_get_mode_output_a() ((TCCR3A & TIMER16_COMP_MODE_MASK_A) >> COM3A0 )
# define Timer16_get_mode_output_b() ((TCCR3A & TIMER16_COMP_MODE_MASK_B) >> COM3B0 )
# define Timer16_get_mode_output_c() ((TCCR3A & TIMER16_COMP_MODE_MASK_C) >> COM3C0 )
// ----------
# define Timer16_set_waveform_mode(conf) ( TCCR3A = (TCCR3A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM30), \
TCCR3B = (TCCR3B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM32) )
# define Timer16_get_waveform_mode() (((TCCR3A & TIMER16_WGM_RA_MASK) >> WGM30) | \
(((TCCR3B & TIMER16_WGM_RB_MASK) >> WGM32) << 0x2) )
// ----------
# define Timer16_set_clock(value) ( TCCR3B = (TCCR3B & (~TIMER16_CLK_MASK)) | (value << CS30) )
# define Timer16_get_clock() (((TCCR3B & TIMER16_CLK_MASK) >> CS30) )
// ----------
# define Timer16_set_input_filter() ( TCCR3B |= (1<<ICNC3) )
# define Timer16_clear_input_filter() ( TCCR3B &= ~(1<<ICNC3) )
# define Timer16_get_input_filter() ((TCCR3B & (1<<ICNC3)) >> ICNC3 )
// ----------
# define Timer16_set_input_rising_edge() ( TCCR3B |= (1<<ICES3) )
# define Timer16_set_input_falling_edge()( TCCR3B &= ~(1<<ICES3) )
# define Timer16_get_input_capture_edge()((TCCR3B & (1<<ICES3)) >> ICES3 )
// ----------
# define Timer16_set_compare_force_a() ( TCCR3C |= (1<<FOC3A) )
# define Timer16_set_compare_force_b() ( TCCR3C |= (1<<FOC3B) )
# define Timer16_set_compare_force_c() ( TCCR3C |= (1<<FOC3C) )
# define Timer16_clear_compare_force_a() ( TCCR3C &= ~(1<<FOC3A) )
# define Timer16_clear_compare_force_b() ( TCCR3C &= ~(1<<FOC3B) )
# define Timer16_clear_compare_force_c() ( TCCR3C &= ~(1<<FOC3C) )
# define Timer16_get_compare_force_a() ((TCCR3C & (1<<FOC3A)) >> FOC3A )
# define Timer16_get_compare_force_b() ((TCCR3C & (1<<FOC3B)) >> FOC3B )
# define Timer16_get_compare_force_c() ((TCCR3C & (1<<FOC3C)) >> FOC3C )
// ----------
# define Timer16_overflow_it_enable() ( TIMSK3 |= (1<<TOIE3) )
# define Timer16_overflow_it_disable() ( TIMSK3 &= ~(1<<TOIE3) )
# define Timer16_compare_a_it_enable() ( TIMSK3 |= (1<<OCIE3A) )
# define Timer16_compare_a_it_disable() ( TIMSK3 &= ~(1<<OCIE3A) )
# define Timer16_compare_b_it_enable() ( TIMSK3 |= (1<<OCIE3B) )
# define Timer16_compare_b_it_disable() ( TIMSK3 &= ~(1<<OCIE3B) )
# define Timer16_compare_c_it_enable() ( TIMSK3 |= (1<<OCIE3C) )
# define Timer16_compare_c_it_disable() ( TIMSK3 &= ~(1<<OCIE3C) )
# define Timer16_capture_it_enable() ( TIMSK3 |= (1<<ICIE3) )
# define Timer16_capture_it_disable() ( TIMSK3 &= ~(1<<ICIE3) )
# define Timer16_get_overflow_it_mask() ((TIMSK3 & (1<<TOIE3) ) >> TOIE3 )
# define Timer16_get_compare_a_it_mask() ((TIMSK3 & (1<<OCIE3A)) >> OCIE3A )
# define Timer16_get_compare_b_it_mask() ((TIMSK3 & (1<<OCIE3B)) >> OCIE3B )
# define Timer16_get_compare_c_it_mask() ((TIMSK3 & (1<<OCIE3C)) >> OCIE3C )
# define Timer16_get_capture_it_mask() ((TIMSK3 & (1<<ICIE3) ) >> ICIE3 )
// ----------
# define Timer16_clear_overflow_it() ( TIFR3 |= (1<<TOV3) )
# define Timer16_clear_compare_a_it() ( TIFR3 |= (1<<OCF3A) )
# define Timer16_clear_compare_b_it() ( TIFR3 |= (1<<OCF3B) )
# define Timer16_clear_compare_c_it() ( TIFR3 |= (1<<OCF3C) )
# define Timer16_clear_capture_it() ( TIFR3 |= (1<<ICF3) )
# define Timer16_get_overflow_it() ((TIFR3 & (1<<TOV3) ) >> TOV3 )
# define Timer16_get_compare_a_it() ((TIFR3 & (1<<OCF3A)) >> OCF3A )
# define Timer16_get_compare_b_it() ((TIFR3 & (1<<OCF3B)) >> OCF3B )
# define Timer16_get_compare_c_it() ((TIFR3 & (1<<OCF3C)) >> OCF3C )
# define Timer16_get_capture_it() ((TIFR3 & (1<<ICF3) ) >> ICF3 )
# elif USE_TIMER16 == BOTH_TIMER16 //!< Both the 16-bit TIMERs
//!< =========================================
//!< ------ Both TIMER16_1 & 3 are used ------
//!< =========================================
extern U8 timer16_selected; // $$$-- EXTERNAL DECLARATION --$$$
# define Timer16_select(timer16_num) (timer16_selected=timer16_num)
// ---------- Macros
# define Timer16_clear() ((timer16_selected==TIMER16_1)? \
(TCCR1B=0, TCCR1A=0, TCCR1C=0, TCNT1H=0, TCNT1L= 0, OCR1AH=0, OCR1AL=0, \
OCR1BH=0, OCR1BL=0, OCR1CH=0, OCR1CL=0, ICR1H=0, ICR1L=0 ) \
: \
(TCCR3B=0, TCCR3A=0, TCCR3C=0, TCNT3H=0, TCNT3L= 0, OCR3AH=0, OCR3AL=0, \
OCR3BH=0, OCR3BL=0, OCR3CH=0, OCR3CL=0, ICR3H=0, ICR3L=0 ) )
// ----------
# define Timer16_set_counter(value) ((timer16_selected==TIMER16_1)? \
(TCNT1H = ((U8)(value>>8)), TCNT1L = ((U8)(value)) ) \
: \
(TCNT3H = ((U8)(value>>8)), TCNT3L = ((U8)(value)) ) )
# define Timer16_get_counter_low() ((timer16_selected==TIMER16_1)? ((U16)(TCNT1L)) : ((U16)(TCNT3L)) )
# define Timer16_get_counter_high() ((timer16_selected==TIMER16_1)? ((U16)(TCNT1H)) : ((U16)(TCNT3H)) )
// ----------
# define Timer16_set_compare_a(value) ((timer16_selected==TIMER16_1)? \
(OCR1AH = ((U8)(value>>8)), OCR1AL = ((U8)(value)) ) \
: \
(OCR3AH = ((U8)(value>>8)), OCR3AL = ((U8)(value)) ) )
# define Timer16_set_compare_b(value) ((timer16_selected==TIMER16_1)? \
(OCR1BH = ((U8)(value>>8)), OCR1BL = ((U8)(value)) ) \
: \
(OCR3BH = ((U8)(value>>8)), OCR3BL = ((U8)(value)) ) )
# define Timer16_set_compare_c(value) ((timer16_selected==TIMER16_1)? \
(OCR3CH = ((U8)(value>>8)), OCR3CL = ((U8)(value)) ) \
: \
(OCR1CH = ((U8)(value>>8)), OCR1CL = ((U8)(value)) ) )
# define Timer16_get_compare_a() ((timer16_selected==TIMER16_1)? (OCR1A) : (OCR3A) ) // The temporary register is not used
# define Timer16_get_compare_b() ((timer16_selected==TIMER16_1)? (OCR1B) : (OCR3B) ) // The temporary register is not used
# define Timer16_get_compare_c() ((timer16_selected==TIMER16_1)? (OCR1C) : (OCR3C) ) // The temporary register is not used
// ----------
# define Timer16_set_capture(value) ((timer16_selected==TIMER16_1)? \
(ICR1H = ((U8)(value>>8)), ICR1L = ((U8)(value))) \
: \
(ICR3H = ((U8)(value>>8)), ICR3L = ((U8)(value))) )
# define Timer16_get_capture_low() ((timer16_selected==TIMER16_1)? ((U16)(ICR1L)) : ((U16)(ICR3L)) )
# define Timer16_get_capture_high() ((timer16_selected==TIMER16_1)? ((U16)(ICR1H)) : ((U16)(ICR3H)) )
// ----------
# define Timer16_set_mode_output_a(conf) ((timer16_selected==TIMER16_1)? \
(TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM1A0)) \
: \
(TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_A)) | (conf << COM3A0)) )
# define Timer16_set_mode_output_b(conf) ((timer16_selected==TIMER16_1)? \
(TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM1B0)) \
: \
(TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_B)) | (conf << COM3B0)) )
# define Timer16_set_mode_output_c(conf) ((timer16_selected==TIMER16_1)? \
(TCCR1A = (TCCR1A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM1C0)) \
: \
(TCCR3A = (TCCR3A & (~TIMER16_COMP_MODE_MASK_C)) | (conf << COM3C0)) )
# define Timer16_get_mode_output_a() ((timer16_selected==TIMER16_1)? \
((TCCR1A & TIMER16_COMP_MODE_MASK_A) >> COM1A0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_A) >> COM3A0 ) )
# define Timer16_get_mode_output_b() ((timer16_selected==TIMER16_1)? \
((TCCR1A & TIMER16_COMP_MODE_MASK_B) >> COM1B0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_B) >> COM3B0) )
# define Timer16_get_mode_output_c() ((timer16_selected==TIMER16_1)? \
((TCCR1A & TIMER16_COMP_MODE_MASK_C) >> COM1C0) : ((TCCR3A & TIMER16_COMP_MODE_MASK_C) >> COM3C0) )
// ----------
# define Timer16_set_waveform_mode(conf) ((timer16_selected==TIMER16_1)? \
(TCCR1A = (TCCR1A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM10) , \
TCCR1B = (TCCR1B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM12) ) \
: \
(TCCR3A = (TCCR3A & (~TIMER16_WGM_RA_MASK)) | ((conf & 0x3) << WGM30) , \
TCCR3B = (TCCR3B & (~TIMER16_WGM_RB_MASK)) | ((conf >> 0x2) << WGM32) ) )
# define Timer16_get_waveform_mode() ((timer16_selected==TIMER16_1)? \
(((TCCR1A & TIMER16_WGM_RA_MASK) >> WGM10) | (((TCCR1B & TIMER16_WGM_RB_MASK) >> WGM12) << 0x2)) \
: \
(((TCCR3A & TIMER16_WGM_RA_MASK) >> WGM30) | (((TCCR3B & TIMER16_WGM_RB_MASK) >> WGM32) << 0x2)) )
// ----------
# define Timer16_set_clock(value) ((timer16_selected==TIMER16_1)? \
(TCCR1B = (TCCR1B & (~TIMER16_CLK_MASK)) | (value << CS10)) \
: \
(TCCR3B = (TCCR3B & (~TIMER16_CLK_MASK)) | (value << CS30)) )
# define Timer16_get_clock() ((timer16_selected==TIMER16_1)? \
(((TCCR1B & TIMER16_CLK_MASK) >> CS10)) : (((TCCR3B & TIMER16_CLK_MASK) >> CS30)) )
// ----------
# define Timer16_set_input_filter() ((timer16_selected==TIMER16_1)? \
(TCCR1B |= (1<<ICNC1)) : ( TCCR3B |= (1<<ICNC3)) )
# define Timer16_clear_input_filter() ((timer16_selected==TIMER16_1)? \
(TCCR1B &= ~(1<<ICNC1)) : ( TCCR3B &= ~(1<<ICNC3)) )
# define Timer16_get_input_filter() ((timer16_selected==TIMER16_1)? \
((TCCR1B & (1<<ICNC1)) >> ICNC1) : ((TCCR3B & (1<<ICNC3)) >> ICNC3) )
// ----------
# define Timer16_set_input_rising_edge() ((timer16_selected==TIMER16_1)? \
(TCCR1B |= (1<<ICES1)) : (TCCR3B |= (1<<ICES3)) )
# define Timer16_set_input_falling_edge() ((timer16_selected==TIMER16_1)? \
(TCCR1B &= ~(1<<ICES1)) : ( TCCR3B &= ~(1<<ICES3)) )
# define Timer16_get_input_capture_edge() ((timer16_selected==TIMER16_1)? \
((TCCR1B & (1<<ICES1)) >> ICES1) : ((TCCR3B & (1<<ICES3)) >> ICES3) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -