diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 909adb3807..86c31edee9 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -44,7 +44,7 @@ //#define MAX31865_DEBUG //#define MAX31865_DEBUG_SPI -//TODO: switch to SPIclass/SoftSPI +#include #include "../inc/MarlinConfig.h" @@ -62,7 +62,7 @@ SPISettings MAX31865::spiConfig = SPISettings( 500000 #endif , MSBFIRST - , SPI_MODE_1 // CPOL0 CPHA1 + , SPI_MODE1 // CPOL0 CPHA1 ); #ifndef LARGE_PINMAP @@ -157,10 +157,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { #ifdef MAX31865_DEBUG SERIAL_ECHOLN("Initializing MAX31865 Software SPI"); #endif - - OUT_WRITE(_sclk, LOW); - SET_OUTPUT(_mosi); - SET_INPUT(_miso); + + swSpiBegin(_sclk, _miso, _mosi); + } else { // start and configure hardware SPI #ifdef MAX31865_DEBUG @@ -170,6 +169,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { SPI.begin(); } + // SPI Begin must be called first, then init + _spi_speed = swSpiInit(SPI_QUARTER_SPEED, _sclk, _mosi); + setWires(wires); enableBias(false); autoConvert(false); @@ -484,17 +486,7 @@ uint8_t MAX31865::spixfer(uint8_t x) { if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) return SPI.transfer(x); - uint8_t reply = 0; - for (int i = 7; i >= 0; i--) { - reply <<= 1; - WRITE(_sclk, HIGH); - WRITE(_mosi, x & (1 << i)); - WRITE(_sclk, LOW); - if (READ(_miso)) - reply |= 1; - } - - return reply; + return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi); } #endif // HAS_MAX31865 && !LIB_USR_MAX31865 diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 5d50e870ec..13a117447d 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -90,6 +90,7 @@ private: static SPISettings spiConfig; TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs; + uint8_t _spi_speed; float Rzero, Rref; void setConfig(uint8_t config, bool enable);