summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-09-13 19:26:44 (GMT)
committerJF <jf@codingfield.com>2020-09-13 19:26:44 (GMT)
commit20f5b0ffba60b24931430a6b40062c5a01589e38 (patch)
tree5b3c95a412f738a34976db2dba12a75cf5e81f71 /src/drivers
parentd757344f1b6921d84a9b3d6d42b5e0f5a472813a (diff)
Fix race conditions during sleep/wakeup, where SPI/TWI could be disabled while transaction were in progress (https://github.com/JF002/Pinetime/issues/60).
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/TwiMaster.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp
index 14d12f9..a9eb5d0 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");
}