Added config and basic interface
This commit is contained in:
parent
f7f02b76a8
commit
045efedd45
43
adc.hpp
43
adc.hpp
@ -1,23 +1,58 @@
|
||||
#pragma once
|
||||
|
||||
#include "config.hpp"
|
||||
#include "hardware.hpp"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "../io/io.hpp"
|
||||
|
||||
namespace adc {
|
||||
|
||||
template <typename... T>
|
||||
struct Config {
|
||||
template <typename Cfg, typename Input, Input src>
|
||||
class Adc {
|
||||
public:
|
||||
static_assert(sizeof(Input) == -1, "Invalid input source selected");
|
||||
};
|
||||
|
||||
template <typename Cfg, io::P pin>
|
||||
class Adc {
|
||||
class Adc<Cfg, io::P, pin> {
|
||||
private:
|
||||
using callback_t = void (*)(uint16_t);
|
||||
|
||||
public:
|
||||
static_assert(detail::supports_adc_v<pin>, "Pin does not support ADC");
|
||||
|
||||
void read() {}
|
||||
Adc() {}
|
||||
|
||||
Adc(callback_t callback) : m_callback(callback) {}
|
||||
|
||||
uint16_t read()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
const callback_t m_callback = nullptr;
|
||||
};
|
||||
|
||||
template <typename Cfg, InputSource src>
|
||||
class Adc<Cfg, InputSource, src> {
|
||||
private:
|
||||
using callback_t = void (*)(uint16_t);
|
||||
|
||||
public:
|
||||
Adc() {}
|
||||
|
||||
Adc(callback_t callback) : m_callback(callback) {}
|
||||
|
||||
uint16_t read()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
const callback_t m_callback = nullptr;
|
||||
};
|
||||
|
||||
} // namespace adc
|
||||
|
51
config.hpp
Normal file
51
config.hpp
Normal file
@ -0,0 +1,51 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace adc {
|
||||
|
||||
enum class Mode {
|
||||
SINGLE,
|
||||
AUTO,
|
||||
FREE_RUNNING,
|
||||
};
|
||||
|
||||
enum class TriggerSource {
|
||||
FREE_RUNNING,
|
||||
ANALOG_COMP,
|
||||
EXTERNAL_INT_0,
|
||||
TIMER0_COMP_A,
|
||||
TIMER0_OVERFLOW,
|
||||
TIMER1_COMP_B,
|
||||
TIMER1_OVERFLOW,
|
||||
TIMER1_CAPTURE,
|
||||
};
|
||||
|
||||
template <TriggerSource src = TriggerSource::FREE_RUNNING>
|
||||
struct AutoMode {
|
||||
static constexpr auto SRC = src;
|
||||
};
|
||||
|
||||
struct FreeRunningMode {
|
||||
};
|
||||
|
||||
struct SingleMode {
|
||||
};
|
||||
|
||||
enum class VoltageRef {
|
||||
EXTERNAL,
|
||||
AVCC,
|
||||
INTERNAL,
|
||||
};
|
||||
|
||||
enum class InputSource {
|
||||
TEMP,
|
||||
VBG,
|
||||
GND,
|
||||
};
|
||||
|
||||
template <class Mode, VoltageRef vref = VoltageRef::AVCC, uint8_t prescaler = 128>
|
||||
struct Config {
|
||||
};
|
||||
|
||||
} // namespace adc
|
Loading…
Reference in New Issue
Block a user