Skip to content
This repository was archived by the owner on May 7, 2025. It is now read-only.

Commit 60c9086

Browse files
author
luopin
committed
SPI DMA开始进入临界区 防止重复开启SPI DMA
1 parent a5e71e2 commit 60c9086

File tree

4 files changed

+148
-124
lines changed

4 files changed

+148
-124
lines changed

17.chassis_task/application/INS_task.c

+37-31
Original file line numberDiff line numberDiff line change
@@ -565,43 +565,49 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
565565
*/
566566
static void imu_cmd_spi_dma(void)
567567
{
568+
UBaseType_t uxSavedInterruptStatus;
569+
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
568570

569-
//开启陀螺仪的DMA传输
570-
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
571-
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
572-
{
573-
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
574-
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
571+
//开启陀螺仪的DMA传输
572+
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
573+
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
574+
{
575+
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
576+
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
575577

576-
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
577-
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
578-
return;
579-
}
580-
//开启加速度计的DMA传输
581-
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
582-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
583-
{
584-
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
585-
accel_update_flag |= (1 << IMU_SPI_SHFITS);
578+
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
579+
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
580+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
581+
return;
582+
}
583+
//开启加速度计的DMA传输
584+
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
585+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
586+
{
587+
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
588+
accel_update_flag |= (1 << IMU_SPI_SHFITS);
586589

587-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
588-
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
589-
return;
590-
}
591-
590+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
591+
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
592+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
593+
return;
594+
}
595+
592596

593597

594-
595-
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
596-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
597-
{
598-
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
599-
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
598+
599+
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
600+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
601+
{
602+
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
603+
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
600604

601-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
602-
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
603-
return;
604-
}
605+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
606+
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
607+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
608+
return;
609+
}
610+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
605611
}
606612

607613

18.ins_task/application/INS_task.c

+37-31
Original file line numberDiff line numberDiff line change
@@ -311,43 +311,49 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
311311
*/
312312
static void imu_cmd_spi_dma(void)
313313
{
314+
UBaseType_t uxSavedInterruptStatus;
315+
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
314316

315-
//开启陀螺仪的DMA传输
316-
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
317-
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
318-
{
319-
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
320-
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
321-
322-
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
323-
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
324-
return;
325-
}
326-
//开启加速度计的DMA传输
327-
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
328-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
329-
{
330-
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
331-
accel_update_flag |= (1 << IMU_SPI_SHFITS);
317+
//开启陀螺仪的DMA传输
318+
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
319+
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
320+
{
321+
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
322+
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
332323

333-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
334-
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
335-
return;
336-
}
337-
324+
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
325+
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
326+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
327+
return;
328+
}
329+
//开启加速度计的DMA传输
330+
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
331+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
332+
{
333+
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
334+
accel_update_flag |= (1 << IMU_SPI_SHFITS);
338335

336+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
337+
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
338+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
339+
return;
340+
}
341+
339342

340343

341-
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
342-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
343-
{
344-
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
345-
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
344+
345+
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
346+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
347+
{
348+
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
349+
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
346350

347-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
348-
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
349-
return;
350-
}
351+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
352+
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
353+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
354+
return;
355+
}
356+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
351357
}
352358

353359

19.gimbal_task/application/INS_task.c

