Forráskód Böngészése

feat:[drivers][spi] rt_spi_configure 添加互斥保护

Meco Man 7 hónapja
szülő
commit
36f8f266e9

+ 16 - 3
components/drivers/spi/dev_qspi_core.c

@@ -18,10 +18,23 @@ rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configu
     /* reset the CS pin */
     if (device->parent.cs_pin != PIN_NONE)
     {
-        if (cfg->parent.mode & RT_SPI_CS_HIGH)
-            rt_pin_write(device->parent.cs_pin, PIN_LOW);
+        rt_err_t result = rt_mutex_take(&(device->parent.bus->lock), RT_WAITING_FOREVER);
+        if (result == RT_EOK)
+        {
+            if (cfg->parent.mode & RT_SPI_CS_HIGH)
+            {
+                rt_pin_write(device->parent.cs_pin, PIN_LOW);
+            }
+            else
+            {
+                rt_pin_write(device->parent.cs_pin, PIN_HIGH);
+            }
+            rt_mutex_release(&(device->parent.bus->lock));
+        }
         else
-            rt_pin_write(device->parent.cs_pin, PIN_HIGH);
+        {
+            return result;
+        }
     }
 
     /* If the configurations are the same, we don't need to set again. */

+ 16 - 3
components/drivers/spi/dev_spi_core.c

@@ -135,10 +135,23 @@ rt_err_t rt_spi_configure(struct rt_spi_device        *device,
     /* reset the CS pin */
     if (device->cs_pin != PIN_NONE)
     {
-        if (cfg->mode & RT_SPI_CS_HIGH)
-            rt_pin_write(device->cs_pin, PIN_LOW);
+        rt_err_t result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER);
+        if (result == RT_EOK)
+        {
+            if (cfg->mode & RT_SPI_CS_HIGH)
+            {
+                rt_pin_write(device->cs_pin, PIN_LOW);
+            }
+            else
+            {
+                rt_pin_write(device->cs_pin, PIN_HIGH);
+            }
+            rt_mutex_release(&(device->bus->lock));
+        }
         else
-            rt_pin_write(device->cs_pin, PIN_HIGH);
+        {
+            return result;
+        }
     }
 
     /* If the configurations are the same, we don't need to set again. */