Open FFBoard
Open source force feedback firmware
SPIPort Class Reference

#include <SPI.h>

Inheritance diagram for SPIPort:
SpiHandler

Public Member Functions

 SPIPort (SPI_HandleTypeDef &hspi, const std::vector< OutputPin > &csPins, uint32_t baseclk, bool allowReconfigure=true)
 
void takeSemaphore ()
 
void giveSemaphore ()
 
void configurePort (SPI_InitTypeDef *config)
 
std::vector< OutputPin > & getCsPins ()
 
OutputPingetCsPin (uint16_t idx)
 
std::vector< OutputPin > & getFreeCsPins ()
 
bool reserveCsPin (OutputPin pin)
 
bool freeCsPin (OutputPin pin)
 
bool isPinFree (OutputPin pin)
 
void transmit_DMA (const uint8_t *buf, uint16_t size, SPIDevice *device)
 
void transmitReceive_DMA (const uint8_t *txbuf, uint8_t *rxbuf, uint16_t size, SPIDevice *device)
 
void receive_DMA (uint8_t *buf, uint16_t size, SPIDevice *device)
 
void transmit_IT (const uint8_t *buf, uint16_t size, SPIDevice *device)
 
void transmitReceive_IT (const uint8_t *txbuf, uint8_t *rxbuf, uint16_t size, SPIDevice *device)
 
void receive_IT (uint8_t *buf, uint16_t size, SPIDevice *device)
 
void transmit (const uint8_t *buf, uint16_t size, SPIDevice *device, uint16_t timeout)
 
void receive (uint8_t *buf, uint16_t size, SPIDevice *device, int16_t timeout)
 
void transmitReceive (const uint8_t *txbuf, uint8_t *rxbuf, uint16_t size, SPIDevice *device, uint16_t timeout)
 
void SpiTxCplt (SPI_HandleTypeDef *hspi) override
 
void SpiRxCplt (SPI_HandleTypeDef *hspi) override
 
void SpiTxRxCplt (SPI_HandleTypeDef *hspi) override
 
void SpiError (SPI_HandleTypeDef *hspi) override
 
bool isTaken ()
 
void takeExclusive (bool exclusive)
 
bool hasFreePins ()
 
uint32_t getBaseClk ()
 
std::pair< uint32_t, float > getClosestPrescaler (float clock)
 
SPI_HandleTypeDef * getPortHandle ()
 
- Public Member Functions inherited from SpiHandler
 SpiHandler ()
 
virtual ~SpiHandler ()
 
virtual void SpiTxHalfCplt (SPI_HandleTypeDef *hspi)
 
virtual void SpiRxHalfCplt (SPI_HandleTypeDef *hspi)
 
virtual void SpiTxRxHalfCplt (SPI_HandleTypeDef *hspi)
 

Private Member Functions

void beginTransfer (SPIConfig *config)
 
void endTransfer (SPIConfig *config)
 

Private Attributes

SPI_HandleTypeDef & hspi
 
SPIDevicecurrent_device = nullptr
 
std::vector< OutputPincsPins
 
std::vector< OutputPinfreePins
 
cpp_freertos::BinarySemaphore semaphore = cpp_freertos::BinarySemaphore(true)
 
bool allowReconfigure = false
 
volatile bool isTakenFlag = false
 
bool takenExclusive = false
 
uint32_t baseclk
 

Additional Inherited Members

- Static Public Member Functions inherited from SpiHandler
static std::vector< SpiHandler * > & getSPIHandlers ()
 

Detailed Description

Definition at line 43 of file SPI.h.

Constructor & Destructor Documentation

◆ SPIPort()

SPIPort::SPIPort ( SPI_HandleTypeDef &  hspi,
const std::vector< OutputPin > &  csPins,
uint32_t  baseclk,
bool  allowReconfigure = true 
)

Definition at line 14 of file SPI.cpp.

Member Function Documentation

◆ beginTransfer()

void SPIPort::beginTransfer ( SPIConfig config)
private

◆ configurePort()

void SPIPort::configurePort ( SPI_InitTypeDef *  config)

Definition at line 72 of file SPI.cpp.

◆ endTransfer()

void SPIPort::endTransfer ( SPIConfig config)
private

◆ freeCsPin()

bool SPIPort::freeCsPin ( OutputPin  pin)

Definition at line 37 of file SPI.cpp.

◆ getBaseClk()

uint32_t SPIPort::getBaseClk ( )

Returns the peripheral base clock frequency

Definition at line 227 of file SPI.cpp.

◆ getClosestPrescaler()

std::pair< uint32_t, float > SPIPort::getClosestPrescaler ( float  clock)

Calculates the closest possible clock achievable with the current base clock and prescalers Returns a pair of {prescaler,actual_clock}

Definition at line 291 of file SPI.cpp.

◆ getCsPin()

OutputPin * SPIPort::getCsPin ( uint16_t  idx)

Definition at line 65 of file SPI.cpp.

◆ getCsPins()

std::vector< OutputPin > & SPIPort::getCsPins ( )

Definition at line 61 of file SPI.cpp.

◆ getFreeCsPins()

std::vector< OutputPin > & SPIPort::getFreeCsPins ( )

