12#if defined(STM32) && defined(HAL_DAC_MODULE_ENABLED)
16: m_hwHandle(hwHandle),
18 m_alignment(alignment)
26 if (m_data ==
nullptr || m_size == 0)
32 HAL_StatusTypeDef state =
33 HAL_DAC_Start_DMA(&m_hwHandle, m_channel,
reinterpret_cast<uint32_t*
>(
const_cast<uint8_t*
>(m_data)), m_size / 4, alignment(m_alignment));
36 if (state == HAL_ERROR)
41 else if (state == HAL_BUSY)
46 else if (state == HAL_TIMEOUT)
58 HAL_StatusTypeDef state = HAL_DAC_Stop_DMA(&m_hwHandle, m_channel);
61 if (state == HAL_ERROR)
66 else if (state == HAL_BUSY)
71 else if (state == HAL_TIMEOUT)
82 SEMF_INFO(
"set data on channel %u", m_channel);
107 if (&dac == &m_hwHandle)
116 if (&dac == &m_hwHandle)
123uint32_t Stm32AnalogOutDma::alignment(Alignment setting)
const
128 return DAC_ALIGN_8B_R;
131 return DAC_ALIGN_12B_L;
134 return DAC_ALIGN_12B_R;
137 SEMF_ERROR(
"invalid alignment setting %u",
static_cast<uint8_t
>(setting));
Class for representing errors. Every error should have a unique source code. As a user feel encourage...
LinkedQueue is an managed single linked queue implementation.
static void systemIsr(DAC_HandleTypeDef &dac)
System-wide interrupt service routine for dac conversion finished.
Stm32AnalogOutDma(DAC_HandleTypeDef &hwHandle, uint32_t channel, Alignment alignment)
Constructor.
void isrError(DAC_HandleTypeDef &dac)
Sending a error signal.
void stop() const override
void setData(const uint8_t data[], size_t dataSize) override
Sets the pointer to the data memory location and its size for starting DAC later by start() function....
void isr(DAC_HandleTypeDef &dac)
Sending a error signal.
void start() const override
Starts the hardware module (DAC) for writing DAC values to the output. Call setValue before.
static LinkedQueue< Stm32AnalogOutDma > * queue()
Get the list with all analog outs.
static void systemIsrError(DAC_HandleTypeDef &dac)
System-wide interrupt service routine for dac error.