BMA456 HW Interrupt after 2 Steps working
This commit is contained in:
parent
6521e290d6
commit
de747ef463
60
main/i2c.c
60
main/i2c.c
@ -7,6 +7,7 @@
|
|||||||
#include "esp_err.h"
|
#include "esp_err.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "freertos/idf_additions.h"
|
#include "freertos/idf_additions.h"
|
||||||
|
#include "hal/gpio_types.h"
|
||||||
#include "ota_update.h"
|
#include "ota_update.h"
|
||||||
#include <rom/ets_sys.h>
|
#include <rom/ets_sys.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -17,7 +18,18 @@ static i2c_master_bus_handle_t bus_handle;
|
|||||||
static i2c_master_dev_handle_t bma456_dev_handle;
|
static i2c_master_dev_handle_t bma456_dev_handle;
|
||||||
static struct bma4_dev bma456_struct;
|
static struct bma4_dev bma456_struct;
|
||||||
|
|
||||||
|
volatile uint8_t interrupt_status = 0;
|
||||||
|
uint8_t int_line;
|
||||||
|
struct bma4_int_pin_config pin_config = {0};
|
||||||
|
uint16_t int_status = 0;
|
||||||
|
|
||||||
#define BMA4_READ_WRITE_LEN UINT8_C(46)
|
#define BMA4_READ_WRITE_LEN UINT8_C(46)
|
||||||
|
#define BMA456W_INT_PIN 7
|
||||||
|
|
||||||
|
static void interrupt_callback(void *) {
|
||||||
|
interrupt_status = 1;
|
||||||
|
// ESP_LOGI("INTERRUPT", "STEP DETECTED");
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/*! User interface functions */
|
/*! User interface functions */
|
||||||
@ -123,7 +135,14 @@ void read_sensor_task(void *params) {
|
|||||||
ret = bma4_read_accel_xyz(&sens_data, &bma456_struct);
|
ret = bma4_read_accel_xyz(&sens_data, &bma456_struct);
|
||||||
bma4_error_codes_print_result("bma4_read_accel_xyz", ret);
|
bma4_error_codes_print_result("bma4_read_accel_xyz", ret);
|
||||||
|
|
||||||
ESP_LOGI("i2c", "X:%d, Y%d, Z%d", sens_data.x, sens_data.y, sens_data.z);
|
if (interrupt_status) {
|
||||||
|
ESP_LOGI("INTERRUPT", "Da war der Interrupt resetting");
|
||||||
|
interrupt_status = 0;
|
||||||
|
ret = bma456w_read_int_status(&int_status, &bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma456w_step_counter_output status", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ESP_LOGI("i2c", "X:%d, Y%d, Z%d", sens_data.x, sens_data.y, sens_data.z);
|
||||||
vTaskDelay(pdMS_TO_TICKS(100));
|
vTaskDelay(pdMS_TO_TICKS(100));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,6 +191,45 @@ void init_bma456() {
|
|||||||
ret = bma4_set_accel_enable(BMA4_ENABLE, &bma456_struct);
|
ret = bma4_set_accel_enable(BMA4_ENABLE, &bma456_struct);
|
||||||
bma4_error_codes_print_result("bma4_set_accel_enable status", ret);
|
bma4_error_codes_print_result("bma4_set_accel_enable status", ret);
|
||||||
|
|
||||||
|
ret = bma456w_feature_enable(BMA456W_STEP_CNTR, BMA4_ENABLE, &bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma456w_feature_enable status", ret);
|
||||||
|
|
||||||
|
/* Setting watermark level 1, the output step resolution is 20 steps.
|
||||||
|
* Eg: 1 means, 1 * 20 = 20. Every 20 steps once output triggers
|
||||||
|
*/
|
||||||
|
ret = bma456w_step_counter_set_watermark(1, &bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma456w_step_counter_set_watermark status",
|
||||||
|
ret);
|
||||||
|
|
||||||
|
/* Hardware interrupt configuration */
|
||||||
|
int_line = BMA4_INTR2_MAP;
|
||||||
|
|
||||||
|
ret = bma4_get_int_pin_config(&pin_config, int_line, &bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma4_get_int_pin_config status", ret);
|
||||||
|
|
||||||
|
ret = bma456w_map_interrupt(int_line, BMA456W_STEP_CNTR_INT, BMA4_ENABLE,
|
||||||
|
&bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma456w_map_interrupt status", ret);
|
||||||
|
|
||||||
|
pin_config.edge_ctrl = BMA4_EDGE_TRIGGER;
|
||||||
|
pin_config.output_en = BMA4_OUTPUT_ENABLE;
|
||||||
|
pin_config.lvl = BMA4_ACTIVE_HIGH;
|
||||||
|
pin_config.od = BMA4_PUSH_PULL;
|
||||||
|
pin_config.input_en = BMA4_INPUT_DISABLE;
|
||||||
|
|
||||||
|
ret = bma4_set_int_pin_config(&pin_config, int_line, &bma456_struct);
|
||||||
|
bma4_error_codes_print_result("bma4_set_int_pin_config status", ret);
|
||||||
|
|
||||||
|
gpio_reset_pin(BMA456W_INT_PIN);
|
||||||
|
gpio_set_direction(BMA456W_INT_PIN, GPIO_MODE_INPUT);
|
||||||
|
gpio_set_pull_mode(BMA456W_INT_PIN, GPIO_PULLDOWN_ONLY);
|
||||||
|
gpio_set_intr_type(BMA456W_INT_PIN, GPIO_INTR_POSEDGE);
|
||||||
|
gpio_intr_enable(BMA456W_INT_PIN);
|
||||||
|
|
||||||
|
gpio_install_isr_service(0);
|
||||||
|
gpio_isr_handler_add(BMA456W_INT_PIN, interrupt_callback,
|
||||||
|
(void *)BMA456W_INT_PIN);
|
||||||
|
|
||||||
xTaskCreate(read_sensor_task, "READ_SENSOR", 4096, NULL, 1, NULL);
|
xTaskCreate(read_sensor_task, "READ_SENSOR", 4096, NULL, 1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user