Rename HAL dshot file and cleanup
This commit is contained in:
parent
a50192f71c
commit
5214f4bdec
2
Makefile
2
Makefile
|
@ -985,7 +985,7 @@ STM32F7xx_COMMON_SRC = \
|
||||||
drivers/gpio_stm32f7xx.c \
|
drivers/gpio_stm32f7xx.c \
|
||||||
drivers/light_ws2811strip_hal.c \
|
drivers/light_ws2811strip_hal.c \
|
||||||
drivers/bus_spi_hal.c \
|
drivers/bus_spi_hal.c \
|
||||||
drivers/pwm_output_stm32f7xx.c \
|
drivers/pwm_output_dshot_hal.c \
|
||||||
drivers/timer_hal.c \
|
drivers/timer_hal.c \
|
||||||
drivers/timer_stm32f7xx.c \
|
drivers/timer_stm32f7xx.c \
|
||||||
drivers/system_stm32f7xx.c \
|
drivers/system_stm32f7xx.c \
|
||||||
|
|
|
@ -47,7 +47,7 @@ uint8_t getTimerIndex(TIM_TypeDef *timer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dmaMotorTimers[dmaMotorTimerCount++].timer = timer;
|
dmaMotorTimers[dmaMotorTimerCount++].timer = timer;
|
||||||
return dmaMotorTimerCount-1;
|
return dmaMotorTimerCount - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwmWriteDigital(uint8_t index, uint16_t value)
|
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);
|
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
|
// compute checksum
|
||||||
int csum = 0;
|
int csum = 0;
|
||||||
int csum_data = packet;
|
int csum_data = packet;
|
||||||
for (int i = 0; i < 3; i++) {
|
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_data >>= 4;
|
||||||
}
|
}
|
||||||
csum &= 0xf;
|
csum &= 0xf;
|
||||||
|
@ -77,22 +77,17 @@ void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
packet = (packet << 4) | csum;
|
packet = (packet << 4) | csum;
|
||||||
// generate pulses for whole packet
|
// generate pulses for whole packet
|
||||||
for (int i = 0; i < 16; i++) {
|
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;
|
packet <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(motor->timerHardware->output & TIMER_OUTPUT_N_CHANNEL)
|
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(HAL_TIMEx_PWMN_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK)
|
|
||||||
{
|
|
||||||
/* Starting PWM generation Error */
|
/* Starting PWM generation Error */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
if (HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) {
|
||||||
{
|
|
||||||
if(HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK)
|
|
||||||
{
|
|
||||||
/* Starting PWM generation Error */
|
/* Starting PWM generation Error */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -102,15 +97,6 @@ void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
||||||
{
|
{
|
||||||
UNUSED(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)
|
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]);
|
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)
|
void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motorIndex, motorPwmProtocolTypes_e pwmProtocolType, uint8_t output)
|
||||||
{
|
{
|
||||||
motorDmaOutput_t * const motor = &dmaMotors[motorIndex];
|
motorDmaOutput_t * const motor = &dmaMotors[motorIndex];
|
||||||
|
@ -147,14 +123,13 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
||||||
|
|
||||||
motor->TimHandle.Instance = timerHardware->tim;
|
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.Period = MOTOR_BITLENGTH;
|
||||||
motor->TimHandle.Init.RepetitionCounter = 0;
|
motor->TimHandle.Init.RepetitionCounter = 0;
|
||||||
motor->TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
motor->TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
motor->TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
motor->TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
motor->TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
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 */
|
/* Initialization Error */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -163,7 +138,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
dmaMotorTimers[timerIndex].timerDmaSources |= motor->timerDmaSource;
|
dmaMotorTimers[timerIndex].timerDmaSources |= motor->timerDmaSource;
|
||||||
|
|
||||||
/* Set the parameters to be configured */
|
/* 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.Direction = DMA_MEMORY_TO_PERIPH;
|
||||||
motor->hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE;
|
motor->hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
motor->hdma_tim.Init.MemInc = DMA_MINC_ENABLE;
|
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;
|
motor->hdma_tim.Init.PeriphBurst = DMA_PBURST_SINGLE;
|
||||||
|
|
||||||
/* Set hdma_tim instance */
|
/* Set hdma_tim instance */
|
||||||
if(timerHardware->dmaRef == NULL)
|
if (timerHardware->dmaRef == NULL) {
|
||||||
{
|
|
||||||
/* Initialization Error */
|
/* Initialization Error */
|
||||||
return;
|
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);
|
dmaSetHandler(timerHardware->dmaIrqHandler, motor_DMA_IRQHandler, NVIC_BUILD_PRIORITY(1, 2), motorIndex);
|
||||||
|
|
||||||
/* Initialize TIMx DMA handle */
|
/* 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 */
|
/* Initialization Error */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -203,7 +176,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
|
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
|
||||||
if (output & TIMER_OUTPUT_N_CHANNEL) {
|
if (output & TIMER_OUTPUT_N_CHANNEL) {
|
||||||
TIM_OCInitStructure.OCIdleState = TIM_OCIDLESTATE_RESET;
|
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.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||||
TIM_OCInitStructure.OCNPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCNPOLARITY_HIGH : TIM_OCNPOLARITY_LOW;
|
TIM_OCInitStructure.OCNPolarity = (output & TIMER_OUTPUT_INVERTED) ? TIM_OCNPOLARITY_HIGH : TIM_OCNPOLARITY_LOW;
|
||||||
} else {
|
} else {
|
||||||
|
@ -215,8 +188,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
TIM_OCInitStructure.OCFastMode = TIM_OCFAST_DISABLE;
|
TIM_OCInitStructure.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
TIM_OCInitStructure.Pulse = 0;
|
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 */
|
/* Configuration Error */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
Loading…
Reference in New Issue