#ifndef __ADC_DRIVER_H__ #define __ADC_DRIVER_H__ #include #include "bus_core.h" enum class AdcPort : uint8_t { _0 = 0, _1, _2, MAX }; struct AdcConfig { uint32_t clock_prescaler = 0; uint32_t resolution = 0; uint32_t sample_time = 0; bool use_dma = false; bool use_interrupt = false; }; class AdcBus { public: explicit AdcBus(AdcPort port); ~AdcBus(); AdcBus(const AdcBus &) = delete; AdcBus &operator=(const AdcBus &) = delete; RetCode init(const AdcConfig &config); RetCode deinit(); RetCode channel_config(uint8_t channel, uint8_t rank); RetCode start_conversion(uint8_t channel); uint16_t read(); float read_voltage(); private: AdcPort port_; AdcConfig config_; bool initialized_ = false; }; void adc_irq_handler(); #endif