4#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
8#include "ch32_spi_def.hpp"
9#include "libxr_def.hpp"
10#include "libxr_rw.hpp"
20 uint16_t sck_pin, GPIO_TypeDef* miso_port, uint16_t miso_pin,
21 GPIO_TypeDef* mosi_port, uint16_t mosi_pin, uint32_t pin_remap = 0,
22 bool master_mode =
true,
bool firstbit_msb =
true,
23 uint16_t prescaler = SPI_BaudRatePrescaler_64, uint32_t dma_enable_min_size = 3,
38 void RxDmaIRQHandler();
39 void TxDmaIRQHandler();
42 ErrorCode PollingTransfer(uint8_t* rx,
const uint8_t* tx, uint32_t len);
44 static CH32SPI* map[CH32_SPI_NUMBER];
47 inline bool DmaBusy()
const
49 return (dma_rx_channel_->CNTR != 0) || (dma_tx_channel_->CNTR != 0) || busy_;
52 void StartDmaDuplex(uint32_t count);
55 void PrepareTxBuffer(
ConstRawData write_data, uint32_t need_len, uint32_t prefix = 0,
56 uint8_t dummy = 0x00);
59 static bool MapEnumToCH32Prescaler(
SPI::Prescaler p, uint16_t& out);
62 SPI_TypeDef* instance_;
63 DMA_Channel_TypeDef* dma_rx_channel_;
64 DMA_Channel_TypeDef* dma_tx_channel_;
66 uint32_t dma_enable_min_size_;
71 bool mem_read_ =
false;
79 uint16_t nss_ = SPI_NSS_Soft;
82 GPIO_TypeDef* sck_port_;
84 GPIO_TypeDef* miso_port_;
86 GPIO_TypeDef* mosi_port_;
ErrorCode MemWrite(uint16_t reg, ConstRawData write_data, OperationRW &op) override
向 SPI 设备的寄存器写入数据。 Writes data to a specific register of the SPI device.
ErrorCode SetConfig(SPI::Configuration config) override
设置 SPI 配置参数。Sets SPI configuration parameters.
ErrorCode ReadAndWrite(RawData read_data, ConstRawData write_data, OperationRW &op) override
进行 SPI 读写操作。Performs SPI read and write operations.
SPI::Prescaler GetMaxPrescaler() const override
获取 SPI 设备的最大分频系数。Gets the maximum prescaler of the SPI device.
uint32_t GetMaxBusSpeed() const override
获取 SPI 设备的最大时钟速度。Gets the maximum clock speed of the SPI device.
ErrorCode Transfer(size_t size, OperationRW &op) override
进行一次SPI传输(使用当前缓冲区数据,零拷贝,支持双缓冲)。 Performs a SPI transfer (zero-copy, supports double buffering).
ErrorCode MemRead(uint16_t reg, RawData read_data, OperationRW &op) override
从 SPI 设备的寄存器读取数据。 Reads data from a specific register of the SPI device.
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
串行外设接口(SPI)抽象类。Abstract class for Serial Peripheral Interface (SPI).
@ EDGE_1
在第一个时钟边沿采样数据。Data sampled on the first clock edge.
@ LOW
时钟空闲时为低电平。Clock idle low.
存储 SPI 配置参数的结构体。Structure for storing SPI configuration parameters.