52 #ifndef ti_dl_dl_spi__include 53 #define ti_dl_dl_spi__include 58 #include <ti/devices/msp/msp.h> 61 #ifdef __MSPM0_HAS_SPI__ 75 #define DL_SPI_CD_MODE_DATA (SPI_CTL1_CDMODE_DATA >> SPI_CTL1_CDMODE_OFS) 80 #define DL_SPI_CD_MODE_COMMAND (SPI_CTL1_CDMODE_COMMAND >> SPI_CTL1_CDMODE_OFS) 92 #define DL_SPI_INTERRUPT_DMA_DONE_TX (SPI_CPU_INT_IMASK_DMA_DONE_TX_SET) 97 #define DL_SPI_INTERRUPT_DMA_DONE_RX (SPI_CPU_INT_IMASK_DMA_DONE_RX_SET) 101 #define DL_SPI_INTERRUPT_IDLE (SPI_CPU_INT_IMASK_IDLE_SET) 106 #define DL_SPI_INTERRUPT_TX_EMPTY (SPI_CPU_INT_IMASK_TXEMPTY_SET) 111 #define DL_SPI_INTERRUPT_TX (SPI_CPU_INT_IMASK_TX_SET) 116 #define DL_SPI_INTERRUPT_RX (SPI_CPU_INT_IMASK_RX_SET) 121 #define DL_SPI_INTERRUPT_RX_TIMEOUT (SPI_CPU_INT_IMASK_RTOUT_SET) 126 #define DL_SPI_INTERRUPT_RX_FULL (SPI_CPU_INT_IMASK_RXFULL_SET) 131 #define DL_SPI_INTERRUPT_TX_UNDERFLOW (SPI_CPU_INT_IMASK_TXFIFO_UNF_SET) 136 #define DL_SPI_INTERRUPT_PARITY_ERROR (SPI_CPU_INT_IMASK_PER_SET) 141 #define DL_SPI_INTERRUPT_RX_OVERFLOW (SPI_CPU_INT_IMASK_RXFIFO_OVF_SET) 148 DL_SPI_DMA_IIDX_RX_TRIGGER = SPI_DMA_TRIG_RX_IIDX_STAT_RX_EVT,
150 DL_SPI_DMA_IIDX_RX_TIMEOUT_TRIGGER = SPI_DMA_TRIG_RX_IIDX_STAT_RTOUT_EVT
151 } DL_SPI_DMA_IIDX_RX;
156 DL_SPI_DMA_IIDX_TX_TRIGGER = SPI_DMA_TRIG_TX_IIDX_STAT_TX_EVT
157 } DL_SPI_DMA_IIDX_TX;
165 #define DL_SPI_DMA_INTERRUPT_RX (SPI_DMA_TRIG_RX_IMASK_RX_SET) 170 #define DL_SPI_DMA_INTERRUPT_RX_TIMEOUT (SPI_DMA_TRIG_RX_IMASK_RTOUT_SET) 177 #define DL_SPI_DMA_INTERRUPT_TX (SPI_DMA_TRIG_TX_IMASK_TX_SET) 185 (SPI_CTL1_PES_ENABLE | SPI_CTL1_PREN_ENABLE | SPI_CTL1_PTEN_ENABLE),
188 (SPI_CTL1_PES_DISABLE | SPI_CTL1_PREN_ENABLE | SPI_CTL1_PTEN_ENABLE),
190 DL_SPI_PARITY_NONE = (SPI_CTL1_PREN_DISABLE | SPI_CTL1_PTEN_DISABLE)
196 DL_SPI_FRAME_FORMAT_MOTO3_POL0_PHA0 =
197 (SPI_CTL0_SPO_LOW | SPI_CTL0_SPH_FIRST | SPI_CTL0_FRF_MOTOROLA_3WIRE),
199 DL_SPI_FRAME_FORMAT_MOTO3_POL0_PHA1 =
200 (SPI_CTL0_SPO_LOW | SPI_CTL0_SPH_SECOND | SPI_CTL0_FRF_MOTOROLA_3WIRE),
202 DL_SPI_FRAME_FORMAT_MOTO3_POL1_PHA0 =
203 (SPI_CTL0_SPO_HIGH | SPI_CTL0_SPH_FIRST | SPI_CTL0_FRF_MOTOROLA_3WIRE),
205 DL_SPI_FRAME_FORMAT_MOTO3_POL1_PHA1 =
206 (SPI_CTL0_SPO_HIGH | SPI_CTL0_SPH_SECOND |
207 SPI_CTL0_FRF_MOTOROLA_3WIRE),
209 DL_SPI_FRAME_FORMAT_MOTO4_POL0_PHA0 =
210 (SPI_CTL0_SPO_LOW | SPI_CTL0_SPH_FIRST | SPI_CTL0_FRF_MOTOROLA_4WIRE),
212 DL_SPI_FRAME_FORMAT_MOTO4_POL0_PHA1 =
213 (SPI_CTL0_SPO_LOW | SPI_CTL0_SPH_SECOND | SPI_CTL0_FRF_MOTOROLA_4WIRE),
215 DL_SPI_FRAME_FORMAT_MOTO4_POL1_PHA0 =
216 (SPI_CTL0_SPO_HIGH | SPI_CTL0_SPH_FIRST | SPI_CTL0_FRF_MOTOROLA_4WIRE),
218 DL_SPI_FRAME_FORMAT_MOTO4_POL1_PHA1 =
219 (SPI_CTL0_SPO_HIGH | SPI_CTL0_SPH_SECOND |
220 SPI_CTL0_FRF_MOTOROLA_4WIRE),
222 DL_SPI_FRAME_FORMAT_TI_SYNC = (SPI_CTL0_FRF_TI_SYNC),
223 } DL_SPI_FRAME_FORMAT;
228 DL_SPI_MODE_CONTROLLER = (SPI_CTL1_CP_ENABLE),
230 DL_SPI_MODE_PERIPHERAL = (SPI_CTL1_CP_DISABLE)
236 DL_SPI_BIT_ORDER_MSB_FIRST = (SPI_CTL1_MSB_ENABLE),
238 DL_SPI_BIT_ORDER_LSB_FIRST = (SPI_CTL1_MSB_DISABLE)
244 DL_SPI_DATA_SIZE_4 = (SPI_CTL0_DSS_DSS_4),
246 DL_SPI_DATA_SIZE_5 = (SPI_CTL0_DSS_DSS_5),
248 DL_SPI_DATA_SIZE_6 = (SPI_CTL0_DSS_DSS_6),
250 DL_SPI_DATA_SIZE_7 = (SPI_CTL0_DSS_DSS_7),
252 DL_SPI_DATA_SIZE_8 = (SPI_CTL0_DSS_DSS_8),
254 DL_SPI_DATA_SIZE_9 = (SPI_CTL0_DSS_DSS_9),
256 DL_SPI_DATA_SIZE_10 = (SPI_CTL0_DSS_DSS_10),
258 DL_SPI_DATA_SIZE_11 = (SPI_CTL0_DSS_DSS_11),
260 DL_SPI_DATA_SIZE_12 = (SPI_CTL0_DSS_DSS_12),
262 DL_SPI_DATA_SIZE_13 = (SPI_CTL0_DSS_DSS_13),
264 DL_SPI_DATA_SIZE_14 = (SPI_CTL0_DSS_DSS_14),
266 DL_SPI_DATA_SIZE_15 = (SPI_CTL0_DSS_DSS_15),
268 DL_SPI_DATA_SIZE_16 = (SPI_CTL0_DSS_DSS_16),
274 DL_SPI_CHIP_SELECT_0 = (SPI_CTL0_CSSEL_CSSEL_0),
276 DL_SPI_CHIP_SELECT_1 = (SPI_CTL0_CSSEL_CSSEL_1),
278 DL_SPI_CHIP_SELECT_2 = (SPI_CTL0_CSSEL_CSSEL_2),
280 DL_SPI_CHIP_SELECT_3 = (SPI_CTL0_CSSEL_CSSEL_3),
282 DL_SPI_CHIP_SELECT_NONE = (0)
283 } DL_SPI_CHIP_SELECT;
288 DL_SPI_TX_FIFO_LEVEL_3_4_EMPTY = SPI_IFLS_TXIFLSEL_LVL_3_4,
290 DL_SPI_TX_FIFO_LEVEL_1_2_EMPTY = SPI_IFLS_TXIFLSEL_LVL_1_2,
292 DL_SPI_TX_FIFO_LEVEL_1_4_EMPTY = SPI_IFLS_TXIFLSEL_LVL_1_4,
294 DL_SPI_TX_FIFO_LEVEL_EMPTY = SPI_IFLS_TXIFLSEL_LVL_EMPTY,
296 DL_SPI_TX_FIFO_LEVEL_ONE_FRAME = SPI_IFLS_TXIFLSEL_LEVEL_1
297 } DL_SPI_TX_FIFO_LEVEL;
302 DL_SPI_RX_FIFO_LEVEL_ONE_FRAME = SPI_IFLS_RXIFLSEL_LEVEL_1,
304 DL_SPI_RX_FIFO_LEVEL_FULL = SPI_IFLS_RXIFLSEL_LVL_FULL,
306 DL_SPI_RX_FIFO_LEVEL_3_4_FULL = SPI_IFLS_RXIFLSEL_LVL_3_4,
308 DL_SPI_RX_FIFO_LEVEL_1_2_FULL = SPI_IFLS_RXIFLSEL_LVL_1_2,
310 DL_SPI_RX_FIFO_LEVEL_1_4_FULL = SPI_IFLS_RXIFLSEL_LVL_1_4,
311 } DL_SPI_RX_FIFO_LEVEL;
317 DL_SPI_IIDX_DMA_DONE_TX = SPI_CPU_INT_IIDX_STAT_DMA_DONE_TX_EVT,
319 DL_SPI_IIDX_DMA_DONE_RX = SPI_CPU_INT_IIDX_STAT_DMA_DONE_RX_EVT,
323 DL_SPI_IIDX_IDLE = SPI_CPU_INT_IIDX_STAT_IDLE_EVT,
325 DL_SPI_IIDX_TX_EMPTY = SPI_CPU_INT_IIDX_STAT_TX_EMPTY,
327 DL_SPI_IIDX_TX = SPI_CPU_INT_IIDX_STAT_TX_EVT,
329 DL_SPI_IIDX_RX = SPI_CPU_INT_IIDX_STAT_RX_EVT,
331 DL_SPI_IIDX_RX_TIMEOUT = SPI_CPU_INT_IIDX_STAT_RTOUT_EVT,
334 DL_SPI_IIDX_RX_FULL = SPI_CPU_INT_IIDX_STAT_RXFULL_EVT,
336 DL_SPI_IIDX_TX_UNDERFLOW = SPI_CPU_INT_IIDX_STAT_TXFIFO_UNF_EVT,
339 DL_SPI_IIDX_PARITY_ERROR = SPI_CPU_INT_IIDX_STAT_PER_EVT,
341 DL_SPI_IIDX_RX_OVERFLOW = SPI_CPU_INT_IIDX_STAT_RXFIFO_OFV_EVT
347 DL_SPI_CLOCK_DIVIDE_RATIO_1 = SPI_CLKDIV_RATIO_DIV_BY_1,
349 DL_SPI_CLOCK_DIVIDE_RATIO_2 = SPI_CLKDIV_RATIO_DIV_BY_2,
351 DL_SPI_CLOCK_DIVIDE_RATIO_3 = SPI_CLKDIV_RATIO_DIV_BY_3,
353 DL_SPI_CLOCK_DIVIDE_RATIO_4 = SPI_CLKDIV_RATIO_DIV_BY_4,
355 DL_SPI_CLOCK_DIVIDE_RATIO_5 = SPI_CLKDIV_RATIO_DIV_BY_5,
357 DL_SPI_CLOCK_DIVIDE_RATIO_6 = SPI_CLKDIV_RATIO_DIV_BY_6,
359 DL_SPI_CLOCK_DIVIDE_RATIO_7 = SPI_CLKDIV_RATIO_DIV_BY_7,
361 DL_SPI_CLOCK_DIVIDE_RATIO_8 = SPI_CLKDIV_RATIO_DIV_BY_8
362 } DL_SPI_CLOCK_DIVIDE_RATIO;
367 DL_SPI_CLOCK_BUSCLK = SPI_CLKSEL_SYSCLK_SEL_ENABLE,
369 DL_SPI_CLOCK_MFCLK = SPI_CLKSEL_MFCLK_SEL_ENABLE,
371 DL_SPI_CLOCK_LFCLK = SPI_CLKSEL_LFCLK_SEL_ENABLE
385 DL_SPI_FRAME_FORMAT frameFormat;
391 DL_SPI_PARITY parity;
394 DL_SPI_DATA_SIZE dataSize;
397 DL_SPI_BIT_ORDER bitOrder;
403 DL_SPI_CHIP_SELECT chipSelectPin;
412 DL_SPI_CLOCK clockSel;
415 DL_SPI_CLOCK_DIVIDE_RATIO divideRatio;
417 } DL_SPI_ClockConfig;
429 uint32_t controlWord0;
435 uint32_t controlWord1;
439 uint32_t clockControl;
445 uint32_t divideRatio;
450 uint32_t interruptFifoLevelSelectWord;
454 uint32_t interruptMask0;
458 uint32_t interruptMask1;
462 uint32_t interruptMask2;
467 } DL_SPI_backupConfig;
479 void DL_SPI_init(SPI_Regs *spi,
const DL_SPI_Config *config);
492 __STATIC_INLINE
void DL_SPI_enablePower(SPI_Regs *spi)
494 spi->GPRCM.PWREN = (SPI_PWREN_KEY_UNLOCK_W | SPI_PWREN_ENABLE_ENABLE);
508 __STATIC_INLINE
void DL_SPI_disablePower(SPI_Regs *spi)
510 spi->GPRCM.PWREN = (SPI_PWREN_KEY_UNLOCK_W | SPI_PWREN_ENABLE_DISABLE);
529 __STATIC_INLINE
bool DL_SPI_isPowerEnabled(
const SPI_Regs *spi)
532 (spi->GPRCM.PWREN & SPI_PWREN_ENABLE_MASK) == SPI_PWREN_ENABLE_ENABLE);
540 __STATIC_INLINE
void DL_SPI_reset(SPI_Regs *spi)
543 (SPI_RSTCTL_KEY_UNLOCK_W | SPI_RSTCTL_RESETSTKYCLR_CLR |
544 SPI_RSTCTL_RESETASSERT_ASSERT);
556 __STATIC_INLINE
bool DL_SPI_isReset(
const SPI_Regs *spi)
558 return ((spi->GPRCM.STAT & SPI_GPRCM_STAT_RESETSTKY_MASK) ==
559 SPI_GPRCM_STAT_RESETSTKY_RESET);
567 __STATIC_INLINE
void DL_SPI_enable(SPI_Regs *spi)
569 spi->CTL1 |= SPI_CTL1_ENABLE_ENABLE;
582 __STATIC_INLINE
bool DL_SPI_isEnabled(
const SPI_Regs *spi)
584 return ((spi->CTL1 & SPI_CTL1_ENABLE_MASK) == SPI_CTL1_ENABLE_ENABLE);
592 __STATIC_INLINE
void DL_SPI_disable(SPI_Regs *spi)
594 spi->CTL1 &= ~(SPI_CTL1_ENABLE_MASK);
605 void DL_SPI_setClockConfig(SPI_Regs *spi,
const DL_SPI_ClockConfig *config);
615 void DL_SPI_getClockConfig(
const SPI_Regs *spi, DL_SPI_ClockConfig *config);
627 __STATIC_INLINE
bool DL_SPI_isBusy(
const SPI_Regs *spi)
629 return ((spi->STAT & SPI_STAT_BUSY_MASK) == SPI_STAT_BUSY_ACTIVE);
642 __STATIC_INLINE
bool DL_SPI_isTXFIFOEmpty(
const SPI_Regs *spi)
644 return ((spi->STAT & SPI_STAT_TFE_MASK) == SPI_STAT_TFE_EMPTY);
657 __STATIC_INLINE
bool DL_SPI_isTXFIFOFull(
const SPI_Regs *spi)
659 return ((spi->STAT & SPI_STAT_TNF_MASK) == SPI_STAT_TNF_FULL);
672 __STATIC_INLINE
bool DL_SPI_isRXFIFOEmpty(
const SPI_Regs *spi)
674 return ((spi->STAT & SPI_STAT_RFE_MASK) == SPI_STAT_RFE_EMPTY);
687 __STATIC_INLINE
bool DL_SPI_isRXFIFOFull(
const SPI_Regs *spi)
689 return ((spi->STAT & SPI_STAT_RNF_MASK) == SPI_STAT_RNF_FULL);
710 __STATIC_INLINE
void DL_SPI_setParity(SPI_Regs *spi, DL_SPI_PARITY parity)
713 (SPI_CTL1_PREN_MASK | SPI_CTL1_PTEN_MASK | SPI_CTL1_PES_MASK));
725 __STATIC_INLINE DL_SPI_PARITY DL_SPI_getParity(
const SPI_Regs *spi)
727 uint32_t parity = spi->CTL1 & (SPI_CTL1_PES_MASK | SPI_CTL1_PREN_MASK |
730 return (DL_SPI_PARITY)(parity);
743 __STATIC_INLINE
void DL_SPI_enableReceiveParity(SPI_Regs *spi)
745 spi->CTL1 |= SPI_CTL1_PREN_ENABLE;
758 __STATIC_INLINE
void DL_SPI_disableReceiveParity(SPI_Regs *spi)
760 spi->CTL1 &= ~(SPI_CTL1_PREN_MASK);
773 __STATIC_INLINE
bool DL_SPI_isReceiveParityEnabled(
const SPI_Regs *spi)
775 return ((spi->CTL1 & SPI_CTL1_PREN_MASK) == SPI_CTL1_PREN_ENABLE);
788 __STATIC_INLINE
void DL_SPI_enableTransmitParity(SPI_Regs *spi)
790 spi->CTL1 |= SPI_CTL1_PTEN_ENABLE;
803 __STATIC_INLINE
void DL_SPI_disableTransmitParity(SPI_Regs *spi)
805 spi->CTL1 &= ~(SPI_CTL1_PTEN_MASK);
818 __STATIC_INLINE
bool DL_SPI_isTransmitParityEnabled(
const SPI_Regs *spi)
820 return ((spi->CTL1 & SPI_CTL1_PTEN_MASK) == SPI_CTL1_PTEN_ENABLE);
835 __STATIC_INLINE
void DL_SPI_setFrameFormat(
836 SPI_Regs *spi, DL_SPI_FRAME_FORMAT frameFormat)
839 (SPI_CTL0_FRF_MASK | SPI_CTL0_SPO_MASK | SPI_CTL0_SPH_MASK));
851 __STATIC_INLINE DL_SPI_FRAME_FORMAT DL_SPI_getFrameFormat(
const SPI_Regs *spi)
853 uint32_t frameFormat = spi->CTL0 & (SPI_CTL0_FRF_MASK | SPI_CTL0_SPO_MASK |
856 return (DL_SPI_FRAME_FORMAT)(frameFormat);
868 __STATIC_INLINE
void DL_SPI_setDataSize(
869 SPI_Regs *spi, DL_SPI_DATA_SIZE dataSize)
883 __STATIC_INLINE DL_SPI_DATA_SIZE DL_SPI_getDataSize(
const SPI_Regs *spi)
885 uint32_t dataSize = spi->CTL0 & SPI_CTL0_DSS_MASK;
887 return (DL_SPI_DATA_SIZE)(dataSize);
898 __STATIC_INLINE
void DL_SPI_setMode(SPI_Regs *spi, DL_SPI_MODE mode)
912 __STATIC_INLINE DL_SPI_MODE DL_SPI_getMode(
const SPI_Regs *spi)
914 uint32_t mode = spi->CTL1 & SPI_CTL1_CP_MASK;
916 return (DL_SPI_MODE)(mode);
928 __STATIC_INLINE
void DL_SPI_setBitOrder(
929 SPI_Regs *spi, DL_SPI_BIT_ORDER bitOrder)
943 __STATIC_INLINE DL_SPI_BIT_ORDER DL_SPI_getBitOrder(
const SPI_Regs *spi)
945 uint32_t bitOrder = spi->CTL1 & SPI_CTL1_MSB_MASK;
947 return (DL_SPI_BIT_ORDER)(bitOrder);
958 __STATIC_INLINE
void DL_SPI_enableLoopbackMode(SPI_Regs *spi)
960 spi->CTL1 |= SPI_CTL1_LBM_ENABLE;
971 __STATIC_INLINE
void DL_SPI_disableLoopbackMode(SPI_Regs *spi)
973 spi->CTL1 &= ~(SPI_CTL1_LBM_MASK);
986 __STATIC_INLINE
bool DL_SPI_isLoopbackModeEnabled(
const SPI_Regs *spi)
988 return ((spi->CTL1 & SPI_CTL1_LBM_MASK) == SPI_CTL1_LBM_ENABLE);
1005 __STATIC_INLINE
void DL_SPI_setRepeatTransmit(
1006 SPI_Regs *spi, uint32_t numRepeats)
1009 SPI_CTL1_REPEATTX_MASK);
1026 __STATIC_INLINE uint32_t DL_SPI_getRepeatTransmit(
const SPI_Regs *spi)
1028 return ((spi->CTL1 & SPI_CTL1_REPEATTX_MASK) >> SPI_CTL1_REPEATTX_OFS);
1043 __STATIC_INLINE
void DL_SPI_enablePeripheralAlignDataOnChipSelect(
1046 spi->CTL0 |= SPI_CTL0_CSCLR_ENABLE;
1059 __STATIC_INLINE
void DL_SPI_disablePeripheralAlignDataOnChipSelect(
1062 spi->CTL0 &= ~(SPI_CTL0_CSCLR_MASK);
1075 __STATIC_INLINE
bool DL_SPI_isPeripheralAlignDataOnChipSelectEnabled(
1076 const SPI_Regs *spi)
1078 return ((spi->CTL0 & SPI_CTL0_CSCLR_MASK) == SPI_CTL0_CSCLR_ENABLE);
1092 __STATIC_INLINE
void DL_SPI_enablePacking(SPI_Regs *spi)
1094 spi->CTL0 |= SPI_CTL0_PACKEN_ENABLED;
1108 __STATIC_INLINE
void DL_SPI_disablePacking(SPI_Regs *spi)
1110 spi->CTL0 &= ~(SPI_CTL0_PACKEN_MASK);
1123 __STATIC_INLINE
bool DL_SPI_isPackingEnabled(
const SPI_Regs *spi)
1125 return ((spi->CTL0 & SPI_CTL0_PACKEN_MASK) == SPI_CTL0_PACKEN_ENABLED);
1142 __STATIC_INLINE
void DL_SPI_setChipSelect(
1143 SPI_Regs *spi, DL_SPI_CHIP_SELECT chipSelect)
1146 &spi->CTL0, (uint32_t) chipSelect, SPI_CTL0_CSSEL_MASK);
1160 __STATIC_INLINE DL_SPI_CHIP_SELECT DL_SPI_getChipSelect(
const SPI_Regs *spi)
1162 uint32_t chipSelect = spi->CTL0 & SPI_CTL0_CSSEL_MASK;
1164 return (DL_SPI_CHIP_SELECT)(chipSelect);
1180 __STATIC_INLINE
void DL_SPI_setPeripheralReceiveTimeout(
1181 SPI_Regs *spi, uint32_t timeout)
1184 SPI_CTL1_RXTIMEOUT_MASK);
1199 __STATIC_INLINE uint32_t DL_SPI_getPeripheralReceiveTimeout(
1200 const SPI_Regs *spi)
1202 return ((spi->CTL1 & SPI_CTL1_RXTIMEOUT_MASK) >> SPI_CTL1_RXTIMEOUT_OFS);
1227 __STATIC_INLINE
void DL_SPI_setControllerCommandDataModeConfig(
1228 SPI_Regs *spi, uint32_t config)
1231 &spi->CTL1, config << SPI_CTL1_CDMODE_OFS, SPI_CTL1_CDMODE_MASK);
1249 __STATIC_INLINE uint32_t DL_SPI_getControllerCommandDataModeConfig(
1250 const SPI_Regs *spi)
1252 return ((spi->CTL1 & SPI_CTL1_CDMODE_MASK) >> SPI_CTL1_CDMODE_OFS);
1265 __STATIC_INLINE
void DL_SPI_enableControllerCommandDataMode(SPI_Regs *spi)
1267 spi->CTL1 |= SPI_CTL1_CDENABLE_ENABLE;
1275 __STATIC_INLINE
void DL_SPI_disableControllerCommandDataMode(SPI_Regs *spi)
1277 spi->CTL1 &= ~(SPI_CTL1_CDENABLE_MASK);
1290 __STATIC_INLINE
bool DL_SPI_isControllerCommandDataModeEnabled(
1291 const SPI_Regs *spi)
1293 return ((spi->CTL1 & SPI_CTL1_CDENABLE_MASK) == SPI_CTL1_CDENABLE_ENABLE);
1306 __STATIC_INLINE
void DL_SPI_enablePeripheralDataOutput(SPI_Regs *spi)
1308 spi->CTL1 &= ~(SPI_CTL1_POD_MASK);
1322 __STATIC_INLINE
void DL_SPI_disablePeripheralDataOutput(SPI_Regs *spi)
1324 spi->CTL1 |= SPI_CTL1_POD_ENABLE;
1339 __STATIC_INLINE
bool DL_SPI_isPeripheralDataOutputEnabled(
const SPI_Regs *spi)
1341 return ((spi->CTL1 & SPI_CTL1_POD_MASK) == SPI_CTL1_POD_DISABLE);
1356 __STATIC_INLINE
void DL_SPI_setDelayedSampling(SPI_Regs *spi, uint32_t delay)
1359 SPI_CLKCTL_DSAMPLE_MASK);
1377 __STATIC_INLINE uint32_t DL_SPI_getDelayedSampling(
const SPI_Regs *spi)
1379 return (spi->CLKCTL & SPI_CLKCTL_DSAMPLE_MASK >> SPI_CLKCTL_DSAMPLE_OFS);
1400 __STATIC_INLINE
void DL_SPI_setFIFOThreshold(SPI_Regs *spi,
1401 DL_SPI_RX_FIFO_LEVEL rxThreshold, DL_SPI_TX_FIFO_LEVEL txThreshold)
1404 (uint32_t) rxThreshold | (uint32_t) txThreshold,
1405 SPI_IFLS_RXIFLSEL_MASK | SPI_IFLS_TXIFLSEL_MASK);
1417 __STATIC_INLINE DL_SPI_TX_FIFO_LEVEL DL_SPI_getTXFIFOThreshold(
1418 const SPI_Regs *spi)
1420 uint32_t txThreshold = spi->IFLS & SPI_IFLS_TXIFLSEL_MASK;
1422 return (DL_SPI_TX_FIFO_LEVEL)(txThreshold);
1434 __STATIC_INLINE DL_SPI_RX_FIFO_LEVEL DL_SPI_getRXFIFOThreshold(
1435 const SPI_Regs *spi)
1437 uint32_t rxThreshold = spi->IFLS & SPI_IFLS_RXIFLSEL_MASK;
1439 return (DL_SPI_RX_FIFO_LEVEL)(rxThreshold);
1458 __STATIC_INLINE
void DL_SPI_setBitRateSerialClockDivider(
1459 SPI_Regs *spi, uint32_t SCR)
1473 __STATIC_INLINE uint32_t DL_SPI_getBitRateSerialClockDivider(
1474 const SPI_Regs *spi)
1476 return (spi->CLKCTL & SPI_CLKCTL_SCR_MASK);
1494 __STATIC_INLINE
void DL_SPI_transmitData8(SPI_Regs *spi, uint8_t data)
1514 __STATIC_INLINE
void DL_SPI_transmitData16(SPI_Regs *spi, uint16_t data)
1540 __STATIC_INLINE
void DL_SPI_transmitData32(SPI_Regs *spi, uint32_t data)
1561 __STATIC_INLINE uint8_t DL_SPI_receiveData8(
const SPI_Regs *spi)
1563 return ((uint8_t)(spi->RXDATA));
1582 __STATIC_INLINE uint16_t DL_SPI_receiveData16(
const SPI_Regs *spi)
1584 return ((uint16_t)(spi->RXDATA));
1609 __STATIC_INLINE uint32_t DL_SPI_receiveData32(
const SPI_Regs *spi)
1622 __STATIC_INLINE
void DL_SPI_enableInterrupt(
1623 SPI_Regs *spi, uint32_t interruptMask)
1625 spi->CPU_INT.IMASK |= interruptMask;
1636 __STATIC_INLINE
void DL_SPI_disableInterrupt(
1637 SPI_Regs *spi, uint32_t interruptMask)
1639 spi->CPU_INT.IMASK &= ~(interruptMask);
1654 __STATIC_INLINE uint32_t DL_SPI_getEnabledInterrupts(
1655 const SPI_Regs *spi, uint32_t interruptMask)
1657 return (spi->CPU_INT.IMASK & interruptMask);
1677 __STATIC_INLINE uint32_t DL_SPI_getEnabledInterruptStatus(
1678 const SPI_Regs *spi, uint32_t interruptMask)
1680 return (spi->CPU_INT.MIS & interruptMask);
1698 __STATIC_INLINE uint32_t DL_SPI_getRawInterruptStatus(
1699 const SPI_Regs *spi, uint32_t interruptMask)
1701 return (spi->CPU_INT.RIS & interruptMask);
1716 __STATIC_INLINE DL_SPI_IIDX DL_SPI_getPendingInterrupt(
const SPI_Regs *spi)
1718 return ((DL_SPI_IIDX) spi->CPU_INT.IIDX);
1729 __STATIC_INLINE
void DL_SPI_clearInterruptStatus(
1730 SPI_Regs *spi, uint32_t interruptMask)
1732 spi->CPU_INT.ICLR = interruptMask;
1750 void DL_SPI_transmitDataBlocking8(SPI_Regs *spi, uint8_t data);
1767 void DL_SPI_transmitDataBlocking16(SPI_Regs *spi, uint16_t data);
1790 void DL_SPI_transmitDataBlocking32(SPI_Regs *spi, uint32_t data);
1808 uint8_t DL_SPI_receiveDataBlocking8(
const SPI_Regs *spi);
1826 uint16_t DL_SPI_receiveDataBlocking16(
const SPI_Regs *spi);
1850 uint32_t DL_SPI_receiveDataBlocking32(
const SPI_Regs *spi);
1872 bool DL_SPI_transmitDataCheck8(SPI_Regs *spi, uint8_t data);
1894 bool DL_SPI_transmitDataCheck16(SPI_Regs *spi, uint16_t data);
1922 bool DL_SPI_transmitDataCheck32(SPI_Regs *spi, uint32_t data);
1944 bool DL_SPI_receiveDataCheck8(
const SPI_Regs *spi, uint8_t *buffer);
1966 bool DL_SPI_receiveDataCheck16(
const SPI_Regs *spi, uint16_t *buffer);
1994 bool DL_SPI_receiveDataCheck32(
const SPI_Regs *spi, uint32_t *buffer);
2005 uint32_t DL_SPI_drainRXFIFO8(
2006 const SPI_Regs *spi, uint8_t *buffer, uint32_t maxCount);
2017 uint32_t DL_SPI_drainRXFIFO16(
2018 const SPI_Regs *spi, uint16_t *buffer, uint32_t maxCount);
2036 uint32_t DL_SPI_drainRXFIFO32(
2037 const SPI_Regs *spi, uint32_t *buffer, uint32_t maxCount);
2051 uint32_t DL_SPI_fillTXFIFO8(
2052 SPI_Regs *spi,
const uint8_t *buffer, uint32_t count);
2066 uint32_t DL_SPI_fillTXFIFO16(
2067 SPI_Regs *spi,
const uint16_t *buffer, uint32_t count);
2088 uint32_t DL_SPI_fillTXFIFO32(
2089 SPI_Regs *spi,
const uint32_t *buffer, uint32_t count);
2106 __STATIC_INLINE
void DL_SPI_enableDMAReceiveEvent(
2107 SPI_Regs *spi, uint32_t interrupt)
2109 spi->DMA_TRIG_RX.IMASK = interrupt;
2125 __STATIC_INLINE
void DL_SPI_enableDMATransmitEvent(SPI_Regs *spi)
2127 spi->DMA_TRIG_TX.IMASK = SPI_DMA_TRIG_TX_IMASK_TX_SET;
2143 __STATIC_INLINE
void DL_SPI_disableDMAReceiveEvent(
2144 SPI_Regs *spi, uint32_t interrupt)
2146 spi->DMA_TRIG_RX.IMASK &= ~(interrupt);
2162 __STATIC_INLINE
void DL_SPI_disableDMATransmitEvent(SPI_Regs *spi)
2164 spi->DMA_TRIG_TX.IMASK = SPI_DMA_TRIG_TX_IMASK_TX_CLR;
2184 __STATIC_INLINE uint32_t DL_SPI_getEnabledDMAReceiveEvent(
2185 const SPI_Regs *spi, uint32_t interruptMask)
2187 return (spi->DMA_TRIG_RX.IMASK & interruptMask);
2203 __STATIC_INLINE uint32_t DL_SPI_getEnabledDMATransmitEvent(
const SPI_Regs *spi)
2205 return (spi->DMA_TRIG_TX.IMASK & SPI_DMA_TRIG_TX_IMASK_TX_MASK);
2229 __STATIC_INLINE uint32_t DL_SPI_getEnabledDMAReceiveEventStatus(
2230 const SPI_Regs *spi, uint32_t interruptMask)
2232 return (spi->DMA_TRIG_RX.MIS & interruptMask);
2252 __STATIC_INLINE uint32_t DL_SPI_getEnabledDMATransmitEventStatus(
2253 const SPI_Regs *spi)
2255 return (spi->DMA_TRIG_TX.MIS & SPI_DMA_TRIG_TX_MIS_TX_MASK);
2275 __STATIC_INLINE uint32_t DL_SPI_getRawDMAReceiveEventStatus(
2276 const SPI_Regs *spi, uint32_t interruptMask)
2278 return (spi->DMA_TRIG_RX.RIS & interruptMask);
2296 __STATIC_INLINE uint32_t DL_SPI_getRawDMATransmitEventStatus(
2297 const SPI_Regs *spi)
2299 return (spi->DMA_TRIG_TX.RIS & SPI_DMA_TRIG_TX_RIS_TX_MASK);
2318 __STATIC_INLINE DL_SPI_DMA_IIDX_RX DL_SPI_getPendingDMAReceiveEvent(
2319 const SPI_Regs *spi)
2321 return (DL_SPI_DMA_IIDX_RX)(spi->DMA_TRIG_RX.IIDX);
2340 __STATIC_INLINE DL_SPI_DMA_IIDX_TX DL_SPI_getPendingDMATransmitEvent(
2341 const SPI_Regs *spi)
2343 return (DL_SPI_DMA_IIDX_TX)(spi->DMA_TRIG_TX.IIDX);
2357 __STATIC_INLINE
void DL_SPI_clearDMAReceiveEventStatus(
2358 SPI_Regs *spi, uint32_t interruptMask)
2360 spi->DMA_TRIG_RX.ICLR = interruptMask;
2373 __STATIC_INLINE
void DL_SPI_clearDMATransmitEventStatus(SPI_Regs *spi)
2375 spi->DMA_TRIG_TX.ICLR = SPI_DMA_TRIG_TX_ICLR_TX_CLR;
2395 bool DL_SPI_saveConfiguration(
const SPI_Regs *spi, DL_SPI_backupConfig *ptr);
2414 bool DL_SPI_restoreConfiguration(SPI_Regs *spi, DL_SPI_backupConfig *ptr);
__STATIC_INLINE void DL_Common_updateReg(volatile uint32_t *reg, uint32_t val, uint32_t mask)
Writes value to specified register - retaining bits unaffected by mask.
Definition: dl_common.h:63