summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2022-04-22 18:59:27 -0400
committerguo <[email protected]>2022-04-23 23:03:59 +0800
commit175ca2ee09698f554993fb2ff440cad1c9af89f4 (patch)
tree871af8f7605bc7f6a7d7e79437866bd699aeabfb
parent778be73cac4795c97ab01872e94dbf09f2014634 (diff)
[dac] add get resolution method
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_dac.c13
-rw-r--r--components/drivers/include/drivers/dac.h2
-rw-r--r--components/drivers/misc/adc.c2
-rw-r--r--components/drivers/misc/dac.c20
4 files changed, 29 insertions, 8 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c
index 4916f65513..a3ea4a58c6 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c
@@ -105,6 +105,18 @@ static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t cha
return RT_EOK;
}
+static rt_uint8_t stm32_dac_get_resolution(struct rt_dac_device *device)
+{
+ DAC_HandleTypeDef *stm32_dac_handler;
+
+ RT_ASSERT(device != RT_NULL);
+
+ stm32_dac_handler = device->parent.user_data;
+ (void)stm32_dac_handler;
+
+ return 12; /* TODO */
+}
+
static rt_err_t stm32_set_dac_value(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value)
{
uint32_t dac_channel;
@@ -162,6 +174,7 @@ static const struct rt_dac_ops stm_dac_ops =
.disabled = stm32_dac_disabled,
.enabled = stm32_dac_enabled,
.convert = stm32_set_dac_value,
+ .get_resolution = stm32_dac_get_resolution,
};
static int stm32_dac_init(void)
diff --git a/components/drivers/include/drivers/dac.h b/components/drivers/include/drivers/dac.h
index dcda0ef68f..0270b988ba 100644
--- a/components/drivers/include/drivers/dac.h
+++ b/components/drivers/include/drivers/dac.h
@@ -18,6 +18,7 @@ struct rt_dac_ops
rt_err_t (*disabled)(struct rt_dac_device *device, rt_uint32_t channel);
rt_err_t (*enabled)(struct rt_dac_device *device, rt_uint32_t channel);
rt_err_t (*convert)(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value);
+ rt_uint8_t (*get_resolution)(struct rt_dac_device *device);
};
struct rt_dac_device
@@ -31,6 +32,7 @@ typedef enum
{
RT_DAC_CMD_ENABLE = RT_DEVICE_CTRL_BASE(DAC) + 0,
RT_DAC_CMD_DISABLE = RT_DEVICE_CTRL_BASE(DAC) + 1,
+ RT_DAC_CMD_GET_RESOLUTION = RT_DEVICE_CTRL_BASE(DAC) + 2,
} rt_dac_cmd_t;
rt_err_t rt_hw_dac_register(rt_dac_device_t dac,const char *name, const struct rt_dac_ops *ops, const void *user_data);
diff --git a/components/drivers/misc/adc.c b/components/drivers/misc/adc.c
index ae324a16ec..9c87919793 100644
--- a/components/drivers/misc/adc.c
+++ b/components/drivers/misc/adc.c
@@ -58,7 +58,7 @@ static rt_err_t _adc_control(rt_device_t dev, int cmd, void *args)
if(resolution != 0)
{
*((rt_uint8_t*)args) = resolution;
- LOG_D("ADC resolution:%d", resolution);
+ LOG_D("resolution: %d bits", resolution);
result = RT_EOK;
}
}
diff --git a/components/drivers/misc/dac.c b/components/drivers/misc/dac.c
index 548a7bde99..ecbadfd502 100644
--- a/components/drivers/misc/dac.c
+++ b/components/drivers/misc/dac.c
@@ -40,21 +40,27 @@ static rt_size_t _dac_write(rt_device_t dev, rt_off_t pos, const void *buffer, r
static rt_err_t _dac_control(rt_device_t dev, int cmd, void *args)
{
- rt_err_t result = RT_EOK;
+ rt_err_t result = -RT_EINVAL;
rt_dac_device_t dac = (struct rt_dac_device *)dev;
- if (dac->ops->enabled == RT_NULL)
- {
- return -RT_ENOSYS;
- }
- if (cmd == RT_DAC_CMD_ENABLE)
+ if (cmd == RT_DAC_CMD_ENABLE && dac->ops->enabled)
{
result = dac->ops->enabled(dac, (rt_uint32_t)args);
}
- else if (cmd == RT_DAC_CMD_DISABLE)
+ else if (cmd == RT_DAC_CMD_DISABLE && dac->ops->enabled)
{
result = dac->ops->disabled(dac, (rt_uint32_t)args);
}
+ else if (cmd == RT_DAC_CMD_GET_RESOLUTION && dac->ops->get_resolution)
+ {
+ rt_uint8_t resolution = dac->ops->get_resolution(dac);
+ if(resolution != 0)
+ {
+ *((rt_uint8_t*)args) = resolution;
+ LOG_D("resolution: %d bits", resolution);
+ result = RT_EOK;
+ }
+ }
return result;
}