kopia lustrzana https://github.com/micropython/micropython
stmhal: Fix slow SPI DMA transfers by removing wfi from DMA wait loop.
Addresses issue #1268.pull/1305/head
rodzic
80f638fe19
commit
53a8aeb6e7
|
@ -290,12 +290,14 @@ void spi_deinit(SPI_HandleTypeDef *spi) {
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC HAL_StatusTypeDef spi_wait_dma_finished(SPI_HandleTypeDef *spi, uint32_t timeout) {
|
STATIC HAL_StatusTypeDef spi_wait_dma_finished(SPI_HandleTypeDef *spi, uint32_t timeout) {
|
||||||
|
// Note: we can't use WFI to idle in this loop because the DMA completion
|
||||||
|
// interrupt may occur before the WFI. Hence we miss it and have to wait
|
||||||
|
// until the next sys-tick (up to 1ms).
|
||||||
uint32_t start = HAL_GetTick();
|
uint32_t start = HAL_GetTick();
|
||||||
while (HAL_SPI_GetState(spi) != HAL_SPI_STATE_READY) {
|
while (HAL_SPI_GetState(spi) != HAL_SPI_STATE_READY) {
|
||||||
if (HAL_GetTick() - start >= timeout) {
|
if (HAL_GetTick() - start >= timeout) {
|
||||||
return HAL_TIMEOUT;
|
return HAL_TIMEOUT;
|
||||||
}
|
}
|
||||||
__WFI();
|
|
||||||
}
|
}
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue