aboutsummaryrefslogtreecommitdiffstats
path: root/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c')
-rw-r--r--demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c258
1 files changed, 0 insertions, 258 deletions
diff --git a/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c b/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
deleted file mode 100644
index def958c8b..000000000
--- a/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#include "ch.h"
-#include "hal.h"
-#include "ch_test.h"
-
-#include "chprintf.h"
-#include "shell.h"
-#include "lis302dl.h"
-
-#include "usbcfg.h"
-
-/*===========================================================================*/
-/* Command line related. */
-/*===========================================================================*/
-
-#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048)
-
-static const ShellCommand commands[] = {
- {NULL, NULL}
-};
-
-static const ShellConfig shell_cfg1 = {
- (BaseSequentialStream *)&SDU1,
- commands
-};
-
-/*===========================================================================*/
-/* Accelerometer related. */
-/*===========================================================================*/
-
-/*
- * PWM configuration structure.
- * Cyclic callback enabled, channels 1 and 4 enabled without callbacks,
- * the active state is a logic one.
- */
-static const PWMConfig pwmcfg = {
- 100000, /* 100kHz PWM clock frequency. */
- 128, /* PWM period is 128 cycles. */
- NULL,
- {
- {PWM_OUTPUT_ACTIVE_HIGH, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}
- },
- /* HW dependent part.*/
- 0,
- 0
-};
-
-/*
- * SPI1 configuration structure.
- * Speed 5.25MHz, CPHA=1, CPOL=1, 8bits frames, MSb transmitted first.
- * The slave select line is the pin GPIOE_CS_SPI on the port GPIOE.
- */
-static const SPIConfig spi1cfg = {
- NULL,
- /* HW dependent part.*/
- GPIOE,
- GPIOE_CS_SPI,
- SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA
-};
-
-/*
- * SPI2 configuration structure.
- * Speed 21MHz, CPHA=0, CPOL=0, 8bits frames, MSb transmitted first.
- * The slave select line is the pin 12 on the port GPIOA.
- */
-static const SPIConfig spi2cfg = {
- NULL,
- /* HW dependent part.*/
- GPIOB,
- 12,
- 0
-};
-
-/*
- * This is a periodic thread that reads accelerometer and outputs
- * result to SPI2 and PWM.
- */
-static THD_WORKING_AREA(waThread1, 128);
-static THD_FUNCTION(Thread1, arg) {
- static int8_t xbuf[4], ybuf[4]; /* Last accelerometer data.*/
- systime_t time; /* Next deadline.*/
-
- (void)arg;
- chRegSetThreadName("reader");
-
- /* LIS302DL initialization.*/
- lis302dlWriteRegister(&SPID1, LIS302DL_CTRL_REG1, 0x43);
- lis302dlWriteRegister(&SPID1, LIS302DL_CTRL_REG2, 0x00);
- lis302dlWriteRegister(&SPID1, LIS302DL_CTRL_REG3, 0x00);
-
- /* Reader thread loop.*/
- time = chVTGetSystemTime();
- while (true) {
- int32_t x, y;
- unsigned i;
-
- /* Keeping an history of the latest four accelerometer readings.*/
- for (i = 3; i > 0; i--) {
- xbuf[i] = xbuf[i - 1];
- ybuf[i] = ybuf[i - 1];
- }
-
- /* Reading MEMS accelerometer X and Y registers.*/
- xbuf[0] = (int8_t)lis302dlReadRegister(&SPID1, LIS302DL_OUTX);
- ybuf[0] = (int8_t)lis302dlReadRegister(&SPID1, LIS302DL_OUTY);
-
- /* Transmitting accelerometer the data over SPI2.*/
- spiSelect(&SPID2);
- spiSend(&SPID2, 4, xbuf);
- spiSend(&SPID2, 4, ybuf);
- spiUnselect(&SPID2);
-
- /* Calculating average of the latest four accelerometer readings.*/
- x = ((int32_t)xbuf[0] + (int32_t)xbuf[1] +
- (int32_t)xbuf[2] + (int32_t)xbuf[3]) / 4;
- y = ((int32_t)ybuf[0] + (int32_t)ybuf[1] +
- (int32_t)ybuf[2] + (int32_t)ybuf[3]) / 4;
-
- /* Reprogramming the four PWM channels using the accelerometer data.*/
- if (y < 0) {
- pwmEnableChannel(&PWMD4, 0, (pwmcnt_t)-y);
- pwmEnableChannel(&PWMD4, 2, (pwmcnt_t)0);
- }
- else {
- pwmEnableChannel(&PWMD4, 2, (pwmcnt_t)y);
- pwmEnableChannel(&PWMD4, 0, (pwmcnt_t)0);
- }
- if (x < 0) {
- pwmEnableChannel(&PWMD4, 1, (pwmcnt_t)-x);
- pwmEnableChannel(&PWMD4, 3, (pwmcnt_t)0);
- }
- else {
- pwmEnableChannel(&PWMD4, 3, (pwmcnt_t)x);
- pwmEnableChannel(&PWMD4, 1, (pwmcnt_t)0);
- }
-
- /* Waiting until the next 250 milliseconds time interval.*/
- chThdSleepUntil(time += MS2ST(100));
- }
-}
-
-/*===========================================================================*/
-/* Initialization and main thread. */
-/*===========================================================================*/
-
-/*
- * Application entry point.
- */
-int main(void) {
-
- /*
- * System initializations.
- * - HAL initialization, this also initializes the configured device drivers
- * and performs the board-specific initializations.
- * - Kernel initialization, the main() function becomes a thread and the
- * RTOS is active.
- */
- halInit();
- chSysInit();
-
- /*
- * Shell manager initialization.
- */
- shellInit();
-
- /*
- * Initializes a serial-over-USB CDC driver.
- */
- sduObjectInit(&SDU1);
- sduStart(&SDU1, &serusbcfg);
-
- /*
- * Activates the USB driver and then the USB bus pull-up on D+.
- * Note, a delay is inserted in order to not have to disconnect the cable
- * after a reset.
- */
- usbDisconnectBus(serusbcfg.usbp);
- chThdSleepMilliseconds(1000);
- usbStart(serusbcfg.usbp, &usbcfg);
- usbConnectBus(serusbcfg.usbp);
-
- /*
- * Activates the serial driver 2 using the driver default configuration.
- * PA2(TX) and PA3(RX) are routed to USART2.
- */
- sdStart(&SD2, NULL);
- palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
- palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
-
- /*
- * Initializes the SPI driver 1 in order to access the MEMS. The signals
- * are already initialized in the board file.
- */
- spiStart(&SPID1, &spi1cfg);
-
- /*
- * Initializes the SPI driver 2. The SPI2 signals are routed as follow:
- * PB12 - NSS.
- * PB13 - SCK.
- * PB14 - MISO.
- * PB15 - MOSI.
- */
- spiStart(&SPID2, &spi2cfg);
- palSetPad(GPIOB, 12);
- palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST); /* NSS. */
- palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(5) |
- PAL_STM32_OSPEED_HIGHEST); /* SCK. */
- palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(5)); /* MISO. */
- palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(5) |
- PAL_STM32_OSPEED_HIGHEST); /* MOSI. */
-
- /*
- * Initializes the PWM driver 4, routes the TIM4 outputs to the board LEDs.
- */
- pwmStart(&PWMD4, &pwmcfg);
- palSetPadMode(GPIOD, GPIOD_LED4, PAL_MODE_ALTERNATE(2)); /* Green. */
- palSetPadMode(GPIOD, GPIOD_LED3, PAL_MODE_ALTERNATE(2)); /* Orange. */
- palSetPadMode(GPIOD, GPIOD_LED5, PAL_MODE_ALTERNATE(2)); /* Red. */
- palSetPadMode(GPIOD, GPIOD_LED6, PAL_MODE_ALTERNATE(2)); /* Blue. */
-
- /*
- * Creates the example thread.
- */
- chThdCreateStatic(waThread1, sizeof(waThread1),
- NORMALPRIO + 10, Thread1, NULL);
-
- /*
- * Normal main() thread activity, spawning shells.
- */
- while (true) {
- if (SDU1.config->usbp->state == USB_ACTIVE) {
- thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE,
- "shell", NORMALPRIO + 1,
- shellThread, (void *)&shell_cfg1);
- chThdWait(shelltp); /* Waiting termination. */
- }
- chThdSleepMilliseconds(1000);
- }
-}