AM243x MCU+ SDK  09.02.00
mcspi_lld.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023-24 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
50 #ifndef MCSPI_LLD_H_
51 #define MCSPI_LLD_H_
52 
53 /* ========================================================================== */
54 /* Include Files */
55 /* ========================================================================== */
56 #include <stdint.h>
57 #include <stdbool.h>
58 #include <drivers/hw_include/csl_types.h>
59 #include <drivers/hw_include/cslr_mcspi.h>
60 #include <drivers/hw_include/cslr.h>
61 
62 #ifdef __cplusplus
63 extern "C" {
64 #endif
65 
66 /* ========================================================================== */
67 /* Macros & Typedefs */
68 /* ========================================================================== */
69 
70 /* pointer for DMA Handle */
71 typedef void *MCSPI_DmaHandle;
72 /* pointer for DMA Channel Config */
73 typedef void *MCSPI_DmaChConfig;
74 
75 /* function pointer to get clock ticks */
76 typedef uint32_t (*MCSPI_clockGet) (void);
77 
78 
85 #define MCSPI_STATUS_SUCCESS ((int32_t)0)
86 
90 #define MCSPI_STATUS_FAILURE ((int32_t)-1)
91 
95 #define MCSPI_TIMEOUT ((int32_t)-2)
96 
100 #define MCSPI_INVALID_PARAM ((int32_t)-3)
101 
105 #define MCSPI_STATUS_BUSY ((int32_t)-4)
106 
110 #define MCSPI_INVALID_STATE ((int32_t)-5)
111 
120 #define MCSPI_NO_WAIT ((uint32_t)0)
121 
125 #define MCSPI_WAIT_FOREVER ((uint32_t)-1)
126 
134 #define MCSPI_STATE_RESET ((uint32_t)0U)
135 
139 #define MCSPI_STATE_READY ((uint32_t)1U)
140 
144 #define MCSPI_STATE_BUSY ((uint32_t)2U)
145 
149 #define MCSPI_STATE_ERROR ((uint32_t)3U)
150 
161 #define MCSPI_CHANNEL_0 (0U)
162 #define MCSPI_CHANNEL_1 (1U)
163 #define MCSPI_CHANNEL_2 (2U)
164 #define MCSPI_CHANNEL_3 (3U)
165 
175 #define MCSPI_OPER_MODE_POLLED (0U)
176 #define MCSPI_OPER_MODE_INTERRUPT (1U)
177 #define MCSPI_OPER_MODE_DMA (2U)
178 
181 #define MCSPI_MAX_NUM_CHANNELS (4U)
182 
191 #define MCSPI_TRANSFER_COMPLETED ((int32_t)0U)
192 #define MCSPI_TRANSFER_STARTED ((int32_t)1U)
193 #define MCSPI_TRANSFER_CANCELLED ((int32_t)2U)
194 #define MCSPI_TRANSFER_FAILED ((int32_t)3U)
195 #define MCSPI_TRANSFER_CSN_DEASSERT ((int32_t)4U)
196 #define MCSPI_TRANSFER_TIMEOUT ((int32_t)5U)
197 
215 #define MCSPI_MS_MODE_CONTROLLER (CSL_MCSPI_MODULCTRL_MS_MASTER)
216 
217 #define MCSPI_MS_MODE_PERIPHERAL (CSL_MCSPI_MODULCTRL_MS_SLAVE)
218 
234 #define MCSPI_FF_POL0_PHA0 (0U)
235 #define MCSPI_FF_POL0_PHA1 (1U)
236 #define MCSPI_FF_POL1_PHA0 (2U)
237 #define MCSPI_FF_POL1_PHA1 (3U)
238 
249 #define MCSPI_CS_POL_HIGH (CSL_MCSPI_CH0CONF_EPOL_ACTIVEHIGH)
250 
251 #define MCSPI_CS_POL_LOW (CSL_MCSPI_CH0CONF_EPOL_ACTIVELOW)
252 
260 #define MCSPI_TR_MODE_TX_RX (CSL_MCSPI_CH0CONF_TRM_TRANSRECEI)
261 #define MCSPI_TR_MODE_RX_ONLY (CSL_MCSPI_CH0CONF_TRM_RECEIVONLY)
262 #define MCSPI_TR_MODE_TX_ONLY (CSL_MCSPI_CH0CONF_TRM_TRANSONLY)
263 
272 #define MCSPI_IS_D0 (CSL_MCSPI_CH0CONF_IS_LINE0)
273 
274 #define MCSPI_IS_D1 (CSL_MCSPI_CH0CONF_IS_LINE1)
275 
284 #define MCSPI_DPE_ENABLE (CSL_MCSPI_CH0CONF_DPE0_ENABLED)
285 
286 #define MCSPI_DPE_DISABLE (CSL_MCSPI_CH0CONF_DPE0_DISABLED)
287 
295 #define MCSPI_SLV_CS_SELECT_0 (CSL_MCSPI_CH0CONF_SPIENSLV_SPIEN0)
296 #define MCSPI_SLV_CS_SELECT_1 (CSL_MCSPI_CH0CONF_SPIENSLV_SPIEN1)
297 #define MCSPI_SLV_CS_SELECT_2 (CSL_MCSPI_CH0CONF_SPIENSLV_SPIEN2)
298 #define MCSPI_SLV_CS_SELECT_3 (CSL_MCSPI_CH0CONF_SPIENSLV_SPIEN3)
299 
308 #define MCSPI_SB_POL_HIGH (CSL_MCSPI_CH0CONF_SBPOL_HIGHLEVEL)
309 
310 #define MCSPI_SB_POL_LOW (CSL_MCSPI_CH0CONF_SBPOL_LOWLEVEL)
311 
322 #define MCSPI_TCS0_0_CLK (CSL_MCSPI_CH0CONF_TCS0_ZEROCYCLEDLY)
323 
324 #define MCSPI_TCS0_1_CLK (CSL_MCSPI_CH0CONF_TCS0_ONECYCLEDLY)
325 
326 #define MCSPI_TCS0_2_CLK (CSL_MCSPI_CH0CONF_TCS0_TWOCYCLEDLY)
327 
328 #define MCSPI_TCS0_3_CLK (CSL_MCSPI_CH0CONF_TCS0_THREECYCLEDLY)
329 
341 #define MCSPI_CH_MODE_SINGLE (CSL_MCSPI_MODULCTRL_SINGLE_SINGLE)
342 
343 #define MCSPI_CH_MODE_MULTI (CSL_MCSPI_MODULCTRL_SINGLE_MULTI)
344 
356 #define MCSPI_PINMODE_3PIN (CSL_MCSPI_MODULCTRL_PIN34_3PINMODE)
357 #define MCSPI_PINMODE_4PIN (CSL_MCSPI_MODULCTRL_PIN34_4PINMODE)
358 
369 #define MCSPI_INITDLY_0 (CSL_MCSPI_MODULCTRL_INITDLY_NODELAY)
370 
371 #define MCSPI_INITDLY_4 (CSL_MCSPI_MODULCTRL_INITDLY_4CLKDLY)
372 
373 #define MCSPI_INITDLY_8 (CSL_MCSPI_MODULCTRL_INITDLY_8CLKDLY)
374 
375 #define MCSPI_INITDLY_16 (CSL_MCSPI_MODULCTRL_INITDLY_16CLKDLY)
376 
377 #define MCSPI_INITDLY_32 (CSL_MCSPI_MODULCTRL_INITDLY_32CLKDLY)
378 
381 #define MCSPI_ERROR_TX_UNDERFLOW (0x00000001U)
382 #define MCSPI_ERROR_RX_OVERFLOW (0x00000002U)
383 
385 #define MCSPI_MAX_CLK_DIVIDER_SUPPORTED (4096U)
386 
387 /* ========================================================================== */
388 /* Advanced Macros & Typedefs */
389 /* ========================================================================== */
390 
392 #define MCSPI_FIFO_LENGTH (64U)
393 
396 #define MCSPI_RX_FIFO_ENABLE ((uint32_t) CSL_MCSPI_CH0CONF_FFER_FFENABLED \
397  << \
398  CSL_MCSPI_CH0CONF_FFER_SHIFT)
399 
403 #define MCSPI_RX_FIFO_DISABLE ((uint32_t) CSL_MCSPI_CH0CONF_FFER_FFDISABLED \
404  << CSL_MCSPI_CH0CONF_FFER_SHIFT)
405 
409 #define MCSPI_TX_FIFO_ENABLE ((uint32_t) CSL_MCSPI_CH0CONF_FFEW_FFENABLED \
410  << CSL_MCSPI_CH0CONF_FFEW_SHIFT)
411 
415 #define MCSPI_TX_FIFO_DISABLE ((uint32_t) CSL_MCSPI_CH0CONF_FFEW_FFDISABLED \
416  << CSL_MCSPI_CH0CONF_FFEW_SHIFT)
417 
421 #define MCSPI_REG_OFFSET (0x14U)
422 
423 #define MCSPI_CHCONF(x) ((uint32_t) CSL_MCSPI_CH0CONF + \
424  (uint32_t) ((uint32_t) MCSPI_REG_OFFSET * \
425  (uint32_t) (x)))
426 
427 #define MCSPI_CHSTAT(x) ((uint32_t) CSL_MCSPI_CH0STAT + \
428  (uint32_t) ((uint32_t) MCSPI_REG_OFFSET * \
429  (uint32_t) (x)))
430 
431 #define MCSPI_CHCTRL(x) ((uint32_t) CSL_MCSPI_CH0CTRL + \
432  (uint32_t) ((uint32_t) MCSPI_REG_OFFSET * \
433  (uint32_t) (x)))
434 
435 #define MCSPI_CHTX(x) ((uint32_t) CSL_MCSPI_TX0 + \
436  (uint32_t) ((uint32_t) MCSPI_REG_OFFSET * \
437  (uint32_t) (x)))
438 
439 #define MCSPI_CHRX(x) ((uint32_t) CSL_MCSPI_RX0 + \
440  (uint32_t) ((uint32_t) MCSPI_REG_OFFSET * \
441  (uint32_t) (x)))
442 
443 #define MCSPI_CLKD_MASK (0x0FU)
444 
446 #define MCSPI_IRQSTATUS_CLEAR_ALL (CSL_MCSPI_IRQSTATUS_EOW_MASK | \
447  CSL_MCSPI_IRQSTATUS_WKS_MASK | \
448  CSL_MCSPI_IRQSTATUS_RX3_FULL_MASK | \
449  CSL_MCSPI_IRQSTATUS_TX3_UNDERFLOW_MASK | \
450  CSL_MCSPI_IRQSTATUS_TX3_EMPTY_MASK | \
451  CSL_MCSPI_IRQSTATUS_RX2_FULL_MASK | \
452  CSL_MCSPI_IRQSTATUS_TX2_UNDERFLOW_MASK | \
453  CSL_MCSPI_IRQSTATUS_TX2_EMPTY_MASK | \
454  CSL_MCSPI_IRQSTATUS_RX1_FULL_MASK | \
455  CSL_MCSPI_IRQSTATUS_TX1_UNDERFLOW_MASK | \
456  CSL_MCSPI_IRQSTATUS_TX1_EMPTY_MASK | \
457  CSL_MCSPI_IRQSTATUS_RX0_OVERFLOW_MASK | \
458  CSL_MCSPI_IRQSTATUS_RX0_FULL_MASK | \
459  CSL_MCSPI_IRQSTATUS_TX0_UNDERFLOW_MASK | \
460  CSL_MCSPI_IRQSTATUS_TX0_EMPTY_MASK)
461 
462 /* ========================================================================== */
463 /* Structure Declarations */
464 /* ========================================================================== */
465 
474 typedef struct
475 {
476  uint32_t channel;
479  uint32_t csDisable;
485  uint32_t dataSize;
496  uint32_t count;
499  void *txBuf;
510  void *rxBuf;
517  void *args;
519  uint32_t timeout;
521  uint32_t status;
524 
534 typedef struct MCSPI_ExtendedParams_s
535 {
536  uint32_t channel;
539  uint32_t csDisable;
545  uint32_t dataSize;
556  void *args;
559 
571 typedef struct
572 {
573  uint32_t chNum;
575  uint32_t frameFormat;
577  uint32_t bitRate;
579  uint32_t csPolarity;
581  uint32_t trMode;
583  uint32_t inputSelect;
585  uint32_t dpe0;
587  uint32_t dpe1;
589  uint32_t slvCsSelect;
592  uint32_t startBitEnable;
598  uint32_t turboEnable;
600  uint32_t csIdleTime;
603  uint32_t defaultTxData;
606  uint32_t txFifoTrigLvl;
608  uint32_t rxFifoTrigLvl;
611 
612 /* ========================================================================== */
613 /* Function pointers Declarations */
614 /* ========================================================================== */
615 
623 typedef void (*MCSPI_transferCallbackFxn) (void *args, uint32_t transferStatus);
624 
632 typedef void (*MCSPI_errorCallbackFxn) (void *args, uint32_t transferStatus);
633 
634 /* ========================================================================== */
635 /* Internal/Private Structure Declarations */
636 /* ========================================================================== */
637 
641 typedef struct
642 {
643  /*
644  * User parameters
645  */
648  uint32_t dmaChConfigNum;
651  /*
652  * State variables
653  */
654  uint32_t isOpen;
656  uint32_t csDisable;
658  uint32_t csEnable;
660  uint8_t *curTxBufPtr;
662  uint8_t *curRxBufPtr;
664  uint32_t curTxWords;
668  uint32_t curRxWords;
671  /*
672  * MCSPI derived variables
673  */
674  uint8_t bufWidthShift;
682  uint32_t effTxFifoDepth;
684  uint32_t effRxFifoDepth;
686  uint32_t intrMask;
690  uint32_t chConfRegVal;
692  uint32_t chCtrlRegVal;
694  uint32_t systRegVal;
696 
700 typedef struct
701 {
702  uint32_t inputClkFreq;
704  uint32_t intrNum;
706  uint32_t operMode;
708  uint8_t intrPriority;
710  uint32_t chMode;
712  uint32_t pinMode;
714  uint32_t initDelay;
716  uint32_t multiWordAccess;
718  uint32_t msMode;
720  uint32_t chEnabled[MCSPI_MAX_NUM_CHANNELS];
727  /* clock usec to tick */
733 
737 typedef struct
738 {
739  uint32_t baseAddr;
742  /*
743  * User parameters
744  */
745  uint32_t state;
751  uint32_t errorFlag;
754  /*
755  * Transfer parameters
756  */
757  uint32_t transferChannel;
765  void* args;
768 
769 /* ========================================================================== */
770 /* Function Declarations */
771 /* ========================================================================== */
772 
773 /* Low level HW functions */
774 void MCSPI_reset(uint32_t baseAddr);
775 void MCSPI_clearAllIrqStatus(uint32_t baseAddr);
776 void MCSPI_stop(MCSPILLD_Handle hMcspi, MCSPI_ChObject *chObj, uint32_t chNum);
777 void MCSPI_setChDataSize(uint32_t baseAddr, MCSPI_ChObject *chObj,
778  uint32_t dataSize, uint32_t csDisable);
779 
780 static inline void MCSPI_intrStatusClear(const MCSPI_ChObject *chObj,
781  uint32_t baseAddr, uint32_t intFlags)
782 {
783  /* Clear the SSB bit in the MCSPI_SYST register. */
784  CSL_REG32_WR(baseAddr + CSL_MCSPI_SYST, chObj->systRegVal);
785  /* Clear the interrupt status. */
786  CSL_REG32_WR(baseAddr + CSL_MCSPI_IRQSTATUS, intFlags);
787 }
788 
789 /* ========================================================================== */
790 /* Function Declarations */
791 /* ========================================================================== */
792 
802 
821 
831 
844 int32_t MCSPI_lld_write(MCSPILLD_Handle hMcspi, void *txBuf, uint32_t count, uint32_t timeout,
845  const MCSPI_ExtendedParams *extendedParams);
846 
859 int32_t MCSPI_lld_writeIntr(MCSPILLD_Handle hMcspi, void *txBuf, uint32_t count, uint32_t timeout,
860  const MCSPI_ExtendedParams *extendedParams);
861 
874 int32_t MCSPI_lld_writeDma(MCSPILLD_Handle hMcspi, void * txBuf, uint32_t count,
875  uint32_t timeout, const MCSPI_ExtendedParams *extendedParams);
876 
889 int32_t MCSPI_lld_read(MCSPILLD_Handle hMcspi, void * rxBuf, uint32_t count, uint32_t timeout,
890  const MCSPI_ExtendedParams *extendedParams);
891 
904 int32_t MCSPI_lld_readIntr(MCSPILLD_Handle hMcspi, void * rxBuf, uint32_t count, uint32_t timeout,
905  const MCSPI_ExtendedParams *extendedParams);
906 
920 int32_t MCSPI_lld_readDma(MCSPILLD_Handle hMcspi, void * rxBuf, uint32_t count,
921  uint32_t timeout, const MCSPI_ExtendedParams *extendedParams);
934 int32_t MCSPI_lld_readWrite(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count,
935  uint32_t timeout, const MCSPI_ExtendedParams *extendedParams);
948 int32_t MCSPI_lld_readWriteIntr(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count,
949  uint32_t timeout, const MCSPI_ExtendedParams *extendedParams);
962 int32_t MCSPI_lld_readWriteDma(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count,
963  uint32_t timeout, const MCSPI_ExtendedParams *extendedParams);
964 
974 
984 
995 
1006 
1017 
1024 void MCSPI_lld_controllerIsr(void* args);
1025 
1032 void MCSPI_lld_peripheralIsr(void* args);
1033 
1041 
1051 
1061 
1068 static inline void MCSPI_lld_ChConfig_init(MCSPI_ChConfig *chConfig);
1069 
1076 static inline void MCSPI_lld_Transaction_init(MCSPI_Transaction *trans);
1077 
1087 
1100  uint32_t chNum,
1101  uint32_t numWordsRxTx);
1102 
1117 static inline uint8_t MCSPI_getBufWidthShift(uint32_t dataSize);
1118 
1142 static inline uint32_t MCSPI_readChStatusReg(uint32_t baseAddr, uint32_t chNum);
1143 
1154 static inline uint32_t MCSPI_readChCtrlReg(uint32_t baseAddr, uint32_t chNum);
1155 
1165 static inline void MCSPI_writeChCtrlReg(uint32_t baseAddr, uint32_t chNum,
1166  uint32_t regVal);
1167 
1178 static inline uint32_t MCSPI_readChConf(uint32_t baseAddr, uint32_t chNum);
1179 
1189 static inline void MCSPI_writeChConfReg(uint32_t baseAddr, uint32_t chNum,
1190  uint32_t regVal);
1191 
1208 static inline void MCSPI_writeTxDataReg(uint32_t baseAddr,
1209  uint32_t txData,
1210  uint32_t chNum);
1211 
1231 static inline void MCSPI_enableTxFIFO(uint32_t baseAddr, uint32_t chNum,
1232  uint32_t enableFlag);
1233 
1253 static inline void MCSPI_enableRxFIFO(uint32_t baseAddr, uint32_t chNum,
1254  uint32_t enableFlag);
1255 
1271 static inline uint32_t MCSPI_readRxDataReg(uint32_t baseAddr,
1272  uint32_t chNum);
1273 
1290 static inline void MCSPI_setDataWidth(uint32_t baseAddr, uint32_t chNum,
1291  uint32_t dataWidth);
1292 
1293 /* ========================================================================== */
1294 /* Static Function Definitions */
1295 /* ========================================================================== */
1296 
1297 static inline void MCSPI_lld_ChConfig_init(MCSPI_ChConfig *chConfig)
1298 {
1299  if(chConfig != NULL)
1300  {
1301  chConfig->chNum = MCSPI_CHANNEL_0;
1302  chConfig->frameFormat = MCSPI_FF_POL0_PHA0;
1303  chConfig->bitRate = 1000000U;
1304  chConfig->csPolarity = MCSPI_CS_POL_LOW;
1305  chConfig->trMode = MCSPI_TR_MODE_TX_RX;
1306  chConfig->inputSelect = MCSPI_IS_D1;
1307  chConfig->dpe0 = MCSPI_DPE_ENABLE;
1308  chConfig->dpe1 = MCSPI_DPE_DISABLE;
1309  chConfig->slvCsSelect = MCSPI_SLV_CS_SELECT_0;
1310  chConfig->startBitEnable = FALSE;
1311  chConfig->startBitPolarity = MCSPI_SB_POL_LOW;
1312  chConfig->csIdleTime = MCSPI_TCS0_0_CLK;
1313  chConfig->defaultTxData = 0x00000000U;
1314  }
1315 }
1316 
1318 {
1319  if(trans != NULL)
1320  {
1321  trans->channel = 0U;
1322  trans->csDisable = TRUE;
1323  trans->dataSize = 8U;
1324  trans->count = 0U;
1325  trans->txBuf = NULL;
1326  trans->rxBuf = NULL;
1327  trans->args = NULL;
1328  trans->timeout = MCSPI_WAIT_FOREVER;
1329  }
1330 }
1331 
1332 static inline uint8_t MCSPI_getBufWidthShift(uint32_t dataSize)
1333 {
1334  uint8_t bufWidthShift = 0U;
1335 
1336  if(dataSize <= 8U)
1337  {
1338  bufWidthShift = 0U;
1339  }
1340  else if(dataSize <= 16U)
1341  {
1342  bufWidthShift = 1U;
1343  }
1344  else
1345  {
1346  bufWidthShift = 2U;
1347  }
1348 
1349  return bufWidthShift;
1350 }
1351 
1352 static inline uint32_t MCSPI_readChStatusReg(uint32_t baseAddr, uint32_t chNum)
1353 {
1354  /* Return the status from MCSPI_CHSTAT register. */
1355  return (CSL_REG32_RD(baseAddr + MCSPI_CHSTAT(chNum)));
1356 }
1357 
1358 static inline uint32_t MCSPI_readChCtrlReg(uint32_t baseAddr, uint32_t chNum)
1359 {
1360  return CSL_REG32_RD(baseAddr + MCSPI_CHCTRL(chNum));
1361 }
1362 
1363 static inline void MCSPI_writeChCtrlReg(uint32_t baseAddr, uint32_t chNum,
1364  uint32_t regVal)
1365 {
1366  CSL_REG32_WR(baseAddr + MCSPI_CHCTRL(chNum), regVal);
1367 }
1368 
1369 static inline uint32_t MCSPI_readChConf(uint32_t baseAddr, uint32_t chNum)
1370 {
1371  return CSL_REG32_RD(baseAddr + MCSPI_CHCONF(chNum));
1372 }
1373 
1374 static inline void MCSPI_writeChConfReg(uint32_t baseAddr, uint32_t chNum,
1375  uint32_t regVal)
1376 {
1377  CSL_REG32_WR(baseAddr + MCSPI_CHCONF(chNum), regVal);
1378 }
1379 
1380 static inline void MCSPI_writeTxDataReg(uint32_t baseAddr,
1381  uint32_t txData,
1382  uint32_t chNum)
1383 {
1384  /* Load the MCSPI_TX register with the data to be transmitted */
1385  CSL_REG32_WR(baseAddr + MCSPI_CHTX(chNum), txData);
1386 }
1387 
1388 static inline void MCSPI_enableTxFIFO(uint32_t baseAddr,
1389  uint32_t chNum,
1390  uint32_t enableFlag)
1391 {
1392  /* Set the FFEW field with user sent value. */
1393  CSL_REG32_FINS(
1394  baseAddr + MCSPI_CHCONF(chNum),
1395  MCSPI_CH0CONF_FFEW,
1396  enableFlag >> CSL_MCSPI_CH0CONF_FFEW_SHIFT);
1397 }
1398 
1399 static inline void MCSPI_enableRxFIFO(uint32_t baseAddr,
1400  uint32_t chNum,
1401  uint32_t enableFlag)
1402 {
1403  /* Set the FFER field with the user sent value. */
1404  CSL_REG32_FINS(
1405  baseAddr + MCSPI_CHCONF(chNum),
1406  MCSPI_CH0CONF_FFER,
1407  enableFlag >> CSL_MCSPI_CH0CONF_FFER_SHIFT);
1408 }
1409 
1410 static inline uint32_t MCSPI_readRxDataReg(uint32_t baseAddr, uint32_t chNum)
1411 {
1412  /* Return the data present in the MCSPI_RX register. */
1413  return (CSL_REG32_RD(baseAddr + MCSPI_CHRX(chNum)));
1414 }
1415 
1416 static inline void MCSPI_setDataWidth(uint32_t baseAddr, uint32_t chNum,
1417  uint32_t dataWidth)
1418 {
1419  uint32_t regVal;
1420 
1421  regVal = CSL_REG32_RD(baseAddr + MCSPI_CHCONF(chNum));
1422  CSL_FINS(regVal, MCSPI_CH0CONF_WL, (dataWidth - 1U));
1423  CSL_REG32_WR(baseAddr + MCSPI_CHCONF(chNum), regVal);
1424 }
1425 
1426 #ifdef __cplusplus
1427 }
1428 #endif
1429 
1430 #endif /* #ifndef MCSPI_LLD_H_ */
1431 
MCSPI_lld_readWriteDmaCancel
int32_t MCSPI_lld_readWriteDmaCancel(MCSPILLD_Handle hMcspi)
This API cancels current McSPI transfer in DMA mode.
MCSPILLD_InitObject::pinMode
uint32_t pinMode
Definition: mcspi_lld.h:712
MCSPI_getBufWidthShift
static uint8_t MCSPI_getBufWidthShift(uint32_t dataSize)
This API will return the buffer width in bytes based on dataSize.
Definition: mcspi_lld.h:1332
MCSPI_clockGet
uint32_t(* MCSPI_clockGet)(void)
Definition: mcspi_lld.h:76
MCSPI_ChObject::curTxBufPtr
uint8_t * curTxBufPtr
Definition: mcspi_lld.h:660
MCSPILLD_InitObject
MCSPI driver initialization object.
Definition: mcspi_lld.h:701
MCSPI_ChObject
MCSPI channel object.
Definition: mcspi_lld.h:642
MCSPI_Transaction::count
uint32_t count
Definition: mcspi_lld.h:496
MCSPI_ChConfig::txFifoTrigLvl
uint32_t txFifoTrigLvl
Definition: mcspi_lld.h:606
MCSPI_CHTX
#define MCSPI_CHTX(x)
Base address of McSPI_CHTX(x)
Definition: mcspi_lld.h:435
MCSPI_FF_POL0_PHA0
#define MCSPI_FF_POL0_PHA0
Definition: mcspi_lld.h:234
MCSPI_ChConfig::rxFifoTrigLvl
uint32_t rxFifoTrigLvl
Definition: mcspi_lld.h:608
MCSPILLD_InitObject::intrNum
uint32_t intrNum
Definition: mcspi_lld.h:704
MCSPI_lld_readWriteCancel
int32_t MCSPI_lld_readWriteCancel(MCSPILLD_Handle hMcspi)
This API cancels current McSPI transfer.
MCSPI_DPE_DISABLE
#define MCSPI_DPE_DISABLE
No transmission on Data Line.
Definition: mcspi_lld.h:286
MCSPI_Transaction::status
uint32_t status
Definition: mcspi_lld.h:521
MCSPI_Transaction
Data structure used with MCSPI_transfer()
Definition: mcspi_lld.h:475
MCSPI_ChObject::effTxFifoDepth
uint32_t effTxFifoDepth
Definition: mcspi_lld.h:682
MCSPI_TCS0_0_CLK
#define MCSPI_TCS0_0_CLK
0.5 clock cycles delay
Definition: mcspi_lld.h:322
MCSPI_writeTxDataReg
static void MCSPI_writeTxDataReg(uint32_t baseAddr, uint32_t txData, uint32_t chNum)
This API will put the data on to the McSPI Channel transmit register.
Definition: mcspi_lld.h:1380
MCSPILLD_Object::transferDataSize
uint32_t transferDataSize
Definition: mcspi_lld.h:761
MCSPI_lld_getBaseAddr
uint32_t MCSPI_lld_getBaseAddr(MCSPILLD_Handle handle)
Function to get base address of MCSPI instance of a particular handle.
MCSPI_ChObject::intrMask
uint32_t intrMask
Definition: mcspi_lld.h:686
MCSPILLD_InitObject::clockP_get
MCSPI_clockGet clockP_get
Definition: mcspi_lld.h:726
MCSPI_WAIT_FOREVER
#define MCSPI_WAIT_FOREVER
Value to use when needing a timeout of infinity or wait forver until resource is available.
Definition: mcspi_lld.h:125
MCSPI_ChObject::chConfRegVal
uint32_t chConfRegVal
Definition: mcspi_lld.h:690
count
uint32_t count
Definition: tisci_rm_ra.h:6
MCSPI_enableTxFIFO
static void MCSPI_enableTxFIFO(uint32_t baseAddr, uint32_t chNum, uint32_t enableFlag)
This API will enable/disable the Tx FIFOs of McSPI peripheral.
Definition: mcspi_lld.h:1388
MCSPI_lld_transferCancel
int32_t MCSPI_lld_transferCancel(MCSPILLD_Handle hMcspi)
This API cancels current McSPI transfer.
MCSPILLD_Object::errorFlag
uint32_t errorFlag
Definition: mcspi_lld.h:751
MCSPI_SLV_CS_SELECT_0
#define MCSPI_SLV_CS_SELECT_0
Definition: mcspi_lld.h:295
MCSPILLD_InitObject::intrPriority
uint8_t intrPriority
Definition: mcspi_lld.h:708
MCSPI_errorCallbackFxn
void(* MCSPI_errorCallbackFxn)(void *args, uint32_t transferStatus)
The definition of a error callback function used by the SPI driver when used in MCSPI_TRANSFER_MODE_C...
Definition: mcspi_lld.h:632
MCSPI_ChObject::dmaChConfigNum
uint32_t dmaChConfigNum
Definition: mcspi_lld.h:648
MCSPI_CHCONF
#define MCSPI_CHCONF(x)
Base address of McSPI_CHCONF(x)
Definition: mcspi_lld.h:423
MCSPI_lld_controllerIsr
void MCSPI_lld_controllerIsr(void *args)
This is the McSPI Controller ISR and can be used as IRQ handler in Controller mode.
MCSPI_lld_readWriteIntr
int32_t MCSPI_lld_readWriteIntr(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads writes data from the McSPI instance in Interrupt mode.
MCSPI_ChConfig::bitRate
uint32_t bitRate
Definition: mcspi_lld.h:577
MCSPI_ExtendedParams::args
void * args
Definition: mcspi_lld.h:556
MCSPILLD_InitObject::transferCallbackFxn
MCSPI_transferCallbackFxn transferCallbackFxn
Definition: mcspi_lld.h:728
MCSPI_lld_read
int32_t MCSPI_lld_read(MCSPILLD_Handle hMcspi, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads data from the McSPI instance in Polling mode.
MCSPI_lld_Transaction_init
static void MCSPI_lld_Transaction_init(MCSPI_Transaction *trans)
Function to initialize the MCSPI_Transaction struct to its defaults.
Definition: mcspi_lld.h:1317
MCSPILLD_Object
MCSPI driver object.
Definition: mcspi_lld.h:738
MCSPI_SB_POL_LOW
#define MCSPI_SB_POL_LOW
Start-bit polarity is held to 0 during MCSPI transfer.
Definition: mcspi_lld.h:310
MCSPI_Transaction::timeout
uint32_t timeout
Definition: mcspi_lld.h:519
MCSPI_readRxDataReg
static uint32_t MCSPI_readRxDataReg(uint32_t baseAddr, uint32_t chNum)
This API will return the data present in the MCSPI_RX register.
Definition: mcspi_lld.h:1410
MCSPI_DPE_ENABLE
#define MCSPI_DPE_ENABLE
Data line selected for transmission.
Definition: mcspi_lld.h:284
MCSPI_DmaHandle
void * MCSPI_DmaHandle
Definition: mcspi_lld.h:71
MCSPI_Transaction::csDisable
uint32_t csDisable
Definition: mcspi_lld.h:479
MCSPI_IS_D1
#define MCSPI_IS_D1
Data line 1 (SPIDAT[1]) selected for reception.
Definition: mcspi_lld.h:274
MCSPI_ChObject::chCtrlRegVal
uint32_t chCtrlRegVal
Definition: mcspi_lld.h:692
MCSPILLD_InitHandle
struct MCSPILLD_InitObject * MCSPILLD_InitHandle
MCSPI_lld_peripheralIsr
void MCSPI_lld_peripheralIsr(void *args)
This is the McSPI Peripheral ISR and can be used as IRQ handler in Peripheral mode.
MCSPI_CHRX
#define MCSPI_CHRX(x)
Base address of McSPI_CHRX(x)
Definition: mcspi_lld.h:439
MCSPI_lld_writeDma
int32_t MCSPI_lld_writeDma(MCSPILLD_Handle hMcspi, void *txBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API writes data to the McSPI instance in DMA mode.
MCSPI_ChConfig::trMode
uint32_t trMode
Definition: mcspi_lld.h:581
MCSPI_transferCallbackFxn
void(* MCSPI_transferCallbackFxn)(void *args, uint32_t transferStatus)
The definition of a transfer completion callback function used by the SPI driver when used in MCSPI_T...
Definition: mcspi_lld.h:623
MCSPILLD_Object::hMcspiInit
MCSPILLD_InitHandle hMcspiInit
Definition: mcspi_lld.h:749
MCSPI_TR_MODE_TX_RX
#define MCSPI_TR_MODE_TX_RX
Definition: mcspi_lld.h:260
MCSPI_CHSTAT
#define MCSPI_CHSTAT(x)
Base address of McSPI_CHSTAT(x)
Definition: mcspi_lld.h:427
MCSPI_CHANNEL_0
#define MCSPI_CHANNEL_0
Definition: mcspi_lld.h:161
MCSPILLD_Object::transferChannel
uint32_t transferChannel
Definition: mcspi_lld.h:757
MCSPI_lld_ChConfig_init
static void MCSPI_lld_ChConfig_init(MCSPI_ChConfig *chConfig)
Function to initialize the MCSPI_ChConfig struct to its defaults.
Definition: mcspi_lld.h:1297
MCSPI_ChObject::isOpen
uint32_t isOpen
Definition: mcspi_lld.h:654
MCSPI_readChCtrlReg
static uint32_t MCSPI_readChCtrlReg(uint32_t baseAddr, uint32_t chNum)
This API returns Channel control register value.
Definition: mcspi_lld.h:1358
MCSPILLD_Object::state
uint32_t state
Definition: mcspi_lld.h:745
MCSPI_lld_initDma
int32_t MCSPI_lld_initDma(MCSPILLD_Handle hMcspi)
This API Initializes the McSPI instance in DMA Mode.
MCSPI_lld_deInitDma
int32_t MCSPI_lld_deInitDma(MCSPILLD_Handle hMcspi)
This API De-Initializes the McSPI instance in DMA mode.
MCSPI_lld_transfer
int32_t MCSPI_lld_transfer(MCSPILLD_Handle hMcspi, MCSPI_Transaction *transaction)
This API transfers data from the McSPI instance in Polling mode.
MCSPI_ChObject::curRxWords
uint32_t curRxWords
Definition: mcspi_lld.h:668
MCSPI_lld_transferDmaCancel
int32_t MCSPI_lld_transferDmaCancel(MCSPILLD_Handle hMcspi)
This API cancels current McSPI transfer in DMA mode.
MCSPI_lld_init
int32_t MCSPI_lld_init(MCSPILLD_Handle hMcspi)
This API Initializes the McSPI instance.
MCSPI_clearAllIrqStatus
void MCSPI_clearAllIrqStatus(uint32_t baseAddr)
MCSPI_lld_transferDma
int32_t MCSPI_lld_transferDma(MCSPILLD_Handle hMcspi, MCSPI_Transaction *transaction)
This API reads data from the McSPI instance in DMA mode.
MCSPI_enableRxFIFO
static void MCSPI_enableRxFIFO(uint32_t baseAddr, uint32_t chNum, uint32_t enableFlag)
This API will enable/disable the Rx FIFOs of McSPI peripheral.
Definition: mcspi_lld.h:1399
MCSPI_intrStatusClear
static void MCSPI_intrStatusClear(const MCSPI_ChObject *chObj, uint32_t baseAddr, uint32_t intFlags)
Definition: mcspi_lld.h:780
MCSPI_ChConfig::csPolarity
uint32_t csPolarity
Definition: mcspi_lld.h:579
MCSPI_ChConfig::startBitPolarity
uint32_t startBitPolarity
Definition: mcspi_lld.h:595
MCSPI_ChConfig::turboEnable
uint32_t turboEnable
Definition: mcspi_lld.h:598
MCSPI_ExtendedParams::channel
uint32_t channel
Definition: mcspi_lld.h:536
MCSPILLD_Object::transferMutex
void * transferMutex
Definition: mcspi_lld.h:747
MCSPILLD_InitObject::multiWordAccess
uint32_t multiWordAccess
Definition: mcspi_lld.h:716
MCSPI_reset
void MCSPI_reset(uint32_t baseAddr)
MCSPI_lld_writeIntr
int32_t MCSPI_lld_writeIntr(MCSPILLD_Handle hMcspi, void *txBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API writes data to the McSPI instance in Interrupt mode.
MCSPI_ChObject::csDisable
uint32_t csDisable
Definition: mcspi_lld.h:656
MCSPI_Transaction::args
void * args
Definition: mcspi_lld.h:517
MCSPI_ChObject::dataWidthBitMask
uint32_t dataWidthBitMask
Definition: mcspi_lld.h:680
MCSPI_ExtendedParams
Data structure used with MCSPI_lld_read(), MCSPI_lld_readIntr(), MCSPI_lld_readDma(),...
Definition: mcspi_lld.h:535
MCSPI_ExtendedParams::dataSize
uint32_t dataSize
Definition: mcspi_lld.h:545
MCSPI_ChConfig::startBitEnable
uint32_t startBitEnable
Definition: mcspi_lld.h:592
MCSPI_Transaction::txBuf
void * txBuf
Definition: mcspi_lld.h:499
MCSPI_CHCTRL
#define MCSPI_CHCTRL(x)
Base address of McSPI_CHCTRL(x)
Definition: mcspi_lld.h:431
MCSPILLD_InitObject::chMode
uint32_t chMode
Definition: mcspi_lld.h:710
MCSPI_lld_reConfigFifo
int32_t MCSPI_lld_reConfigFifo(MCSPILLD_Handle handle, uint32_t chNum, uint32_t numWordsRxTx)
Function to re-configure Effective FIFO Words.
MCSPI_Transaction::rxBuf
void * rxBuf
Definition: mcspi_lld.h:510
MCSPI_ChObject::systRegVal
uint32_t systRegVal
Definition: mcspi_lld.h:694
MCSPI_ChObject::effRxFifoDepth
uint32_t effRxFifoDepth
Definition: mcspi_lld.h:684
MCSPI_MAX_NUM_CHANNELS
#define MCSPI_MAX_NUM_CHANNELS
Max number of channels/Chip Select (CS) supported.
Definition: mcspi_lld.h:181
MCSPI_Transaction::dataSize
uint32_t dataSize
Definition: mcspi_lld.h:485
MCSPI_lld_write
int32_t MCSPI_lld_write(MCSPILLD_Handle hMcspi, void *txBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API writes data to the McSPI instance in Polling mode.
MCSPI_ChObject::curTxWords
uint32_t curTxWords
Definition: mcspi_lld.h:664
MCSPILLD_InitObject::mcspiDmaHandle
MCSPI_DmaHandle mcspiDmaHandle
Definition: mcspi_lld.h:724
MCSPI_ChConfig::slvCsSelect
uint32_t slvCsSelect
Definition: mcspi_lld.h:589
MCSPI_lld_deInit
int32_t MCSPI_lld_deInit(MCSPILLD_Handle hMcspi)
This API De-Initializes the McSPI instance.
MCSPI_readChStatusReg
static uint32_t MCSPI_readChStatusReg(uint32_t baseAddr, uint32_t chNum)
This API will return the status of the McSPI channel currently in use.
Definition: mcspi_lld.h:1352
MCSPI_stop
void MCSPI_stop(MCSPILLD_Handle hMcspi, MCSPI_ChObject *chObj, uint32_t chNum)
MCSPI_ChObject::bufWidthShift
uint8_t bufWidthShift
Definition: mcspi_lld.h:674
MCSPILLD_Object::transaction
MCSPI_Transaction transaction
Definition: mcspi_lld.h:763
MCSPILLD_Handle
struct MCSPILLD_Object * MCSPILLD_Handle
MCSPI_lld_readWriteDma
int32_t MCSPI_lld_readWriteDma(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads writes data from the McSPI instance in DMA mode.
MCSPI_ExtendedParams::csDisable
uint32_t csDisable
Definition: mcspi_lld.h:539
MCSPI_ChObject::curRxBufPtr
uint8_t * curRxBufPtr
Definition: mcspi_lld.h:662
MCSPI_lld_readIntr
int32_t MCSPI_lld_readIntr(MCSPILLD_Handle hMcspi, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads data from the McSPI instance in Interrupt mode.
MCSPI_CS_POL_LOW
#define MCSPI_CS_POL_LOW
SPIEN (CS) is held low during the ACTIVE state.
Definition: mcspi_lld.h:251
MCSPILLD_Object::args
void * args
Definition: mcspi_lld.h:765
MCSPI_lld_readWrite
int32_t MCSPI_lld_readWrite(MCSPILLD_Handle hMcspi, void *txBuf, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads writes data from the McSPI instance in polling mode.
MCSPI_ChConfig::defaultTxData
uint32_t defaultTxData
Definition: mcspi_lld.h:603
MCSPI_ChConfig::dpe1
uint32_t dpe1
Definition: mcspi_lld.h:587
MCSPILLD_InitObject::msMode
uint32_t msMode
Definition: mcspi_lld.h:718
MCSPI_ChObject::csEnable
uint32_t csEnable
Definition: mcspi_lld.h:658
MCSPILLD_InitObject::operMode
uint32_t operMode
Definition: mcspi_lld.h:706
MCSPI_writeChCtrlReg
static void MCSPI_writeChCtrlReg(uint32_t baseAddr, uint32_t chNum, uint32_t regVal)
This API sets Channel control register value.
Definition: mcspi_lld.h:1363
MCSPI_ChObject::chCfg
MCSPI_ChConfig * chCfg
Definition: mcspi_lld.h:646
MCSPI_readChConf
static uint32_t MCSPI_readChConf(uint32_t baseAddr, uint32_t chNum)
This API returns Channel Config register value.
Definition: mcspi_lld.h:1369
MCSPI_ChObject::dmaChCfg
MCSPI_DmaChConfig dmaChCfg
Definition: mcspi_lld.h:688
MCSPI_Transaction::channel
uint32_t channel
Definition: mcspi_lld.h:476
MCSPI_lld_readDma
int32_t MCSPI_lld_readDma(MCSPILLD_Handle hMcspi, void *rxBuf, uint32_t count, uint32_t timeout, const MCSPI_ExtendedParams *extendedParams)
This API reads data from the McSPI instance in DMA mode.
MCSPI_lld_transferIntr
int32_t MCSPI_lld_transferIntr(MCSPILLD_Handle hMcspi, MCSPI_Transaction *transaction)
This API reads data from the McSPI instance in Interrupt mode.
MCSPI_ChConfig::inputSelect
uint32_t inputSelect
Definition: mcspi_lld.h:583
MCSPILLD_Object::baseAddr
uint32_t baseAddr
Definition: mcspi_lld.h:739
MCSPI_ChConfig::dpe0
uint32_t dpe0
Definition: mcspi_lld.h:585
MCSPI_setChDataSize
void MCSPI_setChDataSize(uint32_t baseAddr, MCSPI_ChObject *chObj, uint32_t dataSize, uint32_t csDisable)
MCSPI_lld_getState
int32_t MCSPI_lld_getState(MCSPILLD_Handle hMcspi)
This API returns the driver state.
MCSPI_ChConfig
MCSPI configuration parameters for the channel.
Definition: mcspi_lld.h:572
MCSPI_writeChConfReg
static void MCSPI_writeChConfReg(uint32_t baseAddr, uint32_t chNum, uint32_t regVal)
This API sets Channel Config register value.
Definition: mcspi_lld.h:1374
MCSPILLD_InitObject::errorCallbackFxn
MCSPI_errorCallbackFxn errorCallbackFxn
Definition: mcspi_lld.h:730
MCSPILLD_Object::transferCsDisable
uint32_t transferCsDisable
Definition: mcspi_lld.h:759
MCSPILLD_InitObject::initDelay
uint32_t initDelay
Definition: mcspi_lld.h:714
MCSPI_setDataWidth
static void MCSPI_setDataWidth(uint32_t baseAddr, uint32_t chNum, uint32_t dataWidth)
This API will set the data width in the channel config register.
Definition: mcspi_lld.h:1416
MCSPILLD_InitObject::inputClkFreq
uint32_t inputClkFreq
Definition: mcspi_lld.h:702
MCSPI_ChConfig::frameFormat
uint32_t frameFormat
Definition: mcspi_lld.h:575
MCSPI_ChConfig::csIdleTime
uint32_t csIdleTime
Definition: mcspi_lld.h:600
MCSPI_DmaChConfig
void * MCSPI_DmaChConfig
Definition: mcspi_lld.h:73
MCSPI_ChConfig::chNum
uint32_t chNum
Definition: mcspi_lld.h:573