diff --git a/src/shared/sensors/LIS2MDL/LIS2MDL.cpp b/src/shared/sensors/LIS2MDL/LIS2MDL.cpp index ae2bb907a9087b2476481dbf54b4b5971f66ab19..9d8ab34794b58844f20bc56470b017d1b7ec98ef 100644 --- a/src/shared/sensors/LIS2MDL/LIS2MDL.cpp +++ b/src/shared/sensors/LIS2MDL/LIS2MDL.cpp @@ -35,6 +35,15 @@ LIS2MDL::LIS2MDL(SPIBusInterface& bus, miosix::GpioPin pin, { } +SPIBusConfig LIS2MDL::getDefaultSPIConfig() +{ + SPIBusConfig spiConfig; + spiConfig.clockDivider = SPI::ClockDivider::DIV_256; + spiConfig.mode = SPI::Mode::MODE_3; + spiConfig.byteOrder = SPI::Order::LSB_FIRST; + return spiConfig; +} + bool LIS2MDL::init() { if (isInitialized) @@ -187,10 +196,7 @@ LIS2MDLData LIS2MDL::sampleImpl() if (configuration.temperatureDivider != 0 && tempCounter % configuration.temperatureDivider == 0) { - uint8_t values[2]; - spi.readRegisters(TEMP_OUT_L_REG, values, sizeof(values)); - - int16_t outTemp = values[1] << 8 | values[0]; + int16_t outTemp = spi.readRegister16(TEMP_OUT_L_REG); newData.temperatureTimestamp = TimestampTimer::getTimestamp(); newData.temperature = DEG_PER_LSB * outTemp; newData.temperature += REFERENCE_TEMPERATURE; diff --git a/src/shared/sensors/LIS2MDL/LIS2MDL.h b/src/shared/sensors/LIS2MDL/LIS2MDL.h index 7e82c8fd4b16b35f1a8743a72caeb02ab00b9b05..3fdaf088700edde9513c1da38354c8a42cf0f4a1 100644 --- a/src/shared/sensors/LIS2MDL/LIS2MDL.h +++ b/src/shared/sensors/LIS2MDL/LIS2MDL.h @@ -79,6 +79,8 @@ public: LIS2MDL(SPIBusInterface& bus, miosix::GpioPin pin, SPIBusConfig spiConfig = {}, Config config = {}); + static SPIBusConfig getDefaultSPIConfig(); + bool init() override; bool selfTest() override; diff --git a/src/tests/sensors/test-lis2mdl.cpp b/src/tests/sensors/test-lis2mdl.cpp index bcab4bc630b9bd214ab011a830344cf23c4df33b..a0060c76e9b1f44d551ad27c3088b48d8f8ab6d5 100644 --- a/src/tests/sensors/test-lis2mdl.cpp +++ b/src/tests/sensors/test-lis2mdl.cpp @@ -48,9 +48,7 @@ int main() SPIBus bus(SPI1); - SPIBusConfig busConfig; - busConfig.clockDivider = SPI::ClockDivider::DIV_256; - busConfig.mode = SPI::Mode::MODE_3; + SPIBusConfig busConfig = LIS2MDL::getDefaultSPIConfig(); LIS2MDL::Config config; config.odr = LIS2MDL::ODR_10_HZ;