You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/09/27 22:36:25 UTC
[09/10] incubator-mynewt-core git commit: MYNEWT-391 STM32F4 ADC
driver and ADC HAL support
MYNEWT-391 STM32F4 ADC driver and ADC HAL support
- Addressing PR review
- moving gpio_init to adc_init and adding comment for intentional
fallthrough for the resolution of the gpios.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/bc6437c1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/bc6437c1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/bc6437c1
Branch: refs/heads/develop
Commit: bc6437c158b9d5b77d19a1ce9550c18100175a20
Parents: 3db7c48
Author: Vipul Rahane <vi...@runtime.io>
Authored: Thu Sep 22 14:48:50 2016 -0700
Committer: Vipul Rahane <vi...@runtime.io>
Committed: Tue Sep 27 13:34:07 2016 -0700
----------------------------------------------------------------------
drivers/adc/adc_stm32f4/src/adc_stm32f4.c | 38 +++++++++++++++++---------
1 file changed, 25 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/bc6437c1/drivers/adc/adc_stm32f4/src/adc_stm32f4.c
----------------------------------------------------------------------
diff --git a/drivers/adc/adc_stm32f4/src/adc_stm32f4.c b/drivers/adc/adc_stm32f4/src/adc_stm32f4.c
index efef0b4..480464a 100644
--- a/drivers/adc/adc_stm32f4/src/adc_stm32f4.c
+++ b/drivers/adc/adc_stm32f4/src/adc_stm32f4.c
@@ -124,6 +124,10 @@ stm32f4_resolve_adc_gpio(ADC_HandleTypeDef *adc, uint8_t cnum)
pin = ADC12_CH15_PIN;
goto done;
}
+ /*
+ * Falling through intentionally as ADC_3 contains seperate pins for
+ * Channels that ADC_1 and ADC_2 contain as well.
+ */
case (uintptr_t)ADC3:
switch(cnum) {
case ADC_CHANNEL_0:
@@ -362,15 +366,24 @@ stm32f4_adc_dma_init(ADC_HandleTypeDef* hadc)
static void
stm32f4_adc_init(void *arg)
{
- struct stm32f4_adc_dev_cfg *adc_config = (struct stm32f4_adc_dev_cfg *)arg;
+ struct adc_dev *dev;
+ struct stm32f4_adc_dev_cfg *adc_config;
ADC_HandleTypeDef *hadc;
+ GPIO_InitTypeDef gpio_td;
+ uint8_t cnum;
- assert(adc_config);
+ assert(arg);
+ dev = (struct adc_dev *)arg;
+ adc_config = (struct stm32f4_adc_dev_cfg *)dev->ad_dev_cfg;
hadc = adc_config->sac_adc_handle;
+ cnum = dev->ad_chans->c_cnum;
stm32f4_adc_dma_init(hadc);
+ gpio_td = stm32f4_resolve_adc_gpio(hadc, cnum);
+ hal_gpio_init_stm(gpio_td.Pin, &gpio_td);
+
if (HAL_ADC_Init(hadc) != HAL_OK) {
assert(0);
}
@@ -445,8 +458,7 @@ stm32f4_adc_open(struct os_dev *odev, uint32_t wait, void *arg)
goto err;
}
-
- stm32f4_adc_init(dev->ad_dev_cfg);
+ stm32f4_adc_init(dev);
cfg = dev->ad_dev_cfg;
hadc = cfg->sac_adc_handle;
@@ -500,21 +512,21 @@ stm32f4_adc_configure_channel(struct adc_dev *dev, uint8_t cnum,
int rc;
ADC_HandleTypeDef *hadc;
struct stm32f4_adc_dev_cfg *cfg;
- GPIO_InitTypeDef gpio_td;
struct adc_chan_config *chan_cfg;
- assert(dev != NULL && IS_ADC_CHANNEL(cnum));
+ rc = OS_EINVAL;
+
+ if (dev != NULL && IS_ADC_CHANNEL(cnum)) {
+ goto err;
+ }
+
cfg = dev->ad_dev_cfg;
hadc = cfg->sac_adc_handle;
chan_cfg = cfg->sac_chans;
- gpio_td = stm32f4_resolve_adc_gpio(hadc, cnum);
- hal_gpio_init_stm(gpio_td.Pin, &gpio_td);
-
-
cfgdata = (ADC_ChannelConfTypeDef *)cfgdata;
- if ((rc = HAL_ADC_ConfigChannel(hadc, cfgdata)) != HAL_OK) {
+ if ((HAL_ADC_ConfigChannel(hadc, cfgdata)) != HAL_OK) {
goto err;
}
@@ -524,11 +536,11 @@ stm32f4_adc_configure_channel(struct adc_dev *dev, uint8_t cnum,
#if 0
if (HAL_ADC_Start_IT(hadc) != HAL_OK) {
- assert(0);
+ goto err;
}
#endif
- return (0);
+ return (OS_OK);
err:
return (rc);
}