From 6f334be23110402e9b830660167562d3b27e7af0 Mon Sep 17 00:00:00 2001 From: Nico Tonnhofer Date: Fri, 25 Mar 2016 01:24:08 +0100 Subject: [PATCH] STM32F411: support inverted heater pin signals. --- heater-stm32.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/heater-stm32.c b/heater-stm32.c index 8512837..86465ac 100644 --- a/heater-stm32.c +++ b/heater-stm32.c @@ -72,7 +72,7 @@ typedef struct { } heater_definition_t; #undef DEFINE_HEATER -#define DEFINE_HEATER(name, pin, pwm) \ +#define DEFINE_HEATER(name, pin, invert, pwm) \ { \ { pwm && pin ## _TIMER ? \ &(pin ## _TIMER-> EXPANDER(CCR, pin ## _CHANNEL,)) : \ @@ -155,7 +155,7 @@ void heater_init() { */ // Auto-generate pin setup. #undef DEFINE_HEATER - #define DEFINE_HEATER(name, pin, pwm) \ + #define DEFINE_HEATER(name, pin, invert, pwm) \ if (pwm && pin ## _TIMER) { \ uint32_t freq; \ uint8_t macro_mask; \ @@ -201,19 +201,19 @@ void heater_init() { } \ pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, E); \ /* output enable */ \ - if (pin ## _INVERT) { \ + if (pin ## _INVERT ^ invert) { \ pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P); \ } else { \ pin ## _TIMER->CCER &= ~(EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P)); \ } \ /* invert the signal for negated timers*/ \ - /* TODO: use this also with a XOR for inverted heaters later */ \ + /* also with a XOR for inverted heaters */ \ pin ## _TIMER->EGR |= TIM_EGR_UG; /* update generation */ \ pin ## _TIMER->CR1 |= TIM_CR1_CEN; /* enable counters */ \ } \ else { \ SET_OUTPUT(pin); \ - WRITE(pin, 0); \ + WRITE(pin, invert ? 1 : 0); \ } #include "config_wrapper.h"