清理dshot代码,增加LSM6DSO的支持

This commit is contained in:
shanggl 2022-09-14 22:26:42 +08:00 committed by Hugo Chiang
parent 8ce4a88890
commit 84fa51d2d9
6 changed files with 13 additions and 56 deletions

View File

@ -96,25 +96,15 @@ void bbTimerChannelInit(bbPort_t *bbPort)
{
const timerHardware_t *timhw = bbPort->timhw;
// TIM_OCInitTypeDef TIM_OCStruct;
// TIM_OCStructInit(&TIM_OCStruct);
// TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;
// TIM_OCStruct.TIM_OCIdleState = TIM_OCIdleState_Set;
// TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
// TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
// TIM_OCStruct.TIM_Pulse = 10; // Duty doesn't matter, but too value small would make monitor output invalid
tmr_output_config_type TIM_OCStruct;
tmr_output_default_para_init(&TIM_OCStruct);
TIM_OCStruct.oc_mode= TMR_OUTPUT_CONTROL_PWM_MODE_A;//when count up pwm1 eq pwma pwm2 =pwmb
TIM_OCStruct.oc_idle_state=TRUE;
TIM_OCStruct.oc_output_state=TRUE;
TIM_OCStruct.oc_polarity=TMR_OUTPUT_ACTIVE_LOW;
tmr_channel_value_set(timhw->tim, (timhw->channel-1)*2, 10);
tmr_channel_value_set(timhw->tim, (timhw->channel-1)*2, 10);// Duty doesn't matter, but too value small would make monitor output invalid
// TIM_Cmd(bbPort->timhw->tim, DISABLE);
tmr_counter_enable(bbPort->timhw->tim, DISABLE);
// timerOCInit(timhw->tim, timhw->channel, &TIM_OCStruct);
// timerOCPreloadConfig(timhw->tim, timhw->channel, TIM_OCPreload_Enable);
tmr_output_channel_config(timhw->tim,(timhw->channel-1)*2, &TIM_OCStruct);
tmr_channel_enable(timhw->tim, ((timhw->channel-1)*2),TRUE);
tmr_output_channel_buffer_enable(timhw->tim, ((timhw->channel-1)*2),TRUE);
@ -124,7 +114,6 @@ void bbTimerChannelInit(bbPort_t *bbPort)
IO_t io = IOGetByTag(timhw->tag);
IOInit(io, OWNER_DSHOT_BITBANG, 0);
IOConfigGPIOAF(io, IOCFG_AF_PP, timhw->alternateFunction);
// TIM_CtrlPWMOutputs(timhw->tim, ENABLE);
tmr_output_enable(timhw->tim,TRUE);
}
#endif
@ -138,38 +127,23 @@ void bbTimerChannelInit(bbPort_t *bbPort)
void bbLoadDMARegs(dmaResource_t *dmaResource, dmaRegCache_t *dmaRegCache)
{
#if defined(AT32F4)
((DMA_ARCH_TYPE *)dmaResource)->ctrl = dmaRegCache->CCR; //ctrl info
((DMA_ARCH_TYPE *)dmaResource)->dtcnt = dmaRegCache->CNDTR; // dtcnt data count
((DMA_ARCH_TYPE *)dmaResource)->dtcnt = dmaRegCache->CNDTR; //dtcnt data count
((DMA_ARCH_TYPE *)dmaResource)->paddr = dmaRegCache->CPAR; //pheriph address
((DMA_ARCH_TYPE *)dmaResource)->maddr = dmaRegCache->CMAR; //Memory address
#else
((DMA_Stream_TypeDef *)dmaResource)->CR = dmaRegCache->CR;
((DMA_Stream_TypeDef *)dmaResource)->FCR = dmaRegCache->FCR;
((DMA_Stream_TypeDef *)dmaResource)->NDTR = dmaRegCache->NDTR;
((DMA_Stream_TypeDef *)dmaResource)->PAR = dmaRegCache->PAR;
((DMA_Stream_TypeDef *)dmaResource)->M0AR = dmaRegCache->M0AR;
#endif
}
static void bbSaveDMARegs(dmaResource_t *dmaResource, dmaRegCache_t *dmaRegCache)
{
#if defined(AT32F4)
dmaRegCache->CCR=((DMA_ARCH_TYPE *)dmaResource)->ctrl;
dmaRegCache->CNDTR=((DMA_ARCH_TYPE *)dmaResource)->dtcnt;
dmaRegCache->CPAR=((DMA_ARCH_TYPE *)dmaResource)->paddr ;
dmaRegCache->CMAR=((DMA_ARCH_TYPE *)dmaResource)->maddr ;
#else
dmaRegCache->CR = ((DMA_Stream_TypeDef *)dmaResource)->CR;
dmaRegCache->FCR = ((DMA_Stream_TypeDef *)dmaResource)->FCR;
dmaRegCache->NDTR = ((DMA_Stream_TypeDef *)dmaResource)->NDTR;
dmaRegCache->PAR = ((DMA_Stream_TypeDef *)dmaResource)->PAR;
dmaRegCache->M0AR = ((DMA_Stream_TypeDef *)dmaResource)->M0AR;
#endif
}
#endif
void bbSwitchToOutput(bbPort_t * bbPort)
FAST_CODE void bbSwitchToOutput(bbPort_t * bbPort)
{
dbgPinHi(1);
// Output idle level before switching to output
@ -195,8 +169,6 @@ void bbSwitchToOutput(bbPort_t * bbPort)
#endif
// Reinitialize pacer timer for output
// bbPort->timhw->tim->ARR = bbPort->outputARR;
bbPort->timhw->tim->pr = bbPort->outputARR;//maps to pr
bbPort->direction = DSHOT_BITBANG_DIRECTION_OUTPUT;
@ -205,7 +177,7 @@ void bbSwitchToOutput(bbPort_t * bbPort)
}
#ifdef USE_DSHOT_TELEMETRY
void bbSwitchToInput(bbPort_t *bbPort)
FAST_CODE void bbSwitchToInput(bbPort_t *bbPort)
{
dbgPinHi(1);
@ -244,19 +216,6 @@ void bbSwitchToInput(bbPort_t *bbPort)
void bbDMAPreconfigure(bbPort_t *bbPort, uint8_t direction)
{
// DMA_InitTypeDef *dmainit = (direction == DSHOT_BITBANG_DIRECTION_OUTPUT) ? &bbPort->outputDmaInit : &bbPort->inputDmaInit;
//
// DMA_StructInit(dmainit);
//
// dmainit->DMA_Mode = DMA_Mode_Normal; //loop mode
// dmainit->DMA_PeripheralInc = DMA_PeripheralInc_Disable;
// dmainit->DMA_MemoryInc = DMA_MemoryInc_Enable;
//
// dmainit->DMA_Channel = bbPort->dmaChannel; //not need
// dmainit->DMA_FIFOMode = DMA_FIFOMode_Enable ; //not need
// dmainit->DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull ; //not need
// dmainit->DMA_MemoryBurst = DMA_MemoryBurst_Single ;
// dmainit->DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
dma_init_type * dmainit = (direction == DSHOT_BITBANG_DIRECTION_OUTPUT) ? &bbPort->outputDmaInit : &bbPort->inputDmaInit;
dma_default_para_init(dmainit);
@ -300,14 +259,6 @@ void bbDMAPreconfigure(bbPort_t *bbPort, uint8_t direction)
void bbTIM_TimeBaseInit(bbPort_t *bbPort, uint16_t period)
{
//fixme: 貌似之有这里用到了 timer 的baseinit 参数header里是否定义用途也不大啊
// tmr_base_init_type *init = &bbPort->timeBaseInit;
//
// init->TIM_Prescaler = 0; // Feed raw timerClock
// init->TIM_ClockDivision = TIM_CKD_DIV1;
// init->TIM_CounterMode = TIM_CounterMode_Up;
// init->TIM_Period = period;
// TIM_TimeBaseInit(bbPort->timhw->tim, init);
// TIM_ARRPreloadConfig(bbPort->timhw->tim, ENABLE);
tmr_base_init(bbPort->timhw->tim, period,0);
tmr_clock_source_div_set(bbPort->timhw->tim,TMR_CLOCK_DIV1);
tmr_cnt_dir_set(bbPort->timhw->tim,TMR_COUNT_UP);
@ -316,7 +267,6 @@ void bbTIM_TimeBaseInit(bbPort_t *bbPort, uint16_t period)
void bbTIM_DMACmd(tmr_type * TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
{
// TIM_DMACmd(TIMx, TIM_DMASource, NewState);
tmr_dma_request_enable(TIMx, TIM_DMASource, NewState);
}

View File

@ -105,6 +105,7 @@
#define USE_GYRO
#define USE_GYRO_SPI_MPU6500
#define USE_GYRO_SPI_ICM42688P
#define USE_ACCGYRO_LSM6DSO
#define USE_ACC
#define USE_ACC_SPI_MPU6500

View File

@ -11,6 +11,8 @@ TARGET_SRC = \
drivers/compass/compass_qmc5883l.c\
drivers/accgyro/accgyro_spi_mpu6000.c \
drivers/accgyro/accgyro_spi_mpu6500.c\
drivers/accgyro/accgyro_spi_lsm6dso_init.c \
drivers/accgyro/accgyro_spi_lsm6dso.c \
drivers/max7456.c \
drivers/vtx_rtc6705.c \
drivers/vtx_rtc6705_soft_spi.c \

View File

@ -103,6 +103,8 @@
#define USE_GYRO
#define USE_GYRO_SPI_ICM42688P
#define USE_ACCGYRO_BMI270
#define USE_ACCGYRO_LSM6DSO
#define USE_ACC

View File

@ -10,5 +10,7 @@ TARGET_SRC = \
drivers/compass/compass_qmc5883l.c\
$(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270_maximum_fifo.c \
drivers/accgyro/accgyro_spi_bmi270.c\
drivers/accgyro/accgyro_spi_lsm6dso_init.c \
drivers/accgyro/accgyro_spi_lsm6dso.c \
drivers/max7456.c \

View File

@ -179,7 +179,7 @@
#define DEFAULT_CPU_OVERCLOCK 0
#endif
#if defined(STM32H7)
#if defined(STM32H7) || defined(AT32F4)
// Move ISRs to fast ram to avoid flash latency.
#define FAST_IRQ_HANDLER FAST_CODE
#else