Skip to content

Egpio irq #191

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions components/flow3r_bsp/flow3r_bsp_imu.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,6 @@ esp_err_t flow3r_bsp_imu_init(flow3r_bsp_imu_t *imu) {
bmi2_error_codes_print_result(rslt);
if (rslt != BMI2_OK) return ESP_FAIL;

struct bmi2_sens_int_config sens_int = { .type = BMI2_STEP_COUNTER, .hw_int_pin = BMI2_INT1 };
rslt = bmi270_map_feat_int(&sens_int, 1, &(imu->bmi));
bmi2_error_codes_print_result(rslt);
if (rslt != BMI2_OK) return ESP_FAIL;

struct bmi2_sens_config config;
config.type = BMI2_ACCEL;

Expand Down Expand Up @@ -565,10 +560,6 @@ static int8_t set_accel_config(flow3r_bsp_imu_t *imu) {
/* Set the accel configurations. */
rslt = bmi2_set_sensor_config(&config, 1, &imu->bmi);
bmi2_error_codes_print_result(rslt);

/* Map data ready interrupt to interrupt pin. */
rslt = bmi2_map_data_int(BMI2_DRDY_INT, BMI2_INT1, &imu->bmi);
bmi2_error_codes_print_result(rslt);
}

return rslt;
Expand Down Expand Up @@ -616,10 +607,6 @@ static int8_t set_gyro_config(flow3r_bsp_imu_t *imu) {

rslt = bmi2_set_sensor_config(&config, 1, &imu->bmi);
bmi2_error_codes_print_result(rslt);

/* Map data ready interrupt to interrupt pin. */
rslt = bmi2_map_data_int(BMI2_DRDY_INT, BMI2_INT1, &imu->bmi);
bmi2_error_codes_print_result(rslt);
}

return rslt;
Expand Down
16 changes: 6 additions & 10 deletions drivers/tildagon/tildagon.c
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
#include "py/builtin.h"
#include "py/runtime.h"
#include "tildagon_pin.h"

extern mp_obj_module_t tildagon_pin_type;


static const mp_rom_map_elem_t mp_module_tildagon_globals_table[] = {
static const mp_rom_map_elem_t mp_module_egpio_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_egpio) },
// { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&tildagon_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_ePin), MP_ROM_PTR(&tildagon_pin_type)}
};
static MP_DEFINE_CONST_DICT(mp_module_tildagon_globals, mp_module_tildagon_globals_table);
static MP_DEFINE_CONST_DICT(mp_module_egpio_globals, mp_module_egpio_globals_table);

const mp_obj_module_t mp_module_tildagon = {
const mp_obj_module_t mp_module_egpio = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&mp_module_tildagon_globals,
.globals = (mp_obj_dict_t *)&mp_module_egpio_globals,
};

MP_REGISTER_MODULE(MP_QSTR_egpio, mp_module_tildagon);

MP_REGISTER_MODULE(MP_QSTR_egpio, mp_module_egpio);
80 changes: 40 additions & 40 deletions drivers/tildagon_pin/aw9523b.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,17 @@ static esp_err_t aw9523b_writeregs(aw9523b_device_t *dev, uint8_t reg, const uin
return tildagon_mux_i2c_transaction(mux, dev->i2c_addr, 1, (mp_machine_i2c_buf_t*)&buffer, WRITE);
}

