diff options
author | Rocco Marco Guglielmi <roccomarco.guglielmi@live.com> | 2016-08-20 13:27:26 +0000 |
---|---|---|
committer | Rocco Marco Guglielmi <roccomarco.guglielmi@live.com> | 2016-08-20 13:27:26 +0000 |
commit | 74881fe821cccd5040ef1ec5f48a14d3ddf8ce98 (patch) | |
tree | 12bb9165d2759496629e445d0b8ed3240c525efc /testhal/STM32 | |
parent | 3c0557bcc4decf0eb58f277132bbb8e0e6a389f6 (diff) | |
download | ChibiOS-74881fe821cccd5040ef1ec5f48a14d3ddf8ce98.tar.gz ChibiOS-74881fe821cccd5040ef1ec5f48a14d3ddf8ce98.tar.bz2 ChibiOS-74881fe821cccd5040ef1ec5f48a14d3ddf8ce98.zip |
Updated EX: LIS3MDL driver updated to v1.0.0
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9736 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/STM32')
3 files changed, 158 insertions, 47 deletions
diff --git a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/Makefile b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/Makefile index 526ff2310..9365e8a52 100644 --- a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/Makefile +++ b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/Makefile @@ -100,6 +100,7 @@ include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk # Other files (optional).
include $(CHIBIOS)/os/ex/ST/lis3mdl.mk
include $(CHIBIOS)/os/hal/lib/streams/streams.mk
+include $(CHIBIOS)/os/various/shell/shell.mk
# Define linker script file here
LDSCRIPT= $(STARTUPLD)/STM32L476xG.ld
@@ -115,6 +116,7 @@ CSRC = $(STARTUPSRC) \ $(BOARDSRC) \
$(LIS3MDLSRC) \
$(STREAMSSRC) \
+ $(SHELLSRC) \
main.c
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
@@ -148,7 +150,7 @@ ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM) INCDIR = $(CHIBIOS)/os/license \
$(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
$(HALINC) $(PLATFORMINC) $(BOARDINC) $(LIS3MDLINC) \
- $(STREAMSINC) $(CHIBIOS)/os/various
+ $(STREAMSINC) $(SHELLINC)
#
# Project, sources and paths
@@ -198,7 +200,8 @@ CPPWARN = -Wall -Wextra -Wundef #
# List all user C define here, like -D_DEBUG=1
-UDEFS = -DCHPRINTF_USE_FLOAT=1
+UDEFS = -DCHPRINTF_USE_FLOAT=1 -DSHELL_CMD_TEST_ENABLED=0 \
+ -DLIS3MDL_USE_ADVANCED=0
# Define ASM defines here
UADEFS =
diff --git a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/debug/STM32L4xx-I2C-LIS3MDL (OpenOCD, Flash and Run).launch b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/debug/STM32L4xx-I2C-LIS3MDL (OpenOCD, Flash and Run).launch index a943e81e9..32e90c197 100644 --- a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/debug/STM32L4xx-I2C-LIS3MDL (OpenOCD, Flash and Run).launch +++ b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/debug/STM32L4xx-I2C-LIS3MDL (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="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="null-lis3mdlI2CReadRegister-(format)" val="4"/><content id="null-read_raw-(format)" val="1"/><content id="null-main-(format)" val="2"/><content id="null-lsm6ds0I2CReadRegister-(format)" val="0"/><content id="null-sens_get_temperature-(format)" val="2"/></contentList>"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="null-sens_get_temperature-(format)" val="2"/><content id="null-lsm6ds0I2CReadRegister-(format)" val="0"/><content id="null-main-(format)" val="2"/><content id="null-read_raw-(format)" val="1"/><content id="null-lis3mdlI2CReadRegister-(format)" val="4"/><content id="null-lis3mdlI2CWriteRegister-(format)" val="0"/><content id="*txbuf-null-lis3mdlI2CWriteRegister-(format)" val="2"/></contentList>"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
diff --git a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/main.c b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/main.c index f2cabe576..4b21c6e36 100644 --- a/testhal/STM32/STM32L4xx/I2C-LIS3MLD/main.c +++ b/testhal/STM32/STM32L4xx/I2C-LIS3MLD/main.c @@ -13,50 +13,160 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-
#include "ch.h"
#include "hal.h"
+#include "string.h"
+#include "shell.h"
#include "chprintf.h"
-#include "lis3mdl.h"
-/* Enable use of special ANSI escape sequences */
-#define CHPRINTF_USE_ANSI_CODE TRUE
+#include "lis3mdl.h"
-static BaseSequentialStream * chp = (BaseSequentialStream*) &SD2;
+/*===========================================================================*/
+/* LIS3MDL related. */
+/*===========================================================================*/
-/* LIS3MDL Driver: This object represent an LIS3MDL instance */
+/* LIS3MDL Driver: This object represent an LIS3MDL instance.*/
static LIS3MDLDriver LIS3MDLD1;
static int32_t rawdata[LIS3MDL_NUMBER_OF_AXES];
static float cookeddata[LIS3MDL_NUMBER_OF_AXES];
-static char axesID[LIS3MDL_NUMBER_OF_AXES] = {'X', 'Y', 'Z'};
+static char axisID[LIS3MDL_NUMBER_OF_AXES] = {'X', 'Y', 'Z'};
static uint32_t i;
static const I2CConfig i2ccfg = {
- STM32_TIMINGR_PRESC(15U) |
- STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) |
- STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(21U),
- 0,
- 0
+ STM32_TIMINGR_PRESC(15U) |
+ STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) |
+ STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(21U),
+ 0,
+ 0
+};
+
+static LIS3MDLConfig LIS3MDLcfg = {
+ &I2CD1, /* Pointer to I2C Driver.*/
+ &i2ccfg, /* Pointer to I2C Configuration.*/
+ {0, 0, 0}, /* Use default sensitivity.*/
+ {0, 0, 0}, /* Use default bias.*/
+ LIS3MDL_SAD_VCC, /* Slave address.*/
+ LIS3MDL_FS_4GA, /* Full scale value.*/
+ LIS3MDL_ODR_40HZ, /* Output data rate.*/
+#if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
+ LIS3MDL_LP_T,
+ LIS3MDL_MD_T,
+ LIS3MDL_OMXY_T,
+ LIS3MDL_OMZ_T,
+ LIS3MDL_BDU_T,
+ LIS3MDL_END_T
+#endif
+};
+
+/*===========================================================================*/
+/* Command line related. */
+/*===========================================================================*/
+
+/* Enable use of special ANSI escape sequences.*/
+#define CHPRINTF_USE_ANSI_CODE TRUE
+#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048)
+
+static void cmd_read(BaseSequentialStream *chp, int argc, char *argv[]) {
+ (void)argv;
+ if (argc != 1) {
+ chprintf(chp, "Usage: read [raw|cooked]\r\n");
+ return;
+ }
+
+ while (chnGetTimeout((BaseChannel *)chp, 150) == Q_TIMEOUT) {
+ if (!strcmp (argv[0], "raw")) {
+#if CHPRINTF_USE_ANSI_CODE
+ chprintf(chp, "\033[2J\033[1;1H");
+#endif
+ compassReadRaw(&LIS3MDLD1, rawdata);
+ chprintf(chp, "LIS3MDL compass raw data...\r\n");
+ for(i = 0; i < LIS3MDL_NUMBER_OF_AXES; i++) {
+ chprintf(chp, "%c-axis: %d\r\n", axisID[i], rawdata[i]);
+ }
+ }
+ else if (!strcmp (argv[0], "cooked")) {
+#if CHPRINTF_USE_ANSI_CODE
+ chprintf(chp, "\033[2J\033[1;1H");
+#endif
+ compassReadCooked(&LIS3MDLD1, cookeddata);
+ chprintf(chp, "LIS3MDL compass cooked data...\r\n");
+ for(i = 0; i < LIS3MDL_NUMBER_OF_AXES; i++) {
+ chprintf(chp, "%c-axis: %.3f Gauss\r\n", axisID[i], cookeddata[i]);
+ }
+ }
+ else {
+ chprintf(chp, "Usage: read [raw|cooked]\r\n");
+ return;
+ }
+ }
+ chprintf(chp, "Stopped\r\n");
+}
+
+static void cmd_fullscale(BaseSequentialStream *chp, int argc, char *argv[]) {
+ (void)argv;
+ if (argc != 1) {
+ chprintf(chp, "Usage: fullscale [4|8|12|16]\r\n");
+ return;
+ }
+#if CHPRINTF_USE_ANSI_CODE
+ chprintf(chp, "\033[2J\033[1;1H");
+#endif
+ if(!strcmp (argv[0], "4")) {
+ compassSetFullScale(&LIS3MDLD1, LIS3MDL_FS_4GA);
+ chprintf(chp, "LIS3MDL compass full scale set to 4 Gauss...\r\n");
+ }
+ else if(!strcmp (argv[0], "8")) {
+ compassSetFullScale(&LIS3MDLD1, LIS3MDL_FS_8GA);
+ chprintf(chp, "LIS3MDL compass full scale set to 8 Gauss...\r\n");
+ }
+ else if(!strcmp (argv[0], "12")) {
+ compassSetFullScale(&LIS3MDLD1, LIS3MDL_FS_12GA);
+ chprintf(chp, "LIS3MDL compass full scale set to 12 Gauss...\r\n");
+ }
+ else if(!strcmp (argv[0], "16")) {
+ compassSetFullScale(&LIS3MDLD1, LIS3MDL_FS_16GA);
+ chprintf(chp, "LIS3MDL compass full scale set to 16 Gauss...\r\n");
+ }
+ else {
+ chprintf(chp, "Usage: fullscale [4|8|12|16]\r\n");
+ return;
+ }
+}
+
+static const ShellCommand commands[] = {
+ {"read", cmd_read},
+ {"fullscale", cmd_fullscale},
+ {NULL, NULL}
};
-static const LIS3MDLConfig lis3mdlcfg = {
- &I2CD1,
- &i2ccfg,
- LIS3MDL_SAD_VCC,
- LIS3MDL_FS_4GA,
- LIS3MDL_ODR_40HZ,
- LIS3MDL_LP_DISABLED,
- LIS3MDL_MD_CONTINUOUS,
- LIS3MDL_OMXY_ULTRA,
- LIS3MDL_OMZ_ULTRA,
- LIS3MDL_TEMP_ENABLED,
- LIS3MDL_BDU_BLOCKED,
- LIS3MDL_END_LITTLE
+static const ShellConfig shell_cfg1 = {
+ (BaseSequentialStream *)&SD2,
+ commands
};
+/*===========================================================================*/
+/* Main code. */
+/*===========================================================================*/
+
+/*
+ * LED blinker thread, times are in milliseconds.
+ */
+static THD_WORKING_AREA(waThread1, 128);
+static THD_FUNCTION(Thread1, arg) {
+
+ (void)arg;
+ chRegSetThreadName("blinker");
+ while (true) {
+ palClearLine(LINE_LED_GREEN);
+ chThdSleepMilliseconds(250);
+ palSetLine(LINE_LED_GREEN);
+ chThdSleepMilliseconds(250);
+ }
+}
+
/*
* Application entry point.
*/
@@ -80,27 +190,25 @@ int main(void) { */
sdStart(&SD2, NULL);
- /*
- * LIS3MDL Object Initialization
- */
+
+ /* Creates the blinker thread.*/
+ chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);
+
+ /* LIS3MDL Object Initialization.*/
lis3mdlObjectInit(&LIS3MDLD1);
- lis3mdlStart(&LIS3MDLD1, &lis3mdlcfg);
+ /* Activates the LIS3MDL driver.*/
+ lis3mdlStart(&LIS3MDLD1, &LIS3MDLcfg);
- while (TRUE) {
- palToggleLine(LINE_LED_GREEN);
- compassReadRaw(&LIS3MDLD1, rawdata);
- compassReadCooked(&LIS3MDLD1, cookeddata);
-#if CHPRINTF_USE_ANSI_CODE
- chprintf(chp, "\033[2J\033[1;1H");
-#endif
- chprintf(chp, "COMPASS DATA\r\n");
- for(i = 0; i < LIS3MDL_NUMBER_OF_AXES; i++)
- chprintf(chp, "RAW-%c:%d\t\t", axesID[i], rawdata[i]);
- chprintf(chp, "\r\n");
- for(i = 0; i < LIS3MDL_NUMBER_OF_AXES; i++)
- chprintf(chp, "COOKED-%c:%.3f Gauss\t", axesID[i], cookeddata[i]);
- chprintf(chp, "\r\n");
- chThdSleepMilliseconds(100);
+ /* Shell manager initialization.*/
+ shellInit();
+
+ while(TRUE) {
+ thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE,
+ "shell", NORMALPRIO + 1,
+ shellThread, (void *)&shell_cfg1);
+ chThdWait(shelltp); /* Waiting termination. */
}
+ lis3mdlStop(&LIS3MDLD1);
+ return 0;
}
|