10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32SPIMASTER_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32SPIMASTER_H_
17#if defined(STM32) && defined(HAL_SPI_MODULE_ENABLED)
37 SetFrequency_SpiClockIsZero,
39 SetFormatHardware_BitsNotSupported,
40 StopWriteHardware_HalError,
41 StopWriteHardware_HalBusy,
42 StopWriteHardware_HalTimeout,
43 StopReadHardware_HalError,
44 StopReadHardware_HalBusy,
45 StopReadHardware_HalTimeout,
52 WriteReadNext_HalError,
53 WriteReadNext_HalBusy,
54 WriteReadNext_HalTimeout,
62 explicit Stm32SpiMaster(SPI_HandleTypeDef& hwHandle, uint32_t spiClockFrequencyHz = 0);
69 Stm32SpiMaster(SPI_HandleTypeDef& hwHandle,
Gpio& chipSelectPin, uint32_t spiClockFrequencyHz = 0);
127 void isrRead(SPI_HandleTypeDef& spi);
139 void isrError(SPI_HandleTypeDef& spi);
153 void writeHardware(
const uint8_t data[],
size_t dataSize)
override;
154 void readHardware(uint8_t buffer[],
size_t bufferSize)
override;
155 void writeReadHardware(
const uint8_t writeData[], uint8_t readBuffer[],
size_t size)
override;
190 void writeReadNext();
193 SPI_HandleTypeDef* m_hwHandle;
195 const uint32_t m_spiClockFrequencyHz;
197 const uint8_t* m_writeData =
nullptr;
199 uint8_t* m_readData =
nullptr;
201 size_t m_dataSize = 0;
203 size_t m_dataIndex = 0;
209 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32SpiMaster;
Interface class for using a GPIO pin of the microcontroller.
LinkedQueue is an managed single linked queue implementation.
Signal for lightweight signal/slot implementation. One signal can be connected to multiple slots and ...
Class for using SPI hardware in master mode.
SpiMasterHardware implementation for STM32.
void setFrequency(uint32_t hz) override
Sets the speed.
static void systemIsrWrittenAndRead(SPI_HandleTypeDef &spi)
System-wide interrupt service routine for spi receive and transmit.
void isrAborted(SPI_HandleTypeDef &spi)
handles the abort callback
void isrWrittenAndRead(SPI_HandleTypeDef &spi)
Interrupt service routine for spi object receive and transmit.
Stm32SpiMaster(SPI_HandleTypeDef &hwHandle, uint32_t spiClockFrequencyHz=0)
Constructor.
Stm32SpiMaster(const Stm32SpiMaster &other)=delete
void setFormatHardware(uint8_t bits, TransmissionMode transmission, WireMode wire) override
Configures the hardware for insuring the given configuration.
void writeReadHardware(const uint8_t writeData[], uint8_t readBuffer[], size_t size) override
Hardware will read and write data parallel.
void writeHardware(const uint8_t data[], size_t dataSize) override
Hardware will write data.
static void systemIsrError(SPI_HandleTypeDef &spi)
System-wide interrupt service routine for spi error.
void isrRead(SPI_HandleTypeDef &spi)
Interrupt service routine for spi object receive.
static void systemIsrWritten(SPI_HandleTypeDef &spi)
System-wide interrupt service routine for spi transmit.
static void systemIsrRead(SPI_HandleTypeDef &spi)
System-wide interrupt service routine for spi receive.
virtual ~Stm32SpiMaster()=default
void readHardware(uint8_t buffer[], size_t bufferSize) override
Hardware will read data.
static void systemIsrAbort(SPI_HandleTypeDef &spi)
System-wide interrupt service routine for spi abort.
void isrError(SPI_HandleTypeDef &spi)
Interrupt service routine for spi object error.
void isrWritten(SPI_HandleTypeDef &spi)
static LinkedQueue< Stm32SpiMaster > * queue()
Get the list with all spi.
void stopReadHardware() override
void stopWriteHardware() override