Removing DMA interrupt for dshot on F4
This commit is contained in:
parent
49d6f92701
commit
fbbc43e3d2
|
@ -86,6 +86,7 @@ typedef struct {
|
||||||
#else
|
#else
|
||||||
uint8_t dmaBuffer[MOTOR_DMA_BUFFER_SIZE];
|
uint8_t dmaBuffer[MOTOR_DMA_BUFFER_SIZE];
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t dmaFlag;
|
||||||
#if defined(STM32F7)
|
#if defined(STM32F7)
|
||||||
TIM_HandleTypeDef TimHandle;
|
TIM_HandleTypeDef TimHandle;
|
||||||
DMA_HandleTypeDef hdma_tim;
|
DMA_HandleTypeDef hdma_tim;
|
||||||
|
|
|
@ -82,6 +82,7 @@ void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
packet <<= 1;
|
packet <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DMA_ClearITPendingBit(motor->timerHardware->dmaStream, motor->dmaFlag);
|
||||||
DMA_SetCurrDataCounter(motor->timerHardware->dmaStream, MOTOR_DMA_BUFFER_SIZE);
|
DMA_SetCurrDataCounter(motor->timerHardware->dmaStream, MOTOR_DMA_BUFFER_SIZE);
|
||||||
DMA_Cmd(motor->timerHardware->dmaStream, ENABLE);
|
DMA_Cmd(motor->timerHardware->dmaStream, ENABLE);
|
||||||
}
|
}
|
||||||
|
@ -100,16 +101,6 @@ void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motorIndex, motorPwmProtocolTypes_e pwmProtocolType)
|
||||||
{
|
{
|
||||||
TIM_OCInitTypeDef TIM_OCInitStructure;
|
TIM_OCInitTypeDef TIM_OCInitStructure;
|
||||||
|
@ -176,7 +167,6 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
}
|
}
|
||||||
|
|
||||||
dmaInit(timerHardware->dmaIrqHandler, OWNER_MOTOR, RESOURCE_INDEX(motorIndex));
|
dmaInit(timerHardware->dmaIrqHandler, OWNER_MOTOR, RESOURCE_INDEX(motorIndex));
|
||||||
dmaSetHandler(timerHardware->dmaIrqHandler, motor_DMA_IRQHandler, NVIC_BUILD_PRIORITY(1, 2), motorIndex);
|
|
||||||
|
|
||||||
DMA_Cmd(stream, DISABLE);
|
DMA_Cmd(stream, DISABLE);
|
||||||
DMA_DeInit(stream);
|
DMA_DeInit(stream);
|
||||||
|
@ -200,8 +190,8 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
|
|
||||||
DMA_Init(stream, &DMA_InitStructure);
|
DMA_Init(stream, &DMA_InitStructure);
|
||||||
|
|
||||||
DMA_ITConfig(stream, DMA_IT_TC, ENABLE);
|
motor->dmaFlag = dmaFlag_IT_TCIF(timerHardware->dmaStream);
|
||||||
DMA_ClearITPendingBit(stream, dmaFlag_IT_TCIF(timerHardware->dmaStream));
|
DMA_ClearITPendingBit(stream, motor->dmaFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue