Files

52 lines
887 B
C++
Raw Permalink Normal View History

2026-04-26 16:24:42 +08:00
#ifndef __SPI_DRIVER_H__
#define __SPI_DRIVER_H__
#include <cstdint>
#include "bus_core.h"
enum class SpiPort : uint8_t {
_0 = 0,
_1, _2, _3, _4, _5,
MAX
};
struct SpiConfig {
uint32_t speed_hz = 1000000;
uint8_t data_width = 8;
uint8_t mode = 0;
};
class SpiBus;
class SpiDevice {
public:
SpiDevice(uint32_t cs_port, uint32_t cs_pin);
RetCode init();
private:
friend class SpiBus;
uint32_t cs_port_;
uint32_t cs_pin_;
bool initialized_ = false;
};
class SpiBus {
public:
explicit SpiBus(SpiPort port);
~SpiBus();
SpiBus(const SpiBus &) = delete;
SpiBus &operator=(const SpiBus &) = delete;
RetCode init(const SpiConfig &config);
RetCode deinit();
RetCode transfer(SpiDevice *device, BusTransfer *transfer);
private:
SpiPort port_;
SpiConfig config_;
bool initialized_ = false;
};
#endif