Skip to content

Commit

Permalink
drivers: dac: make output buffer for STM32 DAC configurable
Browse files Browse the repository at this point in the history
If an operational amplifier is used on the DAC output it is
preferrable to disable the DAC output buffer.

Signed-off-by: Benedikt Schmidt <[email protected]>
  • Loading branch information
benediktibk committed May 16, 2023
1 parent 9ff23ed commit f50449a
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
6 changes: 6 additions & 0 deletions doc/releases/release-notes-3.4.rst
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,12 @@ Stable API changes in this release
if CS is GPIO-based or not, must now use :c:func:`spi_cs_is_gpio` or
:c:func:`spi_cs_is_gpio_dt` calls.

* Added a new flag :c:struct:`dac_channel_cfg` ``buffered`` for DAC channels in
:c:struct:`dac_channel_cfg` to allow the configuration of the output buffer.
The actual interpretation of this depends on the hardware and is so far only
implemented for the STM32 DAC driver. Implicitly for this driver this changes
the default from being buffered to unbuffered.

New APIs in this release
========================

Expand Down
10 changes: 8 additions & 2 deletions drivers/dac/dac_stm32.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ static int dac_stm32_channel_setup(const struct device *dev,
{
struct dac_stm32_data *data = dev->data;
const struct dac_stm32_cfg *cfg = dev->config;
uint32_t output_buffer;

if ((channel_cfg->channel_id - STM32_FIRST_CHANNEL >=
data->channel_count) ||
Expand All @@ -100,10 +101,15 @@ static int dac_stm32_channel_setup(const struct device *dev,
return -ENOTSUP;
}

/* enable output buffer by default */
if (channel_cfg->buffered) {
output_buffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
} else {
output_buffer = LL_DAC_OUTPUT_BUFFER_DISABLE;
}

LL_DAC_SetOutputBuffer(cfg->base,
table_channels[channel_cfg->channel_id - STM32_FIRST_CHANNEL],
LL_DAC_OUTPUT_BUFFER_ENABLE);
output_buffer);

LL_DAC_Enable(cfg->base,
table_channels[channel_cfg->channel_id - STM32_FIRST_CHANNEL]);
Expand Down
4 changes: 4 additions & 0 deletions include/zephyr/drivers/dac.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,14 @@ extern "C" {
* @param channel_id Channel identifier of the DAC that should be configured.
* @param resolution Desired resolution of the DAC (depends on device
* capabilities).
* @param buffered Enable output buffer for this channel. This is relevant for instance
* if the output is directly connected to the load, without an amplifier
* in between. The actual details on this are hardware dependent.
*/
struct dac_channel_cfg {
uint8_t channel_id;
uint8_t resolution;
bool buffered;
};

/**
Expand Down

0 comments on commit f50449a

Please sign in to comment.