fc10ef2e10
GD32F470ZGT6 based project with full peripheral support: - SDRAM (W9825G6KH) via EXMC - LCD NT35510 (480x800) via EXMC NOR/PSRAM - Flash (W25Q64) via SPI - UART (USART0) debug console - LED indicators - CMSIS-DAP debug interface - CMake + ARM GCC toolchain build system
45 lines
831 B
C++
45 lines
831 B
C++
#ifndef __ADC_DRIVER_H__
|
|
#define __ADC_DRIVER_H__
|
|
|
|
#include <cstdint>
|
|
#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
|