|
@@ -37,14 +37,45 @@ struct stm32_dac
|
|
|
|
|
|
static struct stm32_dac stm32_dac_obj[sizeof(dac_config) / sizeof(dac_config[0])];
|
|
static struct stm32_dac stm32_dac_obj[sizeof(dac_config) / sizeof(dac_config[0])];
|
|
|
|
|
|
|
|
+static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel)
|
|
|
|
+{
|
|
|
|
+ rt_uint32_t stm32_channel = 0;
|
|
|
|
+
|
|
|
|
+ switch (channel)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ stm32_channel = DAC_CHANNEL_1;
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ stm32_channel = DAC_CHANNEL_2;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ RT_ASSERT(0);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return stm32_channel;
|
|
|
|
+}
|
|
|
|
+
|
|
static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel)
|
|
static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel)
|
|
{
|
|
{
|
|
|
|
+ uint32_t dac_channel;
|
|
DAC_HandleTypeDef *stm32_dac_handler;
|
|
DAC_HandleTypeDef *stm32_dac_handler;
|
|
RT_ASSERT(device != RT_NULL);
|
|
RT_ASSERT(device != RT_NULL);
|
|
stm32_dac_handler = device->parent.user_data;
|
|
stm32_dac_handler = device->parent.user_data;
|
|
|
|
|
|
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
|
|
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
|
|
- HAL_DAC_Start(stm32_dac_handler, channel);
|
|
|
|
|
|
+ if ((channel <= 2) && (channel > 0))
|
|
|
|
+ {
|
|
|
|
+ /* set stm32 dac channel */
|
|
|
|
+ dac_channel = stm32_dac_get_channel(channel);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ LOG_E("dac channel must be 1 or 2.");
|
|
|
|
+ return -RT_ERROR;
|
|
|
|
+ }
|
|
|
|
+ HAL_DAC_Start(stm32_dac_handler, dac_channel);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
return RT_EOK;
|
|
return RT_EOK;
|
|
@@ -52,37 +83,28 @@ static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t chan
|
|
|
|
|
|
static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel)
|
|
static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel)
|
|
{
|
|
{
|
|
|
|
+ uint32_t dac_channel;
|
|
DAC_HandleTypeDef *stm32_dac_handler;
|
|
DAC_HandleTypeDef *stm32_dac_handler;
|
|
RT_ASSERT(device != RT_NULL);
|
|
RT_ASSERT(device != RT_NULL);
|
|
stm32_dac_handler = device->parent.user_data;
|
|
stm32_dac_handler = device->parent.user_data;
|
|
|
|
|
|
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
|
|
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
|
|
- HAL_DAC_Stop(stm32_dac_handler, channel);
|
|
|
|
|
|
+ if ((channel <= 2) && (channel > 0))
|
|
|
|
+ {
|
|
|
|
+ /* set stm32 dac channel */
|
|
|
|
+ dac_channel = stm32_dac_get_channel(channel);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ LOG_E("dac channel must be 1 or 2.");
|
|
|
|
+ return -RT_ERROR;
|
|
|
|
+ }
|
|
|
|
+ HAL_DAC_Stop(stm32_dac_handler, dac_channel);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
return RT_EOK;
|
|
return RT_EOK;
|
|
}
|
|
}
|
|
|
|
|
|
-static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel)
|
|
|
|
-{
|
|
|
|
- rt_uint32_t stm32_channel = 0;
|
|
|
|
-
|
|
|
|
- switch (channel)
|
|
|
|
- {
|
|
|
|
- case 1:
|
|
|
|
- stm32_channel = DAC_CHANNEL_1;
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- stm32_channel = DAC_CHANNEL_2;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- RT_ASSERT(0);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return stm32_channel;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static rt_err_t stm32_set_dac_value(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value)
|
|
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;
|
|
uint32_t dac_channel;
|