stmhal: Allow to name I2C busses, and give them names for pyboard.
This commit is contained in:
parent
1775b65e07
commit
0e6f5e08e1
@ -46,11 +46,11 @@
|
|||||||
#define MICROPY_HW_UART6_PORT (GPIOC)
|
#define MICROPY_HW_UART6_PORT (GPIOC)
|
||||||
#define MICROPY_HW_UART6_PINS (GPIO_PIN_6 | GPIO_PIN_7)
|
#define MICROPY_HW_UART6_PINS (GPIO_PIN_6 | GPIO_PIN_7)
|
||||||
|
|
||||||
// X-skin: X9=PB6=SCL, X10=PB7=SDA
|
// I2C busses
|
||||||
|
#define MICROPY_HW_I2C1_NAME "X"
|
||||||
#define MICROPY_HW_I2C1_SCL (pin_B6)
|
#define MICROPY_HW_I2C1_SCL (pin_B6)
|
||||||
#define MICROPY_HW_I2C1_SDA (pin_B7)
|
#define MICROPY_HW_I2C1_SDA (pin_B7)
|
||||||
|
#define MICROPY_HW_I2C2_NAME "Y"
|
||||||
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
|
|
||||||
#define MICROPY_HW_I2C2_SCL (pin_B10)
|
#define MICROPY_HW_I2C2_SCL (pin_B10)
|
||||||
#define MICROPY_HW_I2C2_SDA (pin_B11)
|
#define MICROPY_HW_I2C2_SDA (pin_B11)
|
||||||
|
|
||||||
|
@ -46,11 +46,11 @@
|
|||||||
#define MICROPY_HW_UART6_PORT (GPIOC)
|
#define MICROPY_HW_UART6_PORT (GPIOC)
|
||||||
#define MICROPY_HW_UART6_PINS (GPIO_PIN_6 | GPIO_PIN_7)
|
#define MICROPY_HW_UART6_PINS (GPIO_PIN_6 | GPIO_PIN_7)
|
||||||
|
|
||||||
// X-skin: X9=PB6=SCL, X10=PB7=SDA
|
// I2C busses
|
||||||
|
#define MICROPY_HW_I2C1_NAME "X"
|
||||||
#define MICROPY_HW_I2C1_SCL (pin_B6)
|
#define MICROPY_HW_I2C1_SCL (pin_B6)
|
||||||
#define MICROPY_HW_I2C1_SDA (pin_B7)
|
#define MICROPY_HW_I2C1_SDA (pin_B7)
|
||||||
|
#define MICROPY_HW_I2C2_NAME "Y"
|
||||||
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
|
|
||||||
#define MICROPY_HW_I2C2_SCL (pin_B10)
|
#define MICROPY_HW_I2C2_SCL (pin_B10)
|
||||||
#define MICROPY_HW_I2C2_SDA (pin_B11)
|
#define MICROPY_HW_I2C2_SDA (pin_B11)
|
||||||
|
|
||||||
|
42
stmhal/i2c.c
42
stmhal/i2c.c
@ -201,12 +201,18 @@ STATIC inline bool in_master_mode(pyb_i2c_obj_t *self) { return self->i2c->Init.
|
|||||||
STATIC const pyb_i2c_obj_t pyb_i2c_obj[] = {
|
STATIC const pyb_i2c_obj_t pyb_i2c_obj[] = {
|
||||||
#if defined(MICROPY_HW_I2C1_SCL)
|
#if defined(MICROPY_HW_I2C1_SCL)
|
||||||
{{&pyb_i2c_type}, &I2CHandle1},
|
{{&pyb_i2c_type}, &I2CHandle1},
|
||||||
|
#else
|
||||||
|
{{&pyb_i2c_type}, NULL},
|
||||||
#endif
|
#endif
|
||||||
#if defined(MICROPY_HW_I2C2_SCL)
|
#if defined(MICROPY_HW_I2C2_SCL)
|
||||||
{{&pyb_i2c_type}, &I2CHandle2},
|
{{&pyb_i2c_type}, &I2CHandle2},
|
||||||
|
#else
|
||||||
|
{{&pyb_i2c_type}, NULL},
|
||||||
#endif
|
#endif
|
||||||
#if defined(MICROPY_HW_I2C3_SCL)
|
#if defined(MICROPY_HW_I2C3_SCL)
|
||||||
{{&pyb_i2c_type}, &I2CHandle3},
|
{{&pyb_i2c_type}, &I2CHandle3},
|
||||||
|
#else
|
||||||
|
{{&pyb_i2c_type}, NULL},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -297,16 +303,38 @@ STATIC mp_obj_t pyb_i2c_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n
|
|||||||
// check arguments
|
// check arguments
|
||||||
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
|
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
|
||||||
|
|
||||||
// get i2c number
|
// work out i2c bus
|
||||||
mp_int_t i2c_id = mp_obj_get_int(args[0]) - 1;
|
int i2c_id = 0;
|
||||||
|
if (MP_OBJ_IS_STR(args[0])) {
|
||||||
// check i2c number
|
const char *port = mp_obj_str_get_str(args[0]);
|
||||||
if (!(0 <= i2c_id && i2c_id < MP_ARRAY_SIZE(pyb_i2c_obj) && pyb_i2c_obj[i2c_id].i2c != NULL)) {
|
if (0) {
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "I2C bus %d does not exist", i2c_id + 1));
|
#ifdef MICROPY_HW_I2C1_NAME
|
||||||
|
} else if (strcmp(port, MICROPY_HW_I2C1_NAME) == 0) {
|
||||||
|
i2c_id = 1;
|
||||||
|
#endif
|
||||||
|
#ifdef MICROPY_HW_I2C2_NAME
|
||||||
|
} else if (strcmp(port, MICROPY_HW_I2C2_NAME) == 0) {
|
||||||
|
i2c_id = 2;
|
||||||
|
#endif
|
||||||
|
#ifdef MICROPY_HW_I2C3_NAME
|
||||||
|
} else if (strcmp(port, MICROPY_HW_I2C3_NAME) == 0) {
|
||||||
|
i2c_id = 3;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
|
||||||
|
"I2C(%s) does not exist", port));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
i2c_id = mp_obj_get_int(args[0]);
|
||||||
|
if (i2c_id < 1 || i2c_id > MP_ARRAY_SIZE(pyb_i2c_obj)
|
||||||
|
|| pyb_i2c_obj[i2c_id].i2c == NULL) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
|
||||||
|
"I2C(%d) does not exist", i2c_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get I2C object
|
// get I2C object
|
||||||
const pyb_i2c_obj_t *i2c_obj = &pyb_i2c_obj[i2c_id];
|
const pyb_i2c_obj_t *i2c_obj = &pyb_i2c_obj[i2c_id - 1];
|
||||||
|
|
||||||
if (n_args > 1 || n_kw > 0) {
|
if (n_args > 1 || n_kw > 0) {
|
||||||
// start the peripheral
|
// start the peripheral
|
||||||
|
Loading…
x
Reference in New Issue
Block a user