void aw9523b_init(aw9523b_device_t *dev) {
void aw9523b_init(aw9523b_device_t *dev)
{
aw9523b_writeregs(dev, 0x7F, (const uint8_t*)"\x00", 2);
aw9523b_writeregs(dev, 0x06, (const uint8_t*)"\xff\xff", 2);
aw9523b_writeregs(dev, 0x04, (const uint8_t*)"\xff\xff", 2);
aw9523b_writeregs(dev, 0x11, (const uint8_t*)"\x10", 1);
aw9523b_writeregs(dev, 0x20, (const uint8_t*)"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16);
dev->irq_enables[0] = 0xFFU;
dev->irq_enables[1] = 0xFFU;
aw9523b_pin_get_input(dev, 0);
aw9523b_pin_get_input(dev, 8);
}


Expand All @@ -53,6 +59,7 @@ bool aw9523b_pin_get_input(aw9523b_device_t *dev, aw9523b_pin_t pin) {
if (err < 0) {
return false;
}
dev->last_input_values[port] = reg_val;
bool pin_val = (reg_val & pin_mask) != 0;
return pin_val;
}
Expand Down Expand Up @@ -102,7 +109,6 @@ bool aw9523b_pin_get_direction(aw9523b_device_t *dev, aw9523b_pin_t pin) {
if (err < 0) {
return false;
}
dev->last_input_values[port] = reg_val;
bool pin_val = (reg_val & pin_mask) != 0;
return pin_val;
}
Expand Down Expand Up @@ -165,7 +171,7 @@ void aw9523b_irq_register(aw9523b_device_t *dev, aw9523b_pin_t pin, aw9523b_irq_
uint8_t port = aw9523b_portnum(pin);
uint8_t pin_index = aw9523b_portpin(pin);

dev->irq_handlers[port][pin_index] = (struct aw9523b_irq_handler) {
dev->irq_handlers[port][pin_index] = (aw9523b_irq_handler_t) {
.callback = callback,
.args = args
};
Expand All @@ -174,7 +180,7 @@ void aw9523b_irq_register(aw9523b_device_t *dev, aw9523b_pin_t pin, aw9523b_irq_
void aw9523b_irq_unregister(aw9523b_device_t *dev, aw9523b_pin_t pin) {
aw9523b_check_valid_pin(pin);
uint8_t port = aw9523b_portnum(pin);
dev->irq_handlers[port][pin] = (struct aw9523b_irq_handler) {
dev->irq_handlers[port][pin] = (aw9523b_irq_handler_t) {
.callback = NULL,
.args = NULL
};
Expand All @@ -184,54 +190,48 @@ void aw9523b_irq_enable(aw9523b_device_t *dev, aw9523b_pin_t pin) {
aw9523b_check_valid_pin(pin);
uint8_t port = aw9523b_portnum(pin);
uint8_t pin_mask = 1 << aw9523b_portpin(pin);

uint8_t reg = 0x06 + port;
uint8_t reg_val = 0;
esp_err_t err = aw9523b_readregs(dev, reg, &reg_val, 1);
if (err < 0) {
return;
}
reg_val |= pin_mask;
reg_val = ~reg_val;
err = aw9523b_writeregs(dev, reg, &reg_val, 1);
reg_val = ~reg_val;
dev->irq_enables[port] = reg_val;
dev->irq_got[port] &= ~pin_mask;
dev->irq_enables[port] &= ~pin_mask;
aw9523b_writeregs(dev, reg, &dev->irq_enables[port], 1);
}

void aw9523b_irq_disable(aw9523b_device_t *dev, aw9523b_pin_t pin) {
aw9523b_check_valid_pin(pin);
uint8_t port = aw9523b_portnum(pin);
uint8_t pin_mask = 1 << aw9523b_portpin(pin);

uint8_t reg = 0x06 + port;
uint8_t reg_val = 0;
esp_err_t err = aw9523b_readregs(dev, reg, &reg_val, 1);
if (err < 0) {
return;
}
reg_val &= ~pin_mask;
reg_val = ~reg_val;
err = aw9523b_writeregs(dev, reg, &reg_val, 1);
reg_val = ~reg_val;
dev->irq_enables[port] = reg_val;
dev->irq_enables[port] |= pin_mask;
aw9523b_writeregs(dev, reg, &dev->irq_enables[port], 1);
}

void aw9523b_irq_handler(aw9523b_device_t *dev) {
uint8_t irq_enables[2];
void aw9523b_irq_handler(aw9523b_device_t *dev)
{
uint8_t input_values[2];
if (aw9523b_readregs(dev, 0x06, irq_enables, 2) != ESP_OK
|| aw9523b_readregs(dev, 0x00, input_values, 2) != ESP_OK) {
return;
esp_err_t err = aw9523b_readregs(dev, 0x00, &input_values[0], 1);
if ( err >= 0 )
{
err = aw9523b_readregs(dev, 0x01, &input_values[1], 1);
}
for (uint8_t port = 0; port < 2; port++) {
uint8_t changed = input_values[port] ^ dev->last_input_values[port];
dev->last_input_values[port] = input_values[port];
for (uint8_t pin = 0; pin < 8; pin++) {
uint8_t pin_mask = 1 << pin;
if (((~irq_enables[port]) & pin_mask & changed)
&& dev->irq_handlers[port][pin].callback ) {
dev->irq_handlers[port][pin].callback(dev->irq_handlers[port][pin].args);
if ( err >= 0 )
{
for (uint8_t port = 0; port < 2; port++)
{
uint8_t changed = input_values[port] ^ dev->last_input_values[port];
dev->last_input_values[port] = input_values[port];
for (uint8_t pin = 0; pin < 8; pin++)
{
uint8_t pin_mask = 1 << pin;
if ((~dev->irq_enables[port] & pin_mask & changed)
&& dev->irq_handlers[port][pin].callback )
{

uint8_t event = GPIO_INTR_NEGEDGE;
if ( input_values[port] & pin_mask )
{
event = GPIO_INTR_POSEDGE;
}
dev->irq_handlers[port][pin].callback(dev->irq_handlers[port][pin].args, event);
}
}
}
}
Expand Down
15 changes: 7 additions & 8 deletions drivers/tildagon_pin/aw9523b.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,22 @@ typedef enum{

} aw9523b_pin_mode_t;
typedef bool aw9523b_pin_state_t;
typedef void (*aw9523b_irq_callback_t)(void*);
typedef void (*aw9523b_irq_callback_t)(void*,uint8_t);

struct aw9523b_irq_handler{
typedef struct
{
aw9523b_irq_callback_t callback;
void* args;
};
} aw9523b_irq_handler_t;

typedef struct aw9523b_device{
typedef struct aw9523b_device
{
const tca9548a_i2c_mux_t *mux;
tca9548a_i2c_port_t i2c_port;
uint16_t i2c_addr;
uint8_t last_input_values[2];
uint8_t last_port_values[2];
uint8_t direction[2];
uint8_t irq_enables[2];
uint8_t irq_got[2]; // 1 if input value is cached
struct aw9523b_irq_handler irq_handlers[2][8];
aw9523b_irq_handler_t irq_handlers[2][8];
} aw9523b_device_t;

void aw9523b_init(aw9523b_device_t *dev);
Expand Down
96 changes: 48 additions & 48 deletions drivers/tildagon_pin/pins.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,54 +8,54 @@
#include "pins.h"

const tildagon_pin_obj_t tildagon_pin_obj_table[GPIO_EXT_NUM_MAX] = {
[GPIO_EXT_NUM_0_0] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_1] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_2] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_3] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_4] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_5] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_6] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_7] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_8] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_9] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_10] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_11] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_12] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_13] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_14] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_15] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_0] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_1] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_2] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_3] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_4] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_5] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_6] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_7] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_8] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_9] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_10] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_11] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_12] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_13] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_14] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_1_15] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_0] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_1] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_2] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_3] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_4] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_5] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_6] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_7] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_8] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_9] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_10] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_11] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_12] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_13] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_14] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_2_15] = { .base = { .type = &tildagon_pin_type }, .irq = { .base = { .type = &tildagon_pin_irq_type } } },
[GPIO_EXT_NUM_0_0] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_1] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_2] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_3] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_4] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_5] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_6] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_7] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_8] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_9] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_10] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_11] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_12] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_13] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_14] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_0_15] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_0] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_1] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_2] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_3] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_4] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_5] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_6] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_7] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_8] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_9] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_10] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_11] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_12] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_13] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_14] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_1_15] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_0] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_1] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_2] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_3] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_4] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_5] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_6] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_7] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_8] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_9] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_10] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_11] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_12] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_13] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_14] = { .base = { .type = &tildagon_pin_type } },
[GPIO_EXT_NUM_2_15] = { .base = { .type = &tildagon_pin_type } },
};


Expand Down
Loading
Loading