From 48c045a253e23f5a384090962b09b5b8da6bd6f2 Mon Sep 17 00:00:00 2001 From: geeksville Date: Thu, 30 Apr 2020 17:56:30 -0700 Subject: [PATCH] move SPI init into main --- src/main.cpp | 16 ++++++++++++++-- src/rf95/RF95Interface.cpp | 8 +++++--- src/rf95/RF95Interface.h | 2 +- src/rf95/SX1262Interface.cpp | 3 --- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 68c1e1a1d..7e1b39ab7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -118,8 +118,10 @@ static uint32_t ledBlinker() Periodic ledPeriodic(ledBlinker); -#ifdef NO_ESP32 +#include "RF95Interface.h" #include "SX1262Interface.h" + +#ifdef NO_ESP32 #include "variant.h" #endif @@ -199,10 +201,20 @@ void setup() digitalWrite(SX1262_ANT_SW, 1); #endif + // Init our SPI controller +#ifdef NRF52_SERIES + SPI.begin(); +#else + // ESP32 + SPI.begin(SCK_GPIO, MISO_GPIO, MOSI_GPIO, NSS_GPIO); + SPI.setFrequency(4000000); +#endif + // MUST BE AFTER service.init, so we have our radio config settings (from nodedb init) RadioInterface *rIf = #if defined(RF95_IRQ_GPIO) - new CustomRF95(); + // new CustomRF95(); old Radiohead based driver + new RF95Interface(NSS_GPIO, RF95_IRQ_GPIO, RESET_GPIO, SPI); #elif defined(SX1262_CS) new SX1262Interface(SX1262_CS, SX1262_DIO1, SX1262_RESET, SX1262_BUSY, SPI); #else diff --git a/src/rf95/RF95Interface.cpp b/src/rf95/RF95Interface.cpp index 615088448..58176e060 100644 --- a/src/rf95/RF95Interface.cpp +++ b/src/rf95/RF95Interface.cpp @@ -14,9 +14,6 @@ RF95Interface::RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOL /// \return true if initialisation succeeded. bool RF95Interface::init() { - // FIXME, move this to main - SPI.begin(); - applyModemConfig(); if (power > 20) // This chip has lower power limits than some power = 20; @@ -46,6 +43,11 @@ bool RF95Interface::init() return res == ERR_NONE; } +void INTERRUPT_ATTR RF95Interface::disableInterrupt() +{ + lora->clearDio0Action(); +} + bool RF95Interface::reconfigure() { applyModemConfig(); diff --git a/src/rf95/RF95Interface.h b/src/rf95/RF95Interface.h index 4210f9ac3..01aae56af 100644 --- a/src/rf95/RF95Interface.h +++ b/src/rf95/RF95Interface.h @@ -30,7 +30,7 @@ class RF95Interface : public RadioLibInterface /** * Glue functions called from ISR land */ - virtual void INTERRUPT_ATTR disableInterrupt() { lora->clearDio0Action(); } + virtual void disableInterrupt(); /** * Enable a particular ISR callback glue function diff --git a/src/rf95/SX1262Interface.cpp b/src/rf95/SX1262Interface.cpp index aca0ac55a..c4fa4d7bb 100644 --- a/src/rf95/SX1262Interface.cpp +++ b/src/rf95/SX1262Interface.cpp @@ -12,9 +12,6 @@ SX1262Interface::SX1262Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RA /// \return true if initialisation succeeded. bool SX1262Interface::init() { - // FIXME, move this to main - SPI.begin(); - float tcxoVoltage = 0; // None - we use an XTAL bool useRegulatorLDO = false; // Seems to depend on the connection to pin 9/DCC_SW - if an inductor DCDC?