semf
stm32analogoutdma.h
Go to the documentation of this file.
1
9#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGOUTDMA_H_
10#define SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGOUTDMA_H_
11
15
16#if defined(STM32) && defined(HAL_DAC_MODULE_ENABLED)
17namespace semf
18{
23class Stm32AnalogOutDma : public AnalogOutDma, public LinkedQueue<Stm32AnalogOutDma>::Node
24{
25public:
27 enum class ErrorCode : uint8_t
28 {
29 Start_DataInvalid = 0,
30 Start_HalError,
31 Start_HalBusy,
32 Start_HalTimeout,
33 Stop_DataInvalid,
34 Stop_HalError,
35 Stop_HalBusy,
36 Stop_HalTimeout,
37 IsrError_Isr
38 };
40 enum class Alignment : uint32_t
41 {
42 Align_8bitRight = 0,
43 Align_12bitLeft,
44 Align_12bitRight
45 };
46
53 Stm32AnalogOutDma(DAC_HandleTypeDef& hwHandle, uint32_t channel, Alignment alignment);
54 explicit Stm32AnalogOutDma(const Stm32AnalogOutDma& other) = delete;
55 virtual ~Stm32AnalogOutDma() = default;
56
64 void start() const override;
72 void stop() const override;
73 void setData(const uint8_t data[], size_t dataSize) override;
83 static void systemIsrError(DAC_HandleTypeDef& dac);
88 static void systemIsr(DAC_HandleTypeDef& dac);
93 void isrError(DAC_HandleTypeDef& dac);
99 void isr(DAC_HandleTypeDef& dac);
100
101private:
107 uint32_t alignment(Alignment setting) const;
108
110 DAC_HandleTypeDef& m_hwHandle;
112 uint32_t m_channel;
114 Alignment m_alignment;
116 const uint8_t* m_data;
118 size_t m_size;
120 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32AnalogOutDma;
121};
122} /* namespace semf */
123#endif /* STM32 & HAL_DAC_MODULE_ENABLED */
124#endif /* SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGOUTDMA_H_ */
Interface for using DAC (Digital to Analog Converter) hardware module in DMA (Direct Memory Access) m...
Definition: analogoutdma.h:25
ClassID
Semf class IDs.
Definition: error.h:28
LinkedQueue is an managed single linked queue implementation.
Definition: linkedqueue.h:38
virtual ~Stm32AnalogOutDma()=default
static void systemIsr(DAC_HandleTypeDef &dac)
System-wide interrupt service routine for dac conversion finished.
Stm32AnalogOutDma(const Stm32AnalogOutDma &other)=delete
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.