diff --git a/components/drivers/spi/dev_qspi_core.c b/components/drivers/spi/dev_qspi_core.c index e56fd947d0..9dd2c5feb5 100644 --- a/components/drivers/spi/dev_qspi_core.c +++ b/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. */ diff --git a/components/drivers/spi/dev_spi_core.c b/components/drivers/spi/dev_spi_core.c index e8525505a5..cef4d0a811 100644 --- a/components/drivers/spi/dev_spi_core.c +++ b/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. */