mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
PiSO SPI: Implement a poor mans semaphore for non-freertos systems.
This commit is contained in:
parent
294e0cbdff
commit
3b6ffc8afa
@ -235,6 +235,18 @@ int32_t PIOS_SPI_ClaimBus(uint32_t spi_id)
|
||||
|
||||
if (xSemaphoreTake(spi_dev->busy, 0xffff) != pdTRUE)
|
||||
return -1;
|
||||
#else
|
||||
struct pios_spi_dev * spi_dev = (struct pios_spi_dev *)spi_id;
|
||||
uint32_t timeout = 0xffff;
|
||||
while((PIOS_SPI_Busy(spi_id) || spi_dev->busy) && --timeout);
|
||||
if(timeout == 0) //timed out
|
||||
return -1;
|
||||
|
||||
PIOS_IRQ_Disable();
|
||||
if(spi_dev->busy)
|
||||
return -1;
|
||||
spi_dev->busy = 1;
|
||||
PIOS_IRQ_Enable();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@ -253,6 +265,12 @@ int32_t PIOS_SPI_ReleaseBus(uint32_t spi_id)
|
||||
PIOS_Assert(valid)
|
||||
|
||||
xSemaphoreGive(spi_dev->busy);
|
||||
#else
|
||||
struct pios_spi_dev * spi_dev = (struct pios_spi_dev *)spi_id;
|
||||
PIOS_IRQ_Disable();
|
||||
spi_dev->busy = 0;
|
||||
PIOS_IRQ_Enable();
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
@ -247,6 +247,18 @@ int32_t PIOS_SPI_ClaimBus(uint32_t spi_id)
|
||||
|
||||
if (xSemaphoreTake(spi_dev->busy, 0xffff) != pdTRUE)
|
||||
return -1;
|
||||
#else
|
||||
struct pios_spi_dev * spi_dev = (struct pios_spi_dev *)spi_id;
|
||||
uint32_t timeout = 0xffff;
|
||||
while((PIOS_SPI_Busy(spi_id) || spi_dev->busy) && --timeout);
|
||||
if(timeout == 0) //timed out
|
||||
return -1;
|
||||
|
||||
PIOS_IRQ_Disable();
|
||||
if(spi_dev->busy)
|
||||
return -1;
|
||||
spi_dev->busy = 1;
|
||||
PIOS_IRQ_Enable();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@ -265,6 +277,12 @@ int32_t PIOS_SPI_ReleaseBus(uint32_t spi_id)
|
||||
PIOS_Assert(valid)
|
||||
|
||||
xSemaphoreGive(spi_dev->busy);
|
||||
#else
|
||||
struct pios_spi_dev * spi_dev = (struct pios_spi_dev *)spi_id;
|
||||
PIOS_IRQ_Disable();
|
||||
spi_dev->busy = 0;
|
||||
PIOS_IRQ_Enable();
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
@ -69,6 +69,8 @@ struct pios_spi_dev {
|
||||
uint8_t rx_dummy_byte;
|
||||
#if defined(PIOS_INCLUDE_FREERTOS)
|
||||
xSemaphoreHandle busy;
|
||||
#else
|
||||
uint8_t busy;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user