diff options
author | JF <jf@codingfield.com> | 2020-01-17 22:16:45 +0100 |
---|---|---|
committer | JF <jf@codingfield.com> | 2020-01-17 22:16:45 +0100 |
commit | c1f3a31b513e90b29f31f23ba24e5856837ea6d4 (patch) | |
tree | 8c3ef1be5a0bd4fa904311e8f1fc24de22646d62 /src/drivers/SpiMaster.cpp | |
parent | 69a14a224780a3abe13bc4fcacd2d71db54716ac (diff) |
Disable SPI, I²C, touch controller and display controller in sleep mode.
Re-enable them on wake up.
Remove delays that were not needed in st7889 driver.
Hopefully, it'll improve the battery life!
Diffstat (limited to 'src/drivers/SpiMaster.cpp')
-rw-r--r-- | src/drivers/SpiMaster.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index 076c764d..5e49f2a7 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -4,6 +4,9 @@ using namespace Pinetime::Drivers; bool SpiMaster::Init(const SpiMaster::SpiModule spi, const SpiMaster::Parameters ¶ms) { + configSpiModule = spi; + configParams = params; + /* Configure GPIO pins used for pselsck, pselmosi, pselmiso and pselss for SPI0 */ nrf_gpio_cfg_output(params.pinSCK); nrf_gpio_cfg_output(params.pinMOSI); @@ -86,3 +89,17 @@ bool SpiMaster::Write(const uint8_t *data, size_t size) { return true; } + +void SpiMaster::Sleep() { + while(NRF_SPI0->ENABLE != 0) { + NRF_SPI0->ENABLE = (SPIM_ENABLE_ENABLE_Disabled << SPIM_ENABLE_ENABLE_Pos); + } + nrf_gpio_cfg_default(configParams.pinSCK); + nrf_gpio_cfg_default(configParams.pinMOSI); + nrf_gpio_cfg_default(configParams.pinMISO); + nrf_gpio_cfg_default(configParams.pinCSN); +} + +void SpiMaster::Wakeup() { + Init(configSpiModule, configParams); +} |