+37-31
Original file line numberDiff line numberDiff line change
@@ -565,43 +565,49 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
565565
*/
566566
static void imu_cmd_spi_dma(void)
567567
{
568+
UBaseType_t uxSavedInterruptStatus;
569+
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
568570

569-
//开启陀螺仪的DMA传输
570-
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
571-
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
572-
{
573-
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
574-
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
571+
//开启陀螺仪的DMA传输
572+
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
573+
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
574+
{
575+
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
576+
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
575577

576-
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
577-
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
578-
return;
579-
}
580-
//开启加速度计的DMA传输
581-
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
582-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
583-
{
584-
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
585-
accel_update_flag |= (1 << IMU_SPI_SHFITS);
578+
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
579+
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
580+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
581+
return;
582+
}
583+
//开启加速度计的DMA传输
584+
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
585+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
586+
{
587+
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
588+
accel_update_flag |= (1 << IMU_SPI_SHFITS);
586589

587-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
588-
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
589-
return;
590-
}
591-
590+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
591+
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
592+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
593+
return;
594+
}
595+
592596

593597

594-
595-
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
596-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
597-
{
598-
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
599-
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
598+
599+
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
600+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
601+
{
602+
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
603+
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
600604

601-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
602-
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
603-
return;
604-
}
605+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
606+
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
607+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
608+
return;
609+
}
610+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
605611
}
606612

607613

20.standard_robot/application/INS_task.c

+37-31
Original file line numberDiff line numberDiff line change
@@ -565,43 +565,49 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
565565
*/
566566
static void imu_cmd_spi_dma(void)
567567
{
568+
UBaseType_t uxSavedInterruptStatus;
569+
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
568570

569-
//开启陀螺仪的DMA传输
570-
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
571-
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
572-
{
573-
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
574-
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
571+
//开启陀螺仪的DMA传输
572+
if( (gyro_update_flag & (1 << IMU_DR_SHFITS) ) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
573+
&& !(accel_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
574+
{
575+
gyro_update_flag &= ~(1 << IMU_DR_SHFITS);
576+
gyro_update_flag |= (1 << IMU_SPI_SHFITS);
575577

576-
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
577-
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
578-
return;
579-
}
580-
//开启加速度计的DMA传输
581-
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
582-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
583-
{
584-
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
585-
accel_update_flag |= (1 << IMU_SPI_SHFITS);
578+
HAL_GPIO_WritePin(CS1_GYRO_GPIO_Port, CS1_GYRO_Pin, GPIO_PIN_RESET);
579+
SPI1_DMA_enable((uint32_t)gyro_dma_tx_buf, (uint32_t)gyro_dma_rx_buf, SPI_DMA_GYRO_LENGHT);
580+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
581+
return;
582+
}
583+
//开启加速度计的DMA传输
584+
if((accel_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
585+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_temp_update_flag & (1 << IMU_SPI_SHFITS)))
586+
{
587+
accel_update_flag &= ~(1 << IMU_DR_SHFITS);
588+
accel_update_flag |= (1 << IMU_SPI_SHFITS);
586589

587-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
588-
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
589-
return;
590-
}
591-
590+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
591+
SPI1_DMA_enable((uint32_t)accel_dma_tx_buf, (uint32_t)accel_dma_rx_buf, SPI_DMA_ACCEL_LENGHT);
592+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
593+
return;
594+
}
595+
592596

593597

594-
595-
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
596-
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
597-
{
598-
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
599-
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
600598

601-
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
602-
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
603-
return;
604-
}
599+
if((accel_temp_update_flag & (1 << IMU_DR_SHFITS)) && !(hspi1.hdmatx->Instance->CR & DMA_SxCR_EN) && !(hspi1.hdmarx->Instance->CR & DMA_SxCR_EN)
600+
&& !(gyro_update_flag & (1 << IMU_SPI_SHFITS)) && !(accel_update_flag & (1 << IMU_SPI_SHFITS)))
601+
{
602+
accel_temp_update_flag &= ~(1 << IMU_DR_SHFITS);
603+
accel_temp_update_flag |= (1 << IMU_SPI_SHFITS);
604+
605+
HAL_GPIO_WritePin(CS1_ACCEL_GPIO_Port, CS1_ACCEL_Pin, GPIO_PIN_RESET);
606+
SPI1_DMA_enable((uint32_t)accel_temp_dma_tx_buf, (uint32_t)accel_temp_dma_rx_buf, SPI_DMA_ACCEL_TEMP_LENGHT);
607+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
608+
return;
609+
}
610+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
605611
}
606612

607613

0 commit comments

Comments
 (0)