Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
0e6f5e08
Commit
0e6f5e08
authored
May 27, 2015
by
Damien George
Browse files
stmhal: Allow to name I2C busses, and give them names for pyboard.
parent
1775b65e
Changes
3
Hide whitespace changes
Inline
Side-by-side
stmhal/boards/PYBV10/mpconfigboard.h
View file @
0e6f5e08
...
...
@@ -46,11 +46,11 @@
#define MICROPY_HW_UART6_PORT (GPIOC)
#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_SDA (pin_B7)
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
#define MICROPY_HW_I2C2_NAME "Y"
#define MICROPY_HW_I2C2_SCL (pin_B10)
#define MICROPY_HW_I2C2_SDA (pin_B11)
...
...
stmhal/boards/PYBV4/mpconfigboard.h
View file @
0e6f5e08
...
...
@@ -46,11 +46,11 @@
#define MICROPY_HW_UART6_PORT (GPIOC)
#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_SDA (pin_B7)
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
#define MICROPY_HW_I2C2_NAME "Y"
#define MICROPY_HW_I2C2_SCL (pin_B10)
#define MICROPY_HW_I2C2_SDA (pin_B11)
...
...
stmhal/i2c.c
View file @
0e6f5e08
...
...
@@ -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
[]
=
{
#if defined(MICROPY_HW_I2C1_SCL)
{{
&
pyb_i2c_type
},
&
I2CHandle1
},
#else
{{
&
pyb_i2c_type
},
NULL
},
#endif
#if defined(MICROPY_HW_I2C2_SCL)
{{
&
pyb_i2c_type
},
&
I2CHandle2
},
#else
{{
&
pyb_i2c_type
},
NULL
},
#endif
#if defined(MICROPY_HW_I2C3_SCL)
{{
&
pyb_i2c_type
},
&
I2CHandle3
},
#else
{{
&
pyb_i2c_type
},
NULL
},
#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
mp_arg_check_num
(
n_args
,
n_kw
,
1
,
MP_OBJ_FUN_ARGS_MAX
,
true
);
// get i2c number
mp_int_t
i2c_id
=
mp_obj_get_int
(
args
[
0
])
-
1
;
// check i2c number
if
(
!
(
0
<=
i2c_id
&&
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 bus %d does not exist"
,
i2c_id
+
1
));
// work out i2c bus
int
i2c_id
=
0
;
if
(
MP_OBJ_IS_STR
(
args
[
0
]))
{
const
char
*
port
=
mp_obj_str_get_str
(
args
[
0
]);
if
(
0
)
{
#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
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
)
{
// start the peripheral
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment