From 4fcf3c38bb0447efd4ce1b29172bdb49e607ae2b Mon Sep 17 00:00:00 2001 From: Aapo Torkkeli <aamato@utu.fi> Date: Tue, 5 Nov 2019 17:33:08 +0200 Subject: [PATCH] project empty, cleanup --- project/main.c | 307 ------------------ .../pca10040/s132/ses/project_Release.jlink | 39 +++ 2 files changed, 39 insertions(+), 307 deletions(-) create mode 100644 project/pca10040/s132/ses/project_Release.jlink diff --git a/project/main.c b/project/main.c index b2fdc95..b82caf1 100644 --- a/project/main.c +++ b/project/main.c @@ -77,15 +77,12 @@ #include "nrf_ble_gatt.h" #include "nrf_ble_qwr.h" #include "nrf_pwr_mgmt.h" - #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" - #include "nrf_temp.h" #include "ble_hts.h" #include "ble_bas.h" - #include "nrf_drv_spi.h" #include "bmi160.h" #include "nrf_delay.h" @@ -93,310 +90,6 @@ #include "fdacoefs.h" #include "arm_math.h" -#define SPI_INSTANCE 0 // SPI instance index. We use SPI master 0 -#define SPI_SS_PIN 26 -#define SPI_MISO_PIN 23 -#define SPI_MOSI_PIN 24 -#define SPI_SCK_PIN 22 -#define INT_PIN 27 - -#define NUM_TAPS 58 -#define BLOCK_SIZE 28 - -// Declare a state array -static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; -// Declare an instance for the low-pass FIR filter -arm_fir_instance_f32 fir_lpf; - -float32_t acc_x_in_buf[140]; -float32_t acc_y_in_buf[140]; -float32_t acc_z_in_buf[140]; -float32_t acc_x_out_buf[140]; -float32_t acc_y_out_buf[140]; -float32_t acc_z_out_buf[140]; - -int in_array[16]; -int out_array[16]; - -int block_cnt = 0; - -//SPI instance -static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); -//Flag used to indicate that SPI instance completed the transfer -static volatile bool spi_xfer_done; - -static uint8_t SPI_RX_Buffer[201]; // Allocate a buffer for SPI reads -struct bmi160_dev sensor; // An instance of bmi160 sensor - -// Declare memory to store the raw FIFO buffer information -uint8_t fifo_buff[200]; -// Modify the FIFO buffer instance and link to the device instance -struct bmi160_fifo_frame fifo_frame; - -// 200 bytes -> ~7bytes per frame -> ~28 data frames -struct bmi160_sensor_data acc_data[28]; - -/** -* Function for initializing the FIR filter instance -*/ -void dsp_config() { - // Note that the init function requires the address of the coefficient table B as an input - arm_fir_init_f32(&fir_lpf, NUM_TAPS, (float32_t *)&B[0], &firStateF32[0], BLOCK_SIZE); -} - -/** -* Function for computing the filter response -*/ -void compute_fir(){ - - // Each axis is processed on its own in 5 blocks of data - - // x-axis - for (uint8_t i = 0; i < 5; i++) { - arm_fir_f32(&fir_lpf, &acc_x_in_buf[0] + i * BLOCK_SIZE, &acc_x_out_buf[0] + i * BLOCK_SIZE, BLOCK_SIZE); - } - - // y-axis - for (uint8_t i = 0; i < 5; i++) { - arm_fir_f32(&fir_lpf, &acc_y_in_buf[0] + i * BLOCK_SIZE, &acc_y_out_buf[0] + i * BLOCK_SIZE, BLOCK_SIZE); - } - - // z-axis - for (uint8_t i = 0; i < 5; i++) { - arm_fir_f32(&fir_lpf, &acc_z_in_buf[0] + i * BLOCK_SIZE, &acc_z_out_buf[0] + i * BLOCK_SIZE, BLOCK_SIZE); - } - - block_cnt = 0; // Reset block counting -} - -/** -* Function for reading FIFO data -*/ -int8_t get_bmi160_fifo_data() -{ - int8_t rslt = BMI160_OK; - uint8_t acc_frames_req = 28; - // Read the fifo buffer using SPI - rslt = bmi160_get_fifo_data(&sensor); - // Parse the data and extract 28 accelerometer frames - rslt = bmi160_extract_accel(acc_data, &acc_frames_req, &sensor); - - // Copy the contents of each axis to a FIR input buffer - for (uint8_t i = 0; i < acc_frames_req; i++) { - acc_x_in_buf[acc_frames_req*block_cnt + i] = acc_data[i].x; - acc_y_in_buf[acc_frames_req*block_cnt + i] = acc_data[i].y; - acc_z_in_buf[acc_frames_req*block_cnt + i] = acc_data[i].z; - } - - // Increase block count after each sensor read - block_cnt++; - - // After 5 reads the buffer is almost full and the data is ready to be processed - if (block_cnt == 5) { - compute_fir(); - } - - return rslt; -} - -/** -* SPI user event handler. -*/ -void spi_event_handler(nrf_drv_spi_evt_t const * p_event, void *p_context) { - spi_xfer_done = true; // Set a flag when transfer is done -} - -void gpio_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { - get_bmi160_fifo_data(); -} - -/** -* Function for setting up the SPI communication. -*/ -uint32_t spi_config() { - - uint32_t err_code; - - // Use nRF's default configurations - nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG; - - // Define each GPIO pin - spi_config.ss_pin = SPI_SS_PIN; - spi_config.miso_pin = SPI_MISO_PIN; - spi_config.mosi_pin = SPI_MOSI_PIN; - spi_config.sck_pin = SPI_SCK_PIN; - - // Initialize the SPI peripheral and give it a function pointer to - // it’s event handler - err_code = nrf_drv_spi_init(&spi, &spi_config, spi_event_handler, NULL); - - return err_code; -} - -/** -* Function for writing to the BMI160 via SPI. -*/ -int8_t bmi160_spi_bus_write(uint8_t hw_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t cnt) { - - spi_xfer_done = false; // set the flag down during transfer - - int32_t error = 0; - - // Allocate array, which lenght is address + number of data bytes to be sent - uint8_t tx_buff[cnt+1]; - uint16_t stringpos; - - // AND address with 0111 1111; set msb to '0' (write operation) - tx_buff[0] = reg_addr & 0x7F; - for (stringpos = 0; stringpos < cnt; stringpos++) { - tx_buff[stringpos+1] = *(reg_data + stringpos); - } - - // Do the actual SPI transfer - nrf_drv_spi_transfer(&spi, tx_buff, cnt+1, NULL, 0); - while (!spi_xfer_done) {}; // Loop until the transfer is complete - - return (int8_t)error; -} - -/** -* Function for reading from the BMI160 via SPI. -*/ -int8_t bmi160_spi_bus_read(uint8_t hw_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { - - spi_xfer_done = false; // set the flag down during transfer - - int32_t error = 0; - - uint8_t tx_buff = reg_addr | 0x80; // OR address with 1000 0000; Read -> set msb to '1'; - uint8_t * rx_buff_pointer; - uint16_t stringpos; - - rx_buff_pointer = (uint8_t *) (SPI_RX_Buffer); - - // Do the actual SPI transfer - nrf_drv_spi_transfer(&spi, &tx_buff, 1, rx_buff_pointer, len+1); - - while (!spi_xfer_done) {} // Loop until the transfer is complete - - // Copy received bytes to reg_data - for (stringpos = 0; stringpos < len; stringpos++) - *(reg_data + stringpos) = SPI_RX_Buffer[stringpos + 1]; - - return (int8_t)error; -} - -/** -* Function for configuring the sensor -*/ -int8_t sensor_config() { - int8_t rslt = BMI160_OK; - - sensor.id = 0; // We use SPI so id == 0 - sensor.interface = BMI160_SPI_INTF; - - // Give the driver the correct interfacing functions - sensor.read = bmi160_spi_bus_read; - sensor.write = bmi160_spi_bus_write; - sensor.delay_ms = nrf_delay_ms; - - // Initialize the sensor and check if everything went ok - rslt = bmi160_init(&sensor); - - // Configure the accelerometer's sampling freq, range and modes - sensor.accel_cfg.odr = BMI160_ACCEL_ODR_100HZ; - sensor.accel_cfg.range = BMI160_ACCEL_RANGE_8G; - sensor.accel_cfg.bw = BMI160_ACCEL_BW_NORMAL_AVG4; - sensor.accel_cfg.power = BMI160_ACCEL_NORMAL_MODE; - // Set the configurations - rslt = bmi160_set_sens_conf(&sensor); - // Some fifo settings - fifo_frame.data = fifo_buff; - fifo_frame.length = 200; - sensor.fifo = &fifo_frame; - - // Configure the sensor's FIFO settings - rslt = bmi160_set_fifo_config(BMI160_FIFO_ACCEL, BMI160_ENABLE, &sensor); - // Create an instance for interrupt settings - struct bmi160_int_settg int_config; - // Interrupt channel/pin 1 - int_config.int_channel = BMI160_INT_CHANNEL_1; - // Choosing fifo watermark interrupt - int_config.int_type = BMI160_ACC_GYRO_FIFO_WATERMARK_INT; - // Set fifo watermark level to 180 - rslt = bmi160_set_fifo_wm((uint8_t) 180, &sensor); - // Enabling interrupt pins to act as output pin - int_config.int_pin_settg.output_en = BMI160_ENABLE; - // Choosing push-pull mode for interrupt pin - int_config.int_pin_settg.output_mode = BMI160_DISABLE; - // Choosing active high output - int_config.int_pin_settg.output_type = BMI160_ENABLE; - // Choosing edge triggered output - int_config.int_pin_settg.edge_ctrl = BMI160_ENABLE; - // Disabling interrupt pin to act as input - int_config.int_pin_settg.input_en = BMI160_DISABLE; - // Non-latched output - int_config.int_pin_settg.latch_dur = BMI160_LATCH_DUR_NONE; - // Enabling FIFO watermark interrupt - int_config.fifo_WTM_int_en = BMI160_ENABLE; - // Set interrupt configurations - rslt = bmi160_set_int_config(&int_config, &sensor); - - return rslt; -} - -/** -* Function for configuring General Purpose I/O. -*/ -uint32_t config_gpio() { - uint32_t err_code = NRF_SUCCESS; - - if(!nrf_drv_gpiote_is_init()) { - err_code = nrf_drv_gpiote_init(); - } - - // Set which clock edge triggers the interrupt - nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_LOTOHI(true); - - // Configure the internal pull up resistor - //config.pull = NRF_GPIO_PIN_PULLUP; - - // Configure the pin as input - err_code = nrf_drv_gpiote_in_init(INT_PIN, &config, gpio_event_handler); - if (err_code != NRF_SUCCESS) { - // handle error condition - } - - // Enable events - nrf_drv_gpiote_in_event_enable(INT_PIN, true); - return err_code; -} - int main(void) { - dsp_config(); - - uint32_t err_code = spi_config(); - if (err_code != NRF_SUCCESS) - { - // error check failed! - } - - err_code = config_gpio(); - if (err_code != NRF_SUCCESS) - { - // error check failed! - } - - err_code = sensor_config(); - if (err_code != NRF_SUCCESS) - { - // error check failed! - } - - while(true) { - __WFE(); // sleep until an event wakes us up - __SEV(); // sleep until an event wakes us up - __WFE(); // sleep until an event wakes us up - } } diff --git a/project/pca10040/s132/ses/project_Release.jlink b/project/pca10040/s132/ses/project_Release.jlink new file mode 100644 index 0000000..292d9a0 --- /dev/null +++ b/project/pca10040/s132/ses/project_Release.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF -- GitLab