diff options
| author | JF <jf@codingfield.com> | 2020-09-13 19:26:44 (GMT) |
|---|---|---|
| committer | JF <jf@codingfield.com> | 2020-09-13 19:26:44 (GMT) |
| commit | 20f5b0ffba60b24931430a6b40062c5a01589e38 (patch) | |
| tree | 5b3c95a412f738a34976db2dba12a75cf5e81f71 /src/drivers/TwiMaster.cpp | |
| parent | d757344f1b6921d84a9b3d6d42b5e0f5a472813a (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/TwiMaster.cpp')
| -rw-r--r-- | src/drivers/TwiMaster.cpp | 4 |
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"); } |
