From 5214f4bdecac693b8728bec3fd66877937786f4c Mon Sep 17 00:00:00 2001 From: Sami Korhonen Date: Sat, 6 May 2017 13:36:57 +0300 Subject: [PATCH] Rename HAL dshot file and cleanup --- Makefile | 2 +- ...put_stm32f7xx.c => pwm_output_dshot_hal.c} | 58 +++++-------------- 2 files changed, 16 insertions(+), 44 deletions(-) rename src/main/drivers/{pwm_output_stm32f7xx.c => pwm_output_dshot_hal.c} (78%) diff --git a/Makefile b/Makefile index c547c744a..fdcc468d1 100644 --- a/Makefile +++ b/Makefile @@ -985,7 +985,7 @@ STM32F7xx_COMMON_SRC = \ drivers/gpio_stm32f7xx.c \ drivers/light_ws2811strip_hal.c \ drivers/bus_spi_hal.c \ - drivers/pwm_output_stm32f7xx.c \ + drivers/pwm_output_dshot_hal.c \ drivers/timer_hal.c \ drivers/timer_stm32f7xx.c \ drivers/system_stm32f7xx.c \ diff --git a/src/main/drivers/pwm_output_stm32f7xx.c b/src/main/drivers/pwm_output_dshot_hal.c similarity index 78% rename from src/main/drivers/pwm_output_stm32f7xx.c rename to src/main/drivers/pwm_output_dshot_hal.c index 206323ca7..9903b58df 100644 --- a/src/main/drivers/pwm_output_stm32f7xx.c +++ b/src/main/drivers/pwm_output_dshot_hal.c @@ -47,7 +47,7 @@ uint8_t getTimerIndex(TIM_TypeDef *timer) } } dmaMotorTimers[dmaMotorTimerCount++].timer = timer; - return dmaMotorTimerCount-1; + return dmaMotorTimerCount - 1; } void pwmWriteDigital(uint8_t index, uint16_t value) @@ -63,13 +63,13 @@ void pwmWriteDigital(uint8_t index, uint16_t value) } uint16_t packet = (value << 1) | (motor->requestTelemetry ? 1 : 0); - motor->requestTelemetry = false; // reset telemetry request to make sure it's triggered only once in a row + motor->requestTelemetry = false; // reset telemetry request to make sure it's triggered only once in a row // compute checksum int csum = 0; int csum_data = packet; for (int i = 0; i < 3; i++) { - csum ^= csum_data; // xor data by nibbles + csum ^= csum_data; // xor data by nibbles csum_data >>= 4; } csum &= 0xf; @@ -77,22 +77,17 @@ void pwmWriteDigital(uint8_t index, uint16_t value) packet = (packet << 4) | csum; // generate pulses for whole packet for (int i = 0; i < 16; i++) { - motor->dmaBuffer[i] = (packet & 0x8000) ? MOTOR_BIT_1 : MOTOR_BIT_0; // MSB first + motor->dmaBuffer[i] = (packet & 0x8000) ? MOTOR_BIT_1 : MOTOR_BIT_0; // MSB first packet <<= 1; } - if(motor->timerHardware->output & TIMER_OUTPUT_N_CHANNEL) - { - if(HAL_TIMEx_PWMN_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) - { + if (motor->timerHardware->output & TIMER_OUTPUT_N_CHANNEL) { + if (HAL_TIMEx_PWMN_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) { /* Starting PWM generation Error */ return; } - } - else - { - if(HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) - { + } else { + if (HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) { /* Starting PWM generation Error */ return; } @@ -102,15 +97,6 @@ void pwmWriteDigital(uint8_t index, uint16_t value) void pwmCompleteDigitalMotorUpdate(uint8_t motorCount) { UNUSED(motorCount); - - if (!pwmMotorsEnabled) { - return; - } - - for (uint8_t i = 0; i < dmaMotorTimerCount; i++) { - //TIM_SetCounter(dmaMotorTimers[i].timer, 0); - //TIM_DMACmd(dmaMotorTimers[i].timer, dmaMotorTimers[i].timerDmaSources, ENABLE); - } } static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor) @@ -119,16 +105,6 @@ static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor) HAL_DMA_IRQHandler(motor->TimHandle.hdma[motor->timerDmaSource]); } -/*static void motor_DMA_IRQHandler(dmaChannelDescriptor_t *descriptor) -{ - if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) { - motorDmaOutput_t * const motor = &dmaMotors[descriptor->userParam]; - DMA_Cmd(descriptor->stream, DISABLE); - TIM_DMACmd(motor->timerHardware->tim, motor->timerDmaSource, DISABLE); - DMA_CLEAR_FLAG(descriptor, DMA_IT_TCIF); - } -}*/ - void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motorIndex, motorPwmProtocolTypes_e pwmProtocolType, uint8_t output) { motorDmaOutput_t * const motor = &dmaMotors[motorIndex]; @@ -147,14 +123,13 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t RCC_ClockCmd(timerRCC(timer), ENABLE); motor->TimHandle.Instance = timerHardware->tim; - motor->TimHandle.Init.Prescaler = (SystemCoreClock / timerClockDivisor(timer) / getDshotHz(pwmProtocolType)) - 1;; + motor->TimHandle.Init.Prescaler = (SystemCoreClock / timerClockDivisor(timer) / getDshotHz(pwmProtocolType)) - 1; motor->TimHandle.Init.Period = MOTOR_BITLENGTH; motor->TimHandle.Init.RepetitionCounter = 0; motor->TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; motor->TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; motor->TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if(HAL_TIM_PWM_Init(&motor->TimHandle) != HAL_OK) - { + if (HAL_TIM_PWM_Init(&motor->TimHandle) != HAL_OK) { /* Initialization Error */ return; } @@ -163,7 +138,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t dmaMotorTimers[timerIndex].timerDmaSources |= motor->timerDmaSource; /* Set the parameters to be configured */ - motor->hdma_tim.Init.Channel = timerHardware->dmaChannel; + motor->hdma_tim.Init.Channel = timerHardware->dmaChannel; motor->hdma_tim.Init.Direction = DMA_MEMORY_TO_PERIPH; motor->hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE; motor->hdma_tim.Init.MemInc = DMA_MINC_ENABLE; @@ -177,8 +152,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motor->hdma_tim.Init.PeriphBurst = DMA_PBURST_SINGLE; /* Set hdma_tim instance */ - if(timerHardware->dmaRef == NULL) - { + if (timerHardware->dmaRef == NULL) { /* Initialization Error */ return; } @@ -191,8 +165,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t dmaSetHandler(timerHardware->dmaIrqHandler, motor_DMA_IRQHandler, NVIC_BUILD_PRIORITY(1, 2), motorIndex); /* Initialize TIMx DMA handle */ - if(HAL_DMA_Init(motor->TimHandle.hdma[motor->timerDmaSource]) != HAL_OK) - { + if (HAL_DMA_Init(motor->TimHandle.hdma[motor->timerDmaSource]) != HAL_OK) { /* Initialization Error */ return; } @@ -203,7 +176,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1; if (output & TIMER_OUTPUT_N_CHANNEL) { TIM_OCInitStructure.OCIdleState = TIM_OCIDLESTATE_RESET; - TIM_OCInitStructure.OCPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCPOLARITY_HIGH: TIM_OCPOLARITY_LOW; + TIM_OCInitStructure.OCPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCPOLARITY_HIGH : TIM_OCPOLARITY_LOW; TIM_OCInitStructure.OCNIdleState = TIM_OCNIDLESTATE_RESET; TIM_OCInitStructure.OCNPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCNPOLARITY_HIGH : TIM_OCNPOLARITY_LOW; } else { @@ -215,8 +188,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t TIM_OCInitStructure.OCFastMode = TIM_OCFAST_DISABLE; TIM_OCInitStructure.Pulse = 0; - if(HAL_TIM_PWM_ConfigChannel(&motor->TimHandle, &TIM_OCInitStructure, motor->timerHardware->channel) != HAL_OK) - { + if (HAL_TIM_PWM_ConfigChannel(&motor->TimHandle, &TIM_OCInitStructure, motor->timerHardware->channel) != HAL_OK) { /* Configuration Error */ return; }