NetBurner 3.5.6
PDF Version
coldfire/cpu/MCF5441X/include/dspi.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
55#ifndef _DMA_SPI_H_INC
56#define _DMA_SPI_H_INC
57#include <nbrtos.h>
58#include <basictypes.h>
59#include <sim5441x.h>
60
61#ifndef __cplusplus
62#error DSPI driver is a C++ only library
63#endif
64
70#define DSPI_OK (0)
71#define DSPI_BUSY (1)
72#define DSPI_ERROR (2)
78#define MCR_MASTER_INIT 0x80000C01
79#define MCR_HALT_BIT 0x00000001
80#define MCR_DIS_TXF 0x00002000
81#define MCR_DIS_RXF 0x00001000
82#define MCR_CLR_FIFOS 0x00000C00
88#define CTAR_CLOCK_POLARITY 0x04000000
89#define CTAR_CLOCK_PHASE 0x02000000
90#define CTAR_FRAME_16BIT 0x78000000
91#define CTAR_FRAME_4BIT 0x18000000
97#define SR_EOQF_MASK 0x10000000
98#define SR_CLR_FLAGS 0x8A0A0000
104#define RSER_EOQF_IRQ_ONLY ~0x8B0B0000
105#define RSER_DMA_IRQ_ONLY 0x03030000
111#define PUSHR_CONT_BIT 0x80000000
112#define PUSHR_EOQ_BIT 0x08000000
118#define DMA_CH_DSPI_0_RX 0x0C
119#define DMA_CH_DSPI_0_TX 0x0D
120#define DMA_CH_DSPI_1_RX 0x0E
121#define DMA_CH_DSPI_1_TX 0x0F
122#define DMA_CH_DSPI_2_RX 0x1C
123#define DMA_CH_DSPI_2_TX 0x1D
124#define DMA_CH_DSPI_3_RX 0x2C
125#define DMA_CH_DSPI_3_TX 0x2D
131#define CR_CLEAR_NON_GRP_PRIO ~0x000300FF
132#define CR_SET_RR_CH_ARB 0x00000004
138#define TCD_ATTR_8BIT_TRANS 0x0000
139#define TCD_ATTR_16BIT_TRANS 0x0101
141#define TCD_XOFF_0uint8_t 0x0000
142#define TCD_XOFF_1uint8_t 0x0001
143#define TCD_XOFF_2uint8_t 0x0002
145#define TCD_XITER_CNT_MASK 0x7FFF
147#define TCD_CSR_DONE_BIT 0x0080
148#define TCD_CSR_DISABLE_REQ 0xC008
149#define TCD_CSR_DREQ_INT_MAJOR 0xC00A
152#define DEFAULT_DSPI_MODULE 1
153#define DSPI_MODULE_COUNT 4
169
185
200
206typedef struct
207{
208 bool enabled;
209 uint8_t byteCount;
212 dspistruct savedDSPI;
213 bool csState;
215
218typedef struct
219{
220 volatile uint8_t *pDSPIRxbuf;
221 volatile uint8_t *pDSPITxbuf;
222 uint8_t BitsPerQueue;
223 uint32_t DSPI_SizeLeft;
224 uint16_t Command_Mask;
226 OS_SEM *DSPI_Sem;
227 volatile uint8_t DSPI_INT_STATUS;
228 uint32_t WordsToWrite;
230 volatile BOOL DSPIfinished;
233
234// uint8_t DSPIInit( uint8_t SPIModule, uint32_t Baudrate, uint8_t QueueBitSize, uint8_t CS,
235// uint8_t CSPol, uint8_t ClkPolarity, uint8_t ClkPhase, BOOL DoutHiz, uint8_t QCD, uint8_t DTL );
236
244{
245 uint32_t m_moduleNum;
246 uint32_t m_mcr;
247 uint32_t m_ctar0;
248 uint32_t m_ctar1;
249 bool m_enableDMA;
250 uint16_t m_CommandMask;
251 uint8_t m_BitsPerQueue;
252 OS_SEM *m_finishedSem;
253 uint32_t m_actualBaudrate;
254
255 public:
256 bool m_inProgress;
257
258 static DSPIModule *lastCxts[DSPI_MODULE_COUNT];
259 static dspiDriverStruct driverCxt[DSPI_MODULE_COUNT];
260
274
306 uint32_t baudRateInBps,
307 uint8_t transferSizeInBits = 8,
308 uint8_t peripheralChipSelects = 0x00,
309 uint8_t chipSelectPolarity = 0x0F,
310 uint8_t clockPolarity = 0,
311 uint8_t clockPhase = 1,
312 BOOL doutHiz = TRUE,
313 uint8_t csToClockDelay = 0,
314 uint8_t delayAfterTransfer = 0);
315
344 uint8_t Init(uint32_t baudRateInBps = 2000000,
345 uint8_t transferSizeInBits = 8,
346 uint8_t peripheralChipSelects = 0x00,
347 uint8_t chipSelectPolarity = 0x0F,
348 uint8_t clockPolarity = 0,
349 uint8_t clockPhase = 1,
350 BOOL doutHiz = TRUE,
351 uint8_t csToClockDelay = 0,
352 uint8_t delayAfterTransfer = 0);
353
370 uint8_t Start(uint8_t *transmitBufferPtr,
371 volatile uint8_t *receiveBufferPtr,
372 uint32_t byteCount,
373 int csReturnToInactive = DEASSERT_AFTER_LAST);
374
390 inline uint8_t Tx(uint8_t *transmitBufferPtr, uint32_t byteCount, int csReturnToInactive = DEASSERT_AFTER_LAST)
391 {
392 return Start(transmitBufferPtr, NULL, byteCount, csReturnToInactive);
393 }
394
410 inline uint8_t Rx(uint8_t *receiveBufferPtr, uint32_t byteCount, int csReturnToInactive = DEASSERT_AFTER_LAST)
411 {
412 return Start(NULL, receiveBufferPtr, byteCount, csReturnToInactive);
413 }
414
421 bool EnableDMA(bool enableDMA = true);
426 inline bool DisableDMA() { return EnableDMA(false); }
427
434 bool RegisterSem(OS_SEM *finishedSem);
439 inline bool ClrSem() { return RegisterSem(NULL); }
444 inline OS_SEM *GetSem() { return m_finishedSem; }
445
451 inline bool Done() { return !m_inProgress; }
452
460 static BOOL Done(uint8_t SPIModule);
461
467 inline uint32_t GetActualBaudrate() { return m_actualBaudrate; }
468
477 inline bool SetCS(uint8_t CS)
478 {
479 OSLockObj lock;
480 if (m_inProgress) { return false; }
481 m_CommandMask = (((m_mcr >> 16) ^ CS) & 0xFF);
482 return true;
483 }
484
520 friend uint8_t DSPIInit(uint8_t SPIModule,
521 uint32_t Baudrate,
522 uint8_t QueueBitSize,
523 uint8_t CS,
524 uint8_t CSPol,
525 uint8_t ClkPolarity,
526 uint8_t ClkPhase,
527 BOOL DoutHiz,
528 uint8_t QCD,
529 uint8_t DTL);
530};
531
568 uint32_t Baudrate = 2000000,
569 uint8_t QueueBitSize = 8,
570 uint8_t CS = 0x00,
571 uint8_t CSPol = 0x0F,
572 uint8_t ClkPolarity = 0,
573 uint8_t ClkPhase = 1,
574 BOOL DoutHiz = TRUE,
575 uint8_t QCD = 0,
576 uint8_t DTL = 0);
577
595uint8_t DSPIStart(uint8_t SPIModule,
596 puint8_t transmitBufferPtr,
597 volatile uint8_t *receiveBufferPtr,
598 uint32_t byteCount,
599 OS_SEM *finishedSem = NULL,
600 uint8_t enableDMA = TRUE,
601 int csReturnToInactive = DEASSERT_AFTER_LAST);
602
616
617// QSPI to DSPITranslation macros
618// Translates QSPI calls to DSPI calls
619
620inline uint8_t QSPIInit(uint32_t baudRateInBps = 2000000,
621 uint8_t transferSizeInBits = 8,
622 uint8_t peripheralChipSelects = 0x0F,
623 uint8_t chipSelectPolarity = 1,
624 uint8_t clockPolarity = 0,
625 uint8_t clockPhase = 1,
626 BOOL doutHiz = TRUE,
627 uint8_t csToClockDelay = 0,
628 uint8_t delayAfterTransfer = 0)
629{
630 return DSPIInit(DEFAULT_DSPI_MODULE, baudRateInBps, transferSizeInBits, peripheralChipSelects, chipSelectPolarity, clockPolarity,
631 clockPhase, doutHiz, csToClockDelay, delayAfterTransfer);
632}
633
634inline uint8_t QSPIStart(puint8_t transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, OS_SEM *finishedSem = NULL)
635{
636 return DSPIStart(DEFAULT_DSPI_MODULE, transmitBufferPtr, receiveBufferPtr, byteCount, finishedSem);
637}
638
639inline BOOL QSPIdone()
640{
641 return DSPIdone();
642}
643
644#endif /* ----- #ifndef _DMA_SPI_H_INC ----- */
645
DSPIModule is a SPI communications driver. It is an object based driver, which allows for low overhea...
Definition coldfire/cpu/MCF5441X/include/dspi.h:244
bool EnableDMA(bool enableDMA=true)
EnableDMA configures whether DMA is allowed for qualifying transactions.
bool Done()
Returns whether the previously started transaction is complete.
Definition coldfire/cpu/MCF5441X/include/dspi.h:451
bool SetCS(uint8_t CS)
Modifies the chip select configuration for the driver context such that only the requested chip selec...
Definition coldfire/cpu/MCF5441X/include/dspi.h:477
DSPIModule(uint8_t SPIModule)
The minimum DSPIModule Constructor. Requires that configuration settings be applied after constructio...
uint8_t Start(uint8_t *transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Start begins a SPI transaction using the provided buffers.
OS_SEM * GetSem()
Gets a pointer to the registered Semaphore.
Definition coldfire/cpu/MCF5441X/include/dspi.h:444
bool DisableDMA()
DisableDMA disables DMA for all transactions.
Definition coldfire/cpu/MCF5441X/include/dspi.h:426
static BOOL Done(uint8_t SPIModule)
Returns whether the previously started transaction for a given hardware module is complete.
friend 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.
bool RegisterSem(OS_SEM *finishedSem)
Registers a semaphore to be posted to upon completion of transactions.
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)
DSPIModule Full DSPIModule Constructor. Will initialize all hardware settings.
uint32_t GetActualBaudrate()
Returns the actual bus speed to be used.
Definition coldfire/cpu/MCF5441X/include/dspi.h:467
uint8_t Rx(uint8_t *receiveBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Rx begins a receive only SPI transaction using the provided buffer. Holds output line low during tran...
Definition coldfire/cpu/MCF5441X/include/dspi.h:410
bool ClrSem()
Clears the semaphore registration.
Definition coldfire/cpu/MCF5441X/include/dspi.h:439
uint8_t Tx(uint8_t *transmitBufferPtr, uint32_t byteCount, int csReturnToInactive=DEASSERT_AFTER_LAST)
Tx begins a transmit only SPI transaction using the provided buffer. Silently discards the received d...
Definition coldfire/cpu/MCF5441X/include/dspi.h:390
DSPIModule(uint8_t SPIModule, uint32_t baudRateInBps, 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)
DSPIModule Full DSPIModule Constructor. Will initialize all hardware settings.
SPI Peripheral Module Class.
Definition cortex-m7/cpu/SAME70/include/dspi.h:138
csReturnType
Chip select return types.
Definition coldfire/cpu/MCF5441X/include/dspi.h:163
spiChipSelect
Chip select number.
Definition coldfire/cpu/MCF5441X/include/dspi.h:178
spiChipSelectPolarity
Chip select polarity.
Definition coldfire/cpu/MCF5441X/include/dspi.h:196
uint8_t DSPIInit(uint8_t SPIModule=DEFAULT_DSPI_MODULE, uint32_t Baudrate=2000000, uint8_t QueueBitSize=8, uint8_t CS=0x00, uint8_t CSPol=0x0F, uint8_t ClkPolarity=0, uint8_t ClkPhase=1, BOOL DoutHiz=TRUE, uint8_t QCD=0, uint8_t DTL=0)
Initialize a DSPI module.
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)
Initialize Queued Serial Peripheral Interface (QSPI)
Definition coldfire/cpu/MCF5441X/include/dspi.h:620
uint8_t QSPIStart(puint8_t transmitBufferPtr, volatile uint8_t *receiveBufferPtr, uint32_t byteCount, OS_SEM *finishedSem=NULL)
Start QSPI Data Transfer.
Definition coldfire/cpu/MCF5441X/include/dspi.h:634
#define DEFAULT_DSPI_MODULE
Definition coldfire/cpu/MCF5441X/include/dspi.h:152
BOOL QSPIdone()
Can be called after QSPIStart(). Returns TRUE when transfer is complete. This is an alternative to us...
Definition coldfire/cpu/MCF5441X/include/dspi.h:639
BOOL DSPIdone(uint8_t SPIModule=DEFAULT_DSPI_MODULE)
Check current DSPI Data Transfer.
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 DSPI Data Transfer.
#define DSPI_MODULE_COUNT
Definition coldfire/cpu/MCF5441X/include/dspi.h:153
@ DEASSERT_EVERY_TRANSFER
The chip select should be deasserted between every transfer within the transaction.
Definition coldfire/cpu/MCF5441X/include/dspi.h:167
@ DEASSERT_AFTER_LAST
Definition coldfire/cpu/MCF5441X/include/dspi.h:165
@ DEASSERT_NEVER
The chip select used for the transaction should remain asserted, even after the transaction is comple...
Definition coldfire/cpu/MCF5441X/include/dspi.h:164
@ CHIP_SELECT_2
Configure bit mask for SPI chip select 2.
Definition coldfire/cpu/MCF5441X/include/dspi.h:181
@ CHIP_SELECT_0
Configure bit mask for SPI chip select 0.
Definition coldfire/cpu/MCF5441X/include/dspi.h:179
@ CHIP_SELECT_1
Configure bit mask for SPI chip select 1.
Definition coldfire/cpu/MCF5441X/include/dspi.h:180
@ CHIP_SELECT_3
Configure bit mask for SPI chip select 3.
Definition coldfire/cpu/MCF5441X/include/dspi.h:182
@ CHIP_SELECT_DISABLED
Configure bit mask to disable chip select.
Definition coldfire/cpu/MCF5441X/include/dspi.h:183
@ CS_ASSERT_HIGH
Bit mask configures all active chip selects as inactive low, active high.
Definition coldfire/cpu/MCF5441X/include/dspi.h:198
@ CS_ASSERT_LOW
Bit mask configures all active chip selects as active low, inactive high.
Definition coldfire/cpu/MCF5441X/include/dspi.h:197
DSPI DMA structure.
Definition coldfire/cpu/MCF5441X/include/dspi.h:207
bool enabled
Whether or not the driver is using DMA for the transfer.
Definition coldfire/cpu/MCF5441X/include/dspi.h:208
bool rxPresent
Is a receive buffer present?
Definition coldfire/cpu/MCF5441X/include/dspi.h:210
dspistruct savedDSPI
Definition coldfire/cpu/MCF5441X/include/dspi.h:212
bool txPresent
Is a transmit buffer present?
Definition coldfire/cpu/MCF5441X/include/dspi.h:211
uint8_t byteCount
The bytes transferred per DMA call.
Definition coldfire/cpu/MCF5441X/include/dspi.h:209
bool csState
Definition coldfire/cpu/MCF5441X/include/dspi.h:213
Major variables/configurations used for a DSPI transfer.
Definition coldfire/cpu/MCF5441X/include/dspi.h:219
uint8_t BitsPerQueue
Number of bits per transfer, (value = 8 - 32)
Definition coldfire/cpu/MCF5441X/include/dspi.h:222
uint32_t LastWordsToWrite
The amount from the previous ISR.
Definition coldfire/cpu/MCF5441X/include/dspi.h:229
volatile uint8_t * pDSPIRxbuf
Track memory location where data will be read or written to the peripheral.
Definition coldfire/cpu/MCF5441X/include/dspi.h:220
volatile uint8_t * pDSPITxbuf
Track memory location where data will be read or written to the peripheral.
Definition coldfire/cpu/MCF5441X/include/dspi.h:221
dspiDMAStruct dma
Definition coldfire/cpu/MCF5441X/include/dspi.h:231
OS_SEM * DSPI_Sem
Pointer to an external semaphore provided by DSPIStart()
Definition coldfire/cpu/MCF5441X/include/dspi.h:226
uint32_t DSPI_SizeLeft
Number of bytes left in the transfer.
Definition coldfire/cpu/MCF5441X/include/dspi.h:223
uint16_t Command_Mask
Partial configuration for the queue's command reg.
Definition coldfire/cpu/MCF5441X/include/dspi.h:224
uint32_t WordsToWrite
Number of words to write to the command/TX Queues and Read from RX.
Definition coldfire/cpu/MCF5441X/include/dspi.h:228
volatile BOOL DSPIfinished
Definition coldfire/cpu/MCF5441X/include/dspi.h:230
volatile uint8_t DSPI_INT_STATUS
Status of the spi device.
Definition coldfire/cpu/MCF5441X/include/dspi.h:227
csReturnType csReturnToInactive
Definition coldfire/cpu/MCF5441X/include/dspi.h:225