From aa2640cf6504afe6f32d278b90ee1eb0a7badf2a Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <alberto.nidasio@skywarder.eu> Date: Sat, 24 Jun 2023 19:44:49 +0200 Subject: [PATCH] [LIS3MDL] Implemented SPI readRegister16 function instead of directly using the shift --- src/shared/sensors/LIS3MDL/LIS3MDL.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp index 23ba605df..d19af0f6f 100644 --- a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp +++ b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp @@ -31,6 +31,7 @@ LIS3MDL::LIS3MDL(SPIBusInterface& bus, miosix::GpioPin pin, SPIBusConfig spiConfig, Config config) : slave(bus, pin, spiConfig), configuration(config) { + spiConfig.byteOrder = SPI::Order::LSB_FIRST; } bool LIS3MDL::init() @@ -213,38 +214,23 @@ LIS3MDLData LIS3MDL::sampleImpl() SPITransaction spi(slave); LIS3MDLData newData; - int16_t val; tempCounter++; if (configuration.temperatureDivider != 0 && tempCounter % configuration.temperatureDivider == 0) { - val = spi.readRegister(TEMP_OUT_H); - val = (val << 8); - val |= spi.readRegister(TEMP_OUT_L); newData.temperatureTimestamp = TimestampTimer::getTimestamp(); - newData.temperature = - static_cast<float>(val) * DEG_PER_LSB + REFERENCE_TEMPERATURE; + newData.temperature = spi.readRegister16(TEMP_OUT_L) * DEG_PER_LSB + + REFERENCE_TEMPERATURE; } else { newData.temperature = lastSample.temperature; } - val = spi.readRegister(OUT_X_H); - val = (val << 8); - val |= spi.readRegister(OUT_X_L); - newData.magneticFieldX = currentUnit * val; - - val = spi.readRegister(OUT_Y_H); - val = (val << 8); - val |= spi.readRegister(OUT_Y_L); - newData.magneticFieldY = currentUnit * val; - - val = spi.readRegister(OUT_Z_H); - val = (val << 8); - val |= spi.readRegister(OUT_Z_L); - newData.magneticFieldZ = currentUnit * val; + newData.magneticFieldX = spi.readRegister16(OUT_X_L) * currentUnit; + newData.magneticFieldY = spi.readRegister16(OUT_Y_L) * currentUnit; + newData.magneticFieldZ = spi.readRegister16(OUT_Z_L) * currentUnit; return newData; } -- GitLab