This is an automated email from the ASF dual-hosted git repository. jerzy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 712aea0f27d1bc5b0c7b5bb017e08bf39208f8e0 Author: Jerzy Kasenberg <jerzy.kasenb...@codecoup.pl> AuthorDate: Tue Apr 23 14:51:13 2019 +0200 hw/drivers/adc: Add battery reading channel When application wants to use ADC (GP or SD) for battery reading it may enable it with GPADC_BATTERY or SDADC_BATTERY open device BATTERY_ADC_DEV_NAME and read value from ADC. adc = (struct adc_dev *)da1469x_open_battery_adc(BATTERY_ADC_DEV_NAME, 1); adc_read_channel(adc, BATTERY_ADC_CHANNEL, &bat_val); os_dev_close(&adc->ad_dev); --- .../include/gpadc_da1469x/gpadc_da1469x.h | 7 ++++++ hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c | 27 ++++++++++++++++++++++ .../include/sdadc_da1469x/sdadc_da1469x.h | 7 ++++++ hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c | 25 ++++++++++++++++++++ hw/mcu/dialog/da1469x/syscfg.yml | 12 ++++++++++ 5 files changed, 78 insertions(+) diff --git a/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h b/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h index c8bf3e3..01b9b27 100644 --- a/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h +++ b/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h @@ -66,6 +66,13 @@ struct da1469x_gpadc_chan_cfg { */ int da1469x_gpadc_init(struct os_dev *, void *); +#if MYNEWT_VAL(GPADC_BATTERY) + +#define BATTERY_ADC_DEV_NAME "gpadc" + +struct os_dev *da1469x_open_battery_adc(const char *dev_name, uint32_t wait); +#endif + #ifdef __cplusplus } #endif diff --git a/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c b/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c index 28b5031..0a7faea 100644 --- a/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c +++ b/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c @@ -662,3 +662,30 @@ da1469x_gpadc_init(struct os_dev *odev, void *arg) return 0; } + +#if MYNEWT_VAL(GPADC_BATTERY) + +static struct da1469x_gpadc_dev_cfg os_bsp_gpadc_battery_cfg = { + .dgdc_gpadc_ctrl = (1U << GPADC_GP_ADC_CTRL_REG_GP_ADC_SE_Pos) | + (8U << GPADC_GP_ADC_CTRL_REG_GP_ADC_SEL_Pos), + .dgdc_gpadc_ctrl2 = 0, + .dgdc_gpadc_ctrl3 = 0, + .dgdc_gpadc_set_offp = 0, + .dgdc_gpadc_set_offn = 0, + .dgdc_gpadc_offp = 0, + .dgdc_gpadc_offn = 0, +}; + +struct os_dev * +da1469x_open_battery_adc(const char *dev_name, uint32_t wait) +{ + struct os_dev *adc = os_dev_open(dev_name, wait, &os_bsp_gpadc_battery_cfg); + if (adc) { + /* call adc_chan_config to setup correct multiplier so read returns + * value in mV */ + adc_chan_config((struct adc_dev *)adc, 0, NULL); + } + return adc; +} + +#endif diff --git a/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h b/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h index 81b8ce6..7244315 100644 --- a/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h +++ b/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h @@ -63,6 +63,13 @@ struct da1469x_sdadc_chan_cfg { */ int da1469x_sdadc_init(struct os_dev *, void *); +#if MYNEWT_VAL(SDADC_BATTERY) + +#define BATTERY_ADC_DEV_NAME "sdadc" + +struct os_dev *da1469x_open_battery_adc(const char *dev_name, uint32_t wait); +#endif + #ifdef __cplusplus } #endif diff --git a/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c b/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c index dab155f..baef543 100644 --- a/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c +++ b/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c @@ -453,3 +453,28 @@ da1469x_sdadc_init(struct os_dev *odev, void *arg) return 0; } + +#if MYNEWT_VAL(SDADC_BATTERY) + +static struct da1469x_sdadc_dev_cfg os_bsp_adc_battery_cfg = { + .dsdc_sdadc_ctrl = (1U << SDADC_SDADC_CTRL_REG_SDADC_SE_Pos) | + (8U << SDADC_SDADC_CTRL_REG_SDADC_INP_SEL_Pos), + .dsdc_sdadc_gain_corr = 0, + .dsdc_sdadc_offs_corr = 0, + .dsdc_sdadc_set_gain_corr = 0, + .dsdc_sdadc_set_offs_corr = 0, +}; + +struct os_dev * +da1469x_open_battery_adc(const char *dev_name, uint32_t wait) +{ + struct os_dev *adc = os_dev_open(dev_name, wait, &os_bsp_adc_battery_cfg); + if (adc) { + /* call adc_chan_config to setup correct multiplier so read returns + * value in mV */ + adc_chan_config((struct adc_dev *)adc, 0, NULL); + } + return adc; +} + +#endif diff --git a/hw/mcu/dialog/da1469x/syscfg.yml b/hw/mcu/dialog/da1469x/syscfg.yml index 58fc080..bce3120 100644 --- a/hw/mcu/dialog/da1469x/syscfg.yml +++ b/hw/mcu/dialog/da1469x/syscfg.yml @@ -286,6 +286,12 @@ syscfg.defs: description: > 'DMA priority for GPADC, 0-7' value: 0 + GPADC_BATTERY: + description: > + Enable battery measurement on GPADC + value: 0 + restrictions: + - '!SDADC_BATTERY' SDADC: description: Enable DA1469x sigma delta ADC @@ -298,6 +304,12 @@ syscfg.defs: description: > 'DMA priority for SDADC, 0-7' value: 0 + SDADC_BATTERY: + description: > + Enable battery measurement on SDADC + value: 0 + restrictions: + - '!GPADC_BATTERY' syscfg.restrictions: - "QSPI_FLASH_ADDRESS_LENGTH==24"