heater-stm32.c: rework init

This commit is contained in:
Nico Tonnhofer 2017-03-22 10:39:39 +01:00
parent 772d507a45
commit 635d40a42a
1 changed files with 16 additions and 20 deletions

View File

@ -179,7 +179,6 @@ void heater_init() {
#define DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, ...) \
if (PWM_TYPE(pwm, pin) == HARDWARE_PWM) { \
uint32_t freq; \
uint8_t macro_mask; \
if (pin ## _TIMER == TIM1) { \
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; } /* turn on TIM1 */ \
else if (pin ## _TIMER == TIM2) { \
@ -203,21 +202,18 @@ void heater_init() {
if (freq < 1) \
freq = 1; \
pin ## _TIMER->PSC = freq - 1; /* 1kHz */ \
macro_mask = pin ## _CHANNEL > 2 ? 2 : 1; \
if (macro_mask == 1) { \
pin ## _TIMER->CCMR1 |= 0x0D << (3 + (8 * (pin ## _CHANNEL / macro_mask - 1))); \
/* ch 2 / mm 1 - 1 = 1, ch 1 / mm 1 - 1 = 0*/ \
} else { \
pin ## _TIMER->CCMR2 |= 0x0D << (3 + (8 * (pin ## _CHANNEL / macro_mask - 1))); \
/* ch 4 / mm 2 - 1 = 1, ch 3 / mm 2 - 1 = 0*/ \
} \
if (pin ## _CHANNEL <= 2) \
pin ## _TIMER->CCMR1 |= 0x68UL << (8 * (pin ## _CHANNEL && 2)); \
else \
pin ## _TIMER->CCMR2 |= 0x68UL << (8 * (pin ## _CHANNEL && 4)); \
\
pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, E); \
/* output enable */ \
if (pin ## _INVERT ^ invert) { \
if (pin ## _INVERT ^ invert) \
pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P); \
} else { \
else \
pin ## _TIMER->CCER &= ~(EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P)); \
} \
\
/* invert the signal for negated timers*/ \
/* also with a XOR for inverted heaters */ \
pin ## _TIMER->EGR |= TIM_EGR_UG; /* update generation */ \