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

@ -18,10 +18,23 @@ 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)
{ {
if (cfg->parent.mode & RT_SPI_CS_HIGH) rt_err_t result = rt_mutex_take(&(device->parent.bus->lock), RT_WAITING_FOREVER);
rt_pin_write(device->parent.cs_pin, PIN_LOW); 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 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. */ /* If the configurations are the same, we don't need to set again. */

View File

@ -135,10 +135,23 @@ 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)
{ {
if (cfg->mode & RT_SPI_CS_HIGH) rt_err_t result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER);
rt_pin_write(device->cs_pin, PIN_LOW); 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 else
rt_pin_write(device->cs_pin, PIN_HIGH); {
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. */