From 20f5b0ffba60b24931430a6b40062c5a01589e38 Mon Sep 17 00:00:00 2001 From: JF Date: Sun, 13 Sep 2020 21:26:44 +0200 Subject: Fix race conditions during sleep/wakeup, where SPI/TWI could be disabled while transaction were in progress (https://github.com/JF002/Pinetime/issues/60). --- src/drivers/TwiMaster.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/drivers') diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 14d12f9d..a9eb5d0c 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -140,9 +140,11 @@ void TwiMaster::Write(uint8_t deviceAddress, const uint8_t *data, size_t size, b } void TwiMaster::Sleep() { + while(twiBaseAddress->ENABLE != 0) { + twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Disabled << TWIM_ENABLE_ENABLE_Pos); + } nrf_gpio_cfg_default(6); nrf_gpio_cfg_default(7); - twiBaseAddress->ENABLE = 0; NRF_LOG_INFO("[TWIMASTER] Sleep"); } -- cgit v1.2.3-70-g09d2