esp8266: Expose simple pin API at C level.
This commit is contained in:
parent
cdad2b6f4d
commit
342d903a13
@ -1,3 +1,7 @@
|
|||||||
extern const mp_obj_type_t pyb_pin_type;
|
extern const mp_obj_type_t pyb_pin_type;
|
||||||
extern const mp_obj_type_t pyb_adc_type;
|
extern const mp_obj_type_t pyb_adc_type;
|
||||||
extern const mp_obj_type_t pyb_rtc_type;
|
extern const mp_obj_type_t pyb_rtc_type;
|
||||||
|
|
||||||
|
uint mp_obj_get_pin(mp_obj_t pin_in);
|
||||||
|
int pin_get(uint pin);
|
||||||
|
void pin_set(uint pin, int value);
|
||||||
|
@ -69,10 +69,22 @@ STATIC const pyb_pin_obj_t pyb_pin_obj[] = {
|
|||||||
|
|
||||||
STATIC uint8_t pin_mode[16];
|
STATIC uint8_t pin_mode[16];
|
||||||
|
|
||||||
STATIC void pin_set(uint pin, uint mode, int value) {
|
uint mp_obj_get_pin(mp_obj_t pin_in) {
|
||||||
|
if (mp_obj_get_type(pin_in) != &pyb_pin_type) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "expecting a pin"));
|
||||||
|
}
|
||||||
|
pyb_pin_obj_t *self = pin_in;
|
||||||
|
return self->phys_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pin_get(uint pin) {
|
||||||
|
return GPIO_INPUT_GET(pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pin_set(uint pin, int value) {
|
||||||
uint32_t enable = 0;
|
uint32_t enable = 0;
|
||||||
uint32_t disable = 0;
|
uint32_t disable = 0;
|
||||||
switch (mode) {
|
switch (pin_mode[pin]) {
|
||||||
case GPIO_MODE_INPUT:
|
case GPIO_MODE_INPUT:
|
||||||
value = -1;
|
value = -1;
|
||||||
disable = 1;
|
disable = 1;
|
||||||
@ -162,7 +174,7 @@ STATIC mp_obj_t pyb_pin_obj_init_helper(pyb_pin_obj_t *self, mp_uint_t n_args, c
|
|||||||
PIN_PULLUP_EN(self->periph);
|
PIN_PULLUP_EN(self->periph);
|
||||||
}
|
}
|
||||||
|
|
||||||
pin_set(self->phys_port, mode, value);
|
pin_set(self->phys_port, value);
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
@ -203,7 +215,7 @@ STATIC mp_obj_t pyb_pin_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw,
|
|||||||
return MP_OBJ_NEW_SMALL_INT(GPIO_INPUT_GET(self->phys_port));
|
return MP_OBJ_NEW_SMALL_INT(GPIO_INPUT_GET(self->phys_port));
|
||||||
} else {
|
} else {
|
||||||
// set pin
|
// set pin
|
||||||
pin_set(self->phys_port, pin_mode[self->phys_port], mp_obj_is_true(args[0]));
|
pin_set(self->phys_port, mp_obj_is_true(args[0]));
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,7 +235,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pyb_pin_value_obj, 1, 2, pyb_pin_valu
|
|||||||
// pin.low()
|
// pin.low()
|
||||||
STATIC mp_obj_t pyb_pin_low(mp_obj_t self_in) {
|
STATIC mp_obj_t pyb_pin_low(mp_obj_t self_in) {
|
||||||
pyb_pin_obj_t *self = self_in;
|
pyb_pin_obj_t *self = self_in;
|
||||||
pin_set(self->phys_port, pin_mode[self->phys_port], 0);
|
pin_set(self->phys_port, 0);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_low_obj, pyb_pin_low);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_low_obj, pyb_pin_low);
|
||||||
@ -231,7 +243,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_low_obj, pyb_pin_low);
|
|||||||
// pin.high()
|
// pin.high()
|
||||||
STATIC mp_obj_t pyb_pin_high(mp_obj_t self_in) {
|
STATIC mp_obj_t pyb_pin_high(mp_obj_t self_in) {
|
||||||
pyb_pin_obj_t *self = self_in;
|
pyb_pin_obj_t *self = self_in;
|
||||||
pin_set(self->phys_port, pin_mode[self->phys_port], 1);
|
pin_set(self->phys_port, 1);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_high_obj, pyb_pin_high);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_high_obj, pyb_pin_high);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user