aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--os/ex/ST/lis3dsh.c21
-rw-r--r--os/ex/ST/lis3dsh.h9
-rw-r--r--testhal/STM32/STM32F4xx/SPI-L3GD20/main.c3
-rw-r--r--testhal/STM32/STM32F4xx/SPI-LIS302DL/main.c2
-rw-r--r--testhal/STM32/STM32F4xx/SPI-LIS3DSH/debug/STM32F4xx-SPI-LIS3DSH (OpenOCD, Flash and Run).launch2
-rw-r--r--testhal/STM32/STM32F4xx/SPI-LIS3DSH/main.c6
6 files changed, 35 insertions, 8 deletions
diff --git a/os/ex/ST/lis3dsh.c b/os/ex/ST/lis3dsh.c
index 880cf391e..517b325e5 100644
--- a/os/ex/ST/lis3dsh.c
+++ b/os/ex/ST/lis3dsh.c
@@ -466,6 +466,24 @@ static msg_t reset_sensivity(void *ip) {
return MSG_OK;
}
+static msg_t get_temperature(void *ip, int8_t* tempp) {
+#if LIS3DSH_USE_SPI
+ osalDbgAssert((((LIS3DSHDriver *)ip)->config->spip->state == SPI_READY),
+ "read_raw(), channel not ready");
+#if LIS3DSH_SHARED_SPI
+ spiAcquireBus(((LIS3DSHDriver *)ip)->config->spip);
+ spiStart(((LIS3DSHDriver *)ip)->config->spip,
+ ((LIS3DSHDriver *)ip)->config->spicfg);
+#endif /* LIS3DSH_SHARED_SPI */
+ *tempp = lis3dshSPIReadRegister(((LIS3DSHDriver *)ip)->config->spip,
+ LIS3DSH_AD_OUT_T);
+#if LIS3DSH_SHARED_SPI
+ spiReleaseBus(((LIS3DSHDriver *)ip)->config->spip);
+#endif /* LIS3DSH_SHARED_SPI */
+#endif /* LIS3DSH_USE_SPI */
+ return MSG_OK;
+}
+
static const struct BaseSensorVMT vmt_basesensor = {
get_axes_number, read_raw, read_cooked
};
@@ -477,7 +495,8 @@ static const struct BaseAccelerometerVMT vmt_baseaccelerometer = {
static const struct LIS3DSHVMT vmt_lis3dsh = {
get_axes_number, read_raw, read_cooked,
- set_bias, reset_bias, set_sensivity, reset_sensivity
+ set_bias, reset_bias, set_sensivity, reset_sensivity,
+ get_temperature
};
/*===========================================================================*/
diff --git a/os/ex/ST/lis3dsh.h b/os/ex/ST/lis3dsh.h
index 7d1002f87..1f0ebcd17 100644
--- a/os/ex/ST/lis3dsh.h
+++ b/os/ex/ST/lis3dsh.h
@@ -241,7 +241,9 @@ typedef struct LIS3DSHDriver LIS3DSHDriver;
* @brief @p LIS3DSH specific methods.
*/
#define _lis3dsh_methods \
- _base_accelerometer_methods
+ _base_accelerometer_methods \
+ /* Retrieve the temperature of L3GD20 chip.*/ \
+ msg_t (*get_temperature)(void *instance, int8_t* temperature);
/**
* @extends BaseAccelerometerVMT
@@ -291,16 +293,17 @@ struct LIS3DSHDriver {
/**
* @brief Get current MEMS temperature.
* @detail This information is very useful especially for high accuracy IMU
+ * @note Value is raw since there is a lack of information in datasheet.
*
* @param[in] ip pointer to a @p BaseAccelerometer class.
- * @param[out] temp the MEMS temperature as single precision floating.
+ * @param[out] temp the MEMS temperature as raw data.
*
* @return The operation status.
* @retval MSG_OK if the function succeeded.
* @retval MSG_RESET if one or more errors occurred.
* @api
*/
-#define accelerometerGetTemp(ip, tpp) \
+#define accelerometerGetTemp(ip, tpp) \
(ip)->vmt_lis3dsh->get_temperature(ip, tpp)
/*===========================================================================*/
diff --git a/testhal/STM32/STM32F4xx/SPI-L3GD20/main.c b/testhal/STM32/STM32F4xx/SPI-L3GD20/main.c
index fb4edfb21..e6e732898 100644
--- a/testhal/STM32/STM32F4xx/SPI-L3GD20/main.c
+++ b/testhal/STM32/STM32F4xx/SPI-L3GD20/main.c
@@ -113,12 +113,13 @@ int main(void) {
*/
l3gd20Start(&L3GD20D1, &l3gd20cfg);
- while(!palReadLine(LINE_BUTTON)){
+ while(!palReadLine(LINE_BUTTON)) {
chprintf(chp, "Press BTN to calibrate gyroscope...\r\n");
chThdSleepMilliseconds(150);
#if CHPRINTF_USE_ANSI_CODE
chprintf(chp, "\033[2J\033[1;1H");
#endif
+ }
palClearLine(LINE_LED3);
chprintf(chp, "Calibrating Gyroscope sampling bias...\r\n");
diff --git a/testhal/STM32/STM32F4xx/SPI-LIS302DL/main.c b/testhal/STM32/STM32F4xx/SPI-LIS302DL/main.c
index 025789275..429f7b0bb 100644
--- a/testhal/STM32/STM32F4xx/SPI-LIS302DL/main.c
+++ b/testhal/STM32/STM32F4xx/SPI-LIS302DL/main.c
@@ -120,7 +120,7 @@ int main(void) {
accelerometerReadCooked(&LIS302DLD1, cookeddata);
for(i = 0; i < LIS302DL_NUMBER_OF_AXES; i++)
- chprintf(chp, "COOKED-%c:%.3f\r\n", axesID[i], cookeddata[i]);
+ chprintf(chp, "COOKED-%c:%.3f g\r\n", axesID[i], cookeddata[i]);
chThdSleepMilliseconds(150);
#if CHPRINTF_USE_ANSI_CODE
diff --git a/testhal/STM32/STM32F4xx/SPI-LIS3DSH/debug/STM32F4xx-SPI-LIS3DSH (OpenOCD, Flash and Run).launch b/testhal/STM32/STM32F4xx/SPI-LIS3DSH/debug/STM32F4xx-SPI-LIS3DSH (OpenOCD, Flash and Run).launch
index bfde2a1c3..df0961499 100644
--- a/testhal/STM32/STM32F4xx/SPI-LIS3DSH/debug/STM32F4xx-SPI-LIS3DSH (OpenOCD, Flash and Run).launch
+++ b/testhal/STM32/STM32F4xx/SPI-LIS3DSH/debug/STM32F4xx-SPI-LIS3DSH (OpenOCD, Flash and Run).launch
@@ -33,7 +33,7 @@
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;cr2-adc_lld_start_conversion-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;CR2-adc-null-port_wait_for_interrupt-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;CR2-adc-adcp-adc_lld_start_conversion-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;null-lis3dshStart-(format)&quot; val=&quot;2&quot;/&gt;&lt;/contentList&gt;"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;null-lis3dshStart-(format)&quot; val=&quot;2&quot;/&gt;&lt;content id=&quot;CR2-adc-adcp-adc_lld_start_conversion-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;CR2-adc-null-port_wait_for_interrupt-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;cr2-adc_lld_start_conversion-(format)&quot; val=&quot;4&quot;/&gt;&lt;/contentList&gt;"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;globalVariableList/&gt;&#13;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList/&gt;&#13;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
diff --git a/testhal/STM32/STM32F4xx/SPI-LIS3DSH/main.c b/testhal/STM32/STM32F4xx/SPI-LIS3DSH/main.c
index 011a30cda..e67eda9b8 100644
--- a/testhal/STM32/STM32F4xx/SPI-LIS3DSH/main.c
+++ b/testhal/STM32/STM32F4xx/SPI-LIS3DSH/main.c
@@ -32,6 +32,7 @@ static LIS3DSHDriver LIS3DSHD1;
static int32_t rawdata[LIS3DSH_NUMBER_OF_AXES];
static float cookeddata[LIS3DSH_NUMBER_OF_AXES];
+static int8_t temperature;
static char axesID[LIS3DSH_NUMBER_OF_AXES] = {'X', 'Y', 'Z'};
static uint32_t i;
@@ -121,7 +122,10 @@ int main(void) {
accelerometerReadCooked(&LIS3DSHD1, cookeddata);
for(i = 0; i < LIS3DSH_NUMBER_OF_AXES; i++)
- chprintf(chp, "COOKED-%c:%.3f\r\n", axesID[i], cookeddata[i]);
+ chprintf(chp, "COOKED-%c:%.3f g\r\n", axesID[i], cookeddata[i]);
+
+ accelerometerGetTemp(&LIS3DSHD1, &temperature);
+ chprintf(chp, "TEMP:%d \r\n", temperature);
chThdSleepMilliseconds(150);
#if CHPRINTF_USE_ANSI_CODE