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

This commit is contained in:
Meco Man 2024-10-05 02:19:19 -04:00
parent 99503d3ff6
commit 36f8f266e9
2 changed files with 32 additions and 6 deletions

View File

@ -17,12 +17,25 @@ rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configu
/* reset the CS pin */ /* reset the CS pin */
if (device->parent.cs_pin != PIN_NONE) if (device->parent.cs_pin != PIN_NONE)
{
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) if (cfg->parent.mode & RT_SPI_CS_HIGH)
{
rt_pin_write(device->parent.cs_pin, PIN_LOW); rt_pin_write(device->parent.cs_pin, PIN_LOW);
}
else else
{
rt_pin_write(device->parent.cs_pin, PIN_HIGH); rt_pin_write(device->parent.cs_pin, PIN_HIGH);
} }
rt_mutex_release(&(device->parent.bus->lock));
}
else
{
return result;
}
}
/* If the configurations are the same, we don't need to set again. */ /* If the configurations are the same, we don't need to set again. */
if (device->config.medium_size == cfg->medium_size && if (device->config.medium_size == cfg->medium_size &&

View File

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