allow pwm mapping to xN (complementary) channels
This commit is contained in:
parent
aebd72a924
commit
1b3ae14b8d
|
@ -64,16 +64,22 @@ static uint8_t allocatedOutputPortCount = 0;
|
||||||
static bool pwmMotorsEnabled = true;
|
static bool pwmMotorsEnabled = true;
|
||||||
|
|
||||||
|
|
||||||
static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t ouputPolarity)
|
static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t output)
|
||||||
{
|
{
|
||||||
TIM_OCInitTypeDef TIM_OCInitStructure;
|
TIM_OCInitTypeDef TIM_OCInitStructure;
|
||||||
|
|
||||||
TIM_OCStructInit(&TIM_OCInitStructure);
|
TIM_OCStructInit(&TIM_OCInitStructure);
|
||||||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
|
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
|
||||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
if (output & TIMER_OUTPUT_N_CHANNEL) {
|
||||||
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
|
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
|
||||||
|
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||||
|
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
|
||||||
|
}
|
||||||
TIM_OCInitStructure.TIM_Pulse = value;
|
TIM_OCInitStructure.TIM_Pulse = value;
|
||||||
TIM_OCInitStructure.TIM_OCPolarity = ouputPolarity ? TIM_OCPolarity_High : TIM_OCPolarity_Low;
|
TIM_OCInitStructure.TIM_OCPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCPolarity_High : TIM_OCPolarity_Low;
|
||||||
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
|
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
|
||||||
|
|
||||||
switch (channel) {
|
switch (channel) {
|
||||||
|
@ -106,7 +112,7 @@ static pwmOutputPort_t *pwmOutConfig(const timerHardware_t *timerHardware, uint8
|
||||||
IOInit(io, OWNER_MOTOR, RESOURCE_OUTPUT, allocatedOutputPortCount);
|
IOInit(io, OWNER_MOTOR, RESOURCE_OUTPUT, allocatedOutputPortCount);
|
||||||
IOConfigGPIO(io, IOCFG_AF_PP);
|
IOConfigGPIO(io, IOCFG_AF_PP);
|
||||||
|
|
||||||
pwmOCConfig(timerHardware->tim, timerHardware->channel, value, timerHardware->output & TIMER_OUTPUT_INVERTED);
|
pwmOCConfig(timerHardware->tim, timerHardware->channel, value, timerHardware->output);
|
||||||
|
|
||||||
if (timerHardware->output & TIMER_OUTPUT_ENABLED) {
|
if (timerHardware->output & TIMER_OUTPUT_ENABLED) {
|
||||||
TIM_CtrlPWMOutputs(timerHardware->tim, ENABLE);
|
TIM_CtrlPWMOutputs(timerHardware->tim, ENABLE);
|
||||||
|
|
|
@ -88,7 +88,8 @@ typedef struct timerHardware_s {
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TIMER_OUTPUT_ENABLED = 0x01,
|
TIMER_OUTPUT_ENABLED = 0x01,
|
||||||
TIMER_OUTPUT_INVERTED = 0x02
|
TIMER_OUTPUT_INVERTED = 0x02,
|
||||||
|
TIMER_OUTPUT_N_CHANNEL= 0x04
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef STM32F1
|
#ifdef STM32F1
|
||||||
|
|
Loading…
Reference in New Issue