STM32F411: support inverted heater pin signals.

This commit is contained in:
Nico Tonnhofer 2016-03-25 01:24:08 +01:00
parent afc4c3e8e4
commit 6f334be231
1 changed files with 5 additions and 5 deletions

View File

@ -72,7 +72,7 @@ typedef struct {
} heater_definition_t; } heater_definition_t;
#undef DEFINE_HEATER #undef DEFINE_HEATER
#define DEFINE_HEATER(name, pin, pwm) \ #define DEFINE_HEATER(name, pin, invert, pwm) \
{ \ { \
{ pwm && pin ## _TIMER ? \ { pwm && pin ## _TIMER ? \
&(pin ## _TIMER-> EXPANDER(CCR, pin ## _CHANNEL,)) : \ &(pin ## _TIMER-> EXPANDER(CCR, pin ## _CHANNEL,)) : \
@ -155,7 +155,7 @@ void heater_init() {
*/ */
// Auto-generate pin setup. // Auto-generate pin setup.
#undef DEFINE_HEATER #undef DEFINE_HEATER
#define DEFINE_HEATER(name, pin, pwm) \ #define DEFINE_HEATER(name, pin, invert, pwm) \
if (pwm && pin ## _TIMER) { \ if (pwm && pin ## _TIMER) { \
uint32_t freq; \ uint32_t freq; \
uint8_t macro_mask; \ uint8_t macro_mask; \
@ -201,19 +201,19 @@ void heater_init() {
} \ } \
pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, E); \ pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, E); \
/* output enable */ \ /* output enable */ \
if (pin ## _INVERT) { \ if (pin ## _INVERT ^ invert) { \
pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P); \ pin ## _TIMER->CCER |= EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P); \
} else { \ } else { \
pin ## _TIMER->CCER &= ~(EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P)); \ pin ## _TIMER->CCER &= ~(EXPANDER(TIM_CCER_CC, pin ## _CHANNEL, P)); \
} \ } \
/* invert the signal for negated timers*/ \ /* 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->EGR |= TIM_EGR_UG; /* update generation */ \
pin ## _TIMER->CR1 |= TIM_CR1_CEN; /* enable counters */ \ pin ## _TIMER->CR1 |= TIM_CR1_CEN; /* enable counters */ \
} \ } \
else { \ else { \
SET_OUTPUT(pin); \ SET_OUTPUT(pin); \
WRITE(pin, 0); \ WRITE(pin, invert ? 1 : 0); \
} }
#include "config_wrapper.h" #include "config_wrapper.h"