Definition at line 55 of file SPI.cpp.

◆ getPortHandle()

SPI_HandleTypeDef * SPIPort::getPortHandle ( )

Definition at line 80 of file SPI.cpp.

◆ giveSemaphore()

void SPIPort::giveSemaphore ( )

Definition at line 199 of file SPI.cpp.

◆ hasFreePins()

bool SPIPort::hasFreePins ( )

Definition at line 220 of file SPI.cpp.

◆ isPinFree()

bool SPIPort::isPinFree ( OutputPin  pin)

Definition at line 51 of file SPI.cpp.

◆ isTaken()

bool SPIPort::isTaken ( )

Definition at line 212 of file SPI.cpp.

◆ receive()

void SPIPort::receive ( uint8_t *  buf,
uint16_t  size,
SPIDevice device,
int16_t  timeout 
)

Definition at line 167 of file SPI.cpp.

◆ receive_DMA()

void SPIPort::receive_DMA ( uint8_t *  buf,
uint16_t  size,
SPIDevice device 
)

Receives using DMA. Not recommended Warning: DMA depends on interrupts not being missed

Definition at line 117 of file SPI.cpp.

◆ receive_IT()

void SPIPort::receive_IT ( uint8_t *  buf,
uint16_t  size,
SPIDevice device 
)

Definition at line 148 of file SPI.cpp.

◆ reserveCsPin()

bool SPIPort::reserveCsPin ( OutputPin  pin)

Definition at line 25 of file SPI.cpp.

◆ SpiError()

void SPIPort::SpiError ( SPI_HandleTypeDef *  hspi)
overridevirtual

Reimplemented from SpiHandler.

Definition at line 273 of file SPI.cpp.

◆ SpiRxCplt()

void SPIPort::SpiRxCplt ( SPI_HandleTypeDef *  hspi)
overridevirtual

Reimplemented from SpiHandler.

Definition at line 246 of file SPI.cpp.

◆ SpiTxCplt()

void SPIPort::SpiTxCplt ( SPI_HandleTypeDef *  hspi)
overridevirtual

Reimplemented from SpiHandler.

Definition at line 232 of file SPI.cpp.

◆ SpiTxRxCplt()

void SPIPort::SpiTxRxCplt ( SPI_HandleTypeDef *  hspi)
overridevirtual

Reimplemented from SpiHandler.

Definition at line 259 of file SPI.cpp.

◆ takeExclusive()

void SPIPort::takeExclusive ( bool  exclusive)

Definition at line 216 of file SPI.cpp.

◆ takeSemaphore()

void SPIPort::takeSemaphore ( )

Definition at line 186 of file SPI.cpp.

◆ transmit()

void SPIPort::transmit ( const uint8_t *  buf,
uint16_t  size,
SPIDevice device,
uint16_t  timeout 
)

Definition at line 158 of file SPI.cpp.

◆ transmit_DMA()

void SPIPort::transmit_DMA ( const uint8_t *  buf,
uint16_t  size,
SPIDevice device 
)

Transmits using DMA Warning: DMA depends on interrupts not being missed

Definition at line 89 of file SPI.cpp.

◆ transmit_IT()

void SPIPort::transmit_IT ( const uint8_t *  buf,
uint16_t  size,
SPIDevice device 
)

Definition at line 128 of file SPI.cpp.

◆ transmitReceive()

void SPIPort::transmitReceive ( const uint8_t *  txbuf,
uint8_t *  rxbuf,
uint16_t  size,
SPIDevice device,
uint16_t  timeout 
)

Definition at line 176 of file SPI.cpp.

◆ transmitReceive_DMA()

void SPIPort::transmitReceive_DMA ( const uint8_t *  txbuf,
uint8_t *  rxbuf,
uint16_t  size,
SPIDevice device 
)

Transmit and receive using DMA Warning: DMA depends on interrupts not being missed

Definition at line 103 of file SPI.cpp.

◆ transmitReceive_IT()

void SPIPort::transmitReceive_IT ( const uint8_t *  txbuf,
uint8_t *  rxbuf,
uint16_t  size,
SPIDevice device 
)

Definition at line 138 of file SPI.cpp.

Member Data Documentation

◆ allowReconfigure

bool SPIPort::allowReconfigure = false
private

Definition at line 94 of file SPI.h.

◆ baseclk

uint32_t SPIPort::baseclk
private

Definition at line 97 of file SPI.h.

◆ csPins

std::vector<OutputPin> SPIPort::csPins
private

Definition at line 90 of file SPI.h.

◆ current_device

SPIDevice* SPIPort::current_device = nullptr
private

Definition at line 89 of file SPI.h.

◆ freePins

std::vector<OutputPin> SPIPort::freePins
private

Definition at line 91 of file SPI.h.

◆ hspi

SPI_HandleTypeDef& SPIPort::hspi
private

Definition at line 88 of file SPI.h.

◆ isTakenFlag

volatile bool SPIPort::isTakenFlag = false
private

Definition at line 95 of file SPI.h.

◆ semaphore

Definition at line 93 of file SPI.h.

◆ takenExclusive

bool SPIPort::takenExclusive = false
private

Definition at line 96 of file SPI.h.


The documentation for this class was generated from the following files: