STM32F042-Drivers-Pub/tim.h
Francesco Gritti fe64f5342d initial commit
2024-05-02 12:18:04 +02:00

129 lines
3.9 KiB
C

/*
* tim.h
*
* Created on: Apr 3, 2024
* Author: Francesco Gritti
*/
#ifndef TIM_H_
#define TIM_H_
/*========================================================================================*
* TIMER MACROS
*========================================================================================*/
typedef enum {
TIM_OC_ACTIVE_HIGH = 0,
TIM_OC_ACTIVE_LOW,
} TIM_OC_ACTIVE_STATE_enum;
typedef enum {
TIM_IC_ACTIVE_RISING,
TIM_IC_ACTIVE_FALLING,
TIM_IC_ACTIVE_BOTH
}TIM_IC_ACTIVE_EDGE_enum;
#define TIM_PWM_MODE1 0x06 // active when CNT < PERIOD
#define TIM_PWM_MODE2 0x07 // inactive when CNT < PERIOD
#define TIM_FORCE_ACTIVE 0x05
#define TIM_FORCE_INACTIVE 0x04
#define TIM_COUNTER_ENABLE(timer) timer->CR1 |= TIM_CR1_CEN;
#define TIM_COUNTER_DISABLE(timer) timer->CR1 &= ~TIM_CR1_CEN;
#define TIM_CH1_ENABLE(tim) tim->CCER |= TIM_CCER_CC1E
#define TIM_CH2_ENABLE(tim) tim->CCER |= TIM_CCER_CC2E
#define TIM_CH3_ENABLE(tim) tim->CCER |= TIM_CCER_CC3E
#define TIM_CH4_ENABLE(tim) tim->CCER |= TIM_CCER_CC4E
#define TIM_CH1_DISABLE(tim) tim->CCER &= ~TIM_CCER_CC1E
#define TIM_CH2_DISABLE(tim) tim->CCER &= ~TIM_CCER_CC2E
#define TIM_CH3_DISABLE(tim) tim->CCER &= ~TIM_CCER_CC3E
#define TIM_CH4_DISABLE(tim) tim->CCER &= ~TIM_CCER_CC4E
#define TIM_PWM_SET_CH1_POLARITY_ACTIVE_HIGH(tim) tim->CCER &= ~TIM_CCER_CC1P
#define TIM_PWM_SET_CH2_POLARITY_ACTIVE_HIGH(tim) tim->CCER &= ~TIM_CCER_CC2P
#define TIM_PWM_SET_CH3_POLARITY_ACTIVE_HIGH(tim) tim->CCER &= ~TIM_CCER_CC3P
#define TIM_PWM_SET_CH4_POLARITY_ACTIVE_HIGH(tim) tim->CCER &= ~TIM_CCER_CC4P
#define TIM_PWM_SET_CH1_POLARITY_ACTIVE_LOW(tim) tim->CCER |= TIM_CCER_CC1P
#define TIM_PWM_SET_CH2_POLARITY_ACTIVE_LOW(tim) tim->CCER |= TIM_CCER_CC2P
#define TIM_PWM_SET_CH3_POLARITY_ACTIVE_LOW(tim) tim->CCER |= TIM_CCER_CC3P
#define TIM_PWM_SET_CH4_POLARITY_ACTIVE_LOW(tim) tim->CCER |= TIM_CCER_CC4P
#define TIM_SET_COUNTER(tim, counter) tim->CNT = counter
#define TIM_CH1_SET_COMPARE(tim, cmp) tim->CCR1 = cmp
#define TIM_CH2_SET_COMPARE(tim, cmp) tim->CCR2 = cmp
#define TIM_CH3_SET_COMPARE(tim, cmp) tim->CCR3 = cmp
#define TIM_CH4_SET_COMPARE(tim, cmp) tim->CCR4 = cmp
#define TIM_CH1_FORCE_ACTIVE(tim) TIM_CH1_SET_OUTCMP_MODE(tim, TIM_FORCE_ACTIVE)
#define TIM_CH2_FORCE_ACTIVE(tim) TIM_CH2_SET_OUTCMP_MODE(tim, TIM_FORCE_ACTIVE)
#define TIM_CH3_FORCE_ACTIVE(tim) TIM_CH3_SET_OUTCMP_MODE(tim, TIM_FORCE_ACTIVE)
#define TIM_CH4_FORCE_ACTIVE(tim) TIM_CH4_SET_OUTCMP_MODE(tim, TIM_FORCE_ACTIVE)
#define TIM_CH1_FORCE_INACTIVE(tim) TIM_CH1_SET_OUTCMP_MODE(tim, TIM_FORCE_INACTIVE)
#define TIM_CH2_FORCE_INACTIVE(tim) TIM_CH2_SET_OUTCMP_MODE(tim, TIM_FORCE_INACTIVE)
#define TIM_CH3_FORCE_INACTIVE(tim) TIM_CH3_SET_OUTCMP_MODE(tim, TIM_FORCE_INACTIVE)
#define TIM_CH4_FORCE_INACTIVE(tim) TIM_CH4_SET_OUTCMP_MODE(tim, TIM_FORCE_INACTIVE)
#define TIM_CH1_PWM(tim, mode) TIM_CH1_SET_OUTCMP_MODE(tim, mode)
#define TIM_CH2_PWM(tim, mode) TIM_CH2_SET_OUTCMP_MODE(tim, mode)
#define TIM_CH3_PWM(tim, mode) TIM_CH3_SET_OUTCMP_MODE(tim, mode)
#define TIM_CH4_PWM(tim, mode) TIM_CH4_SET_OUTCMP_MODE(tim, mode)
#define TIM_CH1_SET_OUTCMP_MODE(tim, mode) \
{ \
u32 temp = tim->CCMR1; \
temp &= ~TIM_CCMR1_OC1M_Msk; \
temp |= (mode << TIM_CCMR1_OC1M_Pos); \
tim->CCMR1 = temp; \
}
#define TIM_CH2_SET_OUTCMP_MODE(tim, mode) \
{ \
u32 temp = tim->CCMR1; \
temp &= ~TIM_CCMR1_OC2M_Msk; \
temp |= (mode << TIM_CCMR1_OC2M_Pos); \
tim->CCMR1 = temp; \
}
#define TIM_CH3_SET_OUTCMP_MODE(tim, mode) \
{ \
u32 temp = tim->CCMR2; \
temp &= ~TIM_CCMR2_OC3M_Msk; \
temp |= (mode << TIM_CCMR2_OC3M_Pos); \
tim->CCMR2 = temp; \
}
#define TIM_CH4_SET_OUTCMP_MODE(tim, mode) \
{ \
u32 temp = tim->CCMR2; \
temp &= ~TIM_CCMR2_OC4M_Msk; \
temp |= (mode << TIM_CCMR2_OC4M_Pos); \
tim->CCMR2 = temp; \
}
#endif /* TIM_H_ */