diff options
Diffstat (limited to 'stmhal/adc.c')
-rw-r--r-- | stmhal/adc.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/stmhal/adc.c b/stmhal/adc.c index b0a7a0749a..78f0820d69 100644 --- a/stmhal/adc.c +++ b/stmhal/adc.c @@ -18,7 +18,7 @@ // adc = pyb.ADC(pin) // val = adc.read() // -// adc = pyb.ADC_all(resolution) +// adc = pyb.ADCAll(resolution) // val = adc.read_channel(channel) // val = adc.read_core_temp() // val = adc.read_core_vbat() @@ -129,7 +129,7 @@ STATIC mp_obj_t adc_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_ if (MP_OBJ_IS_INT(pin_obj)) { channel = mp_obj_get_int(pin_obj); } else { - const pin_obj_t *pin = pin_map_user_obj(pin_obj); + const pin_obj_t *pin = pin_find(pin_obj); if ((pin->adc_num & PIN_ADC1) == 0) { // No ADC1 function on that pin nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "pin %s does not have ADC capabilities", pin->name)); @@ -138,10 +138,10 @@ STATIC mp_obj_t adc_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_ } if (!IS_ADC_CHANNEL(channel)) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Not a valid ADC Channel: %d", channel)); + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "not a valid ADC Channel: %d", channel)); } if (pin_adc1[channel] == NULL) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Channel %d not available on this board", channel)); + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "channel %d not available on this board", channel)); } pyb_obj_adc_t *o = m_new_obj(pyb_obj_adc_t); @@ -211,12 +211,12 @@ const mp_obj_type_t pyb_adc_type = { /******************************************************************************/ /* adc all object */ -typedef struct _pyb_obj_adc_all_t { +typedef struct _pyb_adc_all_obj_t { mp_obj_base_t base; ADC_HandleTypeDef handle; -} pyb_obj_adc_all_t; +} pyb_adc_all_obj_t; -void adc_init_all(pyb_obj_adc_all_t *adc_all, uint32_t resolution) { +void adc_init_all(pyb_adc_all_obj_t *adc_all, uint32_t resolution) { switch (resolution) { case 6: resolution = ADC_RESOLUTION6b; break; @@ -314,46 +314,49 @@ float adc_read_core_vref(ADC_HandleTypeDef *adcHandle) { /******************************************************************************/ /* Micro Python bindings : adc_all object */ -STATIC void adc_all_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) { - print(env, "<ADC all>"); +STATIC mp_obj_t adc_all_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) { + // check number of arguments + mp_check_nargs(n_args, 1, 1, n_kw, false); + + // make ADCAll object + pyb_adc_all_obj_t *o = m_new_obj(pyb_adc_all_obj_t); + o->base.type = &pyb_adc_all_type; + adc_init_all(o, mp_obj_get_int(args[0])); // args[0] is the resolution + + return o; } STATIC mp_obj_t adc_all_read_channel(mp_obj_t self_in, mp_obj_t channel) { - pyb_obj_adc_all_t *self = self_in; - + pyb_adc_all_obj_t *self = self_in; uint32_t chan = mp_obj_get_int(channel); uint32_t data = adc_config_and_read_channel(&self->handle, chan); return mp_obj_new_int(data); } +STATIC MP_DEFINE_CONST_FUN_OBJ_2(adc_all_read_channel_obj, adc_all_read_channel); STATIC mp_obj_t adc_all_read_core_temp(mp_obj_t self_in) { - pyb_obj_adc_all_t *self = self_in; - + pyb_adc_all_obj_t *self = self_in; int data = adc_read_core_temp(&self->handle); return mp_obj_new_int(data); } +STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_temp_obj, adc_all_read_core_temp); STATIC mp_obj_t adc_all_read_core_vbat(mp_obj_t self_in) { - pyb_obj_adc_all_t *self = self_in; - + pyb_adc_all_obj_t *self = self_in; float data = adc_read_core_vbat(&self->handle); return mp_obj_new_float(data); } +STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vbat_obj, adc_all_read_core_vbat); STATIC mp_obj_t adc_all_read_core_vref(mp_obj_t self_in) { - pyb_obj_adc_all_t *self = self_in; - + pyb_adc_all_obj_t *self = self_in; float data = adc_read_core_vref(&self->handle); return mp_obj_new_float(data); } - -STATIC MP_DEFINE_CONST_FUN_OBJ_2(adc_all_read_channel_obj, adc_all_read_channel); -STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_temp_obj, adc_all_read_core_temp); -STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vbat_obj, adc_all_read_core_vbat); STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vref_obj, adc_all_read_core_vref); STATIC const mp_map_elem_t adc_all_locals_dict_table[] = { - { MP_OBJ_NEW_QSTR(MP_QSTR_read_channel), (mp_obj_t) &adc_all_read_channel_obj}, + { MP_OBJ_NEW_QSTR(MP_QSTR_read_channel), (mp_obj_t)&adc_all_read_channel_obj}, { MP_OBJ_NEW_QSTR(MP_QSTR_read_core_temp), (mp_obj_t)&adc_all_read_core_temp_obj}, { MP_OBJ_NEW_QSTR(MP_QSTR_read_core_vbat), (mp_obj_t)&adc_all_read_core_vbat_obj}, { MP_OBJ_NEW_QSTR(MP_QSTR_read_core_vref), (mp_obj_t)&adc_all_read_core_vref_obj}, @@ -361,18 +364,9 @@ STATIC const mp_map_elem_t adc_all_locals_dict_table[] = { STATIC MP_DEFINE_CONST_DICT(adc_all_locals_dict, adc_all_locals_dict_table); -STATIC const mp_obj_type_t adc_all_type = { +const mp_obj_type_t pyb_adc_all_type = { { &mp_type_type }, - .name = MP_QSTR_ADC, - .print = adc_all_print, + .name = MP_QSTR_ADCAll, + .make_new = adc_all_make_new, .locals_dict = (mp_obj_t)&adc_all_locals_dict, }; - -STATIC mp_obj_t pyb_ADC_all(mp_obj_t resolution) { - pyb_obj_adc_all_t *o = m_new_obj(pyb_obj_adc_all_t); - o->base.type = &adc_all_type; - adc_init_all(o, mp_obj_get_int(resolution)); - return o; -} - -MP_DEFINE_CONST_FUN_OBJ_1(pyb_ADC_all_obj, pyb_ADC_all); |