14 #ifndef _DMA_SPI_H_INC 15 #define _DMA_SPI_H_INC 18 #include <basictypes.h> 22 #error DSPI driver is a C++ only library 31 #define DSPI_BUSY ( 1 ) 32 #define DSPI_ERROR ( 2 ) 40 #define DEFAULT_DSPI_MODULE 0 41 #define DSPI_MODULE_COUNT 1 80 volatile uint8_t SPI_INT_STATUS;
81 volatile BOOL SPIfinished;
84 dma_descview_1 last_TxDesc;
85 dma_descview_1 last16_TxDesc;
89 volatile uint8_t *rxBuf;
93 uint8_t
DSPIInit( uint8_t
SPIModule, uint32_t Baudrate, uint8_t QueueBitSize, uint8_t CS,
94 uint8_t CSPol, uint8_t ClkPolarity, uint8_t ClkPhase, BOOL DoutHiz, uint8_t QCD, uint8_t DTL );
108 uint32_t m_moduleNum;
116 spiDriverStruct *getCtx() {
return driverCtx + m_moduleNum; }
117 inline Spi * spi() {
return SPI0 + m_moduleNum; }
120 volatile bool m_inProgress;
152 uint8_t transferSizeInBits = 8, uint8_t peripheralChipSelects = 0x00,
153 uint8_t chipSelectPolarity = 0x0F, uint8_t clockPolarity = 0,
154 uint8_t clockPhase = 1, BOOL doutHiz = TRUE,
155 uint8_t csToClockDelay = 0, uint8_t delayAfterTransfer = 0 );
173 uint8_t
Init( uint32_t baudRateInBps = 2000000,
174 uint8_t transferSizeInBits = 8, uint8_t peripheralChipSelects = 0x00,
175 uint8_t chipSelectPolarity = 0x0F, uint8_t clockPolarity = 0,
176 uint8_t clockPhase = 1, BOOL doutHiz = TRUE,
177 uint8_t csToClockDelay = 0, uint8_t delayAfterTransfer = 0 );
209 uint8_t
Start( uint8_t *transmitBufferPtr,
volatile uint8_t *receiveBufferPtr,
221 inline uint8_t
Tx( uint8_t *transmitBufferPtr, uint32_t byteCount,
223 {
return Start(transmitBufferPtr,
NULL, byteCount, csReturnToInactive); }
234 inline uint8_t
Rx( uint8_t *receiveBufferPtr, uint32_t byteCount,
236 {
return Start(
NULL, receiveBufferPtr, byteCount, csReturnToInactive); }
274 inline bool Done() {
return !m_inProgress; }
307 if (m_inProgress) {
return false; }
308 m_regMR = (m_regMR & ~SPI_MR_PCS_Msk);
312 m_regMR |= SPI_MR_PCS(0xE);
315 m_regMR |= SPI_MR_PCS(0xD);
318 m_regMR |= SPI_MR_PCS(0xB);
321 m_regMR |= SPI_MR_PCS(0x7);
324 m_regMR |= SPI_MR_PCS(0xF);
332 friend void SPI_DMA_Isr(XdmaCh_t *dma,
int module);
365 uint8_t transferSizeInBits = 8, uint8_t peripheralChipSelects = 0x00,
366 uint8_t chipSelectPolarity = 0x0F, uint8_t clockPolarity = 0,
367 uint8_t clockPhase = 1, BOOL doutHiz = TRUE,
368 uint8_t csToClockDelay = 0, uint8_t delayAfterTransfer = 0 );
393 uint8_t
DSPIStart( uint8_t
SPIModule, puint8_t transmitBufferPtr,
volatile uint8_t* receiveBufferPtr,
394 uint32_t byteCount,
OS_SEM* finishedSem =
NULL, uint8_t enableDMA = TRUE,
434 inline uint8_t
QSPIInit( uint32_t baudRateInBps = 2000000, uint8_t transferSizeInBits = 8,
435 uint8_t peripheralChipSelects = 0x0F, uint8_t chipSelectPolarity = 1,
436 uint8_t clockPolarity = 0, uint8_t clockPhase = 1, BOOL doutHiz = TRUE,
437 uint8_t csToClockDelay = 0, uint8_t delayAfterTransfer = 0 )
440 peripheralChipSelects, chipSelectPolarity, clockPolarity, clockPhase,
441 doutHiz, csToClockDelay, delayAfterTransfer );
465 inline uint8_t
QSPIStart( puint8_t transmitBufferPtr,
volatile uint8_t* receiveBufferPtr,
466 uint32_t byteCount,
OS_SEM* finishedSem =
NULL )
469 byteCount, finishedSem );
NetBurner Real-Time Operating System API.
SPI Peripheral Module Class.
Definition: dspi.h:101
Never deassert chip select.
Definition: dspi.h:55
uint8_t Start(uint8_t *transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Start a SPI transfer.
BOOL QSPIdone()
Compatibility function for previous drivers. Check SPI status.
Definition: dspi.h:479
bool ClrSem()
Clear a semaphore registration.
Definition: dspi.h:258
uint8_t Tx(uint8_t *transmitBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Convenience function for unidirectional transmit.
Definition: dspi.h:221
Semaphores are used to control access to shared resource critical section, or to communicate between ...
Definition: nbrtos.h:318
A simple wrapper class that helps use OS locks effectively.
Definition: nbrtos.h:1981
uint8_t Rx(uint8_t *receiveBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Convenience function for unidirectional receive.
Definition: dspi.h:234
OS_SEM * GetSem()
Obtain a pointer to the SPI finished semaphore.
Definition: dspi.h:265
uint8_t DSPIInit(uint8_t SPIModule, uint32_t Baudrate, uint8_t QueueBitSize, uint8_t CS, uint8_t CSPol, uint8_t ClkPolarity, uint8_t ClkPhase, BOOL DoutHiz, uint8_t QCD, uint8_t DTL)
Initialize a DSPI module.
uint8_t QSPIStart(puint8_t transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, OS_SEM *finishedSem=NULL)
Compatibility function for previous drivers. Start a SPI transfer.
Definition: dspi.h:465
Deassert chip select after last transfer.
Definition: dspi.h:56
csReturnType
Definition: dspi.h:54
#define DEFAULT_DSPI_MODULE
Default DSPI module.
Definition: dspi.h:40
uint8_t DSPIStart(uint8_t SPIModule, puint8_t transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, OS_SEM *finishedSem=NULL, uint8_t enableDMA=TRUE, int csReturnToInactive=DEASSERT_AFTER_LAST)
Start a DSPI transfer.
BOOL DSPIdone(uint8_t SPIModule=DEFAULT_DSPI_MODULE)
Check SPI status.
Deassert chip select After every transfer.
Definition: dspi.h:57
uint8_t QSPIInit(uint32_t baudRateInBps=2000000, uint8_t transferSizeInBits=8, uint8_t peripheralChipSelects=0x0F, uint8_t chipSelectPolarity=1, uint8_t clockPolarity=0, uint8_t clockPhase=1, BOOL doutHiz=TRUE, uint8_t csToClockDelay=0, uint8_t delayAfterTransfer=0)
Compatibility function for previous drivers. Initialize SPI module.
Definition: dspi.h:434
SPIModule(uint8_t SPIModule)
Create a SPI object.
uint32_t SetBusSpeed(uint32_t maxSpeed)
Set the SPI bus speed Will attempt to set the desired bus speed. It may be different based on the ava...
bool Done()
Function to check SPI status.
Definition: dspi.h:274
#define NULL
Definition: nm_bsp.h:76
uint32_t GetActualBaudrate()
Returns the active baud rate.
Definition: dspi.h:295
#define DSPI_MODULE_COUNT
Number of modules: 0, 1.
Definition: dspi.h:41
bool SetCS(uint8_t CS)
Set the chip select configuration for the SPI object's bus transactions.
Definition: dspi.h:304
uint8_t Init(uint32_t baudRateInBps=2000000, uint8_t transferSizeInBits=8, uint8_t peripheralChipSelects=0x00, uint8_t chipSelectPolarity=0x0F, uint8_t clockPolarity=0, uint8_t clockPhase=1, BOOL doutHiz=TRUE, uint8_t csToClockDelay=0, uint8_t delayAfterTransfer=0)
Initialize an existing SPI object.
bool RegisterSem(OS_SEM *finishedSem)
Register a semaphore for the SPI module.