Power optimization - Improve SPI sleep mode

ST7789 driver : replace the constant '26' with a named constant to specify the pin number of the reset pin of the LCD controller.
This commit is contained in:
Jean-François Milants 2023-05-18 15:19:44 +02:00 committed by JF
parent 62848b33fb
commit 9bd90c906e
4 changed files with 10 additions and 8 deletions

View file

@ -34,6 +34,7 @@ namespace Pinetime {
static constexpr uint8_t SpiFlashCsn = 5; static constexpr uint8_t SpiFlashCsn = 5;
static constexpr uint8_t SpiLcdCsn = 25; static constexpr uint8_t SpiLcdCsn = 25;
static constexpr uint8_t LcdDataCommand = 18; static constexpr uint8_t LcdDataCommand = 18;
static constexpr uint8_t LcdReset = 26;
static constexpr uint8_t TwiScl = 7; static constexpr uint8_t TwiScl = 7;
static constexpr uint8_t TwiSda = 6; static constexpr uint8_t TwiSda = 6;

View file

@ -6,13 +6,13 @@
using namespace Pinetime::Drivers; using namespace Pinetime::Drivers;
St7789::St7789(Spi& spi, uint8_t pinDataCommand) : spi {spi}, pinDataCommand {pinDataCommand} { St7789::St7789(Spi& spi, uint8_t pinDataCommand, uint8_t pinReset) : spi {spi}, pinDataCommand {pinDataCommand}, pinReset{pinReset} {
} }
void St7789::Init() { void St7789::Init() {
nrf_gpio_cfg_output(pinDataCommand); nrf_gpio_cfg_output(pinDataCommand);
nrf_gpio_cfg_output(26); nrf_gpio_cfg_output(pinReset);
nrf_gpio_pin_set(26); nrf_gpio_pin_set(pinReset);
HardwareReset(); HardwareReset();
SoftwareReset(); SoftwareReset();
SleepOut(); SleepOut();
@ -178,15 +178,15 @@ void St7789::DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height,
} }
void St7789::HardwareReset() { void St7789::HardwareReset() {
nrf_gpio_pin_clear(26); nrf_gpio_pin_clear(pinReset);
nrf_delay_ms(10); nrf_delay_ms(10);
nrf_gpio_pin_set(26); nrf_gpio_pin_set(pinReset);
} }
void St7789::Sleep() { void St7789::Sleep() {
SleepIn(); SleepIn();
nrf_gpio_cfg_default(pinDataCommand); nrf_gpio_cfg_default(pinDataCommand);
nrf_gpio_cfg_default(26); nrf_gpio_cfg_default(pinReset);
NRF_LOG_INFO("[LCD] Sleep"); NRF_LOG_INFO("[LCD] Sleep");
} }

View file

@ -8,7 +8,7 @@ namespace Pinetime {
class St7789 { class St7789 {
public: public:
explicit St7789(Spi& spi, uint8_t pinDataCommand); explicit St7789(Spi& spi, uint8_t pinDataCommand, uint8_t pinReset);
St7789(const St7789&) = delete; St7789(const St7789&) = delete;
St7789& operator=(const St7789&) = delete; St7789& operator=(const St7789&) = delete;
St7789(St7789&&) = delete; St7789(St7789&&) = delete;
@ -29,6 +29,7 @@ namespace Pinetime {
private: private:
Spi& spi; Spi& spi;
uint8_t pinDataCommand; uint8_t pinDataCommand;
uint8_t pinReset;
uint8_t verticalScrollingStartAddress = 0; uint8_t verticalScrollingStartAddress = 0;
void HardwareReset(); void HardwareReset();

View file

@ -68,7 +68,7 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0,
Pinetime::PinMap::SpiMiso}}; Pinetime::PinMap::SpiMiso}};
Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn};
Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand, Pinetime::PinMap::LcdReset};
Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn};
Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi};