[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/bsp/lk/target/dartuinoP0/sensor_bus.c b/src/bsp/lk/target/dartuinoP0/sensor_bus.c
new file mode 100644
index 0000000..82f608a
--- /dev/null
+++ b/src/bsp/lk/target/dartuinoP0/sensor_bus.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2015 Eric Holland
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include <err.h>
+#include <kernel/mutex.h>
+#include <platform/gpio.h>
+#include <target/gpioconfig.h>
+#include <target/bmi055.h>
+#include <target/sensor_bus.h>
+#include <dev/accelerometer.h>
+
+static mutex_t sensorbus_mutex;
+static SPI_HandleTypeDef spi_handle;
+
+static uint8_t tx_buff[16];
+static uint8_t rx_buff[16];
+
+status_t acc_read_xyz(position_vector_t * pos_vector_p)
+{
+ tx_buff[0] = BMI055_ADDRESS_READ( BMI055_ACC_ACCD_X_LSB );
+ if ( acc_flush(tx_buff, rx_buff, 7) == NO_ERROR )
+ {
+ pos_vector_p->x = 0.001*(((int8_t)rx_buff[2] << 4) | ( (rx_buff[1] >> 4) & 0x0F));
+ pos_vector_p->y = 0.001*(((int8_t)rx_buff[4] << 4) | ( (rx_buff[3] >> 4) & 0x0F));
+ pos_vector_p->z = 0.001*(((int8_t)rx_buff[6] << 4) | ( (rx_buff[5] >> 4) & 0x0F));
+ return NO_ERROR;
+ }
+ else {
+ return ERR_GENERIC;
+ }
+}
+
+status_t acc_flush(uint8_t * tbuff, uint8_t * rbuff, uint8_t numbytes)
+{
+ status_t ret_status;
+
+ mutex_acquire(&sensorbus_mutex);
+
+ gpio_set(GPIO_ACC_nCS,GPIO_PIN_RESET);
+
+ ret_status = HAL_SPI_TransmitReceive(&spi_handle, tbuff, rbuff, numbytes, 5000);
+
+ gpio_set(GPIO_ACC_nCS,GPIO_PIN_SET);
+
+ mutex_release(&sensorbus_mutex);
+
+ return ret_status;
+}
+
+/**
+ * @brief Initiale SPI5 module and IO for control of spi bus linking nrf51, accelerometer, and gyroscope.
+ *
+ */
+status_t sensor_bus_init_early(void)
+{
+ __HAL_SENSOR_BUS_GPIO_CLK_ENABLE();
+ __HAL_RCC_SPI5_CLK_ENABLE();
+
+ gpio_config(GPIO_SPI5_SCK, GPIO_STM32_AF | GPIO_STM32_AFn(GPIO_AF5_SPI5) | GPIO_PULLUP);
+ gpio_config(GPIO_SPI5_MISO, GPIO_STM32_AF | GPIO_STM32_AFn(GPIO_AF5_SPI5) | GPIO_PULLUP);
+ gpio_config(GPIO_SPI5_MOSI, GPIO_STM32_AF | GPIO_STM32_AFn(GPIO_AF5_SPI5) | GPIO_PULLUP);
+
+ gpio_config(GPIO_NRF_CS, GPIO_OUTPUT );
+ gpio_config(GPIO_NRF_INT, GPIO_INPUT | GPIO_PULLUP);
+
+ gpio_config(GPIO_GYRO_nCS, GPIO_OUTPUT );
+ gpio_config(GPIO_GYRO_INT, GPIO_INPUT | GPIO_PULLUP);
+
+ gpio_config(GPIO_ACC_nCS, GPIO_OUTPUT );
+ gpio_config(GPIO_ACC_INT, GPIO_INPUT | GPIO_PULLUP);
+
+ gpio_set(GPIO_NRF_CS, GPIO_PIN_RESET);
+ gpio_set(GPIO_GYRO_nCS, GPIO_PIN_SET);
+ gpio_set(GPIO_ACC_nCS, GPIO_PIN_SET);
+
+ spi_handle.Instance = SPI5;
+ spi_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
+ spi_handle.Init.Direction = SPI_DIRECTION_2LINES;
+ spi_handle.Init.CLKPhase = SPI_PHASE_1EDGE;
+ spi_handle.Init.CLKPolarity = SPI_POLARITY_LOW;
+ spi_handle.Init.DataSize = SPI_DATASIZE_8BIT;
+ spi_handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ spi_handle.Init.TIMode = SPI_TIMODE_DISABLE;
+ spi_handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ spi_handle.Init.CRCPolynomial = 7;
+ spi_handle.Init.NSS = SPI_NSS_SOFT;
+ spi_handle.Init.Mode = SPI_MODE_MASTER;
+
+ if (HAL_SPI_Init(&spi_handle) != HAL_OK) {
+ return ERR_GENERIC;
+ }
+ return NO_ERROR;
+}
+
+
+
+void sensor_bus_init(void)
+{
+ mutex_init(&sensorbus_mutex);
+}
+
+