From 33bf745e8976bdf1d99e1d9732ae8f16acd11a5f Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Sat, 18 May 2019 22:15:20 +0200 Subject: [PATCH] refact(card10): factor out init and diag code --- Hello_World/Makefile | 3 +- Hello_World/main.c | 169 ++++++------------------------------------- bmatest/Makefile | 1 + bmatest/main.c | 47 ++---------- bmetest/Makefile | 6 ++ bmetest/main.c | 44 ++--------- ecgtest/Makefile | 16 +++- ecgtest/main.c | 88 ++-------------------- imutest/Makefile | 10 +++ imutest/main.c | 100 +++++++------------------ ips/Makefile | 3 +- ips/main.c | 48 ++---------- lib/card10/card10.c | 136 ++++++++++++++++++++++++++++++++++ lib/card10/card10.h | 8 ++ 14 files changed, 260 insertions(+), 419 deletions(-) create mode 100644 lib/card10/card10.c create mode 100644 lib/card10/card10.h diff --git a/Hello_World/Makefile b/Hello_World/Makefile index 4f67e2b8..184e192b 100644 --- a/Hello_World/Makefile +++ b/Hello_World/Makefile @@ -67,8 +67,6 @@ CMSIS_ROOT=$(LIBS_DIR)/CMSIS # Source files for this test (add path to VPATH below) SRCS = main.c -SRCS += oled96.c -SRCS += fonts.c SRCS += pmic.c SRCS += bosch.c SRCS += bhy_support.c bhy_uc_driver.c bhy.c @@ -76,6 +74,7 @@ SRCS += MAX77650-Arduino-Library.c SRCS += bme680.h SRCS += bma400.c + # Where to find source files for this test VPATH = . diff --git a/Hello_World/main.c b/Hello_World/main.c index f2063ca3..ce6f2d42 100644 --- a/Hello_World/main.c +++ b/Hello_World/main.c @@ -41,167 +41,31 @@ */ /***** Includes *****/ +#include "pmic.h" +#include "card10.h" + +#include "tmr_utils.h" + #include <stdio.h> #include <stdint.h> #include <string.h> -#include "mxc_config.h" -#include "led.h" -#include "board.h" -#include "tmr_utils.h" -#include "i2c.h" -#include "rtc.h" -#include "spi.h" -#include "gpio.h" -#include "oled96.h" -#include "bhy.h" -#include "Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h" -#include "bhy_uc_driver.h" -#include "pmic.h" -#include "bme680.h" -#include "bma400.h" -#include "bosch.h" /***** Definitions *****/ -#define I2C_DEVICE MXC_I2C0_BUS0 - -#define SPI SPI0 -#define SPI_SPEED 1000000 // Bit Rate - /***** Globals *****/ -static const gpio_cfg_t motor_pin = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE}; +//static const gpio_cfg_t motor_pin = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE}; /***** Functions *****/ -#if 0 -void I2C0_IRQHandler(void) -{ - I2C_Handler(I2C_DEVICE); - return; -} -#endif - -uint32_t ecg_read_reg(uint8_t reg) -{ - spi_req_t req; - uint8_t tx_data[] = {(reg << 1) | 1, 0, 0, 0}; - uint8_t rx_data[] = {0, 0, 0, 0}; - req.tx_data = tx_data; - req.rx_data = rx_data; - req.len = 4; - req.bits = 8; - req.width = SPI17Y_WIDTH_1; - req.ssel = 0; - req.deass = 1; - req.ssel_pol = SPI17Y_POL_LOW; - req.tx_num = 0; - req.rx_num = 0; - - SPI_MasterTrans(SPI, &req); - - return (rx_data[1] << 16) | (rx_data[2] << 8) | rx_data[3]; -} - // ***************************************************************************** int main(void) { int count = 0; - printf("Hello World!\n"); - - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - - #if 0 - NVIC_EnableIRQ(I2C0_IRQn); // Not sure if we actually need this when not doing async requests - #endif - - uint8_t dummy[1] = {0}; - // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" - for (int addr = 0x8; addr < 0x78; ++addr) { - // A 0 byte write does not seem to work so always send a single byte. - int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C0\n", addr); - } - - res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C1\n", addr); - } - } - - oledInit(0x3c, 0, 0); - oledFill(0x00); - oledWriteString(0, 0, "Hello", 0); - oledWriteString(0, 2, "my name is", 0); - oledWriteString(0, 4, "card10", 1); - - if(bhy_driver_init(bhy1_fw)) { - printf("Failed to init bhy\n"); - } - - - struct bme680_dev gas_sensor; - gas_sensor.dev_id = BME680_I2C_ADDR_PRIMARY; - gas_sensor.intf = BME680_I2C_INTF; - gas_sensor.read = card10_bosch_i2c_read; - gas_sensor.write = card10_bosch_i2c_write; - gas_sensor.delay_ms = card10_bosch_delay; - gas_sensor.amb_temp = 25; - - int8_t rslt = BME680_OK; - rslt = bme680_init(&gas_sensor); - if(rslt != BME680_OK) { - printf("Failed to init BME680\n"); - } - - struct bma400_dev bma; - bma.intf_ptr = NULL; /* To attach your interface device reference */ - bma.delay_ms = card10_bosch_delay; - bma.dev_id = BMA400_I2C_ADDRESS_SDO_LOW; - bma.read = card10_bosch_i2c_read_ex; - bma.write = card10_bosch_i2c_write_ex; - bma.intf = BMA400_I2C_INTF; - - rslt = bma400_init(&bma); - if (rslt == BMA400_OK) { - printf("BMA400 found with chip ID 0x%X\r\n", bma.chip_id); - } - - - // Enable 32 kHz output - RTC_SquareWave(MXC_RTC, SQUARE_WAVE_ENABLED, F_32KHZ, NOISE_IMMUNE_MODE, NULL); - - // Enable SPI - sys_cfg_spi_t spi17y_master_cfg; - - spi17y_master_cfg.map = MAP_A; - spi17y_master_cfg.ss0 = Enable; - spi17y_master_cfg.ss1 = Disable; - spi17y_master_cfg.ss2 = Disable; - - if (SPI_Init(SPI, 0, SPI_SPEED, spi17y_master_cfg) != 0) { - printf("Error configuring SPI\n"); - while (1); - } - - for(int i=0; i<0x20; i++) { - uint32_t val = ecg_read_reg(i); - printf("%02x: 0x%06x\n", i, val); - } - + card10_init(); + card10_diag(); while (1) { +#if 1 pmic_set_led(0, 31); pmic_set_led(1, 0); pmic_set_led(2, 0); @@ -220,9 +84,22 @@ int main(void) pmic_set_led(0, 0); pmic_set_led(1, 0); pmic_set_led(2, 0); + //TMR_Delay(MXC_TMR0, MSEC(200), 0); +#endif +#if 0 + //TMR_Delay(MXC_TMR0, MSEC(600), 0); GPIO_OutSet(&motor_pin); - TMR_Delay(MXC_TMR0, MSEC(500), 0); + TMR_Delay(MXC_TMR0, MSEC(30), 0); GPIO_OutClr(&motor_pin); + TMR_Delay(MXC_TMR0, MSEC(200), 0); +#endif +#if 0 + LED_Off(0); + TMR_Delay(MXC_TMR0, MSEC(500), 0); + LED_On(0); + TMR_Delay(MXC_TMR0, MSEC(500), 0); +#endif + TMR_Delay(MXC_TMR0, MSEC(1000), 0); printf("count = %d\n", count++); } diff --git a/bmatest/Makefile b/bmatest/Makefile index 4f67e2b8..66cfc9f8 100644 --- a/bmatest/Makefile +++ b/bmatest/Makefile @@ -75,6 +75,7 @@ SRCS += bhy_support.c bhy_uc_driver.c bhy.c SRCS += MAX77650-Arduino-Library.c SRCS += bme680.h SRCS += bma400.c +SRCS += card10.c # Where to find source files for this test VPATH = . diff --git a/bmatest/main.c b/bmatest/main.c index 85e27746..cac0d1ef 100644 --- a/bmatest/main.c +++ b/bmatest/main.c @@ -41,9 +41,6 @@ */ /***** Includes *****/ -#include <stdio.h> -#include <stdint.h> -#include <string.h> #include "mxc_config.h" #include "led.h" #include "board.h" @@ -53,14 +50,15 @@ #include "spi.h" #include "gpio.h" #include "oled96.h" -#include "bhy.h" -#include "Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h" -#include "bhy_uc_driver.h" -#include "pmic.h" -#include "bme680.h" #include "bma400.h" #include "bosch.h" +#include "card10.h" + +#include <stdio.h> +#include <stdint.h> +#include <string.h> + /***** Definitions *****/ /***** Globals *****/ @@ -95,37 +93,8 @@ void print_rslt(int8_t rslt) // ***************************************************************************** int main(void) { - int count = 0; - - printf("Hello World!\n"); - - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - - uint8_t dummy[1] = {0}; - // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" - for (int addr = 0x8; addr < 0x78; ++addr) { - // A 0 byte write does not seem to work so always send a single byte. - int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C0\n", addr); - } - - res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C1\n", addr); - } - } + card10_init(); + card10_diag(); oledInit(0x3c, 0, 0); oledFill(0x00); diff --git a/bmetest/Makefile b/bmetest/Makefile index 02d4d978..66cfc9f8 100644 --- a/bmetest/Makefile +++ b/bmetest/Makefile @@ -74,6 +74,9 @@ SRCS += bosch.c SRCS += bhy_support.c bhy_uc_driver.c bhy.c SRCS += MAX77650-Arduino-Library.c SRCS += bme680.h +SRCS += bma400.c +SRCS += card10.c + # Where to find source files for this test VPATH = . @@ -93,6 +96,9 @@ VPATH += ../lib/maxim/MAX77650-Arduino-Library IPATH += ../lib/bosch/BME680_driver VPATH += ../lib/bosch/BME680_driver +IPATH += ../lib/bosch/BMA400-API +VPATH += ../lib/bosch/BMA400-API + # Enable assertion checking for development PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE diff --git a/bmetest/main.c b/bmetest/main.c index b7edeb28..d664ca44 100644 --- a/bmetest/main.c +++ b/bmetest/main.c @@ -41,9 +41,6 @@ */ /***** Includes *****/ -#include <stdio.h> -#include <stdint.h> -#include <string.h> #include "mxc_config.h" #include "led.h" #include "board.h" @@ -51,46 +48,21 @@ #include "i2c.h" #include "gpio.h" #include "oled96.h" -#include "pmic.h" #include "bme680.h" #include "bosch.h" +#include "card10.h" + +#include <stdio.h> +#include <stdint.h> +#include <string.h> + /***** Definitions *****/ // ***************************************************************************** int main(void) { - printf("Hello World!\n"); - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - - #if 0 - NVIC_EnableIRQ(I2C0_IRQn); // Not sure if we actually need this when not doing async requests - #endif - - uint8_t dummy[1] = {0}; - // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" - for (int addr = 0x8; addr < 0x78; ++addr) { - // A 0 byte write does not seem to work so always send a single byte. - int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C0\n", addr); - } - - res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C1\n", addr); - } - } + card10_init(); + card10_diag(); oledInit(0x3c, 0, 0); oledFill(0x00); diff --git a/ecgtest/Makefile b/ecgtest/Makefile index 49bf141c..fe06e462 100644 --- a/ecgtest/Makefile +++ b/ecgtest/Makefile @@ -70,8 +70,12 @@ SRCS = main.c SRCS += pmic.c SRCS += ../lib/card10/oled96.c SRCS += ../lib/card10/fonts.c +SRCS += bosch.c +SRCS += bhy_support.c bhy_uc_driver.c bhy.c SRCS += MAX77650-Arduino-Library.c - +SRCS += bme680.h +SRCS += bma400.c +SRCS += card10.c # Where to find source files for this test VPATH = . @@ -82,9 +86,19 @@ IPATH = . IPATH += ../lib/card10 VPATH += ../lib/card10 +IPATH += ../lib/bosch/BHy1_driver_and_MCU_solution/driver/inc +IPATH += ../lib/bosch/BHy1_driver_and_MCU_solution/examples/firmware/ +VPATH += ../lib/bosch/BHy1_driver_and_MCU_solution/driver/src + IPATH += ../lib/maxim/MAX77650-Arduino-Library VPATH += ../lib/maxim/MAX77650-Arduino-Library +IPATH += ../lib/bosch/BME680_driver +VPATH += ../lib/bosch/BME680_driver + +IPATH += ../lib/bosch/BMA400-API +VPATH += ../lib/bosch/BMA400-API + # Enable assertion checking for development PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE diff --git a/ecgtest/main.c b/ecgtest/main.c index 02024deb..e314ffa7 100644 --- a/ecgtest/main.c +++ b/ecgtest/main.c @@ -55,28 +55,15 @@ #include "MAX30003.h" #include "oled96.h" #include "pmic.h" +#include "card10.h" #include <stdbool.h> /***** Definitions *****/ -#define I2C_DEVICE MXC_I2C0_BUS0 - -#define SPI SPI0 -#define SPI_SPEED 10000000 // Bit Rate - - /***** Globals *****/ /***** Functions *****/ -#if 0 -void I2C0_IRQHandler(void) -{ - I2C_Handler(I2C_DEVICE); - return; -} -#endif - -uint32_t ecg_read_reg(uint8_t reg) +static uint32_t ecg_read_reg(uint8_t reg) { spi_req_t req; uint8_t tx_data[] = {(reg << 1) | 1, 0, 0, 0}; @@ -92,12 +79,12 @@ uint32_t ecg_read_reg(uint8_t reg) req.tx_num = 0; req.rx_num = 0; - SPI_MasterTrans(SPI, &req); + SPI_MasterTrans(SPI0, &req); return (rx_data[1] << 16) | (rx_data[2] << 8) | rx_data[3]; } -void ecg_write_reg(uint8_t reg, uint32_t data) +static void ecg_write_reg(uint8_t reg, uint32_t data) { printf("write %02x %06x\n", reg, data); spi_req_t req; @@ -114,7 +101,7 @@ void ecg_write_reg(uint8_t reg, uint32_t data) req.tx_num = 0; req.rx_num = 0; - SPI_MasterTrans(SPI, &req); + SPI_MasterTrans(SPI0, &req); } void ecg_config(void) @@ -243,52 +230,9 @@ void ecgFIFO_callback(void *data) { // ***************************************************************************** int main(void) { - //int count = 0; - - printf("Hello World!\n"); - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - #if 0 - NVIC_EnableIRQ(I2C0_IRQn); // Not sure if we actually need this when not doing async requests - #endif - - uint8_t dummy[1] = {0}; - // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" - for (int addr = 0x8; addr < 0x78; ++addr) { - // A 0 byte write does not seem to work so always send a single byte. - int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C0\n", addr); - } - - res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C1\n", addr); - } - } - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - oledInit(0x3c, 0, 0); - oledFill(0x00); - oledWriteString(0, 0, " card10", 1); - - TMR_Delay(MXC_TMR0, MSEC(1500), 0); - - // Enable 32 kHz output - RTC_SquareWave(MXC_RTC, SQUARE_WAVE_ENABLED, F_32KHZ, NOISE_IMMUNE_MODE, NULL); + card10_init(); + card10_diag(); const gpio_cfg_t interrupt_pin = {PORT_1, PIN_12, GPIO_FUNC_IN, GPIO_PAD_PULL_UP}; GPIO_Config(&interrupt_pin); @@ -298,24 +242,6 @@ int main(void) NVIC_EnableIRQ(MXC_GPIO_GET_IRQ(PORT_1)); - // Enable SPI - sys_cfg_spi_t spi17y_master_cfg; - - spi17y_master_cfg.map = MAP_A; - spi17y_master_cfg.ss0 = Enable; - spi17y_master_cfg.ss1 = Disable; - spi17y_master_cfg.ss2 = Disable; - - if (SPI_Init(SPI, 0, SPI_SPEED, spi17y_master_cfg) != 0) { - printf("Error configuring SPI\n"); - while (1); - } - - for(int i=0; i<0x20; i++) { - uint32_t val = ecg_read_reg(i); - printf("%02x: 0x%06x\n", i, val); - } - ecg_config(); for(int i=0; i<0x20; i++) { diff --git a/imutest/Makefile b/imutest/Makefile index 7103aa7d..66cfc9f8 100644 --- a/imutest/Makefile +++ b/imutest/Makefile @@ -73,6 +73,10 @@ SRCS += pmic.c SRCS += bosch.c SRCS += bhy_support.c bhy_uc_driver.c bhy.c SRCS += MAX77650-Arduino-Library.c +SRCS += bme680.h +SRCS += bma400.c +SRCS += card10.c + # Where to find source files for this test VPATH = . @@ -89,6 +93,12 @@ VPATH += ../lib/bosch/BHy1_driver_and_MCU_solution/driver/src IPATH += ../lib/maxim/MAX77650-Arduino-Library VPATH += ../lib/maxim/MAX77650-Arduino-Library +IPATH += ../lib/bosch/BME680_driver +VPATH += ../lib/bosch/BME680_driver + +IPATH += ../lib/bosch/BMA400-API +VPATH += ../lib/bosch/BMA400-API + # Enable assertion checking for development PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE diff --git a/imutest/main.c b/imutest/main.c index adabba9b..b7a226be 100644 --- a/imutest/main.c +++ b/imutest/main.c @@ -41,9 +41,6 @@ */ /***** Includes *****/ -#include <stdio.h> -#include <stdint.h> -#include <string.h> #include "mxc_config.h" #include "led.h" #include "board.h" @@ -52,19 +49,17 @@ #include "rtc.h" #include "spi.h" #include "gpio.h" -#include "oled96.h" -#include "bhy.h" -#include "Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h" #include "bhy_uc_driver.h" #include "pmic.h" -#include <math.h> -/***** Definitions *****/ +#include "card10.h" -#define I2C_DEVICE MXC_I2C0_BUS0 +#include <math.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> -#define SPI SPI0 -#define SPI_SPEED 1000000 // Bit Rate +/***** Definitions *****/ /* should be greater or equal to 69 bytes, page size (50) + maximum packet size(18) + 1 */ #define FIFO_SIZE 300 @@ -74,24 +69,14 @@ /***** Globals *****/ -static const gpio_cfg_t motor_pin = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE}; char out_buffer[OUT_BUFFER_SIZE] = " W: 0.999 X: 0.999 Y: 0.999 Z: 0.999 \r"; uint8_t fifo[FIFO_SIZE]; - /***** Functions *****/ -#if 0 -void I2C0_IRQHandler(void) -{ - I2C_Handler(I2C_DEVICE); - return; -} -#endif - static void sensors_callback_vector(bhy_data_generic_t * sensor_data, bhy_virtual_sensor_t sensor_id) { - printf("x=%d, y=%d, z=%d status=%d\n", + printf("x=%05d, y=%05d, z=%05d status=%d\n", sensor_data->data_vector.x, sensor_data->data_vector.y, sensor_data->data_vector.z, @@ -99,6 +84,17 @@ static void sensors_callback_vector(bhy_data_generic_t * sensor_data, bhy_virtua ); } +static void sensors_callback_vector_uncalib(bhy_data_generic_t * sensor_data, bhy_virtual_sensor_t sensor_id) +{ + printf("x=%05d, y=%05d, z=%05d status=%d\n", + sensor_data->data_uncalib_vector.x, + sensor_data->data_uncalib_vector.y, + sensor_data->data_uncalib_vector.z, + sensor_data->data_uncalib_vector.status + ); +} + + /*! * @brief This function is callback function for acquring sensor datas * @@ -167,49 +163,6 @@ static void sensors_callback_rotation_vector(bhy_data_generic_t * sensor_data, b // ***************************************************************************** int main(void) { - printf("Hello World!\n"); - - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - - TMR_Delay(MXC_TMR0, MSEC(1000), 0); - - #if 0 - NVIC_EnableIRQ(I2C0_IRQn); // Not sure if we actually need this when not doing async requests - #endif - - uint8_t dummy[1] = {0}; - // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" - for (int addr = 0x8; addr < 0x78; ++addr) { - // A 0 byte write does not seem to work so always send a single byte. - int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C0\n", addr); - } - - res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); - if(res == 1) { - printf("Found (7 bit) address 0x%02x on I2C1\n", addr); - } - } - -#if 0 - oledInit(0x3c, 0, 0); - oledFill(0x00); - oledWriteString(0, 0, "Hello", 0); - oledWriteString(0, 2, "my name is", 0); - oledWriteString(0, 4, "card10", 1); -#endif - /* BHY Variable*/ uint8_t *fifoptr = NULL; uint8_t bytes_left_in_fifo = 0; @@ -222,15 +175,14 @@ int main(void) const gpio_cfg_t interrupt_pin = {PORT_0, PIN_13, GPIO_FUNC_IN, GPIO_PAD_PULL_UP}; GPIO_Config(&interrupt_pin); - if(bhy_driver_init(bhy1_fw)) { - printf("Failed to init bhy\n"); - } - + card10_init(); /* wait for the bhy trigger the interrupt pin go down and up again */ while (GPIO_InGet(&interrupt_pin)); - while (!GPIO_InGet(&interrupt_pin)); + + card10_diag(); + /* the remapping matrix for BHI and Magmetometer should be configured here to make sure rotation vector is */ /* calculated in a correct coordinates system. */ int8_t bhy_mapping_matrix_config[3*3] = {0,-1,0,1,0,0,0,0,1}; @@ -255,7 +207,9 @@ int main(void) #endif //if(bhy_install_sensor_callback(VS_TYPE_GEOMAGNETIC_FIELD, VS_WAKEUP, sensors_callback_vector)) - if(bhy_install_sensor_callback(VS_TYPE_GRAVITY, VS_WAKEUP, sensors_callback_vector)) + //if(bhy_install_sensor_callback(VS_TYPE_GRAVITY, VS_WAKEUP, sensors_callback_vector)) + //if(bhy_install_sensor_callback(VS_TYPE_ACCELEROMETER, VS_WAKEUP, sensors_callback_vector)) + if(bhy_install_sensor_callback(VS_TYPE_MAGNETIC_FIELD_UNCALIBRATED, VS_WAKEUP, sensors_callback_vector_uncalib)) { printf("Fail to install sensor callback\n"); } @@ -270,7 +224,9 @@ int main(void) /* enables the virtual sensor */ //if(bhy_enable_virtual_sensor(VS_TYPE_GEOMAGNETIC_FIELD, VS_WAKEUP, ROTATION_VECTOR_SAMPLE_RATE, 0, VS_FLUSH_NONE, 0, 0)) - if(bhy_enable_virtual_sensor(VS_TYPE_GRAVITY, VS_WAKEUP, ROTATION_VECTOR_SAMPLE_RATE, 0, VS_FLUSH_NONE, 0, 0)) + //if(bhy_enable_virtual_sensor(VS_TYPE_GRAVITY, VS_WAKEUP, ROTATION_VECTOR_SAMPLE_RATE, 0, VS_FLUSH_NONE, 0, 0)) + //if(bhy_enable_virtual_sensor(VS_TYPE_ACCELEROMETER, VS_WAKEUP, ROTATION_VECTOR_SAMPLE_RATE, 0, VS_FLUSH_NONE, 0, 0)) + if(bhy_enable_virtual_sensor(VS_TYPE_MAGNETIC_FIELD_UNCALIBRATED, VS_WAKEUP, ROTATION_VECTOR_SAMPLE_RATE, 0, VS_FLUSH_NONE, 0, 0)) { printf("Fail to enable sensor id=%d\n", VS_TYPE_GEOMAGNETIC_FIELD); } diff --git a/ips/Makefile b/ips/Makefile index dde919d0..2f79eeb2 100644 --- a/ips/Makefile +++ b/ips/Makefile @@ -67,8 +67,6 @@ CMSIS_ROOT=$(LIBS_DIR)/CMSIS # Source files for this test (add path to VPATH below) SRCS = main.c -SRCS += oled96.c -SRCS += fonts.c SRCS += pmic.c SRCS += bosch.c SRCS += bhy_support.c bhy_uc_driver.c bhy.c @@ -82,6 +80,7 @@ SRCS += font24.c SRCS += font24CN.c SRCS += image.c SRCS += image2.c +SRCS += card10.c # Where to find source files for this test diff --git a/ips/main.c b/ips/main.c index f65f8d95..eb7bf1d7 100644 --- a/ips/main.c +++ b/ips/main.c @@ -41,9 +41,6 @@ */ /***** Includes *****/ -#include <stdio.h> -#include <stdint.h> -#include <string.h> #include "mxc_config.h" #include "led.h" #include "board.h" @@ -52,20 +49,18 @@ #include "rtc.h" #include "spi.h" #include "gpio.h" -#include "oled96.h" -#include "bhy.h" -#include "Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h" -#include "bhy_uc_driver.h" -#include "pmic.h" -#include "bme680.h" -#include "bma400.h" -#include "bosch.h" #include "LCD/LCD_Driver.h" #include "GUI_DEV/GUI_Paint.h" #include "Fonts/fonts.h" #include "image/image.h" #include "tmr.h" +#include "card10.h" + +#include <stdio.h> +#include <stdint.h> +#include <string.h> + // Parameters for PWM output #define PORT_PWM PORT_0 // port #define PIN_PWM PIN_28 // pin @@ -144,35 +139,8 @@ int main(void) { int count = 0; - printf("Hello World!\n"); - -#if 1 - //Setup the I2CM - I2C_Shutdown(MXC_I2C0_BUS0); - I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); - - I2C_Shutdown(MXC_I2C1_BUS0); - I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); - - pmic_init(); - pmic_set_led(0, 0); - pmic_set_led(1, 0); - pmic_set_led(2, 0); - TMR_Delay(MXC_TMR0, MSEC(1000), 0); -#endif - - // Enable SPI - sys_cfg_spi_t spi17y_master_cfg; - - spi17y_master_cfg.map = MAP_A; - spi17y_master_cfg.ss0 = Enable; - spi17y_master_cfg.ss1 = Disable; - spi17y_master_cfg.ss2 = Disable; - - if (SPI_Init(SPI, 0, SPI_SPEED, spi17y_master_cfg) != 0) { - printf("Error configuring SPI\n"); - while (1); - } + card10_init(); + card10_diag(); //GPIO_Config(&DEV_RST_PIN); GPIO_Config(&DEV_DC_PIN); diff --git a/lib/card10/card10.c b/lib/card10/card10.c new file mode 100644 index 00000000..6c3d94cb --- /dev/null +++ b/lib/card10/card10.c @@ -0,0 +1,136 @@ +#include "pmic.h" +#include "bosch.h" + +#include "bhy_uc_driver.h" +#include "Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h" +#include "bme680.h" +#include "bma400.h" +#include "bhy.h" + +#include "mxc_config.h" +#include "led.h" +#include "board.h" + +#include "tmr_utils.h" +#include "i2c.h" +#include "rtc.h" +#include "spi.h" +#include "gpio.h" + +#include <stdio.h> +#include <stdint.h> +#include <string.h> + +#define SPI SPI0 +#define SPI_SPEED 1000000 // Bit Rate + +void card10_init(void) +{ + printf("card10 init...\n"); + + //Setup the I2CM + I2C_Shutdown(MXC_I2C0_BUS0); + I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL); + + I2C_Shutdown(MXC_I2C1_BUS0); + I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL); + + pmic_init(); + pmic_set_led(0, 0); + pmic_set_led(1, 0); + pmic_set_led(2, 0); + TMR_Delay(MXC_TMR0, MSEC(1000), 0); + + // Enable 32 kHz output + RTC_SquareWave(MXC_RTC, SQUARE_WAVE_ENABLED, F_32KHZ, NOISE_IMMUNE_MODE, NULL); + + // Enable SPI + sys_cfg_spi_t spi17y_master_cfg; + + spi17y_master_cfg.map = MAP_A; + spi17y_master_cfg.ss0 = Enable; + spi17y_master_cfg.ss1 = Disable; + spi17y_master_cfg.ss2 = Disable; + + if (SPI_Init(SPI, 0, SPI_SPEED, spi17y_master_cfg) != 0) { + printf("Error configuring SPI\n"); + while (1); + } + + if(bhy_driver_init(bhy1_fw)) { + printf("Failed to init bhy\n"); + } +} + +static uint32_t ecg_read_reg(uint8_t reg) +{ + spi_req_t req; + uint8_t tx_data[] = {(reg << 1) | 1, 0, 0, 0}; + uint8_t rx_data[] = {0, 0, 0, 0}; + req.tx_data = tx_data; + req.rx_data = rx_data; + req.len = 4; + req.bits = 8; + req.width = SPI17Y_WIDTH_1; + req.ssel = 0; + req.deass = 1; + req.ssel_pol = SPI17Y_POL_LOW; + req.tx_num = 0; + req.rx_num = 0; + + SPI_MasterTrans(SPI0, &req); + + return (rx_data[1] << 16) | (rx_data[2] << 8) | rx_data[3]; +} + +void card10_diag(void) +{ + uint8_t dummy[1] = {0}; + // "7-bit addresses 0b0000xxx and 0b1111xxx are reserved" + for (int addr = 0x8; addr < 0x78; ++addr) { + // A 0 byte write does not seem to work so always send a single byte. + int res = I2C_MasterWrite(MXC_I2C0_BUS0, addr << 1, dummy, 1, 0); + if(res == 1) { + printf("Found (7 bit) address 0x%02x on I2C0\n", addr); + } + + res = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, dummy, 1, 0); + if(res == 1) { + printf("Found (7 bit) address 0x%02x on I2C1\n", addr); + } + } + + + struct bme680_dev gas_sensor; + gas_sensor.dev_id = BME680_I2C_ADDR_PRIMARY; + gas_sensor.intf = BME680_I2C_INTF; + gas_sensor.read = card10_bosch_i2c_read; + gas_sensor.write = card10_bosch_i2c_write; + gas_sensor.delay_ms = card10_bosch_delay; + gas_sensor.amb_temp = 25; + + int8_t rslt = BME680_OK; + rslt = bme680_init(&gas_sensor); + if(rslt != BME680_OK) { + printf("Failed to init BME680\n"); + } + + struct bma400_dev bma; + bma.intf_ptr = NULL; /* To attach your interface device reference */ + bma.delay_ms = card10_bosch_delay; + bma.dev_id = BMA400_I2C_ADDRESS_SDO_LOW; + bma.read = card10_bosch_i2c_read_ex; + bma.write = card10_bosch_i2c_write_ex; + bma.intf = BMA400_I2C_INTF; + + rslt = bma400_init(&bma); + if (rslt == BMA400_OK) { + printf("BMA400 found with chip ID 0x%X\r\n", bma.chip_id); + } + + + for(int i=0; i<0x20; i++) { + uint32_t val = ecg_read_reg(i); + printf("ECG: %02x: 0x%06x\n", i, val); + } +} diff --git a/lib/card10/card10.h b/lib/card10/card10.h new file mode 100644 index 00000000..de8e96e4 --- /dev/null +++ b/lib/card10/card10.h @@ -0,0 +1,8 @@ +#ifndef CARD10_H + +#include <stdint.h> + +void card10_init(void); +void card10_diag(void); + +#endif -- GitLab