summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/adc.c
diff options
context:
space:
mode:
Diffstat (limited to 'stmhal/adc.c')
-rw-r--r--stmhal/adc.c62
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);