Skip to content

Commit 3104789

Browse files
tunguyen4585manuargue
authored andcommitted
nxp: mcux: drivers: dspi: add the guards for unsupported features
In order to re-use mcux DSPI driver for NXP s32z27x device, we need to disable the following features which are not available on this platform: SR[TFUF], RSER[TFUF_RE], SLAVE mode Signed-off-by: Tu Nguyen Van <[email protected]>
1 parent 4597b16 commit 3104789

File tree

5 files changed

+125
-6
lines changed

5 files changed

+125
-6
lines changed

mcux/README

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,5 @@ Patch List:
118118
- Add missing CMAKE file to ccm32k driver driver_ccm32k.cmake.
119119
- Add missing CMAKE file to flash_k4 driver driver_flash_k4.cmake.
120120
- Add missing CMAKE file to spc driver driver_spc.cmake
121+
- mcux-sdk/drivers/dspi/fsl_dspi.c, mcux-sdk/drivers/dspi/fsl_dspi.h, mcux-sdk/drivers/dspi/fsl_dspi_edma.c,
122+
mcux-sdk/drivers/dspi/fsl_dspi_edma.h: add the guards for unsupport features on S32Z27x devices

mcux/mcux-sdk/drivers/dspi/fsl_dspi.c

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
/*! @brief Typedef for master interrupt handler. */
2121
typedef void (*dspi_master_isr_t)(SPI_Type *base, dspi_master_handle_t *handle);
2222

23+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
2324
/*! @brief Typedef for slave interrupt handler. */
2425
typedef void (*dspi_slave_isr_t)(SPI_Type *base, dspi_slave_handle_t *handle);
26+
#endif
2527

2628
/*******************************************************************************
2729
* Prototypes
@@ -53,18 +55,22 @@ static void DSPI_MasterTransferFillUpTxFifo(SPI_Type *base, dspi_master_handle_t
5355
*/
5456
static void DSPI_MasterTransferComplete(SPI_Type *base, dspi_master_handle_t *handle);
5557

58+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
5659
/*!
5760
* @brief Slave fill up the TX FIFO with data.
5861
* This is not a public API.
5962
*/
6063
static void DSPI_SlaveTransferFillUpTxFifo(SPI_Type *base, dspi_slave_handle_t *handle);
64+
#endif
6165

66+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
6267
/*!
6368
* @brief Slave finish up a transfer.
6469
* It would call back if there is callback function and set the state to idle.
6570
* This is not a public API.
6671
*/
6772
static void DSPI_SlaveTransferComplete(SPI_Type *base, dspi_slave_handle_t *handle);
73+
#endif
6874

6975
/*!
7076
* @brief DSPI common interrupt handler.
@@ -111,8 +117,10 @@ static void *g_dspiHandle[ARRAY_SIZE(s_dspiBases)];
111117
/*! @brief Pointer to master IRQ handler for each instance. */
112118
static dspi_master_isr_t s_dspiMasterIsr;
113119

120+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
114121
/*! @brief Pointer to slave IRQ handler for each instance. */
115122
static dspi_slave_isr_t s_dspiSlaveIsr;
123+
#endif
116124

117125
/* @brief Dummy data for each instance. This data is used when user's tx buffer is NULL*/
118126
volatile uint8_t g_dspiDummyData[ARRAY_SIZE(s_dspiBases)] = {0};
@@ -285,6 +293,7 @@ void DSPI_MasterGetDefaultConfig(dspi_master_config_t *masterConfig)
285293
masterConfig->samplePoint = kDSPI_SckToSin0Clock;
286294
}
287295

296+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
288297
/*!
289298
* brief DSPI slave configuration.
290299
*
@@ -342,7 +351,9 @@ void DSPI_SlaveInit(SPI_Type *base, const dspi_slave_config_t *slaveConfig)
342351

343352
DSPI_StartTransfer(base);
344353
}
354+
#endif
345355

356+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
346357
/*!
347358
* brief Sets the dspi_slave_config_t structure to a default value.
348359
*
@@ -373,6 +384,7 @@ void DSPI_SlaveGetDefaultConfig(dspi_slave_config_t *slaveConfig)
373384
slaveConfig->enableModifiedTimingFormat = false;
374385
slaveConfig->samplePoint = kDSPI_SckToSin0Clock;
375386
}
387+
#endif
376388

377389
/*!
378390
* brief De-initializes the DSPI peripheral. Call this API to disable the DSPI clock.
@@ -787,6 +799,7 @@ void DSPI_MasterWriteCommandDataBlocking(SPI_Type *base, uint32_t data)
787799
}
788800
}
789801

802+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
790803
/*!
791804
* brief Writes data into the data buffer in slave mode, waits till data was transmitted, and returns.
792805
*
@@ -815,6 +828,7 @@ void DSPI_SlaveWriteDataBlocking(SPI_Type *base, uint32_t data)
815828
{
816829
}
817830
}
831+
#endif
818832

819833
/*!
820834
* brief Enables the DSPI interrupts.
@@ -1707,6 +1721,7 @@ void DSPI_MasterTransferHandleIRQ(SPI_Type *base, dspi_master_handle_t *handle)
17071721
}
17081722

17091723
/*Transactional APIs -- Slave*/
1724+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
17101725
/*!
17111726
* brief Initializes the DSPI slave handle.
17121727
*
@@ -1733,7 +1748,9 @@ void DSPI_SlaveTransferCreateHandle(SPI_Type *base,
17331748
handle->callback = callback;
17341749
handle->userData = userData;
17351750
}
1751+
#endif
17361752

1753+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
17371754
/*!
17381755
* brief DSPI slave transfers data using an interrupt.
17391756
*
@@ -1800,11 +1817,13 @@ status_t DSPI_SlaveTransferNonBlocking(SPI_Type *base, dspi_slave_handle_t *hand
18001817
/* RX FIFO overflow request enable */
18011818
DSPI_EnableInterrupts(base, (uint32_t)kDSPI_RxFifoOverflowInterruptEnable);
18021819
}
1820+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT)
18031821
if (NULL != handle->txData)
18041822
{
18051823
/* TX FIFO underflow request enable */
18061824
DSPI_EnableInterrupts(base, (uint32_t)kDSPI_TxFifoUnderflowInterruptEnable);
18071825
}
1826+
#endif
18081827

18091828
DSPI_StartTransfer(base);
18101829

@@ -1813,7 +1832,9 @@ status_t DSPI_SlaveTransferNonBlocking(SPI_Type *base, dspi_slave_handle_t *hand
18131832

18141833
return kStatus_Success;
18151834
}
1835+
#endif
18161836

1837+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
18171838
/*!
18181839
* brief Gets the slave transfer count.
18191840
*
@@ -1843,7 +1864,9 @@ status_t DSPI_SlaveTransferGetCount(SPI_Type *base, dspi_slave_handle_t *handle,
18431864
*count = handle->totalByteCount - handle->remainingReceiveByteCount;
18441865
return kStatus_Success;
18451866
}
1867+
#endif
18461868

1869+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
18471870
static void DSPI_SlaveTransferFillUpTxFifo(SPI_Type *base, dspi_slave_handle_t *handle)
18481871
{
18491872
assert(NULL != handle);
@@ -1931,15 +1954,21 @@ static void DSPI_SlaveTransferFillUpTxFifo(SPI_Type *base, dspi_slave_handle_t *
19311954
DSPI_ClearStatusFlags(base, (uint32_t)kDSPI_TxFifoFillRequestFlag);
19321955
}
19331956
}
1957+
#endif
19341958

1959+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
19351960
static void DSPI_SlaveTransferComplete(SPI_Type *base, dspi_slave_handle_t *handle)
19361961
{
19371962
assert(NULL != handle);
19381963

19391964
/* Disable interrupt requests */
19401965
DSPI_DisableInterrupts(
1941-
base, ((uint32_t)kDSPI_TxFifoUnderflowInterruptEnable | (uint32_t)kDSPI_TxFifoFillRequestInterruptEnable |
1942-
(uint32_t)kDSPI_RxFifoOverflowInterruptEnable | (uint32_t)kDSPI_RxFifoDrainRequestInterruptEnable));
1966+
base, (
1967+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT)
1968+
(uint32_t)kDSPI_TxFifoUnderflowInterruptEnable |
1969+
#endif
1970+
(uint32_t)kDSPI_TxFifoFillRequestInterruptEnable |
1971+
(uint32_t)kDSPI_RxFifoOverflowInterruptEnable | (uint32_t)kDSPI_RxFifoDrainRequestInterruptEnable));
19431972

19441973
/* The transfer is complete. */
19451974
handle->txData = NULL;
@@ -1964,7 +1993,9 @@ static void DSPI_SlaveTransferComplete(SPI_Type *base, dspi_slave_handle_t *hand
19641993
handle->callback(base, handle, status, handle->userData);
19651994
}
19661995
}
1996+
#endif
19671997

1998+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
19681999
/*!
19692000
* brief DSPI slave aborts a transfer using an interrupt.
19702001
*
@@ -1981,14 +2012,20 @@ void DSPI_SlaveTransferAbort(SPI_Type *base, dspi_slave_handle_t *handle)
19812012

19822013
/* Disable interrupt requests */
19832014
DSPI_DisableInterrupts(
1984-
base, ((uint32_t)kDSPI_TxFifoUnderflowInterruptEnable | (uint32_t)kDSPI_TxFifoFillRequestInterruptEnable |
2015+
base, (
2016+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_RSER_TFUF_SUPPORT)
2017+
(uint32_t)kDSPI_TxFifoUnderflowInterruptEnable |
2018+
#endif
2019+
(uint32_t)kDSPI_TxFifoFillRequestInterruptEnable |
19852020
(uint32_t)kDSPI_RxFifoOverflowInterruptEnable | (uint32_t)kDSPI_RxFifoDrainRequestInterruptEnable));
19862021

19872022
handle->state = (uint8_t)kDSPI_Idle;
19882023
handle->remainingSendByteCount = 0;
19892024
handle->remainingReceiveByteCount = 0;
19902025
}
2026+
#endif
19912027

2028+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
19922029
/*!
19932030
* brief DSPI Master IRQ handler function.
19942031
*
@@ -2145,6 +2182,7 @@ void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle)
21452182
return;
21462183
}
21472184

2185+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SR_TFUF_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SR_TFUF_SUPPORT)
21482186
/* Catch tx fifo underflow conditions, service only if tx under flow interrupt enabled */
21492187
if (0U != (DSPI_GetStatusFlags(base) & (uint32_t)kDSPI_TxFifoUnderflowFlag))
21502188
{
@@ -2159,6 +2197,7 @@ void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle)
21592197
handle->errorCount++;
21602198
}
21612199
}
2200+
#endif
21622201

21632202
/* Catch rx fifo overflow conditions, service only if rx over flow interrupt enabled */
21642203
if (0U != (DSPI_GetStatusFlags(base) & (uint32_t)kDSPI_RxFifoOverflowFlag))
@@ -2175,17 +2214,20 @@ void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle)
21752214
}
21762215
}
21772216
}
2217+
#endif
21782218

21792219
static void DSPI_CommonIRQHandler(SPI_Type *base, void *param)
21802220
{
21812221
if (DSPI_IsMaster(base))
21822222
{
21832223
s_dspiMasterIsr(base, (dspi_master_handle_t *)param);
21842224
}
2225+
#if !(defined(FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT) && FSL_FEATURE_DSPI_HAS_NO_SLAVE_SUPPORT)
21852226
else
21862227
{
21872228
s_dspiSlaveIsr(base, (dspi_slave_handle_t *)param);
21882229
}
2230+
#endif
21892231
SDK_ISR_EXIT_BARRIER;
21902232
}
21912233

0 commit comments

Comments
 (0)