From 060e841ff8e47a83b4d03d956793df7b0b1b5e47 Mon Sep 17 00:00:00 2001 From: Philippe Coval Date: Fri, 14 Jun 2019 21:39:51 +0200 Subject: [PATCH] stm32f7nucleo: Add ADC support Aligned to configuration of NuttX: GPIO_ADC1_IN3 nuttx/configs/nucleo-144/src/stm32_adc.c (nuttx-7.21-298-gc67b807f43) More pins/channels may be configured later. Change-Id: I5407e6b9b91eaa8570713d0331f786441ce0c649 Relate-to: https://github.com/rzr/webthing-iotjs/issues/3 Forwarded: https://github.com/pando-project/iotjs/pull/1894 IoT.js-DCO-1.0-Signed-off-by: Philippe Coval p.coval@samsung.com --- config/nuttx/stm32f7nucleo/nuttx.profile | 1 + .../nuttx/iotjs_module_stm32f7nucleo-nuttx.c | 24 +++++++++++++++++++ src/platform/nuttx/iotjs_systemio-nuttx.c | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/config/nuttx/stm32f7nucleo/nuttx.profile b/config/nuttx/stm32f7nucleo/nuttx.profile index b06671cc93..1a53968dd0 100644 --- a/config/nuttx/stm32f7nucleo/nuttx.profile +++ b/config/nuttx/stm32f7nucleo/nuttx.profile @@ -1,5 +1,6 @@ ENABLE_MODULE_IOTJS_BASIC_MODULES ENABLE_MODULE_IOTJS_CORE_MODULES +ENABLE_MODULE_ADC ENABLE_MODULE_GPIO ENABLE_MODULE_PWM ENABLE_MODULE_STM32F7NUCLEO diff --git a/src/modules/nuttx/iotjs_module_stm32f7nucleo-nuttx.c b/src/modules/nuttx/iotjs_module_stm32f7nucleo-nuttx.c index 1075bf13f9..5bb0e2fb68 100644 --- a/src/modules/nuttx/iotjs_module_stm32f7nucleo-nuttx.c +++ b/src/modules/nuttx/iotjs_module_stm32f7nucleo-nuttx.c @@ -21,6 +21,26 @@ #include "iotjs_def.h" #include "modules/iotjs_module_stm32f7nucleo.h" +#if ENABLE_MODULE_ADC +static void iotjs_pin_initialize_adc(jerry_value_t jobj) { + unsigned int number_bit; + +// ADC pin name is "ADC(number)_(timer)". +#define SET_ADC_CONSTANT(number, timer) \ + number_bit = (GPIO_ADC##number##_IN##timer); \ + number_bit |= (ADC_NUMBER(number)); \ + number_bit |= (SYSIO_TIMER_NUMBER(timer)); \ + iotjs_jval_set_property_number(jobj, "ADC" #number "_" #timer, number_bit); + +#define SET_ADC_CONSTANT_NUMBER(number) SET_ADC_CONSTANT(number, 3); + + SET_ADC_CONSTANT_NUMBER(1); + +#undef SET_ADC_CONSTANT_NUMBER +#undef SET_ADC_CONSTANT +} +#endif /* ENABLE_MODULE_ADC */ + #if ENABLE_MODULE_GPIO static void iotjs_pin_initialize_gpio(jerry_value_t jobj) { @@ -115,6 +135,10 @@ void iotjs_stm32f7nucleo_pin_initialize(jerry_value_t jobj) { jerry_value_t jpin = jerry_create_object(); iotjs_jval_set_property_jval(jobj, "pin", jpin); +#if ENABLE_MODULE_ADC + iotjs_pin_initialize_adc(jpin); +#endif /* ENABLE_MODULE_ADC */ + #if ENABLE_MODULE_GPIO iotjs_pin_initialize_gpio(jpin); #endif /* ENABLE_MODULE_GPIO */ diff --git a/src/platform/nuttx/iotjs_systemio-nuttx.c b/src/platform/nuttx/iotjs_systemio-nuttx.c index b60d67e6cb..1305762e60 100644 --- a/src/platform/nuttx/iotjs_systemio-nuttx.c +++ b/src/platform/nuttx/iotjs_systemio-nuttx.c @@ -45,7 +45,11 @@ struct adc_dev_s* iotjs_adc_config_nuttx(int number, int timer, uint32_t pin) { stm32_configgpio(pin); uint8_t channel_list[1] = { timer }; +#if defined(TARGET_BOARD_STM32F4DIS) return stm32_adcinitialize(number, channel_list, 1); +#elif defined(TARGET_BOARD_STM32F7NUCLEO) + return stm32_adc_initialize(number, channel_list, 1); +#endif } #endif /* ENABLE_MODULE_ADC */