Add SPI_Transactions

This commit is contained in:
Felix Rusu 2018-12-13 19:39:20 -05:00
parent e543fb1fb5
commit 6b9d0c91b9
2 changed files with 16 additions and 0 deletions

View File

@ -108,6 +108,11 @@ bool RFM69::initialize(uint8_t freqBand, uint8_t nodeID, uint8_t networkID)
digitalWrite(_slaveSelectPin, HIGH); digitalWrite(_slaveSelectPin, HIGH);
pinMode(_slaveSelectPin, OUTPUT); pinMode(_slaveSelectPin, OUTPUT);
SPI.begin(); SPI.begin();
#ifdef SPI_HAS_TRANSACTION
_settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
#endif
unsigned long start = millis(); unsigned long start = millis();
uint8_t timeout = 50; uint8_t timeout = 50;
do writeReg(REG_SYNCVALUE1, 0xAA); while (readReg(REG_SYNCVALUE1) != 0xaa && millis()-start < timeout); do writeReg(REG_SYNCVALUE1, 0xAA); while (readReg(REG_SYNCVALUE1) != 0xaa && millis()-start < timeout);
@ -477,6 +482,11 @@ void RFM69::select() {
_SPCR = SPCR; _SPCR = SPCR;
_SPSR = SPSR; _SPSR = SPSR;
#endif #endif
#ifdef SPI_HAS_TRANSACTION
SPI.beginTransaction(_settings);
#endif
// set RFM69 SPI settings // set RFM69 SPI settings
SPI.setDataMode(SPI_MODE0); SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST); SPI.setBitOrder(MSBFIRST);
@ -491,6 +501,9 @@ void RFM69::select() {
// unselect the RFM69 transceiver (set CS high, restore SPI settings) // unselect the RFM69 transceiver (set CS high, restore SPI settings)
void RFM69::unselect() { void RFM69::unselect() {
digitalWrite(_slaveSelectPin, HIGH); digitalWrite(_slaveSelectPin, HIGH);
#ifdef SPI_HAS_TRANSACTION
SPI.endTransaction();
#endif
// restore SPI settings to what they were before talking to RFM69 // restore SPI settings to what they were before talking to RFM69
#if defined (SPCR) && defined (SPSR) #if defined (SPCR) && defined (SPSR)
SPCR = _SPCR; SPCR = _SPCR;

View File

@ -224,6 +224,9 @@ class RFM69 {
uint8_t _SPCR; uint8_t _SPCR;
uint8_t _SPSR; uint8_t _SPSR;
#endif #endif
#ifdef SPI_HAS_TRANSACTION
SPISettings _settings;
#endif
virtual void receiveBegin(); virtual void receiveBegin();
virtual void setMode(uint8_t mode); virtual void setMode(uint8_t mode);