فهرست منبع

Fix SPI bus lock issue in spi_start_extended when using mutual exclusion (#25447)

Copilot 1 سال پیش
والد
کامیت
90b5c17034
1فایلهای تغییر یافته به همراه15 افزوده شده و 0 حذف شده
  1. 15 0
      platforms/chibios/drivers/spi_master.c

+ 15 - 0
platforms/chibios/drivers/spi_master.c

@@ -130,10 +130,16 @@ bool spi_start_extended(spi_start_config_t *start_config) {
 #endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
 
     if (spiStarted) {
+#if (SPI_USE_MUTUAL_EXCLUSION == TRUE)
+        spiReleaseBus(&SPI_DRIVER);
+#endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
         return false;
     }
 #if SPI_SELECT_MODE != SPI_SELECT_MODE_NONE
     if (start_config->slave_pin == NO_PIN) {
+#    if (SPI_USE_MUTUAL_EXCLUSION == TRUE)
+        spiReleaseBus(&SPI_DRIVER);
+#    endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
         return false;
     }
 #endif
@@ -146,10 +152,16 @@ bool spi_start_extended(spi_start_config_t *start_config) {
 
 #    if defined(AT32F415)
     if (roundedDivisor < 2 || roundedDivisor > 1024) {
+#        if (SPI_USE_MUTUAL_EXCLUSION == TRUE)
+        spiReleaseBus(&SPI_DRIVER);
+#        endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
         return false;
     }
 #    else
     if (roundedDivisor < 2 || roundedDivisor > 256) {
+#        if (SPI_USE_MUTUAL_EXCLUSION == TRUE)
+        spiReleaseBus(&SPI_DRIVER);
+#        endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
         return false;
     }
 #    endif
@@ -234,6 +246,9 @@ bool spi_start_extended(spi_start_config_t *start_config) {
     }
 
     if (start_config->divisor < 1) {
+#    if (SPI_USE_MUTUAL_EXCLUSION == TRUE)
+        spiReleaseBus(&SPI_DRIVER);
+#    endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE)
         return false;
     }