rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Typedefs | Functions | Variables
fsl_lpspi_edma.c File Reference

Typedefs

typedef struct _lpspi_master_edma_private_handle lpspi_master_edma_private_handle_t
 Structure definition for dspi_master_edma_private_handle_t. The structure is private.
 
typedef struct _lpspi_slave_edma_private_handle lpspi_slave_edma_private_handle_t
 Structure definition for dspi_slave_edma_private_handle_t. The structure is private.
 

Functions

static uint32_t LPSPI_GetInstance (LPSPI_Type *base)
 Get instance number for LPSPI module.
 
static void EDMA_LpspiMasterCallback (edma_handle_t *edmaHandle, void *g_lpspiEdmaPrivateHandle, bool transferDone, uint32_t tcds)
 EDMA_LpspiMasterCallback after the LPSPI master transfer completed by using EDMA. This is not a public API.
 
static void EDMA_LpspiSlaveCallback (edma_handle_t *edmaHandle, void *g_lpspiEdmaPrivateHandle, bool transferDone, uint32_t tcds)
 EDMA_LpspiSlaveCallback after the LPSPI slave transfer completed by using EDMA. This is not a public API.
 
static void LPSPI_SeparateEdmaReadData (uint8_t *rxData, uint32_t readData, uint32_t bytesEachRead, bool isByteSwap)
 
void LPSPI_MasterTransferCreateHandleEDMA (LPSPI_Type *base, lpspi_master_edma_handle_t *handle, lpspi_master_edma_transfer_callback_t callback, void *userData, edma_handle_t *edmaRxRegToRxDataHandle, edma_handle_t *edmaTxDataToTxRegHandle)
 Initializes the LPSPI master eDMA handle.
 
status_t LPSPI_MasterTransferEDMA (LPSPI_Type *base, lpspi_master_edma_handle_t *handle, lpspi_transfer_t *transfer)
 LPSPI master transfer data using eDMA.
 
void LPSPI_MasterTransferAbortEDMA (LPSPI_Type *base, lpspi_master_edma_handle_t *handle)
 LPSPI master aborts a transfer which is using eDMA.
 
status_t LPSPI_MasterTransferGetCountEDMA (LPSPI_Type *base, lpspi_master_edma_handle_t *handle, size_t *count)
 Gets the master eDMA transfer remaining bytes.
 
void LPSPI_SlaveTransferCreateHandleEDMA (LPSPI_Type *base, lpspi_slave_edma_handle_t *handle, lpspi_slave_edma_transfer_callback_t callback, void *userData, edma_handle_t *edmaRxRegToRxDataHandle, edma_handle_t *edmaTxDataToTxRegHandle)
 Initializes the LPSPI slave eDMA handle.
 
status_t LPSPI_SlaveTransferEDMA (LPSPI_Type *base, lpspi_slave_edma_handle_t *handle, lpspi_transfer_t *transfer)
 LPSPI slave transfers data using eDMA.
 
void LPSPI_SlaveTransferAbortEDMA (LPSPI_Type *base, lpspi_slave_edma_handle_t *handle)
 LPSPI slave aborts a transfer which is using eDMA.
 
status_t LPSPI_SlaveTransferGetCountEDMA (LPSPI_Type *base, lpspi_slave_edma_handle_t *handle, size_t *count)
 Gets the slave eDMA transfer remaining bytes.
 

Variables

static LPSPI_Type *const s_lpspiBases [] = LPSPI_BASE_PTRS
 Pointers to lpspi bases for each instance.
 
static lpspi_master_edma_private_handle_t s_lpspiMasterEdmaPrivateHandle [ARRAY_SIZE(s_lpspiBases)]
 Pointers to lpspi edma handles for each instance.
 
static lpspi_slave_edma_private_handle_t s_lpspiSlaveEdmaPrivateHandle [ARRAY_SIZE(s_lpspiBases)]
 

Typedef Documentation

◆ lpspi_master_edma_private_handle_t

typedef struct _lpspi_master_edma_private_handle lpspi_master_edma_private_handle_t

Structure definition for dspi_master_edma_private_handle_t. The structure is private.

◆ lpspi_slave_edma_private_handle_t

typedef struct _lpspi_slave_edma_private_handle lpspi_slave_edma_private_handle_t

Structure definition for dspi_slave_edma_private_handle_t. The structure is private.

Function Documentation

◆ EDMA_LpspiMasterCallback()

static void EDMA_LpspiMasterCallback ( edma_handle_t edmaHandle,
void *  g_lpspiEdmaPrivateHandle,
bool  transferDone,
uint32_t  tcds 
)
static

EDMA_LpspiMasterCallback after the LPSPI master transfer completed by using EDMA. This is not a public API.

Definition at line 582 of file fsl_lpspi_edma.c.

586{
587 assert(edmaHandle);
588 assert(g_lpspiEdmaPrivateHandle);
589
590 uint32_t readData;
591
592 lpspi_master_edma_private_handle_t *lpspiEdmaPrivateHandle;
593
594 lpspiEdmaPrivateHandle = (lpspi_master_edma_private_handle_t *)g_lpspiEdmaPrivateHandle;
595
596 LPSPI_DisableDMA(lpspiEdmaPrivateHandle->base, kLPSPI_TxDmaEnable | kLPSPI_RxDmaEnable);
597
598 if (lpspiEdmaPrivateHandle->handle->isThereExtraRxBytes)
599 {
600 while (LPSPI_GetRxFifoCount(lpspiEdmaPrivateHandle->base) == 0)
601 {
602 }
603 readData = LPSPI_ReadData(lpspiEdmaPrivateHandle->base);
604
605 if (lpspiEdmaPrivateHandle->handle->rxData)
606 {
608 &(lpspiEdmaPrivateHandle->handle->rxData[lpspiEdmaPrivateHandle->handle->rxRemainingByteCount -
609 lpspiEdmaPrivateHandle->handle->bytesLastRead]),
610 readData, lpspiEdmaPrivateHandle->handle->bytesLastRead, lpspiEdmaPrivateHandle->handle->isByteSwap);
611 }
612 }
613
614 lpspiEdmaPrivateHandle->handle->state = kLPSPI_Idle;
615
616 if (lpspiEdmaPrivateHandle->handle->callback)
617 {
618 lpspiEdmaPrivateHandle->handle->callback(lpspiEdmaPrivateHandle->base, lpspiEdmaPrivateHandle->handle,
619 kStatus_Success, lpspiEdmaPrivateHandle->handle->userData);
620 }
621}
static void LPSPI_SeparateEdmaReadData(uint8_t *rxData, uint32_t readData, uint32_t bytesEachRead, bool isByteSwap)
struct _lpspi_master_edma_private_handle lpspi_master_edma_private_handle_t
Structure definition for dspi_master_edma_private_handle_t. The structure is private.
@ kStatus_Success
Definition fsl_common.h:159
static uint32_t LPSPI_ReadData(LPSPI_Type *base)
Reads data from the data buffer.
Definition fsl_lpspi.h:918
static uint32_t LPSPI_GetRxFifoCount(LPSPI_Type *base)
Gets the LPSPI Rx FIFO count.
Definition fsl_lpspi.h:557
static void LPSPI_DisableDMA(LPSPI_Type *base, uint32_t mask)
Disables the LPSPI DMA request.
Definition fsl_lpspi.h:658
@ kLPSPI_Idle
Definition fsl_lpspi.h:249
@ kLPSPI_TxDmaEnable
Definition fsl_lpspi.h:81
@ kLPSPI_RxDmaEnable
Definition fsl_lpspi.h:82

Referenced by LPSPI_MasterTransferEDMA().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EDMA_LpspiSlaveCallback()

static void EDMA_LpspiSlaveCallback ( edma_handle_t edmaHandle,
void *  g_lpspiEdmaPrivateHandle,
bool  transferDone,
uint32_t  tcds 
)
static

EDMA_LpspiSlaveCallback after the LPSPI slave transfer completed by using EDMA. This is not a public API.

Definition at line 1074 of file fsl_lpspi_edma.c.

1078{
1079 assert(edmaHandle);
1080 assert(g_lpspiEdmaPrivateHandle);
1081
1082 uint32_t readData;
1083
1084 lpspi_slave_edma_private_handle_t *lpspiEdmaPrivateHandle;
1085
1086 lpspiEdmaPrivateHandle = (lpspi_slave_edma_private_handle_t *)g_lpspiEdmaPrivateHandle;
1087
1088 LPSPI_DisableDMA(lpspiEdmaPrivateHandle->base, kLPSPI_TxDmaEnable | kLPSPI_RxDmaEnable);
1089
1090 if (lpspiEdmaPrivateHandle->handle->isThereExtraRxBytes)
1091 {
1092 while (LPSPI_GetRxFifoCount(lpspiEdmaPrivateHandle->base) == 0)
1093 {
1094 }
1095 readData = LPSPI_ReadData(lpspiEdmaPrivateHandle->base);
1096
1097 if (lpspiEdmaPrivateHandle->handle->rxData)
1098 {
1100 &(lpspiEdmaPrivateHandle->handle->rxData[lpspiEdmaPrivateHandle->handle->rxRemainingByteCount -
1101 lpspiEdmaPrivateHandle->handle->bytesLastRead]),
1102 readData, lpspiEdmaPrivateHandle->handle->bytesLastRead, lpspiEdmaPrivateHandle->handle->isByteSwap);
1103 }
1104 }
1105
1106 lpspiEdmaPrivateHandle->handle->state = kLPSPI_Idle;
1107
1108 if (lpspiEdmaPrivateHandle->handle->callback)
1109 {
1110 lpspiEdmaPrivateHandle->handle->callback(lpspiEdmaPrivateHandle->base, lpspiEdmaPrivateHandle->handle,
1111 kStatus_Success, lpspiEdmaPrivateHandle->handle->userData);
1112 }
1113}
struct _lpspi_slave_edma_private_handle lpspi_slave_edma_private_handle_t
Structure definition for dspi_slave_edma_private_handle_t. The structure is private.

Referenced by LPSPI_SlaveTransferEDMA().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LPSPI_GetInstance()

static uint32_t LPSPI_GetInstance ( LPSPI_Type *  base)
static

Get instance number for LPSPI module.

Parameters
baseLPSPI peripheral base address.
Returns
Return the value of LPSPI instance.

Definition at line 85 of file fsl_lpspi_edma.c.

86{
87 uint8_t instance = 0;
88
89 /* Find the instance index from base address mappings. */
90 for (instance = 0; instance < ARRAY_SIZE(s_lpspiBases); instance++)
91 {
92 if (s_lpspiBases[instance] == base)
93 {
94 break;
95 }
96 }
97
98 assert(instance < ARRAY_SIZE(s_lpspiBases));
99
100 return instance;
101}
static BenchController instance
static LPSPI_Type *const s_lpspiBases[]
Pointers to lpspi bases for each instance.

Referenced by LPSPI_MasterTransferCreateHandleEDMA(), LPSPI_MasterTransferEDMA(), LPSPI_SlaveTransferCreateHandleEDMA(), and LPSPI_SlaveTransferEDMA().

Here is the caller graph for this function:

◆ LPSPI_SeparateEdmaReadData()

static void LPSPI_SeparateEdmaReadData ( uint8_t *  rxData,
uint32_t  readData,
uint32_t  bytesEachRead,
bool  isByteSwap 
)
static

Definition at line 103 of file fsl_lpspi_edma.c.

104{
105 assert(rxData);
106
107 switch (bytesEachRead)
108 {
109 case 1:
110 if (!isByteSwap)
111 {
112 *rxData = readData;
113 ++rxData;
114 }
115 else
116 {
117 *rxData = readData >> 24;
118 ++rxData;
119 }
120 break;
121
122 case 2:
123 if (!isByteSwap)
124 {
125 *rxData = readData;
126 ++rxData;
127 *rxData = readData >> 8;
128 ++rxData;
129 }
130 else
131 {
132 *rxData = readData >> 16;
133 ++rxData;
134 *rxData = readData >> 24;
135 ++rxData;
136 }
137 break;
138
139 case 4:
140
141 *rxData = readData;
142 ++rxData;
143 *rxData = readData >> 8;
144 ++rxData;
145 *rxData = readData >> 16;
146 ++rxData;
147 *rxData = readData >> 24;
148 ++rxData;
149
150 break;
151
152 default:
153 assert(false);
154 break;
155 }
156}

Referenced by EDMA_LpspiMasterCallback(), and EDMA_LpspiSlaveCallback().

Here is the caller graph for this function:

Variable Documentation

◆ s_lpspiBases

LPSPI_Type* const s_lpspiBases[] = LPSPI_BASE_PTRS
static

Pointers to lpspi bases for each instance.

Definition at line 75 of file fsl_lpspi_edma.c.

Referenced by LPSPI_GetInstance().

◆ s_lpspiMasterEdmaPrivateHandle

lpspi_master_edma_private_handle_t s_lpspiMasterEdmaPrivateHandle[ARRAY_SIZE(s_lpspiBases)]
static

Pointers to lpspi edma handles for each instance.

Definition at line 78 of file fsl_lpspi_edma.c.

Referenced by LPSPI_MasterTransferCreateHandleEDMA(), and LPSPI_MasterTransferEDMA().

◆ s_lpspiSlaveEdmaPrivateHandle

lpspi_slave_edma_private_handle_t s_lpspiSlaveEdmaPrivateHandle[ARRAY_SIZE(s_lpspiBases)]
static

Go to the source code of this file.