1 /*
2 * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
3 * Copyright (c) 2016, Freescale Semiconductor, Inc. Not a Contribution.
4 * Copyright 2016-2017,2020,2024 NXP. Not a Contribution.
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 *
8 * Licensed under the Apache License, Version 2.0 (the License); you may
9 * not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
16 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21 #include "fsl_lpi2c_cmsis.h"
22
23 #if ((defined(RTE_I2C0) && RTE_I2C0 && defined(LPI2C0)) || (defined(RTE_I2C1) && RTE_I2C1 && defined(LPI2C1)) || \
24 (defined(RTE_I2C2) && RTE_I2C2 && defined(LPI2C2)) || (defined(RTE_I2C3) && RTE_I2C3 && defined(LPI2C3)) || \
25 (defined(RTE_I2C4) && RTE_I2C4 && defined(LPI2C4)) || (defined(RTE_I2C5) && RTE_I2C5 && defined(LPI2C5)) || \
26 (defined(RTE_I2C6) && RTE_I2C6 && defined(LPI2C6)) || (defined(RTE_I2C7) && RTE_I2C7 && defined(LPI2C7)) || \
27 (defined(RTE_I2C8) && RTE_I2C8 && defined(LPI2C8)) || (defined(RTE_I2C9) && RTE_I2C9 && defined(LPI2C9)) || \
28 (defined(RTE_I2C10) && RTE_I2C10 && defined(LPI2C10)) || (defined(RTE_I2C11) && RTE_I2C11 && defined(LPI2C11)) || \
29 (defined(RTE_I2C12) && RTE_I2C12 && defined(LPI2C12)) || (defined(RTE_I2C13) && RTE_I2C13 && defined(LPI2C13)) || \
30 (defined(RTE_I2C14) && RTE_I2C14 && defined(LPI2C14)) || (defined(RTE_I2C15) && RTE_I2C15 && defined(LPI2C15)) || \
31 (defined(RTE_I2C16) && RTE_I2C16 && defined(LPI2C16)) || (defined(RTE_I2C17) && RTE_I2C17 && defined(LPI2C17)) || \
32 (defined(RTE_I2C18) && RTE_I2C18 && defined(LPI2C18)) || (defined(RTE_I2C19) && RTE_I2C19 && defined(LPI2C19)) || \
33 (defined(RTE_I2C20) && RTE_I2C20 && defined(LPI2C20)))
34
35 #define ARM_LPI2C_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR((2), (5))
36
37 /*
38 * ARMCC does not support split the data section automatically, so the driver
39 * needs to split the data to separate sections explicitly, to reduce codesize.
40 */
41 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
42 #define ARMCC_SECTION(section_name) __attribute__((section(section_name)))
43 #endif
44
45 /*******************************************************************************
46 * Definitions
47 ******************************************************************************/
48
49 /* Component ID definition, used by tools. */
50 #ifndef FSL_COMPONENT_ID
51 #define FSL_COMPONENT_ID "platform.drivers.lpi2c_cmsis"
52 #endif
53
54 typedef const struct _cmsis_lpi2c_resource
55 {
56 LPI2C_Type *base; /*!< LPI2C peripheral base address. */
57 uint32_t (*GetFreq)(void); /*!< Function to get the clock frequency. */
58
59 } cmsis_lpi2c_resource_t;
60
61 typedef union _cmsis_i2c_handle
62 {
63 lpi2c_master_handle_t master_handle;
64 lpi2c_slave_handle_t slave_handle;
65 } cmsis_i2c_handle_t;
66
67 typedef struct _cmsis_lpi2c_interrupt_driver_state
68 {
69 cmsis_lpi2c_resource_t *resource; /*!< Basic LPI2C resource. */
70 cmsis_i2c_handle_t *handle;
71 uint8_t *slave_data; /*!< slave Transfer buffer */
72 size_t slave_dataSize; /*!< slave Transfer size */
73 ARM_I2C_SignalEvent_t cb_event; /*!< call back function */
74 uint8_t flags; /*!< Control and state flags. */
75 } cmsis_lpi2c_interrupt_driver_state_t;
76
77 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
78 typedef const struct _cmsis_lpi2c_edma_resource
79 {
80 void *txEdmaBase; /*!< EDMA peripheral base address for Tx. */
81 uint32_t txEdmaChannel; /*!< EDMA channel for Tx */
82 uint16_t txDmaRequest; /*!< Tx EDMA request source. */
83
84 void *rxEdmaBase; /*!< EDMA peripheral base address for Rx. */
85 uint32_t rxEdmaChannel; /*!< EDMA channel for Rx */
86 uint16_t rxDmaRequest; /*!< Rx EDMA request source. */
87 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
88 DMAMUX_Type *txDmamuxBase; /*!< DMAMUX peripheral base address for Tx */
89 DMAMUX_Type *rxDmamuxBase; /*!< DMAMUX peripheral base address for Rx */
90 #endif
91 } cmsis_lpi2c_edma_resource_t;
92
93 typedef struct _cmsis_lpi2c_edma_driver_state
94 {
95 cmsis_lpi2c_resource_t *resource; /*!< lpi2c basic resource. */
96 cmsis_lpi2c_edma_resource_t *edmaResource; /*!< lpi2c EDMA resource. */
97 lpi2c_master_edma_handle_t *master_edma_handle; /*!< lpi2c EDMA transfer handle. */
98 edma_handle_t *edmaTxHandle; /*!< EDMA lpi2c Tx handle. */
99 edma_handle_t *edmaRxHandle; /*!< EDMA lpi2c Rx handle. */
100 uint8_t flags; /*!< Control and state flags. */
101 } cmsis_lpi2c_edma_driver_state_t;
102 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
103
104 /*******************************************************************************
105 * Prototypes
106 ******************************************************************************/
107
108 static const ARM_DRIVER_VERSION s_lpi2cDriverVersion = {ARM_I2C_API_VERSION, ARM_LPI2C_DRV_VERSION};
109 static const ARM_I2C_CAPABILITIES s_lpi2cDriverCapabilities = {
110 0, /* Do not support 10-bit addressing.*/
111 };
112
113 /*******************************************************************************
114 * Code
115 ******************************************************************************/
116
117 /* Returns version information */
LPI2Cx_GetVersion(void)118 static ARM_DRIVER_VERSION LPI2Cx_GetVersion(void)
119 {
120 return s_lpi2cDriverVersion;
121 }
122
123 /* Returns information about capabilities of this driver implementation */
LPI2Cx_GetCapabilities(void)124 static ARM_I2C_CAPABILITIES LPI2Cx_GetCapabilities(void)
125 {
126 return s_lpi2cDriverCapabilities;
127 }
128
129 #endif
130
131 #if ((defined(RTE_I2C0_DMA_EN) && RTE_I2C0_DMA_EN) || (defined(RTE_I2C1_DMA_EN) && RTE_I2C1_DMA_EN) || \
132 (defined(RTE_I2C2_DMA_EN) && RTE_I2C2_DMA_EN) || (defined(RTE_I2C3_DMA_EN) && RTE_I2C3_DMA_EN) || \
133 (defined(RTE_I2C4_DMA_EN) && RTE_I2C4_DMA_EN) || (defined(RTE_I2C5_DMA_EN) && RTE_I2C5_DMA_EN) || \
134 (defined(RTE_I2C6_DMA_EN) && RTE_I2C6_DMA_EN) || (defined(RTE_I2C7_DMA_EN) && RTE_I2C7_DMA_EN) || \
135 (defined(RTE_I2C8_DMA_EN) && RTE_I2C8_DMA_EN) || (defined(RTE_I2C9_DMA_EN) && RTE_I2C9_DMA_EN) || \
136 (defined(RTE_I2C10_DMA_EN) && RTE_I2C10_DMA_EN) || (defined(RTE_I2C11_DMA_EN) && RTE_I2C11_DMA_EN) || \
137 (defined(RTE_I2C12_DMA_EN) && RTE_I2C12_DMA_EN) || (defined(RTE_I2C13_DMA_EN) && RTE_I2C13_DMA_EN) || \
138 (defined(RTE_I2C14_DMA_EN) && RTE_I2C14_DMA_EN) || (defined(RTE_I2C15_DMA_EN) && RTE_I2C15_DMA_EN) || \
139 (defined(RTE_I2C16_DMA_EN) && RTE_I2C16_DMA_EN) || (defined(RTE_I2C17_DMA_EN) && RTE_I2C17_DMA_EN) || \
140 (defined(RTE_I2C18_DMA_EN) && RTE_I2C18_DMA_EN) || (defined(RTE_I2C19_DMA_EN) && RTE_I2C19_DMA_EN) || \
141 (defined(RTE_I2C20_DMA_EN) && RTE_I2C20_DMA_EN))
142
143 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
KSDK_LPI2C_MASTER_EdmaCallback(LPI2C_Type * base,lpi2c_master_edma_handle_t * handle,status_t status,void * userData)144 static void KSDK_LPI2C_MASTER_EdmaCallback(LPI2C_Type *base,
145 lpi2c_master_edma_handle_t *handle,
146 status_t status,
147 void *userData)
148 {
149 uint32_t event = 0;
150
151 /* Signal transfer success when received success status. */
152 if (status == kStatus_Success)
153 {
154 event = ARM_I2C_EVENT_TRANSFER_DONE;
155 }
156
157 if (userData != NULL)
158 {
159 ((ARM_I2C_SignalEvent_t)userData)(event);
160 }
161 }
162
LPI2C_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event,cmsis_lpi2c_edma_driver_state_t * lpi2c)163 static int32_t LPI2C_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event, cmsis_lpi2c_edma_driver_state_t *lpi2c)
164 {
165 if (0U == (lpi2c->flags & (uint8_t)I2C_FLAG_INIT))
166 {
167 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
168 /* TxDMAMUX init */
169 DMAMUX_SetSource(lpi2c->edmaResource->txDmamuxBase, lpi2c->edmaResource->txEdmaChannel,
170 (int32_t)lpi2c->edmaResource->txDmaRequest);
171 DMAMUX_EnableChannel(lpi2c->edmaResource->txDmamuxBase, lpi2c->edmaResource->txEdmaChannel);
172 /* RxDMAMUX init */
173 DMAMUX_SetSource(lpi2c->edmaResource->rxDmamuxBase, lpi2c->edmaResource->rxEdmaChannel,
174 (int32_t)lpi2c->edmaResource->rxDmaRequest);
175 DMAMUX_EnableChannel(lpi2c->edmaResource->rxDmamuxBase, lpi2c->edmaResource->rxEdmaChannel);
176 #endif
177 /* Create edmaTxHandle */
178 EDMA_CreateHandle(lpi2c->edmaTxHandle, lpi2c->edmaResource->txEdmaBase, lpi2c->edmaResource->txEdmaChannel);
179
180 /* Create edmaRxHandle */
181 EDMA_CreateHandle(lpi2c->edmaRxHandle, lpi2c->edmaResource->rxEdmaBase, lpi2c->edmaResource->rxEdmaChannel);
182
183 #if defined(FSL_FEATURE_EDMA_HAS_CHANNEL_MUX) && FSL_FEATURE_EDMA_HAS_CHANNEL_MUX
184 EDMA_SetChannelMux(lpi2c->edmaResource->txEdmaBase, lpi2c->edmaResource->txEdmaChannel,
185 (int32_t)lpi2c->edmaResource->txDmaRequest);
186 EDMA_SetChannelMux(lpi2c->edmaResource->rxEdmaBase, lpi2c->edmaResource->rxEdmaChannel,
187 (int32_t)lpi2c->edmaResource->rxDmaRequest);
188 #endif
189 /* Create master_edma_handle */
190 LPI2C_MasterCreateEDMAHandle(lpi2c->resource->base, lpi2c->master_edma_handle, lpi2c->edmaRxHandle,
191 lpi2c->edmaTxHandle, KSDK_LPI2C_MASTER_EdmaCallback, (void *)cb_event);
192
193 lpi2c->flags = (uint8_t)I2C_FLAG_INIT;
194 }
195
196 return ARM_DRIVER_OK;
197 }
198
LPI2C_Master_EdmaUninitialize(cmsis_lpi2c_edma_driver_state_t * lpi2c)199 static int32_t LPI2C_Master_EdmaUninitialize(cmsis_lpi2c_edma_driver_state_t *lpi2c)
200 {
201 lpi2c->flags = (uint8_t)I2C_FLAG_UNINIT;
202 return ARM_DRIVER_OK;
203 }
204
LPI2C_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending,cmsis_lpi2c_edma_driver_state_t * lpi2c)205 static int32_t LPI2C_Master_EdmaTransmit(
206 uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending, cmsis_lpi2c_edma_driver_state_t *lpi2c)
207 {
208 int32_t status;
209 int32_t ret;
210 lpi2c_master_transfer_t masterXfer;
211
212 /* Setup the master transfer */
213 masterXfer.slaveAddress = (uint16_t)addr;
214 masterXfer.direction = kLPI2C_Write;
215 masterXfer.subaddress = 0U;
216 masterXfer.subaddressSize = 0U;
217 masterXfer.data = (uint8_t *)data;
218 masterXfer.dataSize = num;
219 masterXfer.flags = (uint32_t)kLPI2C_TransferDefaultFlag;
220
221 if (xfer_pending)
222 {
223 /* Do not transfer stop */
224 masterXfer.flags |= (uint32_t)kLPI2C_TransferNoStopFlag;
225 }
226
227 /* Send master non-blocking data to slave */
228 status = LPI2C_MasterTransferEDMA(lpi2c->resource->base, lpi2c->master_edma_handle, &masterXfer);
229
230 switch (status)
231 {
232 case kStatus_Success:
233 ret = ARM_DRIVER_OK;
234 break;
235
236 case kStatus_LPI2C_Busy:
237 ret = ARM_DRIVER_ERROR_BUSY;
238 break;
239
240 default:
241 ret = ARM_DRIVER_ERROR;
242 break;
243 }
244
245 return ret;
246 }
247
LPI2C_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending,cmsis_lpi2c_edma_driver_state_t * lpi2c)248 static int32_t LPI2C_Master_EdmaReceive(
249 uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending, cmsis_lpi2c_edma_driver_state_t *lpi2c)
250 {
251 int32_t status;
252 int32_t ret;
253 lpi2c_master_transfer_t masterXfer;
254
255 /* Setup the master transfer */
256 masterXfer.slaveAddress = (uint16_t)addr;
257 masterXfer.direction = kLPI2C_Read;
258 masterXfer.subaddress = 0U;
259 masterXfer.subaddressSize = 0U;
260 masterXfer.data = data;
261 masterXfer.dataSize = num;
262 masterXfer.flags = (uint32_t)kLPI2C_TransferDefaultFlag;
263
264 if (xfer_pending)
265 {
266 masterXfer.flags |= (uint32_t)kLPI2C_TransferNoStopFlag;
267 }
268
269 /* Receive non-blocking data from slave */
270 status = LPI2C_MasterTransferEDMA(lpi2c->resource->base, lpi2c->master_edma_handle, &masterXfer);
271
272 switch (status)
273 {
274 case kStatus_Success:
275 ret = ARM_DRIVER_OK;
276 break;
277 case kStatus_LPI2C_Busy:
278 ret = ARM_DRIVER_ERROR_BUSY;
279 break;
280 default:
281 ret = ARM_DRIVER_ERROR;
282 break;
283 }
284
285 return ret;
286 }
287
LPI2C_Master_EdmaGetDataCount(cmsis_lpi2c_edma_driver_state_t * lpi2c)288 static int32_t LPI2C_Master_EdmaGetDataCount(cmsis_lpi2c_edma_driver_state_t *lpi2c)
289 {
290 size_t cnt;
291
292 (void)LPI2C_MasterTransferGetCountEDMA(lpi2c->resource->base, lpi2c->master_edma_handle, &cnt);
293
294 return (int32_t)cnt;
295 }
296
LPI2C_Master_EdmaControl(uint32_t control,uint32_t arg,cmsis_lpi2c_edma_driver_state_t * lpi2c)297 static int32_t LPI2C_Master_EdmaControl(uint32_t control, uint32_t arg, cmsis_lpi2c_edma_driver_state_t *lpi2c)
298 {
299 uint32_t baudRate_Bps;
300 int32_t result = ARM_DRIVER_OK;
301 switch (control)
302 {
303 /* Set Own Slave Address */
304 case ARM_I2C_OWN_ADDRESS:
305 result = ARM_DRIVER_ERROR_UNSUPPORTED;
306 break;
307
308 /* Set Bus Speed; arg = bus speed */
309 case ARM_I2C_BUS_SPEED:
310 switch (arg)
311 {
312 case ARM_I2C_BUS_SPEED_STANDARD:
313 baudRate_Bps = 100000;
314 break;
315
316 case ARM_I2C_BUS_SPEED_FAST:
317 baudRate_Bps = 400000;
318 break;
319
320 case ARM_I2C_BUS_SPEED_FAST_PLUS:
321 baudRate_Bps = 1000000;
322 break;
323
324 default:
325 result = ARM_DRIVER_ERROR_UNSUPPORTED;
326 break;
327 }
328
329 if (result != ARM_DRIVER_ERROR_UNSUPPORTED)
330 {
331 LPI2C_MasterSetBaudRate(lpi2c->resource->base, lpi2c->resource->GetFreq(), baudRate_Bps);
332 result = ARM_DRIVER_OK;
333 }
334
335 break;
336
337 /* Not supported. */
338 case ARM_I2C_BUS_CLEAR:
339 result = ARM_DRIVER_ERROR_UNSUPPORTED;
340 break;
341
342 /* Only support aborting data transfer when master transmit in master mode */
343 case ARM_I2C_ABORT_TRANSFER:
344
345 if ((lpi2c->resource->base->MDER & 0x3UL) == 0x3UL)
346 {
347 if (lpi2c->master_edma_handle->transfer.direction == kLPI2C_Write)
348 {
349 (void)LPI2C_MasterTransferAbortEDMA(lpi2c->resource->base, lpi2c->master_edma_handle);
350
351 lpi2c->master_edma_handle->transfer.data = NULL;
352 lpi2c->master_edma_handle->transfer.dataSize = 0;
353 }
354 }
355
356 result = ARM_DRIVER_OK;
357 break;
358
359 default:
360 result = ARM_DRIVER_ERROR_UNSUPPORTED;
361 break;
362 }
363 return result;
364 }
365
LPI2C_Master_EdmaPowerControl(ARM_POWER_STATE state,cmsis_lpi2c_edma_driver_state_t * lpi2c)366 static int32_t LPI2C_Master_EdmaPowerControl(ARM_POWER_STATE state, cmsis_lpi2c_edma_driver_state_t *lpi2c)
367 {
368 lpi2c_master_config_t masterConfig;
369 int32_t result = ARM_DRIVER_OK;
370
371 switch (state)
372 {
373 case ARM_POWER_OFF:
374 if ((lpi2c->flags & (uint8_t)I2C_FLAG_POWER) != 0U)
375 {
376 /* Terminates any pending data transfers */
377 (void)LPI2C_Master_EdmaControl(ARM_I2C_ABORT_TRANSFER, 0, lpi2c);
378
379 /* Disables peripheral */
380 LPI2C_MasterDeinit(lpi2c->resource->base);
381 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
382 /* Disable DMAMUX channel */
383 DMAMUX_DisableChannel(lpi2c->edmaResource->txDmamuxBase, lpi2c->edmaResource->txEdmaChannel);
384 DMAMUX_DisableChannel(lpi2c->edmaResource->rxDmamuxBase, lpi2c->edmaResource->rxEdmaChannel);
385 #endif
386 lpi2c->flags = (uint8_t)I2C_FLAG_INIT;
387 }
388 result = ARM_DRIVER_OK;
389 break;
390
391 case ARM_POWER_LOW:
392 result = ARM_DRIVER_ERROR_UNSUPPORTED;
393 break;
394
395 case ARM_POWER_FULL:
396 if (lpi2c->flags == (uint8_t)I2C_FLAG_UNINIT)
397 {
398 result = ARM_DRIVER_ERROR;
399 break;
400 }
401
402 if ((lpi2c->flags & (uint8_t)I2C_FLAG_POWER) != 0U)
403 {
404 /* Driver already powered */
405 break;
406 }
407
408 /*
409 * masterConfig.debugEnable = false;
410 * masterConfig.ignoreAck = false;
411 * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
412 * masterConfig.baudRate_Hz = 100000U;
413 * masterConfig.busIdleTimeout_ns = 0;
414 * masterConfig.pinLowTimeout_ns = 0;
415 * masterConfig.sdaGlitchFilterWidth_ns = 0;
416 * masterConfig.sclGlitchFilterWidth_ns = 0;
417 */
418 LPI2C_MasterGetDefaultConfig(&masterConfig);
419
420 /* Initialize the LPI2C master peripheral */
421 LPI2C_MasterInit(lpi2c->resource->base, &masterConfig, lpi2c->resource->GetFreq());
422
423 lpi2c->flags |= (uint8_t)I2C_FLAG_POWER;
424
425 result = ARM_DRIVER_OK;
426 break;
427
428 default:
429 result = ARM_DRIVER_ERROR_UNSUPPORTED;
430 break;
431 }
432 return result;
433 }
434
LPI2C_Master_EdmaGetStatus(cmsis_lpi2c_edma_driver_state_t * lpi2c)435 static ARM_I2C_STATUS LPI2C_Master_EdmaGetStatus(cmsis_lpi2c_edma_driver_state_t *lpi2c)
436 {
437 ARM_I2C_STATUS stat = {0};
438 uint32_t ksdk_lpi2c_master_status = LPI2C_MasterGetStatusFlags(lpi2c->resource->base);
439
440 stat.busy = (uint32_t)((ksdk_lpi2c_master_status & (uint32_t)kLPI2C_MasterBusyFlag) != 0U); /* Busy flag */
441 stat.mode = 1; /* Mode: 0=Slave, 1=Master */
442 stat.direction = (uint32_t)lpi2c->master_edma_handle->transfer.direction; /* Direction: 0=Transmitter, 1=Receiver */
443 stat.arbitration_lost = (uint32_t)((ksdk_lpi2c_master_status & (uint32_t)kLPI2C_MasterArbitrationLostFlag) !=
444 0U); /* Master lost arbitration */
445
446 return stat;
447 }
448 #endif
449
450 #endif
451
452 #if ((defined(RTE_I2C0) && RTE_I2C0 && !RTE_I2C0_DMA_EN) || (defined(RTE_I2C1) && RTE_I2C1 && !RTE_I2C1_DMA_EN) || \
453 (defined(RTE_I2C2) && RTE_I2C2 && !RTE_I2C2_DMA_EN) || (defined(RTE_I2C3) && RTE_I2C3 && !RTE_I2C3_DMA_EN) || \
454 (defined(RTE_I2C4) && RTE_I2C4 && !RTE_I2C4_DMA_EN) || (defined(RTE_I2C5) && RTE_I2C5 && !RTE_I2C5_DMA_EN) || \
455 (defined(RTE_I2C6) && RTE_I2C6 && !RTE_I2C6_DMA_EN) || (defined(RTE_I2C7) && RTE_I2C7 && !RTE_I2C7_DMA_EN) || \
456 (defined(RTE_I2C8) && RTE_I2C8 && !RTE_I2C8_DMA_EN) || (defined(RTE_I2C9) && RTE_I2C9 && !RTE_I2C9_DMA_EN) || \
457 (defined(RTE_I2C10) && RTE_I2C10 && !RTE_I2C10_DMA_EN) || \
458 (defined(RTE_I2C11) && RTE_I2C11 && !RTE_I2C11_DMA_EN) || \
459 (defined(RTE_I2C12) && RTE_I2C12 && !RTE_I2C12_DMA_EN) || \
460 (defined(RTE_I2C13) && RTE_I2C13 && !RTE_I2C13_DMA_EN) || \
461 (defined(RTE_I2C14) && RTE_I2C14 && !RTE_I2C14_DMA_EN) || \
462 (defined(RTE_I2C15) && RTE_I2C15 && !RTE_I2C15_DMA_EN) || \
463 (defined(RTE_I2C16) && RTE_I2C16 && !RTE_I2C16_DMA_EN) || \
464 (defined(RTE_I2C17) && RTE_I2C17 && !RTE_I2C17_DMA_EN) || \
465 (defined(RTE_I2C18) && RTE_I2C18 && !RTE_I2C18_DMA_EN) || \
466 (defined(RTE_I2C19) && RTE_I2C19 && !RTE_I2C19_DMA_EN) || (defined(RTE_I2C20) && RTE_I2C20 && !RTE_I2C20_DMA_EN))
467
KSDK_LPI2C_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)468 static void KSDK_LPI2C_SLAVE_InterruptCallback(LPI2C_Type *base,
469 lpi2c_slave_transfer_t *xfer,
470 void *userData,
471 cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
472 {
473 uint32_t event = 0;
474
475 switch (xfer->event)
476 {
477 /* Transfer done */
478 case kLPI2C_SlaveCompletionEvent:
479 event = ARM_I2C_EVENT_TRANSFER_DONE;
480 break;
481
482 /* Setup the slave receive buffer */
483 case kLPI2C_SlaveReceiveEvent:
484 xfer->data = lpi2c->slave_data;
485 xfer->dataSize = lpi2c->slave_dataSize;
486 break;
487
488 /* Setup the slave transmit buffer */
489 case kLPI2C_SlaveTransmitEvent:
490 xfer->data = lpi2c->slave_data;
491 xfer->dataSize = lpi2c->slave_dataSize;
492 break;
493
494 default:
495 event = ARM_I2C_EVENT_TRANSFER_INCOMPLETE;
496 break;
497 }
498
499 if (userData != NULL)
500 {
501 ((ARM_I2C_SignalEvent_t)userData)(event);
502 }
503 }
504
KSDK_LPI2C_MASTER_InterruptCallback(LPI2C_Type * base,lpi2c_master_handle_t * handle,status_t status,void * userData)505 static void KSDK_LPI2C_MASTER_InterruptCallback(LPI2C_Type *base,
506 lpi2c_master_handle_t *handle,
507 status_t status,
508 void *userData)
509 {
510 uint32_t event = 0;
511
512 /* Signal transfer success when received success status. */
513 switch (status)
514 {
515 /* Transfer done */
516 case kStatus_Success:
517 event = ARM_I2C_EVENT_TRANSFER_DONE;
518 break;
519
520 /* Occurs in master mode when arbitration is lost */
521 case kStatus_LPI2C_ArbitrationLost:
522 event = ARM_I2C_EVENT_ARBITRATION_LOST;
523 break;
524
525 default:
526 event = ARM_I2C_EVENT_TRANSFER_INCOMPLETE;
527 break;
528 }
529
530 if (userData != NULL)
531 {
532 ((ARM_I2C_SignalEvent_t)userData)(event);
533 }
534 }
535
LPI2C_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)536 static int32_t LPI2C_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
537 {
538 if (0U == (lpi2c->flags & (uint8_t)I2C_FLAG_INIT))
539 {
540 lpi2c->cb_event = cb_event; /* Call back function */
541 lpi2c->flags = (uint8_t)I2C_FLAG_INIT;
542 }
543
544 return ARM_DRIVER_OK;
545 }
546
LPI2C_InterruptUninitialize(cmsis_lpi2c_interrupt_driver_state_t * lpi2c)547 static int32_t LPI2C_InterruptUninitialize(cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
548 {
549 lpi2c->flags = (uint8_t)I2C_FLAG_UNINIT;
550 return ARM_DRIVER_OK;
551 }
552
LPI2C_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)553 static int32_t LPI2C_Master_InterruptTransmit(
554 uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
555 {
556 int32_t status;
557 int32_t ret;
558 lpi2c_master_transfer_t masterXfer;
559
560 if (lpi2c->handle->master_handle.state != 0U)
561 {
562 return ARM_DRIVER_ERROR_BUSY; /* Master is busy */
563 }
564
565 /* Create master_handle */
566 LPI2C_MasterTransferCreateHandle(lpi2c->resource->base, &(lpi2c->handle->master_handle),
567 KSDK_LPI2C_MASTER_InterruptCallback, (void *)lpi2c->cb_event);
568
569 /* Setup the master transfer */
570 masterXfer.slaveAddress = (uint16_t)addr;
571 masterXfer.direction = kLPI2C_Write;
572 masterXfer.subaddress = 0U;
573 masterXfer.subaddressSize = 0U;
574 masterXfer.data = (uint8_t *)data;
575 masterXfer.dataSize = num;
576 masterXfer.flags = (uint32_t)kLPI2C_TransferDefaultFlag;
577
578 if (xfer_pending)
579 {
580 /* Stop condition will not be generated */
581 masterXfer.flags |= (uint32_t)kLPI2C_TransferNoStopFlag;
582 }
583
584 /* Send master non-blocking data to slave */
585 status = LPI2C_MasterTransferNonBlocking(lpi2c->resource->base, &(lpi2c->handle->master_handle), &masterXfer);
586
587 switch (status)
588 {
589 case kStatus_Success:
590 ret = ARM_DRIVER_OK;
591 break;
592
593 case kStatus_LPI2C_Busy:
594 ret = ARM_DRIVER_ERROR_BUSY;
595 break;
596
597 default:
598 ret = ARM_DRIVER_ERROR;
599 break;
600 }
601
602 return ret;
603 }
604
LPI2C_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)605 static int32_t LPI2C_Master_InterruptReceive(
606 uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
607 {
608 int32_t status;
609 int32_t ret;
610 lpi2c_master_transfer_t masterXfer;
611
612 if (lpi2c->handle->master_handle.state != 0U)
613 {
614 /* Master is busy */
615 return ARM_DRIVER_ERROR_BUSY;
616 }
617
618 /* Create master_handle */
619 LPI2C_MasterTransferCreateHandle(lpi2c->resource->base, &(lpi2c->handle->master_handle),
620 KSDK_LPI2C_MASTER_InterruptCallback, (void *)lpi2c->cb_event);
621
622 /* Setup the master transfer */
623 masterXfer.slaveAddress = (uint16_t)addr;
624 masterXfer.direction = kLPI2C_Read;
625 masterXfer.subaddress = 0U;
626 masterXfer.subaddressSize = 0U;
627 masterXfer.data = data;
628 masterXfer.dataSize = num;
629 masterXfer.flags = (uint32_t)kLPI2C_TransferDefaultFlag;
630
631 if (xfer_pending)
632 {
633 /* Stop condition will not be generated */
634 masterXfer.flags |= (uint32_t)kLPI2C_TransferNoStopFlag;
635 }
636
637 /* Receive non-blocking data from slave */
638 status = LPI2C_MasterTransferNonBlocking(lpi2c->resource->base, &(lpi2c->handle->master_handle), &masterXfer);
639
640 switch (status)
641 {
642 case kStatus_Success:
643 ret = ARM_DRIVER_OK;
644 break;
645
646 case kStatus_LPI2C_Busy:
647 ret = ARM_DRIVER_ERROR_BUSY;
648 break;
649
650 default:
651 ret = ARM_DRIVER_ERROR;
652 break;
653 }
654
655 return ret;
656 }
657
LPI2C_Slave_InterruptTransmit(const uint8_t * data,uint32_t num,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)658 static int32_t LPI2C_Slave_InterruptTransmit(const uint8_t *data,
659 uint32_t num,
660 cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
661 {
662 int32_t status;
663 int32_t ret;
664
665 /* Create slave_handle */
666 LPI2C_SlaveTransferCreateHandle(lpi2c->resource->base, &(lpi2c->handle->slave_handle),
667 lpi2c->handle->slave_handle.callback, (void *)lpi2c->cb_event);
668
669 /* Slave send Nonblocking data to master */
670 status = LPI2C_SlaveTransferNonBlocking(lpi2c->resource->base, &(lpi2c->handle->slave_handle),
671 (uint32_t)kLPI2C_SlaveCompletionEvent);
672
673 lpi2c->slave_data = (uint8_t *)data; /*!< slave Transfer buffer */
674 lpi2c->slave_dataSize = num; /*!< slave Transfer data size */
675 lpi2c->handle->slave_handle.transferredCount = 0U; /*!< slave Transfered data count */
676
677 switch (status)
678 {
679 case kStatus_Success:
680 ret = ARM_DRIVER_OK;
681 break;
682
683 case kStatus_LPI2C_Busy:
684 ret = ARM_DRIVER_ERROR_BUSY;
685 break;
686
687 default:
688 ret = ARM_DRIVER_ERROR;
689 break;
690 }
691
692 return ret;
693 }
694
LPI2C_Slave_InterruptReceive(uint8_t * data,uint32_t num,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)695 static int32_t LPI2C_Slave_InterruptReceive(uint8_t *data, uint32_t num, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
696 {
697 int32_t status;
698 int32_t ret;
699
700 /* Create slave_handle */
701 LPI2C_SlaveTransferCreateHandle(lpi2c->resource->base, &(lpi2c->handle->slave_handle),
702 lpi2c->handle->slave_handle.callback, (void *)lpi2c->cb_event);
703
704 /* Slave receive Nonblocking data from master */
705 status = LPI2C_SlaveTransferNonBlocking(lpi2c->resource->base, &(lpi2c->handle->slave_handle),
706 (uint32_t)kLPI2C_SlaveCompletionEvent);
707
708 lpi2c->slave_data = data; /*!< slave Transfer buffer */
709 lpi2c->slave_dataSize = num; /*!< slave Transfer data size */
710 lpi2c->handle->slave_handle.transferredCount = 0U; /*!< slave Transfered data count */
711
712 switch (status)
713 {
714 case kStatus_Success:
715 ret = ARM_DRIVER_OK;
716 break;
717
718 case kStatus_LPI2C_Busy:
719 ret = ARM_DRIVER_ERROR_BUSY;
720 break;
721
722 default:
723 ret = ARM_DRIVER_ERROR;
724 break;
725 }
726
727 return ret;
728 }
729
LPI2C_InterruptGetDataCount(cmsis_lpi2c_interrupt_driver_state_t * lpi2c)730 static int32_t LPI2C_InterruptGetDataCount(cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
731 {
732 size_t cnt;
733
734 if ((lpi2c->resource->base->SIER & (uint32_t)kLPI2C_SlaveIrqFlags) == (uint32_t)kLPI2C_SlaveIrqFlags)
735 {
736 /* In slave mode */
737 (void)LPI2C_SlaveTransferGetCount(lpi2c->resource->base, &lpi2c->handle->slave_handle, &cnt);
738 }
739 else
740 {
741 /* In master mode */
742 (void)LPI2C_MasterTransferGetCount(lpi2c->resource->base, &lpi2c->handle->master_handle, &cnt);
743 }
744 return (int32_t)cnt;
745 }
746
LPI2C_InterruptControl(uint32_t control,uint32_t arg,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)747 static int32_t LPI2C_InterruptControl(uint32_t control, uint32_t arg, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
748 {
749 uint32_t baudRate_Bps;
750 int32_t result = ARM_DRIVER_OK;
751
752 switch (control)
753 {
754 case ARM_I2C_OWN_ADDRESS:
755 /* Set Own Slave Address */
756 lpi2c->resource->base->SAMR = (arg << 1U);
757 break;
758
759 case ARM_I2C_BUS_SPEED:
760 /* Set Bus Speed */
761 switch (arg)
762 {
763 case ARM_I2C_BUS_SPEED_STANDARD:
764 baudRate_Bps = 100000;
765 break;
766
767 case ARM_I2C_BUS_SPEED_FAST:
768 baudRate_Bps = 400000;
769 break;
770
771 case ARM_I2C_BUS_SPEED_FAST_PLUS:
772 baudRate_Bps = 1000000;
773 break;
774
775 default:
776 result = ARM_DRIVER_ERROR_UNSUPPORTED;
777 break;
778 }
779
780 if (result == ARM_DRIVER_OK)
781 {
782 LPI2C_MasterSetBaudRate(lpi2c->resource->base, lpi2c->resource->GetFreq(), baudRate_Bps);
783 }
784
785 break;
786
787 /* Not supported. */
788 case ARM_I2C_BUS_CLEAR:
789 result = ARM_DRIVER_ERROR_UNSUPPORTED;
790 break;
791
792 /* Only support aborting data transfer when master transmit(in master mode) or slave receive(in slave mode) */
793 case ARM_I2C_ABORT_TRANSFER:
794 /* Abort data transfer when slave receive(in slave mode) */
795 if ((lpi2c->resource->base->SIER & (uint32_t)kLPI2C_SlaveIrqFlags) == (uint32_t)kLPI2C_SlaveIrqFlags)
796 {
797 /* Disable slave mode */
798 lpi2c->resource->base->SCR = 0U;
799
800 /* Diable slave interrupt */
801 LPI2C_SlaveTransferAbort(lpi2c->resource->base, &(lpi2c->handle->slave_handle));
802
803 /* Enable slave mode */
804 lpi2c->resource->base->SCR = 0x31U;
805 }
806
807 /* Bort data transfer when master transmit abort(in master mode) */
808 if ((lpi2c->resource->base->MIER & (uint32_t)kLPI2C_MasterIrqFlags) == (uint32_t)kLPI2C_MasterIrqFlags)
809 {
810 /* Disable master interrupt and send stop */
811 LPI2C_MasterTransferAbort(lpi2c->resource->base, &(lpi2c->handle->master_handle));
812
813 lpi2c->handle->master_handle.remainingBytes = 0;
814 lpi2c->handle->master_handle.transfer.data = NULL;
815 lpi2c->handle->master_handle.transfer.dataSize = 0;
816 }
817
818 result = ARM_DRIVER_OK;
819 break;
820
821 default:
822 result = ARM_DRIVER_ERROR_UNSUPPORTED;
823 break;
824 }
825 return result;
826 }
827
LPI2C_InterruptPowerControl(ARM_POWER_STATE state,cmsis_lpi2c_interrupt_driver_state_t * lpi2c)828 static int32_t LPI2C_InterruptPowerControl(ARM_POWER_STATE state, cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
829 {
830 int32_t result = ARM_DRIVER_OK;
831 lpi2c_slave_config_t slaveConfig;
832 lpi2c_master_config_t masterConfig;
833 switch (state)
834 {
835 case ARM_POWER_OFF:
836 if ((lpi2c->flags & (uint8_t)I2C_FLAG_POWER) != 0U)
837 {
838 /* Terminates any pending data transfers */
839 (void)LPI2C_InterruptControl(ARM_I2C_ABORT_TRANSFER, 0, lpi2c);
840
841 /* Disables peripheral */
842 LPI2C_MasterDeinit(lpi2c->resource->base);
843 lpi2c->flags = (uint8_t)I2C_FLAG_INIT;
844 }
845 break;
846
847 case ARM_POWER_LOW:
848 result = ARM_DRIVER_ERROR_UNSUPPORTED;
849 break;
850
851 case ARM_POWER_FULL:
852
853 if (lpi2c->flags == (uint8_t)I2C_FLAG_UNINIT)
854 {
855 result = ARM_DRIVER_ERROR;
856 break;
857 }
858
859 if ((lpi2c->flags & (uint8_t)I2C_FLAG_POWER) != 0U)
860 {
861 /* Driver already powered */
862 break;
863 }
864
865 /*
866 * slaveConfig.address0 = 0U;
867 * slaveConfig.address1 = 0U;
868 * slaveConfig.addressMatchMode = kLPI2C_MatchAddress0;
869 * slaveConfig.filterDozeEnable = true;
870 * slaveConfig.filterEnable = true;
871 * slaveConfig.enableGeneralCall = false;
872 * slaveConfig.ignoreAck = false;
873 * slaveConfig.enableReceivedAddressRead = false;
874 * slaveConfig.sdaGlitchFilterWidth_ns = 0;
875 * slaveConfig.sclGlitchFilterWidth_ns = 0;
876 * slaveConfig.dataValidDelay_ns = 0;
877 * slaveConfig.clockHoldTime_ns = 0;
878 */
879 LPI2C_SlaveGetDefaultConfig(&slaveConfig);
880
881 /* Initialize the LPI2C slave peripheral */
882 LPI2C_SlaveInit(lpi2c->resource->base, &slaveConfig, lpi2c->resource->GetFreq());
883
884 /*
885 * masterConfig.debugEnable = false;
886 * masterConfig.ignoreAck = false;
887 * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
888 * masterConfig.baudRate_Hz = 100000U;
889 * masterConfig.busIdleTimeout_ns = 0;
890 * masterConfig.pinLowTimeout_ns = 0;
891 * masterConfig.sdaGlitchFilterWidth_ns = 0;
892 * masterConfig.sclGlitchFilterWidth_ns = 0;
893 */
894 LPI2C_MasterGetDefaultConfig(&masterConfig);
895
896 /* Initialize the LPI2C master peripheral */
897 LPI2C_MasterInit(lpi2c->resource->base, &masterConfig, lpi2c->resource->GetFreq());
898
899 lpi2c->flags |= (uint8_t)I2C_FLAG_POWER;
900
901 break;
902
903 default:
904 result = ARM_DRIVER_ERROR_UNSUPPORTED;
905 break;
906 }
907
908 return result;
909 }
910
LPI2C_InterruptGetStatus(cmsis_lpi2c_interrupt_driver_state_t * lpi2c)911 static ARM_I2C_STATUS LPI2C_InterruptGetStatus(cmsis_lpi2c_interrupt_driver_state_t *lpi2c)
912 {
913 ARM_I2C_STATUS stat = {0};
914 uint32_t ksdk_lpi2c_master_status = LPI2C_MasterGetStatusFlags(lpi2c->resource->base);
915 uint32_t ksdk_lpi2c_slave_status = LPI2C_SlaveGetStatusFlags(lpi2c->resource->base);
916
917 /* Busy flag */
918 stat.busy = (uint32_t)(((ksdk_lpi2c_master_status & (uint32_t)kLPI2C_MasterBusyFlag) != 0U) ||
919 ((ksdk_lpi2c_slave_status & (uint32_t)kLPI2C_SlaveBusyFlag) != 0U));
920
921 /* Mode: 0=Slave, 1=Master */
922 if ((lpi2c->resource->base->SIER & (uint32_t)kLPI2C_SlaveIrqFlags) == (uint32_t)kLPI2C_SlaveIrqFlags)
923 {
924 stat.mode = 0UL;
925 }
926 else
927 {
928 stat.mode = 1UL;
929 }
930
931 /* Direction: 0=Transmitter, 1=Receiver */
932 stat.direction = (uint32_t)lpi2c->handle->master_handle.transfer.direction;
933
934 /* Master lost arbitration */
935 stat.arbitration_lost = (uint32_t)((ksdk_lpi2c_master_status & (uint32_t)kLPI2C_MasterArbitrationLostFlag) != 0U);
936
937 return stat;
938 }
939
940 #endif
941
942 #if defined(LPI2C0) && defined(RTE_I2C0) && RTE_I2C0
943 /* User needs to provide the implementation for LPI2C0_GetFreq/InitPins/DeinitPins
944 in the application for enabling according instance. */
945 extern uint32_t LPI2C0_GetFreq(void);
946
947 static cmsis_lpi2c_resource_t LPI2C0_Resource = {LPI2C0, LPI2C0_GetFreq};
948
949 #if defined(RTE_I2C0_DMA_EN) && RTE_I2C0_DMA_EN
950
951 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
952 static cmsis_lpi2c_edma_resource_t LPI2C0_EdmaResource = {
953 RTE_I2C0_DMA_TX_DMA_BASE, RTE_I2C0_DMA_TX_CH, (uint16_t)RTE_I2C0_DMA_TX_PERI_SEL,
954 RTE_I2C0_DMA_RX_DMA_BASE, RTE_I2C0_DMA_RX_CH, (uint16_t)RTE_I2C0_DMA_RX_PERI_SEL,
955 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
956 RTE_I2C0_DMA_TX_DMAMUX_BASE, RTE_I2C0_DMA_RX_DMAMUX_BASE,
957 #endif
958 };
959
960 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C0_EdmaHandle);
961 static edma_handle_t LPI2C0_EdmaTxHandle;
962 static edma_handle_t LPI2C0_EdmaRxHandle;
963
964 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
965 ARMCC_SECTION("lpi2c0_edma_driver_state")
966 static cmsis_lpi2c_edma_driver_state_t LPI2C0_EdmaDriverState = {
967 #else
968 static cmsis_lpi2c_edma_driver_state_t LPI2C0_EdmaDriverState = {
969 #endif
970 &LPI2C0_Resource, &LPI2C0_EdmaResource, &LPI2C0_EdmaHandle, &LPI2C0_EdmaTxHandle, &LPI2C0_EdmaRxHandle,
971 };
972
LPI2C0_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)973 static int32_t LPI2C0_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
974 {
975 #ifdef RTE_I2C0_PIN_INIT
976 RTE_I2C0_PIN_INIT();
977 #endif
978 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C0_EdmaDriverState);
979 }
980
LPI2C0_Master_EdmaUninitialize(void)981 static int32_t LPI2C0_Master_EdmaUninitialize(void)
982 {
983 #ifdef RTE_I2C0_PIN_DEINIT
984 RTE_I2C0_PIN_DEINIT();
985 #endif
986 return LPI2C_Master_EdmaUninitialize(&LPI2C0_EdmaDriverState);
987 }
988
LPI2C0_Master_EdmaPowerControl(ARM_POWER_STATE state)989 static int32_t LPI2C0_Master_EdmaPowerControl(ARM_POWER_STATE state)
990 {
991 return LPI2C_Master_EdmaPowerControl(state, &LPI2C0_EdmaDriverState);
992 }
993
LPI2C0_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)994 static int32_t LPI2C0_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
995 {
996 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C0_EdmaDriverState);
997 }
998
LPI2C0_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)999 static int32_t LPI2C0_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1000 {
1001 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C0_EdmaDriverState);
1002 }
1003
LPI2C0_Master_EdmaGetDataCount(void)1004 static int32_t LPI2C0_Master_EdmaGetDataCount(void)
1005 {
1006 return LPI2C_Master_EdmaGetDataCount(&LPI2C0_EdmaDriverState);
1007 }
1008
LPI2C0_Master_EdmaControl(uint32_t control,uint32_t arg)1009 static int32_t LPI2C0_Master_EdmaControl(uint32_t control, uint32_t arg)
1010 {
1011 return LPI2C_Master_EdmaControl(control, arg, &LPI2C0_EdmaDriverState);
1012 }
1013
LPI2C0_Master_EdmaGetStatus(void)1014 static ARM_I2C_STATUS LPI2C0_Master_EdmaGetStatus(void)
1015 {
1016 return LPI2C_Master_EdmaGetStatus(&LPI2C0_EdmaDriverState);
1017 }
1018
1019 #endif
1020
1021 #else
1022
1023 static cmsis_i2c_handle_t LPI2C0_Handle;
1024
1025 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1026 ARMCC_SECTION("lpi2c0_interrupt_driver_state")
1027 static cmsis_lpi2c_interrupt_driver_state_t LPI2C0_InterruptDriverState = {
1028 #else
1029 static cmsis_lpi2c_interrupt_driver_state_t LPI2C0_InterruptDriverState = {
1030 #endif
1031 &LPI2C0_Resource,
1032 &LPI2C0_Handle,
1033 };
1034
KSDK_LPI2C0_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1035 static void KSDK_LPI2C0_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1036 {
1037 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C0_InterruptDriverState);
1038 }
1039
LPI2C0_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1040 static int32_t LPI2C0_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1041 {
1042 #ifdef RTE_I2C0_PIN_INIT
1043 RTE_I2C0_PIN_INIT();
1044 #endif
1045 return LPI2C_InterruptInitialize(cb_event, &LPI2C0_InterruptDriverState);
1046 }
1047
LPI2C0_InterruptUninitialize(void)1048 static int32_t LPI2C0_InterruptUninitialize(void)
1049 {
1050 #ifdef RTE_I2C0_PIN_DEINIT
1051 RTE_I2C0_PIN_DEINIT();
1052 #endif
1053 return LPI2C_InterruptUninitialize(&LPI2C0_InterruptDriverState);
1054 }
1055
LPI2C0_InterruptPowerControl(ARM_POWER_STATE state)1056 static int32_t LPI2C0_InterruptPowerControl(ARM_POWER_STATE state)
1057 {
1058 return LPI2C_InterruptPowerControl(state, &LPI2C0_InterruptDriverState);
1059 }
1060
LPI2C0_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1061 static int32_t LPI2C0_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1062 {
1063 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C0_InterruptDriverState);
1064 }
1065
LPI2C0_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1066 static int32_t LPI2C0_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1067 {
1068 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C0_InterruptDriverState);
1069 }
1070
LPI2C0_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)1071 static int32_t LPI2C0_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
1072 {
1073 LPI2C0_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C0_SLAVE_InterruptCallback;
1074 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C0_InterruptDriverState);
1075 }
1076
LPI2C0_Slave_InterruptReceive(uint8_t * data,uint32_t num)1077 static int32_t LPI2C0_Slave_InterruptReceive(uint8_t *data, uint32_t num)
1078 {
1079 LPI2C0_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C0_SLAVE_InterruptCallback;
1080 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C0_InterruptDriverState);
1081 }
1082
LPI2C0_InterruptGetDataCount(void)1083 static int32_t LPI2C0_InterruptGetDataCount(void)
1084 {
1085 return LPI2C_InterruptGetDataCount(&LPI2C0_InterruptDriverState);
1086 }
1087
LPI2C0_InterruptControl(uint32_t control,uint32_t arg)1088 static int32_t LPI2C0_InterruptControl(uint32_t control, uint32_t arg)
1089 {
1090 return LPI2C_InterruptControl(control, arg, &LPI2C0_InterruptDriverState);
1091 }
1092
LPI2C0_InterruptGetStatus(void)1093 static ARM_I2C_STATUS LPI2C0_InterruptGetStatus(void)
1094 {
1095 return LPI2C_InterruptGetStatus(&LPI2C0_InterruptDriverState);
1096 }
1097
1098 #endif /* RTE_I2C0_DMA_EN */
1099
1100 ARM_DRIVER_I2C Driver_I2C0 = {LPI2Cx_GetVersion,
1101 LPI2Cx_GetCapabilities,
1102 #if defined(RTE_I2C0_DMA_EN) && RTE_I2C0_DMA_EN
1103 LPI2C0_Master_EdmaInitialize,
1104 LPI2C0_Master_EdmaUninitialize,
1105 LPI2C0_Master_EdmaPowerControl,
1106 LPI2C0_Master_EdmaTransmit,
1107 LPI2C0_Master_EdmaReceive,
1108 NULL,
1109 NULL,
1110 LPI2C0_Master_EdmaGetDataCount,
1111 LPI2C0_Master_EdmaControl,
1112 LPI2C0_Master_EdmaGetStatus
1113 #else
1114 LPI2C0_InterruptInitialize,
1115 LPI2C0_InterruptUninitialize,
1116 LPI2C0_InterruptPowerControl,
1117 LPI2C0_Master_InterruptTransmit,
1118 LPI2C0_Master_InterruptReceive,
1119 LPI2C0_Slave_InterruptTransmit,
1120 LPI2C0_Slave_InterruptReceive,
1121 LPI2C0_InterruptGetDataCount,
1122 LPI2C0_InterruptControl,
1123 LPI2C0_InterruptGetStatus
1124 #endif /* RTE_I2C0_DMA_EN */
1125 };
1126
1127 #endif /* LPI2C0 */
1128
1129 #if defined(LPI2C1) && defined(RTE_I2C1) && RTE_I2C1
1130 /* User needs to provide the implementation for LPI2C1_GetFreq/InitPins/DeinitPins
1131 in the application for enabling according instance. */
1132 extern uint32_t LPI2C1_GetFreq(void);
1133
1134 static cmsis_lpi2c_resource_t LPI2C1_Resource = {LPI2C1, LPI2C1_GetFreq};
1135
1136 #if defined(RTE_I2C1_DMA_EN) && RTE_I2C1_DMA_EN
1137
1138 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
1139 static cmsis_lpi2c_edma_resource_t LPI2C1_EdmaResource = {
1140 RTE_I2C1_DMA_TX_DMA_BASE, RTE_I2C1_DMA_TX_CH, (uint16_t)RTE_I2C1_DMA_TX_PERI_SEL,
1141 RTE_I2C1_DMA_RX_DMA_BASE, RTE_I2C1_DMA_RX_CH, (uint16_t)RTE_I2C1_DMA_RX_PERI_SEL,
1142 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
1143 RTE_I2C1_DMA_TX_DMAMUX_BASE, RTE_I2C1_DMA_RX_DMAMUX_BASE,
1144 #endif
1145 };
1146
1147 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C1_EdmaHandle);
1148 static edma_handle_t LPI2C1_EdmaTxHandle;
1149 static edma_handle_t LPI2C1_EdmaRxHandle;
1150
1151 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1152 ARMCC_SECTION("lpi2c1_edma_driver_state")
1153 static cmsis_lpi2c_edma_driver_state_t LPI2C1_EdmaDriverState = {
1154 #else
1155 static cmsis_lpi2c_edma_driver_state_t LPI2C1_EdmaDriverState = {
1156 #endif
1157 &LPI2C1_Resource, &LPI2C1_EdmaResource, &LPI2C1_EdmaHandle, &LPI2C1_EdmaTxHandle, &LPI2C1_EdmaRxHandle,
1158 };
1159
LPI2C1_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)1160 static int32_t LPI2C1_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
1161 {
1162 #ifdef RTE_I2C1_PIN_INIT
1163 RTE_I2C1_PIN_INIT();
1164 #endif
1165 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C1_EdmaDriverState);
1166 }
1167
LPI2C1_Master_EdmaUninitialize(void)1168 static int32_t LPI2C1_Master_EdmaUninitialize(void)
1169 {
1170 #ifdef RTE_I2C1_PIN_DEINIT
1171 RTE_I2C1_PIN_DEINIT();
1172 #endif
1173 return LPI2C_Master_EdmaUninitialize(&LPI2C1_EdmaDriverState);
1174 }
1175
LPI2C1_Master_EdmaPowerControl(ARM_POWER_STATE state)1176 static int32_t LPI2C1_Master_EdmaPowerControl(ARM_POWER_STATE state)
1177 {
1178 return LPI2C_Master_EdmaPowerControl(state, &LPI2C1_EdmaDriverState);
1179 }
1180
LPI2C1_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1181 static int32_t LPI2C1_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1182 {
1183 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C1_EdmaDriverState);
1184 }
1185
LPI2C1_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1186 static int32_t LPI2C1_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1187 {
1188 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C1_EdmaDriverState);
1189 }
1190
LPI2C1_Master_EdmaGetDataCount(void)1191 static int32_t LPI2C1_Master_EdmaGetDataCount(void)
1192 {
1193 return LPI2C_Master_EdmaGetDataCount(&LPI2C1_EdmaDriverState);
1194 }
1195
LPI2C1_Master_EdmaControl(uint32_t control,uint32_t arg)1196 static int32_t LPI2C1_Master_EdmaControl(uint32_t control, uint32_t arg)
1197 {
1198 return LPI2C_Master_EdmaControl(control, arg, &LPI2C1_EdmaDriverState);
1199 }
1200
LPI2C1_Master_EdmaGetStatus(void)1201 static ARM_I2C_STATUS LPI2C1_Master_EdmaGetStatus(void)
1202 {
1203 return LPI2C_Master_EdmaGetStatus(&LPI2C1_EdmaDriverState);
1204 }
1205
1206 #endif
1207
1208 #else
1209
1210 static cmsis_i2c_handle_t LPI2C1_Handle;
1211
1212 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1213 ARMCC_SECTION("lpi2c1_interrupt_driver_state")
1214 static cmsis_lpi2c_interrupt_driver_state_t LPI2C1_InterruptDriverState = {
1215 #else
1216 static cmsis_lpi2c_interrupt_driver_state_t LPI2C1_InterruptDriverState = {
1217 #endif
1218 &LPI2C1_Resource,
1219 &LPI2C1_Handle,
1220 };
1221
KSDK_LPI2C1_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1222 static void KSDK_LPI2C1_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1223 {
1224 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C1_InterruptDriverState);
1225 }
1226
LPI2C1_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1227 static int32_t LPI2C1_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1228 {
1229 #ifdef RTE_I2C1_PIN_INIT
1230 RTE_I2C1_PIN_INIT();
1231 #endif
1232 return LPI2C_InterruptInitialize(cb_event, &LPI2C1_InterruptDriverState);
1233 }
1234
LPI2C1_InterruptUninitialize(void)1235 static int32_t LPI2C1_InterruptUninitialize(void)
1236 {
1237 #ifdef RTE_I2C1_PIN_DEINIT
1238 RTE_I2C1_PIN_DEINIT();
1239 #endif
1240 return LPI2C_InterruptUninitialize(&LPI2C1_InterruptDriverState);
1241 }
1242
LPI2C1_InterruptPowerControl(ARM_POWER_STATE state)1243 static int32_t LPI2C1_InterruptPowerControl(ARM_POWER_STATE state)
1244 {
1245 return LPI2C_InterruptPowerControl(state, &LPI2C1_InterruptDriverState);
1246 }
1247
LPI2C1_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1248 static int32_t LPI2C1_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1249 {
1250 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C1_InterruptDriverState);
1251 }
1252
LPI2C1_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1253 static int32_t LPI2C1_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1254 {
1255 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C1_InterruptDriverState);
1256 }
1257
LPI2C1_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)1258 static int32_t LPI2C1_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
1259 {
1260 LPI2C1_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C1_SLAVE_InterruptCallback;
1261 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C1_InterruptDriverState);
1262 }
1263
LPI2C1_Slave_InterruptReceive(uint8_t * data,uint32_t num)1264 static int32_t LPI2C1_Slave_InterruptReceive(uint8_t *data, uint32_t num)
1265 {
1266 LPI2C1_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C1_SLAVE_InterruptCallback;
1267 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C1_InterruptDriverState);
1268 }
1269
LPI2C1_InterruptGetDataCount(void)1270 static int32_t LPI2C1_InterruptGetDataCount(void)
1271 {
1272 return LPI2C_InterruptGetDataCount(&LPI2C1_InterruptDriverState);
1273 }
1274
LPI2C1_InterruptControl(uint32_t control,uint32_t arg)1275 static int32_t LPI2C1_InterruptControl(uint32_t control, uint32_t arg)
1276 {
1277 return LPI2C_InterruptControl(control, arg, &LPI2C1_InterruptDriverState);
1278 }
1279
LPI2C1_InterruptGetStatus(void)1280 static ARM_I2C_STATUS LPI2C1_InterruptGetStatus(void)
1281 {
1282 return LPI2C_InterruptGetStatus(&LPI2C1_InterruptDriverState);
1283 }
1284
1285 #endif /* RTE_I2C1_DMA_EN */
1286
1287 ARM_DRIVER_I2C Driver_I2C1 = {LPI2Cx_GetVersion,
1288 LPI2Cx_GetCapabilities,
1289 #if defined(RTE_I2C1_DMA_EN) && RTE_I2C1_DMA_EN
1290 LPI2C1_Master_EdmaInitialize,
1291 LPI2C1_Master_EdmaUninitialize,
1292 LPI2C1_Master_EdmaPowerControl,
1293 LPI2C1_Master_EdmaTransmit,
1294 LPI2C1_Master_EdmaReceive,
1295 NULL,
1296 NULL,
1297 LPI2C1_Master_EdmaGetDataCount,
1298 LPI2C1_Master_EdmaControl,
1299 LPI2C1_Master_EdmaGetStatus
1300 #else
1301 LPI2C1_InterruptInitialize,
1302 LPI2C1_InterruptUninitialize,
1303 LPI2C1_InterruptPowerControl,
1304 LPI2C1_Master_InterruptTransmit,
1305 LPI2C1_Master_InterruptReceive,
1306 LPI2C1_Slave_InterruptTransmit,
1307 LPI2C1_Slave_InterruptReceive,
1308 LPI2C1_InterruptGetDataCount,
1309 LPI2C1_InterruptControl,
1310 LPI2C1_InterruptGetStatus
1311 #endif /* RTE_I2C1_DMA_EN */
1312 };
1313
1314 #endif /* LPI2C1 */
1315
1316 #if defined(LPI2C2) && defined(RTE_I2C2) && RTE_I2C2
1317 /* User needs to provide the implementation for LPI2C2_GetFreq/InitPins/DeinitPins
1318 in the application for enabling according instance. */
1319 extern uint32_t LPI2C2_GetFreq(void);
1320
1321 static cmsis_lpi2c_resource_t LPI2C2_Resource = {LPI2C2, LPI2C2_GetFreq};
1322
1323 #if defined(RTE_I2C2_DMA_EN) && RTE_I2C2_DMA_EN
1324
1325 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
1326 static cmsis_lpi2c_edma_resource_t LPI2C2_EdmaResource = {
1327 RTE_I2C2_DMA_TX_DMA_BASE, RTE_I2C2_DMA_TX_CH, (uint16_t)RTE_I2C2_DMA_TX_PERI_SEL,
1328 RTE_I2C2_DMA_RX_DMA_BASE, RTE_I2C2_DMA_RX_CH, (uint16_t)RTE_I2C2_DMA_RX_PERI_SEL,
1329 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
1330 RTE_I2C2_DMA_TX_DMAMUX_BASE, RTE_I2C2_DMA_RX_DMAMUX_BASE,
1331 #endif
1332 };
1333
1334 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C2_EdmaHandle);
1335 static edma_handle_t LPI2C2_EdmaTxHandle;
1336 static edma_handle_t LPI2C2_EdmaRxHandle;
1337
1338 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1339 ARMCC_SECTION("lpi2c2_edma_driver_state")
1340 static cmsis_lpi2c_edma_driver_state_t LPI2C2_EdmaDriverState = {
1341 #else
1342 static cmsis_lpi2c_edma_driver_state_t LPI2C2_EdmaDriverState = {
1343 #endif
1344 &LPI2C2_Resource, &LPI2C2_EdmaResource, &LPI2C2_EdmaHandle, &LPI2C2_EdmaTxHandle, &LPI2C2_EdmaRxHandle,
1345 };
1346
LPI2C2_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)1347 static int32_t LPI2C2_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
1348 {
1349 #ifdef RTE_I2C2_PIN_INIT
1350 RTE_I2C2_PIN_INIT();
1351 #endif
1352 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C2_EdmaDriverState);
1353 }
1354
LPI2C2_Master_EdmaUninitialize(void)1355 static int32_t LPI2C2_Master_EdmaUninitialize(void)
1356 {
1357 #ifdef RTE_I2C2_PIN_DEINIT
1358 RTE_I2C2_PIN_DEINIT();
1359 #endif
1360 return LPI2C_Master_EdmaUninitialize(&LPI2C2_EdmaDriverState);
1361 }
1362
LPI2C2_Master_EdmaPowerControl(ARM_POWER_STATE state)1363 static int32_t LPI2C2_Master_EdmaPowerControl(ARM_POWER_STATE state)
1364 {
1365 return LPI2C_Master_EdmaPowerControl(state, &LPI2C2_EdmaDriverState);
1366 }
1367
LPI2C2_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1368 static int32_t LPI2C2_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1369 {
1370 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C2_EdmaDriverState);
1371 }
1372
LPI2C2_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1373 static int32_t LPI2C2_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1374 {
1375 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C2_EdmaDriverState);
1376 }
1377
LPI2C2_Master_EdmaGetDataCount(void)1378 static int32_t LPI2C2_Master_EdmaGetDataCount(void)
1379 {
1380 return LPI2C_Master_EdmaGetDataCount(&LPI2C2_EdmaDriverState);
1381 }
1382
LPI2C2_Master_EdmaControl(uint32_t control,uint32_t arg)1383 static int32_t LPI2C2_Master_EdmaControl(uint32_t control, uint32_t arg)
1384 {
1385 return LPI2C_Master_EdmaControl(control, arg, &LPI2C2_EdmaDriverState);
1386 }
1387
LPI2C2_Master_EdmaGetStatus(void)1388 static ARM_I2C_STATUS LPI2C2_Master_EdmaGetStatus(void)
1389 {
1390 return LPI2C_Master_EdmaGetStatus(&LPI2C2_EdmaDriverState);
1391 }
1392
1393 #endif
1394
1395 #else
1396
1397 static cmsis_i2c_handle_t LPI2C2_Handle;
1398
1399 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1400 ARMCC_SECTION("lpi2c2_interrupt_driver_state")
1401 static cmsis_lpi2c_interrupt_driver_state_t LPI2C2_InterruptDriverState = {
1402 #else
1403 static cmsis_lpi2c_interrupt_driver_state_t LPI2C2_InterruptDriverState = {
1404 #endif
1405 &LPI2C2_Resource,
1406 &LPI2C2_Handle,
1407 };
1408
KSDK_LPI2C2_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1409 static void KSDK_LPI2C2_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1410 {
1411 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C2_InterruptDriverState);
1412 }
1413
LPI2C2_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1414 static int32_t LPI2C2_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1415 {
1416 #ifdef RTE_I2C2_PIN_INIT
1417 RTE_I2C2_PIN_INIT();
1418 #endif
1419 return LPI2C_InterruptInitialize(cb_event, &LPI2C2_InterruptDriverState);
1420 }
1421
LPI2C2_InterruptUninitialize(void)1422 static int32_t LPI2C2_InterruptUninitialize(void)
1423 {
1424 #ifdef RTE_I2C2_PIN_DEINIT
1425 RTE_I2C2_PIN_DEINIT();
1426 #endif
1427 return LPI2C_InterruptUninitialize(&LPI2C2_InterruptDriverState);
1428 }
1429
LPI2C2_InterruptPowerControl(ARM_POWER_STATE state)1430 static int32_t LPI2C2_InterruptPowerControl(ARM_POWER_STATE state)
1431 {
1432 return LPI2C_InterruptPowerControl(state, &LPI2C2_InterruptDriverState);
1433 }
1434
LPI2C2_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1435 static int32_t LPI2C2_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1436 {
1437 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C2_InterruptDriverState);
1438 }
1439
LPI2C2_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1440 static int32_t LPI2C2_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1441 {
1442 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C2_InterruptDriverState);
1443 }
1444
LPI2C2_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)1445 static int32_t LPI2C2_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
1446 {
1447 LPI2C2_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C2_SLAVE_InterruptCallback;
1448 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C2_InterruptDriverState);
1449 }
1450
LPI2C2_Slave_InterruptReceive(uint8_t * data,uint32_t num)1451 static int32_t LPI2C2_Slave_InterruptReceive(uint8_t *data, uint32_t num)
1452 {
1453 LPI2C2_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C2_SLAVE_InterruptCallback;
1454 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C2_InterruptDriverState);
1455 }
1456
LPI2C2_InterruptGetDataCount(void)1457 static int32_t LPI2C2_InterruptGetDataCount(void)
1458 {
1459 return LPI2C_InterruptGetDataCount(&LPI2C2_InterruptDriverState);
1460 }
1461
LPI2C2_InterruptControl(uint32_t control,uint32_t arg)1462 static int32_t LPI2C2_InterruptControl(uint32_t control, uint32_t arg)
1463 {
1464 return LPI2C_InterruptControl(control, arg, &LPI2C2_InterruptDriverState);
1465 }
1466
LPI2C2_InterruptGetStatus(void)1467 static ARM_I2C_STATUS LPI2C2_InterruptGetStatus(void)
1468 {
1469 return LPI2C_InterruptGetStatus(&LPI2C2_InterruptDriverState);
1470 }
1471
1472 #endif /* RTE_I2C2_DMA_EN */
1473
1474 ARM_DRIVER_I2C Driver_I2C2 = {LPI2Cx_GetVersion,
1475 LPI2Cx_GetCapabilities,
1476 #if defined(RTE_I2C2_DMA_EN) && RTE_I2C2_DMA_EN
1477 LPI2C2_Master_EdmaInitialize,
1478 LPI2C2_Master_EdmaUninitialize,
1479 LPI2C2_Master_EdmaPowerControl,
1480 LPI2C2_Master_EdmaTransmit,
1481 LPI2C2_Master_EdmaReceive,
1482 NULL,
1483 NULL,
1484 LPI2C2_Master_EdmaGetDataCount,
1485 LPI2C2_Master_EdmaControl,
1486 LPI2C2_Master_EdmaGetStatus
1487 #else
1488 LPI2C2_InterruptInitialize,
1489 LPI2C2_InterruptUninitialize,
1490 LPI2C2_InterruptPowerControl,
1491 LPI2C2_Master_InterruptTransmit,
1492 LPI2C2_Master_InterruptReceive,
1493 LPI2C2_Slave_InterruptTransmit,
1494 LPI2C2_Slave_InterruptReceive,
1495 LPI2C2_InterruptGetDataCount,
1496 LPI2C2_InterruptControl,
1497 LPI2C2_InterruptGetStatus
1498 #endif /* RTE_I2C2_DMA_EN */
1499 };
1500
1501 #endif /* LPI2C2 */
1502
1503 #if defined(LPI2C3) && defined(RTE_I2C3) && RTE_I2C3
1504 /* User needs to provide the implementation for LPI2C3_GetFreq/InitPins/DeinitPins
1505 in the application for enabling according instance. */
1506 extern uint32_t LPI2C3_GetFreq(void);
1507
1508 static cmsis_lpi2c_resource_t LPI2C3_Resource = {LPI2C3, LPI2C3_GetFreq};
1509
1510 #if defined(RTE_I2C3_DMA_EN) && RTE_I2C3_DMA_EN
1511
1512 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
1513 static cmsis_lpi2c_edma_resource_t LPI2C3_EdmaResource = {
1514 RTE_I2C3_DMA_TX_DMA_BASE, RTE_I2C3_DMA_TX_CH, (uint16_t)RTE_I2C3_DMA_TX_PERI_SEL,
1515 RTE_I2C3_DMA_RX_DMA_BASE, RTE_I2C3_DMA_RX_CH, (uint16_t)RTE_I2C3_DMA_RX_PERI_SEL,
1516 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
1517 RTE_I2C3_DMA_TX_DMAMUX_BASE, RTE_I2C3_DMA_RX_DMAMUX_BASE,
1518 #endif
1519 };
1520
1521 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C3_EdmaHandle);
1522 static edma_handle_t LPI2C3_EdmaTxHandle;
1523 static edma_handle_t LPI2C3_EdmaRxHandle;
1524
1525 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1526 ARMCC_SECTION("lpi2c3_edma_driver_state")
1527 static cmsis_lpi2c_edma_driver_state_t LPI2C3_EdmaDriverState = {
1528 #else
1529 static cmsis_lpi2c_edma_driver_state_t LPI2C3_EdmaDriverState = {
1530 #endif
1531 &LPI2C3_Resource, &LPI2C3_EdmaResource, &LPI2C3_EdmaHandle, &LPI2C3_EdmaTxHandle, &LPI2C3_EdmaRxHandle,
1532 };
1533
LPI2C3_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)1534 static int32_t LPI2C3_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
1535 {
1536 #ifdef RTE_I2C3_PIN_INIT
1537 RTE_I2C3_PIN_INIT();
1538 #endif
1539 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C3_EdmaDriverState);
1540 }
1541
LPI2C3_Master_EdmaUninitialize(void)1542 static int32_t LPI2C3_Master_EdmaUninitialize(void)
1543 {
1544 #ifdef RTE_I2C3_PIN_DEINIT
1545 RTE_I2C3_PIN_DEINIT();
1546 #endif
1547 return LPI2C_Master_EdmaUninitialize(&LPI2C3_EdmaDriverState);
1548 }
1549
LPI2C3_Master_EdmaPowerControl(ARM_POWER_STATE state)1550 static int32_t LPI2C3_Master_EdmaPowerControl(ARM_POWER_STATE state)
1551 {
1552 return LPI2C_Master_EdmaPowerControl(state, &LPI2C3_EdmaDriverState);
1553 }
1554
LPI2C3_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1555 static int32_t LPI2C3_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1556 {
1557 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C3_EdmaDriverState);
1558 }
1559
LPI2C3_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1560 static int32_t LPI2C3_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1561 {
1562 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C3_EdmaDriverState);
1563 }
1564
LPI2C3_Master_EdmaGetDataCount(void)1565 static int32_t LPI2C3_Master_EdmaGetDataCount(void)
1566 {
1567 return LPI2C_Master_EdmaGetDataCount(&LPI2C3_EdmaDriverState);
1568 }
1569
LPI2C3_Master_EdmaControl(uint32_t control,uint32_t arg)1570 static int32_t LPI2C3_Master_EdmaControl(uint32_t control, uint32_t arg)
1571 {
1572 return LPI2C_Master_EdmaControl(control, arg, &LPI2C3_EdmaDriverState);
1573 }
1574
LPI2C3_Master_EdmaGetStatus(void)1575 static ARM_I2C_STATUS LPI2C3_Master_EdmaGetStatus(void)
1576 {
1577 return LPI2C_Master_EdmaGetStatus(&LPI2C3_EdmaDriverState);
1578 }
1579
1580 #endif
1581
1582 #else
1583
1584 static cmsis_i2c_handle_t LPI2C3_Handle;
1585
1586 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1587 ARMCC_SECTION("lpi2c3_interrupt_driver_state")
1588 static cmsis_lpi2c_interrupt_driver_state_t LPI2C3_InterruptDriverState = {
1589 #else
1590 static cmsis_lpi2c_interrupt_driver_state_t LPI2C3_InterruptDriverState = {
1591 #endif
1592 &LPI2C3_Resource,
1593 &LPI2C3_Handle,
1594 };
1595
KSDK_LPI2C3_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1596 static void KSDK_LPI2C3_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1597 {
1598 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C3_InterruptDriverState);
1599 }
1600
LPI2C3_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1601 static int32_t LPI2C3_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1602 {
1603 #ifdef RTE_I2C3_PIN_INIT
1604 RTE_I2C3_PIN_INIT();
1605 #endif
1606 return LPI2C_InterruptInitialize(cb_event, &LPI2C3_InterruptDriverState);
1607 }
1608
LPI2C3_InterruptUninitialize(void)1609 static int32_t LPI2C3_InterruptUninitialize(void)
1610 {
1611 #ifdef RTE_I2C3_PIN_DEINIT
1612 RTE_I2C3_PIN_DEINIT();
1613 #endif
1614 return LPI2C_InterruptUninitialize(&LPI2C3_InterruptDriverState);
1615 }
1616
LPI2C3_InterruptPowerControl(ARM_POWER_STATE state)1617 static int32_t LPI2C3_InterruptPowerControl(ARM_POWER_STATE state)
1618 {
1619 return LPI2C_InterruptPowerControl(state, &LPI2C3_InterruptDriverState);
1620 }
1621
LPI2C3_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1622 static int32_t LPI2C3_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1623 {
1624 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C3_InterruptDriverState);
1625 }
1626
LPI2C3_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1627 static int32_t LPI2C3_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1628 {
1629 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C3_InterruptDriverState);
1630 }
1631
LPI2C3_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)1632 static int32_t LPI2C3_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
1633 {
1634 LPI2C3_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C3_SLAVE_InterruptCallback;
1635 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C3_InterruptDriverState);
1636 }
1637
LPI2C3_Slave_InterruptReceive(uint8_t * data,uint32_t num)1638 static int32_t LPI2C3_Slave_InterruptReceive(uint8_t *data, uint32_t num)
1639 {
1640 LPI2C3_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C3_SLAVE_InterruptCallback;
1641 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C3_InterruptDriverState);
1642 }
1643
LPI2C3_InterruptGetDataCount(void)1644 static int32_t LPI2C3_InterruptGetDataCount(void)
1645 {
1646 return LPI2C_InterruptGetDataCount(&LPI2C3_InterruptDriverState);
1647 }
1648
LPI2C3_InterruptControl(uint32_t control,uint32_t arg)1649 static int32_t LPI2C3_InterruptControl(uint32_t control, uint32_t arg)
1650 {
1651 return LPI2C_InterruptControl(control, arg, &LPI2C3_InterruptDriverState);
1652 }
1653
LPI2C3_InterruptGetStatus(void)1654 static ARM_I2C_STATUS LPI2C3_InterruptGetStatus(void)
1655 {
1656 return LPI2C_InterruptGetStatus(&LPI2C3_InterruptDriverState);
1657 }
1658
1659 #endif /* RTE_I2C3_DMA_EN */
1660
1661 ARM_DRIVER_I2C Driver_I2C3 = {LPI2Cx_GetVersion,
1662 LPI2Cx_GetCapabilities,
1663 #if defined(RTE_I2C3_DMA_EN) && RTE_I2C3_DMA_EN
1664 LPI2C3_Master_EdmaInitialize,
1665 LPI2C3_Master_EdmaUninitialize,
1666 LPI2C3_Master_EdmaPowerControl,
1667 LPI2C3_Master_EdmaTransmit,
1668 LPI2C3_Master_EdmaReceive,
1669 NULL,
1670 NULL,
1671 LPI2C3_Master_EdmaGetDataCount,
1672 LPI2C3_Master_EdmaControl,
1673 LPI2C3_Master_EdmaGetStatus
1674 #else
1675 LPI2C3_InterruptInitialize,
1676 LPI2C3_InterruptUninitialize,
1677 LPI2C3_InterruptPowerControl,
1678 LPI2C3_Master_InterruptTransmit,
1679 LPI2C3_Master_InterruptReceive,
1680 LPI2C3_Slave_InterruptTransmit,
1681 LPI2C3_Slave_InterruptReceive,
1682 LPI2C3_InterruptGetDataCount,
1683 LPI2C3_InterruptControl,
1684 LPI2C3_InterruptGetStatus
1685 #endif /* RTE_I2C3_DMA_EN */
1686 };
1687
1688 #endif /* LPI2C3 */
1689
1690 #if defined(LPI2C4) && defined(RTE_I2C4) && RTE_I2C4
1691 /* User needs to provide the implementation for LPI2C4_GetFreq/InitPins/DeinitPins
1692 in the application for enabling according instance. */
1693 extern uint32_t LPI2C4_GetFreq(void);
1694
1695 static cmsis_lpi2c_resource_t LPI2C4_Resource = {LPI2C4, LPI2C4_GetFreq};
1696
1697 #if defined(RTE_I2C4_DMA_EN) && RTE_I2C4_DMA_EN
1698
1699 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
1700 static cmsis_lpi2c_edma_resource_t LPI2C4_EdmaResource = {
1701 RTE_I2C4_DMA_TX_DMA_BASE, RTE_I2C4_DMA_TX_CH, (uint16_t)RTE_I2C4_DMA_TX_PERI_SEL,
1702 RTE_I2C4_DMA_RX_DMA_BASE, RTE_I2C4_DMA_RX_CH, (uint16_t)RTE_I2C4_DMA_RX_PERI_SEL,
1703 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
1704 RTE_I2C4_DMA_TX_DMAMUX_BASE, RTE_I2C4_DMA_RX_DMAMUX_BASE,
1705 #endif
1706 };
1707
1708 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C4_EdmaHandle);
1709 static edma_handle_t LPI2C4_EdmaTxHandle;
1710 static edma_handle_t LPI2C4_EdmaRxHandle;
1711
1712 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1713 ARMCC_SECTION("lpi2c4_edma_driver_state")
1714 static cmsis_lpi2c_edma_driver_state_t LPI2C4_EdmaDriverState = {
1715 #else
1716 static cmsis_lpi2c_edma_driver_state_t LPI2C4_EdmaDriverState = {
1717 #endif
1718 &LPI2C4_Resource, &LPI2C4_EdmaResource, &LPI2C4_EdmaHandle, &LPI2C4_EdmaTxHandle, &LPI2C4_EdmaRxHandle,
1719 };
1720
LPI2C4_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)1721 static int32_t LPI2C4_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
1722 {
1723 #ifdef RTE_I2C4_PIN_INIT
1724 RTE_I2C4_PIN_INIT();
1725 #endif
1726 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C4_EdmaDriverState);
1727 }
1728
LPI2C4_Master_EdmaUninitialize(void)1729 static int32_t LPI2C4_Master_EdmaUninitialize(void)
1730 {
1731 #ifdef RTE_I2C4_PIN_DEINIT
1732 RTE_I2C4_PIN_DEINIT();
1733 #endif
1734 return LPI2C_Master_EdmaUninitialize(&LPI2C4_EdmaDriverState);
1735 }
1736
LPI2C4_Master_EdmaPowerControl(ARM_POWER_STATE state)1737 static int32_t LPI2C4_Master_EdmaPowerControl(ARM_POWER_STATE state)
1738 {
1739 return LPI2C_Master_EdmaPowerControl(state, &LPI2C4_EdmaDriverState);
1740 }
1741
LPI2C4_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1742 static int32_t LPI2C4_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1743 {
1744 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C4_EdmaDriverState);
1745 }
1746
LPI2C4_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1747 static int32_t LPI2C4_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1748 {
1749 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C4_EdmaDriverState);
1750 }
1751
LPI2C4_Master_EdmaGetDataCount(void)1752 static int32_t LPI2C4_Master_EdmaGetDataCount(void)
1753 {
1754 return LPI2C_Master_EdmaGetDataCount(&LPI2C4_EdmaDriverState);
1755 }
1756
LPI2C4_Master_EdmaControl(uint32_t control,uint32_t arg)1757 static int32_t LPI2C4_Master_EdmaControl(uint32_t control, uint32_t arg)
1758 {
1759 return LPI2C_Master_EdmaControl(control, arg, &LPI2C4_EdmaDriverState);
1760 }
1761
LPI2C4_Master_EdmaGetStatus(void)1762 static ARM_I2C_STATUS LPI2C4_Master_EdmaGetStatus(void)
1763 {
1764 return LPI2C_Master_EdmaGetStatus(&LPI2C4_EdmaDriverState);
1765 }
1766
1767 #endif
1768
1769 #else
1770
1771 static cmsis_i2c_handle_t LPI2C4_Handle;
1772
1773 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1774 ARMCC_SECTION("lpi2c4_interrupt_driver_state")
1775 static cmsis_lpi2c_interrupt_driver_state_t LPI2C4_InterruptDriverState = {
1776 #else
1777 static cmsis_lpi2c_interrupt_driver_state_t LPI2C4_InterruptDriverState = {
1778 #endif
1779 &LPI2C4_Resource,
1780 &LPI2C4_Handle,
1781 };
1782
KSDK_LPI2C4_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1783 static void KSDK_LPI2C4_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1784 {
1785 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C4_InterruptDriverState);
1786 }
1787
LPI2C4_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1788 static int32_t LPI2C4_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1789 {
1790 #ifdef RTE_I2C4_PIN_INIT
1791 RTE_I2C4_PIN_INIT();
1792 #endif
1793 return LPI2C_InterruptInitialize(cb_event, &LPI2C4_InterruptDriverState);
1794 }
1795
LPI2C4_InterruptUninitialize(void)1796 static int32_t LPI2C4_InterruptUninitialize(void)
1797 {
1798 #ifdef RTE_I2C4_PIN_DEINIT
1799 RTE_I2C4_PIN_DEINIT();
1800 #endif
1801 return LPI2C_InterruptUninitialize(&LPI2C4_InterruptDriverState);
1802 }
1803
LPI2C4_InterruptPowerControl(ARM_POWER_STATE state)1804 static int32_t LPI2C4_InterruptPowerControl(ARM_POWER_STATE state)
1805 {
1806 return LPI2C_InterruptPowerControl(state, &LPI2C4_InterruptDriverState);
1807 }
1808
LPI2C4_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1809 static int32_t LPI2C4_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1810 {
1811 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C4_InterruptDriverState);
1812 }
1813
LPI2C4_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1814 static int32_t LPI2C4_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1815 {
1816 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C4_InterruptDriverState);
1817 }
1818
LPI2C4_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)1819 static int32_t LPI2C4_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
1820 {
1821 LPI2C4_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C4_SLAVE_InterruptCallback;
1822 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C4_InterruptDriverState);
1823 }
1824
LPI2C4_Slave_InterruptReceive(uint8_t * data,uint32_t num)1825 static int32_t LPI2C4_Slave_InterruptReceive(uint8_t *data, uint32_t num)
1826 {
1827 LPI2C4_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C4_SLAVE_InterruptCallback;
1828 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C4_InterruptDriverState);
1829 }
1830
LPI2C4_InterruptGetDataCount(void)1831 static int32_t LPI2C4_InterruptGetDataCount(void)
1832 {
1833 return LPI2C_InterruptGetDataCount(&LPI2C4_InterruptDriverState);
1834 }
1835
LPI2C4_InterruptControl(uint32_t control,uint32_t arg)1836 static int32_t LPI2C4_InterruptControl(uint32_t control, uint32_t arg)
1837 {
1838 return LPI2C_InterruptControl(control, arg, &LPI2C4_InterruptDriverState);
1839 }
1840
LPI2C4_InterruptGetStatus(void)1841 static ARM_I2C_STATUS LPI2C4_InterruptGetStatus(void)
1842 {
1843 return LPI2C_InterruptGetStatus(&LPI2C4_InterruptDriverState);
1844 }
1845
1846 #endif /* RTE_I2C4_DMA_EN */
1847
1848 ARM_DRIVER_I2C Driver_I2C4 = {LPI2Cx_GetVersion,
1849 LPI2Cx_GetCapabilities,
1850 #if defined(RTE_I2C4_DMA_EN) && RTE_I2C4_DMA_EN
1851 LPI2C4_Master_EdmaInitialize,
1852 LPI2C4_Master_EdmaUninitialize,
1853 LPI2C4_Master_EdmaPowerControl,
1854 LPI2C4_Master_EdmaTransmit,
1855 LPI2C4_Master_EdmaReceive,
1856 NULL,
1857 NULL,
1858 LPI2C4_Master_EdmaGetDataCount,
1859 LPI2C4_Master_EdmaControl,
1860 LPI2C4_Master_EdmaGetStatus
1861 #else
1862 LPI2C4_InterruptInitialize,
1863 LPI2C4_InterruptUninitialize,
1864 LPI2C4_InterruptPowerControl,
1865 LPI2C4_Master_InterruptTransmit,
1866 LPI2C4_Master_InterruptReceive,
1867 LPI2C4_Slave_InterruptTransmit,
1868 LPI2C4_Slave_InterruptReceive,
1869 LPI2C4_InterruptGetDataCount,
1870 LPI2C4_InterruptControl,
1871 LPI2C4_InterruptGetStatus
1872 #endif /* RTE_I2C4_DMA_EN */
1873 };
1874
1875 #endif /* LPI2C4 */
1876
1877 #if defined(LPI2C5) && defined(RTE_I2C5) && RTE_I2C5
1878 /* User needs to provide the implementation for LPI2C5_GetFreq/InitPins/DeinitPins
1879 in the application for enabling according instance. */
1880 extern uint32_t LPI2C5_GetFreq(void);
1881
1882 static cmsis_lpi2c_resource_t LPI2C5_Resource = {LPI2C5, LPI2C5_GetFreq};
1883
1884 #if defined(RTE_I2C5_DMA_EN) && RTE_I2C5_DMA_EN
1885
1886 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
1887 static cmsis_lpi2c_edma_resource_t LPI2C5_EdmaResource = {
1888 RTE_I2C5_DMA_TX_DMA_BASE, RTE_I2C5_DMA_TX_CH, (uint16_t)RTE_I2C5_DMA_TX_PERI_SEL,
1889 RTE_I2C5_DMA_RX_DMA_BASE, RTE_I2C5_DMA_RX_CH, (uint16_t)RTE_I2C5_DMA_RX_PERI_SEL,
1890 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
1891 RTE_I2C5_DMA_TX_DMAMUX_BASE, RTE_I2C5_DMA_RX_DMAMUX_BASE,
1892 #endif
1893 };
1894
1895 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C5_EdmaHandle);
1896 static edma_handle_t LPI2C5_EdmaTxHandle;
1897 static edma_handle_t LPI2C5_EdmaRxHandle;
1898
1899 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1900 ARMCC_SECTION("lpi2c5_edma_driver_state")
1901 static cmsis_lpi2c_edma_driver_state_t LPI2C5_EdmaDriverState = {
1902 #else
1903 static cmsis_lpi2c_edma_driver_state_t LPI2C5_EdmaDriverState = {
1904 #endif
1905 &LPI2C5_Resource, &LPI2C5_EdmaResource, &LPI2C5_EdmaHandle, &LPI2C5_EdmaTxHandle, &LPI2C5_EdmaRxHandle,
1906 };
1907
LPI2C5_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)1908 static int32_t LPI2C5_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
1909 {
1910 #ifdef RTE_I2C5_PIN_INIT
1911 RTE_I2C5_PIN_INIT();
1912 #endif
1913 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C5_EdmaDriverState);
1914 }
1915
LPI2C5_Master_EdmaUninitialize(void)1916 static int32_t LPI2C5_Master_EdmaUninitialize(void)
1917 {
1918 #ifdef RTE_I2C5_PIN_DEINIT
1919 RTE_I2C5_PIN_DEINIT();
1920 #endif
1921 return LPI2C_Master_EdmaUninitialize(&LPI2C5_EdmaDriverState);
1922 }
1923
LPI2C5_Master_EdmaPowerControl(ARM_POWER_STATE state)1924 static int32_t LPI2C5_Master_EdmaPowerControl(ARM_POWER_STATE state)
1925 {
1926 return LPI2C_Master_EdmaPowerControl(state, &LPI2C5_EdmaDriverState);
1927 }
1928
LPI2C5_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1929 static int32_t LPI2C5_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1930 {
1931 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C5_EdmaDriverState);
1932 }
1933
LPI2C5_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)1934 static int32_t LPI2C5_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
1935 {
1936 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C5_EdmaDriverState);
1937 }
1938
LPI2C5_Master_EdmaGetDataCount(void)1939 static int32_t LPI2C5_Master_EdmaGetDataCount(void)
1940 {
1941 return LPI2C_Master_EdmaGetDataCount(&LPI2C5_EdmaDriverState);
1942 }
1943
LPI2C5_Master_EdmaControl(uint32_t control,uint32_t arg)1944 static int32_t LPI2C5_Master_EdmaControl(uint32_t control, uint32_t arg)
1945 {
1946 return LPI2C_Master_EdmaControl(control, arg, &LPI2C5_EdmaDriverState);
1947 }
1948
LPI2C5_Master_EdmaGetStatus(void)1949 static ARM_I2C_STATUS LPI2C5_Master_EdmaGetStatus(void)
1950 {
1951 return LPI2C_Master_EdmaGetStatus(&LPI2C5_EdmaDriverState);
1952 }
1953
1954 #endif
1955
1956 #else
1957
1958 static cmsis_i2c_handle_t LPI2C5_Handle;
1959
1960 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
1961 ARMCC_SECTION("lpi2c5_interrupt_driver_state")
1962 static cmsis_lpi2c_interrupt_driver_state_t LPI2C5_InterruptDriverState = {
1963 #else
1964 static cmsis_lpi2c_interrupt_driver_state_t LPI2C5_InterruptDriverState = {
1965 #endif
1966 &LPI2C5_Resource,
1967 &LPI2C5_Handle,
1968 };
1969
KSDK_LPI2C5_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)1970 static void KSDK_LPI2C5_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
1971 {
1972 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C5_InterruptDriverState);
1973 }
1974
LPI2C5_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)1975 static int32_t LPI2C5_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
1976 {
1977 #ifdef RTE_I2C5_PIN_INIT
1978 RTE_I2C5_PIN_INIT();
1979 #endif
1980 return LPI2C_InterruptInitialize(cb_event, &LPI2C5_InterruptDriverState);
1981 }
1982
LPI2C5_InterruptUninitialize(void)1983 static int32_t LPI2C5_InterruptUninitialize(void)
1984 {
1985 #ifdef RTE_I2C5_PIN_DEINIT
1986 RTE_I2C5_PIN_DEINIT();
1987 #endif
1988 return LPI2C_InterruptUninitialize(&LPI2C5_InterruptDriverState);
1989 }
1990
LPI2C5_InterruptPowerControl(ARM_POWER_STATE state)1991 static int32_t LPI2C5_InterruptPowerControl(ARM_POWER_STATE state)
1992 {
1993 return LPI2C_InterruptPowerControl(state, &LPI2C5_InterruptDriverState);
1994 }
1995
LPI2C5_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)1996 static int32_t LPI2C5_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
1997 {
1998 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C5_InterruptDriverState);
1999 }
2000
LPI2C5_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2001 static int32_t LPI2C5_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2002 {
2003 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C5_InterruptDriverState);
2004 }
2005
LPI2C5_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2006 static int32_t LPI2C5_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2007 {
2008 LPI2C5_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C5_SLAVE_InterruptCallback;
2009 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C5_InterruptDriverState);
2010 }
2011
LPI2C5_Slave_InterruptReceive(uint8_t * data,uint32_t num)2012 static int32_t LPI2C5_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2013 {
2014 LPI2C5_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C5_SLAVE_InterruptCallback;
2015 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C5_InterruptDriverState);
2016 }
2017
LPI2C5_InterruptGetDataCount(void)2018 static int32_t LPI2C5_InterruptGetDataCount(void)
2019 {
2020 return LPI2C_InterruptGetDataCount(&LPI2C5_InterruptDriverState);
2021 }
2022
LPI2C5_InterruptControl(uint32_t control,uint32_t arg)2023 static int32_t LPI2C5_InterruptControl(uint32_t control, uint32_t arg)
2024 {
2025 return LPI2C_InterruptControl(control, arg, &LPI2C5_InterruptDriverState);
2026 }
2027
LPI2C5_InterruptGetStatus(void)2028 static ARM_I2C_STATUS LPI2C5_InterruptGetStatus(void)
2029 {
2030 return LPI2C_InterruptGetStatus(&LPI2C5_InterruptDriverState);
2031 }
2032
2033 #endif /* RTE_I2C5_DMA_EN */
2034
2035 ARM_DRIVER_I2C Driver_I2C5 = {LPI2Cx_GetVersion,
2036 LPI2Cx_GetCapabilities,
2037 #if defined(RTE_I2C5_DMA_EN) && RTE_I2C5_DMA_EN
2038 LPI2C5_Master_EdmaInitialize,
2039 LPI2C5_Master_EdmaUninitialize,
2040 LPI2C5_Master_EdmaPowerControl,
2041 LPI2C5_Master_EdmaTransmit,
2042 LPI2C5_Master_EdmaReceive,
2043 NULL,
2044 NULL,
2045 LPI2C5_Master_EdmaGetDataCount,
2046 LPI2C5_Master_EdmaControl,
2047 LPI2C5_Master_EdmaGetStatus
2048 #else
2049 LPI2C5_InterruptInitialize,
2050 LPI2C5_InterruptUninitialize,
2051 LPI2C5_InterruptPowerControl,
2052 LPI2C5_Master_InterruptTransmit,
2053 LPI2C5_Master_InterruptReceive,
2054 LPI2C5_Slave_InterruptTransmit,
2055 LPI2C5_Slave_InterruptReceive,
2056 LPI2C5_InterruptGetDataCount,
2057 LPI2C5_InterruptControl,
2058 LPI2C5_InterruptGetStatus
2059 #endif /* RTE_I2C5_DMA_EN */
2060 };
2061
2062 #endif /* LPI2C5 */
2063
2064 #if defined(LPI2C6) && defined(RTE_I2C6) && RTE_I2C6
2065 /* User needs to provide the implementation for LPI2C6_GetFreq/InitPins/DeinitPins
2066 in the application for enabling according instance. */
2067 extern uint32_t LPI2C6_GetFreq(void);
2068
2069 static cmsis_lpi2c_resource_t LPI2C6_Resource = {LPI2C6, LPI2C6_GetFreq};
2070
2071 #if defined(RTE_I2C6_DMA_EN) && RTE_I2C6_DMA_EN
2072
2073 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
2074 static cmsis_lpi2c_edma_resource_t LPI2C6_EdmaResource = {
2075 RTE_I2C6_DMA_TX_DMA_BASE, RTE_I2C6_DMA_TX_CH, (uint16_t)RTE_I2C6_DMA_TX_PERI_SEL,
2076 RTE_I2C6_DMA_RX_DMA_BASE, RTE_I2C6_DMA_RX_CH, (uint16_t)RTE_I2C6_DMA_RX_PERI_SEL,
2077 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
2078 RTE_I2C6_DMA_TX_DMAMUX_BASE, RTE_I2C6_DMA_RX_DMAMUX_BASE,
2079 #endif
2080 };
2081
2082 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C6_EdmaHandle);
2083 static edma_handle_t LPI2C6_EdmaTxHandle;
2084 static edma_handle_t LPI2C6_EdmaRxHandle;
2085
2086 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2087 ARMCC_SECTION("lpi2c6_edma_driver_state")
2088 static cmsis_lpi2c_edma_driver_state_t LPI2C6_EdmaDriverState = {
2089 #else
2090 static cmsis_lpi2c_edma_driver_state_t LPI2C6_EdmaDriverState = {
2091 #endif
2092 &LPI2C6_Resource, &LPI2C6_EdmaResource, &LPI2C6_EdmaHandle, &LPI2C6_EdmaTxHandle, &LPI2C6_EdmaRxHandle,
2093 };
2094
LPI2C6_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)2095 static int32_t LPI2C6_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
2096 {
2097 #ifdef RTE_I2C6_PIN_INIT
2098 RTE_I2C6_PIN_INIT();
2099 #endif
2100 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C6_EdmaDriverState);
2101 }
2102
LPI2C6_Master_EdmaUninitialize(void)2103 static int32_t LPI2C6_Master_EdmaUninitialize(void)
2104 {
2105 #ifdef RTE_I2C6_PIN_DEINIT
2106 RTE_I2C6_PIN_DEINIT();
2107 #endif
2108 return LPI2C_Master_EdmaUninitialize(&LPI2C6_EdmaDriverState);
2109 }
2110
LPI2C6_Master_EdmaPowerControl(ARM_POWER_STATE state)2111 static int32_t LPI2C6_Master_EdmaPowerControl(ARM_POWER_STATE state)
2112 {
2113 return LPI2C_Master_EdmaPowerControl(state, &LPI2C6_EdmaDriverState);
2114 }
2115
LPI2C6_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2116 static int32_t LPI2C6_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2117 {
2118 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C6_EdmaDriverState);
2119 }
2120
LPI2C6_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2121 static int32_t LPI2C6_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2122 {
2123 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C6_EdmaDriverState);
2124 }
2125
LPI2C6_Master_EdmaGetDataCount(void)2126 static int32_t LPI2C6_Master_EdmaGetDataCount(void)
2127 {
2128 return LPI2C_Master_EdmaGetDataCount(&LPI2C6_EdmaDriverState);
2129 }
2130
LPI2C6_Master_EdmaControl(uint32_t control,uint32_t arg)2131 static int32_t LPI2C6_Master_EdmaControl(uint32_t control, uint32_t arg)
2132 {
2133 return LPI2C_Master_EdmaControl(control, arg, &LPI2C6_EdmaDriverState);
2134 }
2135
LPI2C6_Master_EdmaGetStatus(void)2136 static ARM_I2C_STATUS LPI2C6_Master_EdmaGetStatus(void)
2137 {
2138 return LPI2C_Master_EdmaGetStatus(&LPI2C6_EdmaDriverState);
2139 }
2140
2141 #endif
2142
2143 #else
2144
2145 static cmsis_i2c_handle_t LPI2C6_Handle;
2146
2147 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2148 ARMCC_SECTION("lpi2c6_interrupt_driver_state")
2149 static cmsis_lpi2c_interrupt_driver_state_t LPI2C6_InterruptDriverState = {
2150 #else
2151 static cmsis_lpi2c_interrupt_driver_state_t LPI2C6_InterruptDriverState = {
2152 #endif
2153 &LPI2C6_Resource,
2154 &LPI2C6_Handle,
2155 };
2156
KSDK_LPI2C6_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)2157 static void KSDK_LPI2C6_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
2158 {
2159 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C6_InterruptDriverState);
2160 }
2161
LPI2C6_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)2162 static int32_t LPI2C6_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
2163 {
2164 #ifdef RTE_I2C6_PIN_INIT
2165 RTE_I2C6_PIN_INIT();
2166 #endif
2167 return LPI2C_InterruptInitialize(cb_event, &LPI2C6_InterruptDriverState);
2168 }
2169
LPI2C6_InterruptUninitialize(void)2170 static int32_t LPI2C6_InterruptUninitialize(void)
2171 {
2172 #ifdef RTE_I2C6_PIN_DEINIT
2173 RTE_I2C6_PIN_DEINIT();
2174 #endif
2175 return LPI2C_InterruptUninitialize(&LPI2C6_InterruptDriverState);
2176 }
2177
LPI2C6_InterruptPowerControl(ARM_POWER_STATE state)2178 static int32_t LPI2C6_InterruptPowerControl(ARM_POWER_STATE state)
2179 {
2180 return LPI2C_InterruptPowerControl(state, &LPI2C6_InterruptDriverState);
2181 }
2182
LPI2C6_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2183 static int32_t LPI2C6_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2184 {
2185 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C6_InterruptDriverState);
2186 }
2187
LPI2C6_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2188 static int32_t LPI2C6_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2189 {
2190 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C6_InterruptDriverState);
2191 }
2192
LPI2C6_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2193 static int32_t LPI2C6_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2194 {
2195 LPI2C6_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C6_SLAVE_InterruptCallback;
2196 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C6_InterruptDriverState);
2197 }
2198
LPI2C6_Slave_InterruptReceive(uint8_t * data,uint32_t num)2199 static int32_t LPI2C6_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2200 {
2201 LPI2C6_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C6_SLAVE_InterruptCallback;
2202 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C6_InterruptDriverState);
2203 }
2204
LPI2C6_InterruptGetDataCount(void)2205 static int32_t LPI2C6_InterruptGetDataCount(void)
2206 {
2207 return LPI2C_InterruptGetDataCount(&LPI2C6_InterruptDriverState);
2208 }
2209
LPI2C6_InterruptControl(uint32_t control,uint32_t arg)2210 static int32_t LPI2C6_InterruptControl(uint32_t control, uint32_t arg)
2211 {
2212 return LPI2C_InterruptControl(control, arg, &LPI2C6_InterruptDriverState);
2213 }
2214
LPI2C6_InterruptGetStatus(void)2215 static ARM_I2C_STATUS LPI2C6_InterruptGetStatus(void)
2216 {
2217 return LPI2C_InterruptGetStatus(&LPI2C6_InterruptDriverState);
2218 }
2219
2220 #endif /* RTE_I2C6_DMA_EN */
2221
2222 ARM_DRIVER_I2C Driver_I2C6 = {LPI2Cx_GetVersion,
2223 LPI2Cx_GetCapabilities,
2224 #if defined(RTE_I2C6_DMA_EN) && RTE_I2C6_DMA_EN
2225 LPI2C6_Master_EdmaInitialize,
2226 LPI2C6_Master_EdmaUninitialize,
2227 LPI2C6_Master_EdmaPowerControl,
2228 LPI2C6_Master_EdmaTransmit,
2229 LPI2C6_Master_EdmaReceive,
2230 NULL,
2231 NULL,
2232 LPI2C6_Master_EdmaGetDataCount,
2233 LPI2C6_Master_EdmaControl,
2234 LPI2C6_Master_EdmaGetStatus
2235 #else
2236 LPI2C6_InterruptInitialize,
2237 LPI2C6_InterruptUninitialize,
2238 LPI2C6_InterruptPowerControl,
2239 LPI2C6_Master_InterruptTransmit,
2240 LPI2C6_Master_InterruptReceive,
2241 LPI2C6_Slave_InterruptTransmit,
2242 LPI2C6_Slave_InterruptReceive,
2243 LPI2C6_InterruptGetDataCount,
2244 LPI2C6_InterruptControl,
2245 LPI2C6_InterruptGetStatus
2246 #endif /* RTE_I2C6_DMA_EN */
2247 };
2248
2249 #endif /* LPI2C6 */
2250
2251 #if defined(LPI2C7) && defined(RTE_I2C7) && RTE_I2C7
2252 /* User needs to provide the implementation for LPI2C7_GetFreq/InitPins/DeinitPins
2253 in the application for enabling according instance. */
2254 extern uint32_t LPI2C7_GetFreq(void);
2255
2256 static cmsis_lpi2c_resource_t LPI2C7_Resource = {LPI2C7, LPI2C7_GetFreq};
2257
2258 #if defined(RTE_I2C7_DMA_EN) && RTE_I2C7_DMA_EN
2259
2260 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
2261 static cmsis_lpi2c_edma_resource_t LPI2C7_EdmaResource = {
2262 RTE_I2C7_DMA_TX_DMA_BASE, RTE_I2C7_DMA_TX_CH, (uint16_t)RTE_I2C7_DMA_TX_PERI_SEL,
2263 RTE_I2C7_DMA_RX_DMA_BASE, RTE_I2C7_DMA_RX_CH, (uint16_t)RTE_I2C7_DMA_RX_PERI_SEL,
2264 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
2265 RTE_I2C7_DMA_TX_DMAMUX_BASE, RTE_I2C7_DMA_RX_DMAMUX_BASE,
2266 #endif
2267 };
2268
2269 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C7_EdmaHandle);
2270 static edma_handle_t LPI2C7_EdmaTxHandle;
2271 static edma_handle_t LPI2C7_EdmaRxHandle;
2272
2273 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2274 ARMCC_SECTION("lpi2c7_edma_driver_state")
2275 static cmsis_lpi2c_edma_driver_state_t LPI2C7_EdmaDriverState = {
2276 #else
2277 static cmsis_lpi2c_edma_driver_state_t LPI2C7_EdmaDriverState = {
2278 #endif
2279 &LPI2C7_Resource, &LPI2C7_EdmaResource, &LPI2C7_EdmaHandle, &LPI2C7_EdmaTxHandle, &LPI2C7_EdmaRxHandle,
2280 };
2281
LPI2C7_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)2282 static int32_t LPI2C7_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
2283 {
2284 #ifdef RTE_I2C7_PIN_INIT
2285 RTE_I2C7_PIN_INIT();
2286 #endif
2287 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C7_EdmaDriverState);
2288 }
2289
LPI2C7_Master_EdmaUninitialize(void)2290 static int32_t LPI2C7_Master_EdmaUninitialize(void)
2291 {
2292 #ifdef RTE_I2C7_PIN_DEINIT
2293 RTE_I2C7_PIN_DEINIT();
2294 #endif
2295 return LPI2C_Master_EdmaUninitialize(&LPI2C7_EdmaDriverState);
2296 }
2297
LPI2C7_Master_EdmaPowerControl(ARM_POWER_STATE state)2298 static int32_t LPI2C7_Master_EdmaPowerControl(ARM_POWER_STATE state)
2299 {
2300 return LPI2C_Master_EdmaPowerControl(state, &LPI2C7_EdmaDriverState);
2301 }
2302
LPI2C7_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2303 static int32_t LPI2C7_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2304 {
2305 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C7_EdmaDriverState);
2306 }
2307
LPI2C7_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2308 static int32_t LPI2C7_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2309 {
2310 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C7_EdmaDriverState);
2311 }
2312
LPI2C7_Master_EdmaGetDataCount(void)2313 static int32_t LPI2C7_Master_EdmaGetDataCount(void)
2314 {
2315 return LPI2C_Master_EdmaGetDataCount(&LPI2C7_EdmaDriverState);
2316 }
2317
LPI2C7_Master_EdmaControl(uint32_t control,uint32_t arg)2318 static int32_t LPI2C7_Master_EdmaControl(uint32_t control, uint32_t arg)
2319 {
2320 return LPI2C_Master_EdmaControl(control, arg, &LPI2C7_EdmaDriverState);
2321 }
2322
LPI2C7_Master_EdmaGetStatus(void)2323 static ARM_I2C_STATUS LPI2C7_Master_EdmaGetStatus(void)
2324 {
2325 return LPI2C_Master_EdmaGetStatus(&LPI2C7_EdmaDriverState);
2326 }
2327
2328 #endif
2329
2330 #else
2331
2332 static cmsis_i2c_handle_t LPI2C7_Handle;
2333
2334 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2335 ARMCC_SECTION("lpi2c7_interrupt_driver_state")
2336 static cmsis_lpi2c_interrupt_driver_state_t LPI2C7_InterruptDriverState = {
2337 #else
2338 static cmsis_lpi2c_interrupt_driver_state_t LPI2C7_InterruptDriverState = {
2339 #endif
2340 &LPI2C7_Resource,
2341 &LPI2C7_Handle,
2342 };
2343
KSDK_LPI2C7_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)2344 static void KSDK_LPI2C7_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
2345 {
2346 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C7_InterruptDriverState);
2347 }
2348
LPI2C7_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)2349 static int32_t LPI2C7_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
2350 {
2351 #ifdef RTE_I2C7_PIN_INIT
2352 RTE_I2C7_PIN_INIT();
2353 #endif
2354 return LPI2C_InterruptInitialize(cb_event, &LPI2C7_InterruptDriverState);
2355 }
2356
LPI2C7_InterruptUninitialize(void)2357 static int32_t LPI2C7_InterruptUninitialize(void)
2358 {
2359 #ifdef RTE_I2C7_PIN_DEINIT
2360 RTE_I2C7_PIN_DEINIT();
2361 #endif
2362 return LPI2C_InterruptUninitialize(&LPI2C7_InterruptDriverState);
2363 }
2364
LPI2C7_InterruptPowerControl(ARM_POWER_STATE state)2365 static int32_t LPI2C7_InterruptPowerControl(ARM_POWER_STATE state)
2366 {
2367 return LPI2C_InterruptPowerControl(state, &LPI2C7_InterruptDriverState);
2368 }
2369
LPI2C7_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2370 static int32_t LPI2C7_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2371 {
2372 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C7_InterruptDriverState);
2373 }
2374
LPI2C7_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2375 static int32_t LPI2C7_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2376 {
2377 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C7_InterruptDriverState);
2378 }
2379
LPI2C7_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2380 static int32_t LPI2C7_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2381 {
2382 LPI2C7_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C7_SLAVE_InterruptCallback;
2383 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C7_InterruptDriverState);
2384 }
2385
LPI2C7_Slave_InterruptReceive(uint8_t * data,uint32_t num)2386 static int32_t LPI2C7_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2387 {
2388 LPI2C7_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C7_SLAVE_InterruptCallback;
2389 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C7_InterruptDriverState);
2390 }
2391
LPI2C7_InterruptGetDataCount(void)2392 static int32_t LPI2C7_InterruptGetDataCount(void)
2393 {
2394 return LPI2C_InterruptGetDataCount(&LPI2C7_InterruptDriverState);
2395 }
2396
LPI2C7_InterruptControl(uint32_t control,uint32_t arg)2397 static int32_t LPI2C7_InterruptControl(uint32_t control, uint32_t arg)
2398 {
2399 return LPI2C_InterruptControl(control, arg, &LPI2C7_InterruptDriverState);
2400 }
2401
LPI2C7_InterruptGetStatus(void)2402 static ARM_I2C_STATUS LPI2C7_InterruptGetStatus(void)
2403 {
2404 return LPI2C_InterruptGetStatus(&LPI2C7_InterruptDriverState);
2405 }
2406
2407 #endif /* RTE_I2C7_DMA_EN */
2408
2409 ARM_DRIVER_I2C Driver_I2C7 = {LPI2Cx_GetVersion,
2410 LPI2Cx_GetCapabilities,
2411 #if defined(RTE_I2C7_DMA_EN) && RTE_I2C7_DMA_EN
2412 LPI2C7_Master_EdmaInitialize,
2413 LPI2C7_Master_EdmaUninitialize,
2414 LPI2C7_Master_EdmaPowerControl,
2415 LPI2C7_Master_EdmaTransmit,
2416 LPI2C7_Master_EdmaReceive,
2417 NULL,
2418 NULL,
2419 LPI2C7_Master_EdmaGetDataCount,
2420 LPI2C7_Master_EdmaControl,
2421 LPI2C7_Master_EdmaGetStatus
2422 #else
2423 LPI2C7_InterruptInitialize,
2424 LPI2C7_InterruptUninitialize,
2425 LPI2C7_InterruptPowerControl,
2426 LPI2C7_Master_InterruptTransmit,
2427 LPI2C7_Master_InterruptReceive,
2428 LPI2C7_Slave_InterruptTransmit,
2429 LPI2C7_Slave_InterruptReceive,
2430 LPI2C7_InterruptGetDataCount,
2431 LPI2C7_InterruptControl,
2432 LPI2C7_InterruptGetStatus
2433 #endif /* RTE_I2C7_DMA_EN */
2434 };
2435
2436 #endif /* LPI2C7 */
2437
2438 #if defined(LPI2C8) && defined(RTE_I2C8) && RTE_I2C8
2439 /* User needs to provide the implementation for LPI2C8_GetFreq/InitPins/DeinitPins
2440 in the application for enabling according instance. */
2441 extern uint32_t LPI2C8_GetFreq(void);
2442
2443 static cmsis_lpi2c_resource_t LPI2C8_Resource = {LPI2C8, LPI2C8_GetFreq};
2444
2445 #if defined(RTE_I2C8_DMA_EN) && RTE_I2C8_DMA_EN
2446
2447 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
2448 static cmsis_lpi2c_edma_resource_t LPI2C8_EdmaResource = {
2449 RTE_I2C8_DMA_TX_DMA_BASE, RTE_I2C8_DMA_TX_CH, (uint16_t)RTE_I2C8_DMA_TX_PERI_SEL,
2450 RTE_I2C8_DMA_RX_DMA_BASE, RTE_I2C8_DMA_RX_CH, (uint16_t)RTE_I2C8_DMA_RX_PERI_SEL,
2451 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
2452 RTE_I2C8_DMA_TX_DMAMUX_BASE, RTE_I2C8_DMA_RX_DMAMUX_BASE,
2453 #endif
2454 };
2455
2456 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C8_EdmaHandle);
2457 static edma_handle_t LPI2C8_EdmaTxHandle;
2458 static edma_handle_t LPI2C8_EdmaRxHandle;
2459
2460 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2461 ARMCC_SECTION("lpi2c8_edma_driver_state")
2462 static cmsis_lpi2c_edma_driver_state_t LPI2C8_EdmaDriverState = {
2463 #else
2464 static cmsis_lpi2c_edma_driver_state_t LPI2C8_EdmaDriverState = {
2465 #endif
2466 &LPI2C8_Resource, &LPI2C8_EdmaResource, &LPI2C8_EdmaHandle, &LPI2C8_EdmaTxHandle, &LPI2C8_EdmaRxHandle,
2467 };
2468
LPI2C8_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)2469 static int32_t LPI2C8_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
2470 {
2471 #ifdef RTE_I2C8_PIN_INIT
2472 RTE_I2C8_PIN_INIT();
2473 #endif
2474 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C8_EdmaDriverState);
2475 }
2476
LPI2C8_Master_EdmaUninitialize(void)2477 static int32_t LPI2C8_Master_EdmaUninitialize(void)
2478 {
2479 #ifdef RTE_I2C8_PIN_DEINIT
2480 RTE_I2C8_PIN_DEINIT();
2481 #endif
2482 return LPI2C_Master_EdmaUninitialize(&LPI2C8_EdmaDriverState);
2483 }
2484
LPI2C8_Master_EdmaPowerControl(ARM_POWER_STATE state)2485 static int32_t LPI2C8_Master_EdmaPowerControl(ARM_POWER_STATE state)
2486 {
2487 return LPI2C_Master_EdmaPowerControl(state, &LPI2C8_EdmaDriverState);
2488 }
2489
LPI2C8_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2490 static int32_t LPI2C8_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2491 {
2492 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C8_EdmaDriverState);
2493 }
2494
LPI2C8_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2495 static int32_t LPI2C8_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2496 {
2497 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C8_EdmaDriverState);
2498 }
2499
LPI2C8_Master_EdmaGetDataCount(void)2500 static int32_t LPI2C8_Master_EdmaGetDataCount(void)
2501 {
2502 return LPI2C_Master_EdmaGetDataCount(&LPI2C8_EdmaDriverState);
2503 }
2504
LPI2C8_Master_EdmaControl(uint32_t control,uint32_t arg)2505 static int32_t LPI2C8_Master_EdmaControl(uint32_t control, uint32_t arg)
2506 {
2507 return LPI2C_Master_EdmaControl(control, arg, &LPI2C8_EdmaDriverState);
2508 }
2509
LPI2C8_Master_EdmaGetStatus(void)2510 static ARM_I2C_STATUS LPI2C8_Master_EdmaGetStatus(void)
2511 {
2512 return LPI2C_Master_EdmaGetStatus(&LPI2C8_EdmaDriverState);
2513 }
2514
2515 #endif
2516
2517 #else
2518
2519 static cmsis_i2c_handle_t LPI2C8_Handle;
2520
2521 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2522 ARMCC_SECTION("lpi2c8_interrupt_driver_state")
2523 static cmsis_lpi2c_interrupt_driver_state_t LPI2C8_InterruptDriverState = {
2524 #else
2525 static cmsis_lpi2c_interrupt_driver_state_t LPI2C8_InterruptDriverState = {
2526 #endif
2527 &LPI2C8_Resource,
2528 &LPI2C8_Handle,
2529 };
2530
KSDK_LPI2C8_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)2531 static void KSDK_LPI2C8_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
2532 {
2533 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C8_InterruptDriverState);
2534 }
2535
LPI2C8_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)2536 static int32_t LPI2C8_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
2537 {
2538 #ifdef RTE_I2C8_PIN_INIT
2539 RTE_I2C8_PIN_INIT();
2540 #endif
2541 return LPI2C_InterruptInitialize(cb_event, &LPI2C8_InterruptDriverState);
2542 }
2543
LPI2C8_InterruptUninitialize(void)2544 static int32_t LPI2C8_InterruptUninitialize(void)
2545 {
2546 #ifdef RTE_I2C8_PIN_DEINIT
2547 RTE_I2C8_PIN_DEINIT();
2548 #endif
2549 return LPI2C_InterruptUninitialize(&LPI2C8_InterruptDriverState);
2550 }
2551
LPI2C8_InterruptPowerControl(ARM_POWER_STATE state)2552 static int32_t LPI2C8_InterruptPowerControl(ARM_POWER_STATE state)
2553 {
2554 return LPI2C_InterruptPowerControl(state, &LPI2C8_InterruptDriverState);
2555 }
2556
LPI2C8_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2557 static int32_t LPI2C8_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2558 {
2559 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C8_InterruptDriverState);
2560 }
2561
LPI2C8_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2562 static int32_t LPI2C8_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2563 {
2564 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C8_InterruptDriverState);
2565 }
2566
LPI2C8_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2567 static int32_t LPI2C8_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2568 {
2569 LPI2C8_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C8_SLAVE_InterruptCallback;
2570 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C8_InterruptDriverState);
2571 }
2572
LPI2C8_Slave_InterruptReceive(uint8_t * data,uint32_t num)2573 static int32_t LPI2C8_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2574 {
2575 LPI2C8_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C8_SLAVE_InterruptCallback;
2576 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C8_InterruptDriverState);
2577 }
2578
LPI2C8_InterruptGetDataCount(void)2579 static int32_t LPI2C8_InterruptGetDataCount(void)
2580 {
2581 return LPI2C_InterruptGetDataCount(&LPI2C8_InterruptDriverState);
2582 }
2583
LPI2C8_InterruptControl(uint32_t control,uint32_t arg)2584 static int32_t LPI2C8_InterruptControl(uint32_t control, uint32_t arg)
2585 {
2586 return LPI2C_InterruptControl(control, arg, &LPI2C8_InterruptDriverState);
2587 }
2588
LPI2C8_InterruptGetStatus(void)2589 static ARM_I2C_STATUS LPI2C8_InterruptGetStatus(void)
2590 {
2591 return LPI2C_InterruptGetStatus(&LPI2C8_InterruptDriverState);
2592 }
2593
2594 #endif /* RTE_I2C8_DMA_EN */
2595
2596 ARM_DRIVER_I2C Driver_I2C8 = {LPI2Cx_GetVersion,
2597 LPI2Cx_GetCapabilities,
2598 #if defined(RTE_I2C8_DMA_EN) && RTE_I2C8_DMA_EN
2599 LPI2C8_Master_EdmaInitialize,
2600 LPI2C8_Master_EdmaUninitialize,
2601 LPI2C8_Master_EdmaPowerControl,
2602 LPI2C8_Master_EdmaTransmit,
2603 LPI2C8_Master_EdmaReceive,
2604 NULL,
2605 NULL,
2606 LPI2C8_Master_EdmaGetDataCount,
2607 LPI2C8_Master_EdmaControl,
2608 LPI2C8_Master_EdmaGetStatus
2609 #else
2610 LPI2C8_InterruptInitialize,
2611 LPI2C8_InterruptUninitialize,
2612 LPI2C8_InterruptPowerControl,
2613 LPI2C8_Master_InterruptTransmit,
2614 LPI2C8_Master_InterruptReceive,
2615 LPI2C8_Slave_InterruptTransmit,
2616 LPI2C8_Slave_InterruptReceive,
2617 LPI2C8_InterruptGetDataCount,
2618 LPI2C8_InterruptControl,
2619 LPI2C8_InterruptGetStatus
2620 #endif /* RTE_I2C8_DMA_EN */
2621 };
2622
2623 #endif /* LPI2C8 */
2624
2625 #if defined(LPI2C9) && defined(RTE_I2C9) && RTE_I2C9
2626 /* User needs to provide the implementation for LPI2C9_GetFreq/InitPins/DeinitPins
2627 in the application for enabling according instance. */
2628 extern uint32_t LPI2C9_GetFreq(void);
2629
2630 static cmsis_lpi2c_resource_t LPI2C9_Resource = {LPI2C9, LPI2C9_GetFreq};
2631
2632 #if defined(RTE_I2C9_DMA_EN) && RTE_I2C9_DMA_EN
2633
2634 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
2635 static cmsis_lpi2c_edma_resource_t LPI2C9_EdmaResource = {
2636 RTE_I2C9_DMA_TX_DMA_BASE, RTE_I2C9_DMA_TX_CH, (uint16_t)RTE_I2C9_DMA_TX_PERI_SEL,
2637 RTE_I2C9_DMA_RX_DMA_BASE, RTE_I2C9_DMA_RX_CH, (uint16_t)RTE_I2C9_DMA_RX_PERI_SEL,
2638 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
2639 RTE_I2C9_DMA_TX_DMAMUX_BASE, RTE_I2C9_DMA_RX_DMAMUX_BASE,
2640 #endif
2641 };
2642
2643 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C9_EdmaHandle);
2644 static edma_handle_t LPI2C9_EdmaTxHandle;
2645 static edma_handle_t LPI2C9_EdmaRxHandle;
2646
2647 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2648 ARMCC_SECTION("lpi2c9_edma_driver_state")
2649 static cmsis_lpi2c_edma_driver_state_t LPI2C9_EdmaDriverState = {
2650 #else
2651 static cmsis_lpi2c_edma_driver_state_t LPI2C9_EdmaDriverState = {
2652 #endif
2653 &LPI2C9_Resource, &LPI2C9_EdmaResource, &LPI2C9_EdmaHandle, &LPI2C9_EdmaTxHandle, &LPI2C9_EdmaRxHandle,
2654 };
2655
LPI2C9_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)2656 static int32_t LPI2C9_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
2657 {
2658 #ifdef RTE_I2C9_PIN_INIT
2659 RTE_I2C9_PIN_INIT();
2660 #endif
2661 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C9_EdmaDriverState);
2662 }
2663
LPI2C9_Master_EdmaUninitialize(void)2664 static int32_t LPI2C9_Master_EdmaUninitialize(void)
2665 {
2666 #ifdef RTE_I2C9_PIN_DEINIT
2667 RTE_I2C9_PIN_DEINIT();
2668 #endif
2669 return LPI2C_Master_EdmaUninitialize(&LPI2C9_EdmaDriverState);
2670 }
2671
LPI2C9_Master_EdmaPowerControl(ARM_POWER_STATE state)2672 static int32_t LPI2C9_Master_EdmaPowerControl(ARM_POWER_STATE state)
2673 {
2674 return LPI2C_Master_EdmaPowerControl(state, &LPI2C9_EdmaDriverState);
2675 }
2676
LPI2C9_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2677 static int32_t LPI2C9_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2678 {
2679 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C9_EdmaDriverState);
2680 }
2681
LPI2C9_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2682 static int32_t LPI2C9_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2683 {
2684 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C9_EdmaDriverState);
2685 }
2686
LPI2C9_Master_EdmaGetDataCount(void)2687 static int32_t LPI2C9_Master_EdmaGetDataCount(void)
2688 {
2689 return LPI2C_Master_EdmaGetDataCount(&LPI2C9_EdmaDriverState);
2690 }
2691
LPI2C9_Master_EdmaControl(uint32_t control,uint32_t arg)2692 static int32_t LPI2C9_Master_EdmaControl(uint32_t control, uint32_t arg)
2693 {
2694 return LPI2C_Master_EdmaControl(control, arg, &LPI2C9_EdmaDriverState);
2695 }
2696
LPI2C9_Master_EdmaGetStatus(void)2697 static ARM_I2C_STATUS LPI2C9_Master_EdmaGetStatus(void)
2698 {
2699 return LPI2C_Master_EdmaGetStatus(&LPI2C9_EdmaDriverState);
2700 }
2701
2702 #endif
2703
2704 #else
2705
2706 static cmsis_i2c_handle_t LPI2C9_Handle;
2707
2708 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2709 ARMCC_SECTION("lpi2c9_interrupt_driver_state")
2710 static cmsis_lpi2c_interrupt_driver_state_t LPI2C9_InterruptDriverState = {
2711 #else
2712 static cmsis_lpi2c_interrupt_driver_state_t LPI2C9_InterruptDriverState = {
2713 #endif
2714 &LPI2C9_Resource,
2715 &LPI2C9_Handle,
2716 };
2717
KSDK_LPI2C9_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)2718 static void KSDK_LPI2C9_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
2719 {
2720 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C9_InterruptDriverState);
2721 }
2722
LPI2C9_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)2723 static int32_t LPI2C9_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
2724 {
2725 #ifdef RTE_I2C9_PIN_INIT
2726 RTE_I2C9_PIN_INIT();
2727 #endif
2728 return LPI2C_InterruptInitialize(cb_event, &LPI2C9_InterruptDriverState);
2729 }
2730
LPI2C9_InterruptUninitialize(void)2731 static int32_t LPI2C9_InterruptUninitialize(void)
2732 {
2733 #ifdef RTE_I2C9_PIN_DEINIT
2734 RTE_I2C9_PIN_DEINIT();
2735 #endif
2736 return LPI2C_InterruptUninitialize(&LPI2C9_InterruptDriverState);
2737 }
2738
LPI2C9_InterruptPowerControl(ARM_POWER_STATE state)2739 static int32_t LPI2C9_InterruptPowerControl(ARM_POWER_STATE state)
2740 {
2741 return LPI2C_InterruptPowerControl(state, &LPI2C9_InterruptDriverState);
2742 }
2743
LPI2C9_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2744 static int32_t LPI2C9_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2745 {
2746 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C9_InterruptDriverState);
2747 }
2748
LPI2C9_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2749 static int32_t LPI2C9_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2750 {
2751 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C9_InterruptDriverState);
2752 }
2753
LPI2C9_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2754 static int32_t LPI2C9_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2755 {
2756 LPI2C9_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C9_SLAVE_InterruptCallback;
2757 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C9_InterruptDriverState);
2758 }
2759
LPI2C9_Slave_InterruptReceive(uint8_t * data,uint32_t num)2760 static int32_t LPI2C9_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2761 {
2762 LPI2C9_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C9_SLAVE_InterruptCallback;
2763 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C9_InterruptDriverState);
2764 }
2765
LPI2C9_InterruptGetDataCount(void)2766 static int32_t LPI2C9_InterruptGetDataCount(void)
2767 {
2768 return LPI2C_InterruptGetDataCount(&LPI2C9_InterruptDriverState);
2769 }
2770
LPI2C9_InterruptControl(uint32_t control,uint32_t arg)2771 static int32_t LPI2C9_InterruptControl(uint32_t control, uint32_t arg)
2772 {
2773 return LPI2C_InterruptControl(control, arg, &LPI2C9_InterruptDriverState);
2774 }
2775
LPI2C9_InterruptGetStatus(void)2776 static ARM_I2C_STATUS LPI2C9_InterruptGetStatus(void)
2777 {
2778 return LPI2C_InterruptGetStatus(&LPI2C9_InterruptDriverState);
2779 }
2780
2781 #endif /* RTE_I2C9_DMA_EN */
2782
2783 ARM_DRIVER_I2C Driver_I2C9 = {LPI2Cx_GetVersion,
2784 LPI2Cx_GetCapabilities,
2785 #if defined(RTE_I2C9_DMA_EN) && RTE_I2C9_DMA_EN
2786 LPI2C9_Master_EdmaInitialize,
2787 LPI2C9_Master_EdmaUninitialize,
2788 LPI2C9_Master_EdmaPowerControl,
2789 LPI2C9_Master_EdmaTransmit,
2790 LPI2C9_Master_EdmaReceive,
2791 NULL,
2792 NULL,
2793 LPI2C9_Master_EdmaGetDataCount,
2794 LPI2C9_Master_EdmaControl,
2795 LPI2C9_Master_EdmaGetStatus
2796 #else
2797 LPI2C9_InterruptInitialize,
2798 LPI2C9_InterruptUninitialize,
2799 LPI2C9_InterruptPowerControl,
2800 LPI2C9_Master_InterruptTransmit,
2801 LPI2C9_Master_InterruptReceive,
2802 LPI2C9_Slave_InterruptTransmit,
2803 LPI2C9_Slave_InterruptReceive,
2804 LPI2C9_InterruptGetDataCount,
2805 LPI2C9_InterruptControl,
2806 LPI2C9_InterruptGetStatus
2807 #endif /* RTE_I2C9_DMA_EN */
2808 };
2809
2810 #endif /* LPI2C9 */
2811
2812 #if defined(LPI2C10) && defined(RTE_I2C10) && RTE_I2C10
2813 /* User needs to provide the implementation for LPI2C10_GetFreq/InitPins/DeinitPins
2814 in the application for enabling according instance. */
2815 extern uint32_t LPI2C10_GetFreq(void);
2816
2817 static cmsis_lpi2c_resource_t LPI2C10_Resource = {LPI2C10, LPI2C10_GetFreq};
2818
2819 #if defined(RTE_I2C10_DMA_EN) && RTE_I2C10_DMA_EN
2820
2821 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
2822 static cmsis_lpi2c_edma_resource_t LPI2C10_EdmaResource = {
2823 RTE_I2C10_DMA_TX_DMA_BASE, RTE_I2C10_DMA_TX_CH, (uint16_t)RTE_I2C10_DMA_TX_PERI_SEL,
2824 RTE_I2C10_DMA_RX_DMA_BASE, RTE_I2C10_DMA_RX_CH, (uint16_t)RTE_I2C10_DMA_RX_PERI_SEL,
2825 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
2826 RTE_I2C10_DMA_TX_DMAMUX_BASE, RTE_I2C10_DMA_RX_DMAMUX_BASE,
2827 #endif
2828 };
2829
2830 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C10_EdmaHandle);
2831 static edma_handle_t LPI2C10_EdmaTxHandle;
2832 static edma_handle_t LPI2C10_EdmaRxHandle;
2833
2834 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2835 ARMCC_SECTION("lpi2c10_edma_driver_state")
2836 static cmsis_lpi2c_edma_driver_state_t LPI2C10_EdmaDriverState = {
2837 #else
2838 static cmsis_lpi2c_edma_driver_state_t LPI2C10_EdmaDriverState = {
2839 #endif
2840 &LPI2C10_Resource, &LPI2C10_EdmaResource, &LPI2C10_EdmaHandle, &LPI2C10_EdmaTxHandle, &LPI2C10_EdmaRxHandle,
2841 };
2842
LPI2C10_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)2843 static int32_t LPI2C10_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
2844 {
2845 #ifdef RTE_I2C10_PIN_INIT
2846 RTE_I2C10_PIN_INIT();
2847 #endif
2848 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C10_EdmaDriverState);
2849 }
2850
LPI2C10_Master_EdmaUninitialize(void)2851 static int32_t LPI2C10_Master_EdmaUninitialize(void)
2852 {
2853 #ifdef RTE_I2C10_PIN_DEINIT
2854 RTE_I2C10_PIN_DEINIT();
2855 #endif
2856 return LPI2C_Master_EdmaUninitialize(&LPI2C10_EdmaDriverState);
2857 }
2858
LPI2C10_Master_EdmaPowerControl(ARM_POWER_STATE state)2859 static int32_t LPI2C10_Master_EdmaPowerControl(ARM_POWER_STATE state)
2860 {
2861 return LPI2C_Master_EdmaPowerControl(state, &LPI2C10_EdmaDriverState);
2862 }
2863
LPI2C10_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2864 static int32_t LPI2C10_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2865 {
2866 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C10_EdmaDriverState);
2867 }
2868
LPI2C10_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2869 static int32_t LPI2C10_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2870 {
2871 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C10_EdmaDriverState);
2872 }
2873
LPI2C10_Master_EdmaGetDataCount(void)2874 static int32_t LPI2C10_Master_EdmaGetDataCount(void)
2875 {
2876 return LPI2C_Master_EdmaGetDataCount(&LPI2C10_EdmaDriverState);
2877 }
2878
LPI2C10_Master_EdmaControl(uint32_t control,uint32_t arg)2879 static int32_t LPI2C10_Master_EdmaControl(uint32_t control, uint32_t arg)
2880 {
2881 return LPI2C_Master_EdmaControl(control, arg, &LPI2C10_EdmaDriverState);
2882 }
2883
LPI2C10_Master_EdmaGetStatus(void)2884 static ARM_I2C_STATUS LPI2C10_Master_EdmaGetStatus(void)
2885 {
2886 return LPI2C_Master_EdmaGetStatus(&LPI2C10_EdmaDriverState);
2887 }
2888
2889 #endif
2890
2891 #else
2892
2893 static cmsis_i2c_handle_t LPI2C10_Handle;
2894
2895 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
2896 ARMCC_SECTION("lpi2c10_interrupt_driver_state")
2897 static cmsis_lpi2c_interrupt_driver_state_t LPI2C10_InterruptDriverState = {
2898 #else
2899 static cmsis_lpi2c_interrupt_driver_state_t LPI2C10_InterruptDriverState = {
2900 #endif
2901 &LPI2C10_Resource,
2902 &LPI2C10_Handle,
2903 };
2904
KSDK_LPI2C10_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)2905 static void KSDK_LPI2C10_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
2906 {
2907 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C10_InterruptDriverState);
2908 }
2909
LPI2C10_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)2910 static int32_t LPI2C10_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
2911 {
2912 #ifdef RTE_I2C10_PIN_INIT
2913 RTE_I2C10_PIN_INIT();
2914 #endif
2915 return LPI2C_InterruptInitialize(cb_event, &LPI2C10_InterruptDriverState);
2916 }
2917
LPI2C10_InterruptUninitialize(void)2918 static int32_t LPI2C10_InterruptUninitialize(void)
2919 {
2920 #ifdef RTE_I2C10_PIN_DEINIT
2921 RTE_I2C10_PIN_DEINIT();
2922 #endif
2923 return LPI2C_InterruptUninitialize(&LPI2C10_InterruptDriverState);
2924 }
2925
LPI2C10_InterruptPowerControl(ARM_POWER_STATE state)2926 static int32_t LPI2C10_InterruptPowerControl(ARM_POWER_STATE state)
2927 {
2928 return LPI2C_InterruptPowerControl(state, &LPI2C10_InterruptDriverState);
2929 }
2930
LPI2C10_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)2931 static int32_t LPI2C10_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
2932 {
2933 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C10_InterruptDriverState);
2934 }
2935
LPI2C10_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)2936 static int32_t LPI2C10_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
2937 {
2938 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C10_InterruptDriverState);
2939 }
2940
LPI2C10_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)2941 static int32_t LPI2C10_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
2942 {
2943 LPI2C10_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C10_SLAVE_InterruptCallback;
2944 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C10_InterruptDriverState);
2945 }
2946
LPI2C10_Slave_InterruptReceive(uint8_t * data,uint32_t num)2947 static int32_t LPI2C10_Slave_InterruptReceive(uint8_t *data, uint32_t num)
2948 {
2949 LPI2C10_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C10_SLAVE_InterruptCallback;
2950 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C10_InterruptDriverState);
2951 }
2952
LPI2C10_InterruptGetDataCount(void)2953 static int32_t LPI2C10_InterruptGetDataCount(void)
2954 {
2955 return LPI2C_InterruptGetDataCount(&LPI2C10_InterruptDriverState);
2956 }
2957
LPI2C10_InterruptControl(uint32_t control,uint32_t arg)2958 static int32_t LPI2C10_InterruptControl(uint32_t control, uint32_t arg)
2959 {
2960 return LPI2C_InterruptControl(control, arg, &LPI2C10_InterruptDriverState);
2961 }
2962
LPI2C10_InterruptGetStatus(void)2963 static ARM_I2C_STATUS LPI2C10_InterruptGetStatus(void)
2964 {
2965 return LPI2C_InterruptGetStatus(&LPI2C10_InterruptDriverState);
2966 }
2967
2968 #endif /* RTE_I2C10_DMA_EN */
2969
2970 ARM_DRIVER_I2C Driver_I2C10 = {LPI2Cx_GetVersion,
2971 LPI2Cx_GetCapabilities,
2972 #if defined(RTE_I2C10_DMA_EN) && RTE_I2C10_DMA_EN
2973 LPI2C10_Master_EdmaInitialize,
2974 LPI2C10_Master_EdmaUninitialize,
2975 LPI2C10_Master_EdmaPowerControl,
2976 LPI2C10_Master_EdmaTransmit,
2977 LPI2C10_Master_EdmaReceive,
2978 NULL,
2979 NULL,
2980 LPI2C10_Master_EdmaGetDataCount,
2981 LPI2C10_Master_EdmaControl,
2982 LPI2C10_Master_EdmaGetStatus
2983 #else
2984 LPI2C10_InterruptInitialize,
2985 LPI2C10_InterruptUninitialize,
2986 LPI2C10_InterruptPowerControl,
2987 LPI2C10_Master_InterruptTransmit,
2988 LPI2C10_Master_InterruptReceive,
2989 LPI2C10_Slave_InterruptTransmit,
2990 LPI2C10_Slave_InterruptReceive,
2991 LPI2C10_InterruptGetDataCount,
2992 LPI2C10_InterruptControl,
2993 LPI2C10_InterruptGetStatus
2994 #endif /* RTE_I2C10_DMA_EN */
2995 };
2996
2997 #endif /* LPI2C10 */
2998
2999 #if defined(LPI2C11) && defined(RTE_I2C11) && RTE_I2C11
3000 /* User needs to provide the implementation for LPI2C11_GetFreq/InitPins/DeinitPins
3001 in the application for enabling according instance. */
3002 extern uint32_t LPI2C11_GetFreq(void);
3003
3004 static cmsis_lpi2c_resource_t LPI2C11_Resource = {LPI2C11, LPI2C11_GetFreq};
3005
3006 #if defined(RTE_I2C11_DMA_EN) && RTE_I2C11_DMA_EN
3007
3008 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3009 static cmsis_lpi2c_edma_resource_t LPI2C11_EdmaResource = {
3010 RTE_I2C11_DMA_TX_DMA_BASE, RTE_I2C11_DMA_TX_CH, (uint16_t)RTE_I2C11_DMA_TX_PERI_SEL,
3011 RTE_I2C11_DMA_RX_DMA_BASE, RTE_I2C11_DMA_RX_CH, (uint16_t)RTE_I2C11_DMA_RX_PERI_SEL,
3012 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3013 RTE_I2C11_DMA_TX_DMAMUX_BASE, RTE_I2C11_DMA_RX_DMAMUX_BASE,
3014 #endif
3015 };
3016
3017 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C11_EdmaHandle);
3018 static edma_handle_t LPI2C11_EdmaTxHandle;
3019 static edma_handle_t LPI2C11_EdmaRxHandle;
3020
3021 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3022 ARMCC_SECTION("lpi2c11_edma_driver_state")
3023 static cmsis_lpi2c_edma_driver_state_t LPI2C11_EdmaDriverState = {
3024 #else
3025 static cmsis_lpi2c_edma_driver_state_t LPI2C11_EdmaDriverState = {
3026 #endif
3027 &LPI2C11_Resource, &LPI2C11_EdmaResource, &LPI2C11_EdmaHandle, &LPI2C11_EdmaTxHandle, &LPI2C11_EdmaRxHandle,
3028 };
3029
LPI2C11_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3030 static int32_t LPI2C11_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3031 {
3032 #ifdef RTE_I2C11_PIN_INIT
3033 RTE_I2C11_PIN_INIT();
3034 #endif
3035 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C11_EdmaDriverState);
3036 }
3037
LPI2C11_Master_EdmaUninitialize(void)3038 static int32_t LPI2C11_Master_EdmaUninitialize(void)
3039 {
3040 #ifdef RTE_I2C11_PIN_DEINIT
3041 RTE_I2C11_PIN_DEINIT();
3042 #endif
3043 return LPI2C_Master_EdmaUninitialize(&LPI2C11_EdmaDriverState);
3044 }
3045
LPI2C11_Master_EdmaPowerControl(ARM_POWER_STATE state)3046 static int32_t LPI2C11_Master_EdmaPowerControl(ARM_POWER_STATE state)
3047 {
3048 return LPI2C_Master_EdmaPowerControl(state, &LPI2C11_EdmaDriverState);
3049 }
3050
LPI2C11_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3051 static int32_t LPI2C11_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3052 {
3053 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C11_EdmaDriverState);
3054 }
3055
LPI2C11_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3056 static int32_t LPI2C11_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3057 {
3058 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C11_EdmaDriverState);
3059 }
3060
LPI2C11_Master_EdmaGetDataCount(void)3061 static int32_t LPI2C11_Master_EdmaGetDataCount(void)
3062 {
3063 return LPI2C_Master_EdmaGetDataCount(&LPI2C11_EdmaDriverState);
3064 }
3065
LPI2C11_Master_EdmaControl(uint32_t control,uint32_t arg)3066 static int32_t LPI2C11_Master_EdmaControl(uint32_t control, uint32_t arg)
3067 {
3068 return LPI2C_Master_EdmaControl(control, arg, &LPI2C11_EdmaDriverState);
3069 }
3070
LPI2C11_Master_EdmaGetStatus(void)3071 static ARM_I2C_STATUS LPI2C11_Master_EdmaGetStatus(void)
3072 {
3073 return LPI2C_Master_EdmaGetStatus(&LPI2C11_EdmaDriverState);
3074 }
3075
3076 #endif
3077
3078 #else
3079
3080 static cmsis_i2c_handle_t LPI2C11_Handle;
3081
3082 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3083 ARMCC_SECTION("lpi2c11_interrupt_driver_state")
3084 static cmsis_lpi2c_interrupt_driver_state_t LPI2C11_InterruptDriverState = {
3085 #else
3086 static cmsis_lpi2c_interrupt_driver_state_t LPI2C11_InterruptDriverState = {
3087 #endif
3088 &LPI2C11_Resource,
3089 &LPI2C11_Handle,
3090 };
3091
KSDK_LPI2C11_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)3092 static void KSDK_LPI2C11_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
3093 {
3094 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C11_InterruptDriverState);
3095 }
3096
LPI2C11_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)3097 static int32_t LPI2C11_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
3098 {
3099 #ifdef RTE_I2C11_PIN_INIT
3100 RTE_I2C11_PIN_INIT();
3101 #endif
3102 return LPI2C_InterruptInitialize(cb_event, &LPI2C11_InterruptDriverState);
3103 }
3104
LPI2C11_InterruptUninitialize(void)3105 static int32_t LPI2C11_InterruptUninitialize(void)
3106 {
3107 #ifdef RTE_I2C11_PIN_DEINIT
3108 RTE_I2C11_PIN_DEINIT();
3109 #endif
3110 return LPI2C_InterruptUninitialize(&LPI2C11_InterruptDriverState);
3111 }
3112
LPI2C11_InterruptPowerControl(ARM_POWER_STATE state)3113 static int32_t LPI2C11_InterruptPowerControl(ARM_POWER_STATE state)
3114 {
3115 return LPI2C_InterruptPowerControl(state, &LPI2C11_InterruptDriverState);
3116 }
3117
LPI2C11_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3118 static int32_t LPI2C11_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3119 {
3120 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C11_InterruptDriverState);
3121 }
3122
LPI2C11_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3123 static int32_t LPI2C11_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3124 {
3125 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C11_InterruptDriverState);
3126 }
3127
LPI2C11_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)3128 static int32_t LPI2C11_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
3129 {
3130 LPI2C11_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C11_SLAVE_InterruptCallback;
3131 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C11_InterruptDriverState);
3132 }
3133
LPI2C11_Slave_InterruptReceive(uint8_t * data,uint32_t num)3134 static int32_t LPI2C11_Slave_InterruptReceive(uint8_t *data, uint32_t num)
3135 {
3136 LPI2C11_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C11_SLAVE_InterruptCallback;
3137 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C11_InterruptDriverState);
3138 }
3139
LPI2C11_InterruptGetDataCount(void)3140 static int32_t LPI2C11_InterruptGetDataCount(void)
3141 {
3142 return LPI2C_InterruptGetDataCount(&LPI2C11_InterruptDriverState);
3143 }
3144
LPI2C11_InterruptControl(uint32_t control,uint32_t arg)3145 static int32_t LPI2C11_InterruptControl(uint32_t control, uint32_t arg)
3146 {
3147 return LPI2C_InterruptControl(control, arg, &LPI2C11_InterruptDriverState);
3148 }
3149
LPI2C11_InterruptGetStatus(void)3150 static ARM_I2C_STATUS LPI2C11_InterruptGetStatus(void)
3151 {
3152 return LPI2C_InterruptGetStatus(&LPI2C11_InterruptDriverState);
3153 }
3154
3155 #endif /* RTE_I2C11_DMA_EN */
3156
3157 ARM_DRIVER_I2C Driver_I2C11 = {LPI2Cx_GetVersion,
3158 LPI2Cx_GetCapabilities,
3159 #if defined(RTE_I2C11_DMA_EN) && RTE_I2C11_DMA_EN
3160 LPI2C11_Master_EdmaInitialize,
3161 LPI2C11_Master_EdmaUninitialize,
3162 LPI2C11_Master_EdmaPowerControl,
3163 LPI2C11_Master_EdmaTransmit,
3164 LPI2C11_Master_EdmaReceive,
3165 NULL,
3166 NULL,
3167 LPI2C11_Master_EdmaGetDataCount,
3168 LPI2C11_Master_EdmaControl,
3169 LPI2C11_Master_EdmaGetStatus
3170 #else
3171 LPI2C11_InterruptInitialize,
3172 LPI2C11_InterruptUninitialize,
3173 LPI2C11_InterruptPowerControl,
3174 LPI2C11_Master_InterruptTransmit,
3175 LPI2C11_Master_InterruptReceive,
3176 LPI2C11_Slave_InterruptTransmit,
3177 LPI2C11_Slave_InterruptReceive,
3178 LPI2C11_InterruptGetDataCount,
3179 LPI2C11_InterruptControl,
3180 LPI2C11_InterruptGetStatus
3181 #endif /* RTE_I2C11_DMA_EN */
3182 };
3183
3184 #endif /* LPI2C11 */
3185
3186 #if defined(LPI2C12) && defined(RTE_I2C12) && RTE_I2C12
3187 /* User needs to provide the implementation for LPI2C12_GetFreq/InitPins/DeinitPins
3188 in the application for enabling according instance. */
3189 extern uint32_t LPI2C12_GetFreq(void);
3190
3191 static cmsis_lpi2c_resource_t LPI2C12_Resource = {LPI2C12, LPI2C12_GetFreq};
3192
3193 #if defined(RTE_I2C12_DMA_EN) && RTE_I2C12_DMA_EN
3194
3195 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3196 static cmsis_lpi2c_edma_resource_t LPI2C12_EdmaResource = {
3197 RTE_I2C12_DMA_TX_DMA_BASE, RTE_I2C12_DMA_TX_CH, (uint16_t)RTE_I2C12_DMA_TX_PERI_SEL,
3198 RTE_I2C12_DMA_RX_DMA_BASE, RTE_I2C12_DMA_RX_CH, (uint16_t)RTE_I2C12_DMA_RX_PERI_SEL,
3199 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3200 RTE_I2C12_DMA_TX_DMAMUX_BASE, RTE_I2C12_DMA_RX_DMAMUX_BASE,
3201 #endif
3202 };
3203
3204 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C12_EdmaHandle);
3205 static edma_handle_t LPI2C12_EdmaTxHandle;
3206 static edma_handle_t LPI2C12_EdmaRxHandle;
3207
3208 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3209 ARMCC_SECTION("lpi2c12_edma_driver_state")
3210 static cmsis_lpi2c_edma_driver_state_t LPI2C12_EdmaDriverState = {
3211 #else
3212 static cmsis_lpi2c_edma_driver_state_t LPI2C12_EdmaDriverState = {
3213 #endif
3214 &LPI2C12_Resource, &LPI2C12_EdmaResource, &LPI2C12_EdmaHandle, &LPI2C12_EdmaTxHandle, &LPI2C12_EdmaRxHandle,
3215 };
3216
LPI2C12_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3217 static int32_t LPI2C12_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3218 {
3219 #ifdef RTE_I2C12_PIN_INIT
3220 RTE_I2C12_PIN_INIT();
3221 #endif
3222 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C12_EdmaDriverState);
3223 }
3224
LPI2C12_Master_EdmaUninitialize(void)3225 static int32_t LPI2C12_Master_EdmaUninitialize(void)
3226 {
3227 #ifdef RTE_I2C12_PIN_DEINIT
3228 RTE_I2C12_PIN_DEINIT();
3229 #endif
3230 return LPI2C_Master_EdmaUninitialize(&LPI2C12_EdmaDriverState);
3231 }
3232
LPI2C12_Master_EdmaPowerControl(ARM_POWER_STATE state)3233 static int32_t LPI2C12_Master_EdmaPowerControl(ARM_POWER_STATE state)
3234 {
3235 return LPI2C_Master_EdmaPowerControl(state, &LPI2C12_EdmaDriverState);
3236 }
3237
LPI2C12_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3238 static int32_t LPI2C12_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3239 {
3240 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C12_EdmaDriverState);
3241 }
3242
LPI2C12_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3243 static int32_t LPI2C12_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3244 {
3245 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C12_EdmaDriverState);
3246 }
3247
LPI2C12_Master_EdmaGetDataCount(void)3248 static int32_t LPI2C12_Master_EdmaGetDataCount(void)
3249 {
3250 return LPI2C_Master_EdmaGetDataCount(&LPI2C12_EdmaDriverState);
3251 }
3252
LPI2C12_Master_EdmaControl(uint32_t control,uint32_t arg)3253 static int32_t LPI2C12_Master_EdmaControl(uint32_t control, uint32_t arg)
3254 {
3255 return LPI2C_Master_EdmaControl(control, arg, &LPI2C12_EdmaDriverState);
3256 }
3257
LPI2C12_Master_EdmaGetStatus(void)3258 static ARM_I2C_STATUS LPI2C12_Master_EdmaGetStatus(void)
3259 {
3260 return LPI2C_Master_EdmaGetStatus(&LPI2C12_EdmaDriverState);
3261 }
3262
3263 #endif
3264
3265 #else
3266
3267 static cmsis_i2c_handle_t LPI2C12_Handle;
3268
3269 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3270 ARMCC_SECTION("lpi2c12_interrupt_driver_state")
3271 static cmsis_lpi2c_interrupt_driver_state_t LPI2C12_InterruptDriverState = {
3272 #else
3273 static cmsis_lpi2c_interrupt_driver_state_t LPI2C12_InterruptDriverState = {
3274 #endif
3275 &LPI2C12_Resource,
3276 &LPI2C12_Handle,
3277 };
3278
KSDK_LPI2C12_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)3279 static void KSDK_LPI2C12_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
3280 {
3281 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C12_InterruptDriverState);
3282 }
3283
LPI2C12_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)3284 static int32_t LPI2C12_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
3285 {
3286 #ifdef RTE_I2C12_PIN_INIT
3287 RTE_I2C12_PIN_INIT();
3288 #endif
3289 return LPI2C_InterruptInitialize(cb_event, &LPI2C12_InterruptDriverState);
3290 }
3291
LPI2C12_InterruptUninitialize(void)3292 static int32_t LPI2C12_InterruptUninitialize(void)
3293 {
3294 #ifdef RTE_I2C12_PIN_DEINIT
3295 RTE_I2C12_PIN_DEINIT();
3296 #endif
3297 return LPI2C_InterruptUninitialize(&LPI2C12_InterruptDriverState);
3298 }
3299
LPI2C12_InterruptPowerControl(ARM_POWER_STATE state)3300 static int32_t LPI2C12_InterruptPowerControl(ARM_POWER_STATE state)
3301 {
3302 return LPI2C_InterruptPowerControl(state, &LPI2C12_InterruptDriverState);
3303 }
3304
LPI2C12_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3305 static int32_t LPI2C12_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3306 {
3307 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C12_InterruptDriverState);
3308 }
3309
LPI2C12_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3310 static int32_t LPI2C12_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3311 {
3312 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C12_InterruptDriverState);
3313 }
3314
LPI2C12_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)3315 static int32_t LPI2C12_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
3316 {
3317 LPI2C12_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C12_SLAVE_InterruptCallback;
3318 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C12_InterruptDriverState);
3319 }
3320
LPI2C12_Slave_InterruptReceive(uint8_t * data,uint32_t num)3321 static int32_t LPI2C12_Slave_InterruptReceive(uint8_t *data, uint32_t num)
3322 {
3323 LPI2C12_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C12_SLAVE_InterruptCallback;
3324 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C12_InterruptDriverState);
3325 }
3326
LPI2C12_InterruptGetDataCount(void)3327 static int32_t LPI2C12_InterruptGetDataCount(void)
3328 {
3329 return LPI2C_InterruptGetDataCount(&LPI2C12_InterruptDriverState);
3330 }
3331
LPI2C12_InterruptControl(uint32_t control,uint32_t arg)3332 static int32_t LPI2C12_InterruptControl(uint32_t control, uint32_t arg)
3333 {
3334 return LPI2C_InterruptControl(control, arg, &LPI2C12_InterruptDriverState);
3335 }
3336
LPI2C12_InterruptGetStatus(void)3337 static ARM_I2C_STATUS LPI2C12_InterruptGetStatus(void)
3338 {
3339 return LPI2C_InterruptGetStatus(&LPI2C12_InterruptDriverState);
3340 }
3341
3342 #endif /* RTE_I2C12_DMA_EN */
3343
3344 ARM_DRIVER_I2C Driver_I2C12 = {LPI2Cx_GetVersion,
3345 LPI2Cx_GetCapabilities,
3346 #if defined(RTE_I2C12_DMA_EN) && RTE_I2C12_DMA_EN
3347 LPI2C12_Master_EdmaInitialize,
3348 LPI2C12_Master_EdmaUninitialize,
3349 LPI2C12_Master_EdmaPowerControl,
3350 LPI2C12_Master_EdmaTransmit,
3351 LPI2C12_Master_EdmaReceive,
3352 NULL,
3353 NULL,
3354 LPI2C12_Master_EdmaGetDataCount,
3355 LPI2C12_Master_EdmaControl,
3356 LPI2C12_Master_EdmaGetStatus
3357 #else
3358 LPI2C12_InterruptInitialize,
3359 LPI2C12_InterruptUninitialize,
3360 LPI2C12_InterruptPowerControl,
3361 LPI2C12_Master_InterruptTransmit,
3362 LPI2C12_Master_InterruptReceive,
3363 LPI2C12_Slave_InterruptTransmit,
3364 LPI2C12_Slave_InterruptReceive,
3365 LPI2C12_InterruptGetDataCount,
3366 LPI2C12_InterruptControl,
3367 LPI2C12_InterruptGetStatus
3368 #endif /* RTE_I2C12_DMA_EN */
3369 };
3370
3371 #endif /* LPI2C12 */
3372
3373 #if defined(LPI2C13) && defined(RTE_I2C13) && RTE_I2C13
3374 /* User needs to provide the implementation for LPI2C13_GetFreq/InitPins/DeinitPins
3375 in the application for enabling according instance. */
3376 extern uint32_t LPI2C13_GetFreq(void);
3377
3378 static cmsis_lpi2c_resource_t LPI2C13_Resource = {LPI2C13, LPI2C13_GetFreq};
3379
3380 #if defined(RTE_I2C13_DMA_EN) && RTE_I2C13_DMA_EN
3381
3382 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3383 static cmsis_lpi2c_edma_resource_t LPI2C13_EdmaResource = {
3384 RTE_I2C13_DMA_TX_DMA_BASE, RTE_I2C13_DMA_TX_CH, (uint16_t)RTE_I2C13_DMA_TX_PERI_SEL,
3385 RTE_I2C13_DMA_RX_DMA_BASE, RTE_I2C13_DMA_RX_CH, (uint16_t)RTE_I2C13_DMA_RX_PERI_SEL,
3386 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3387 RTE_I2C13_DMA_TX_DMAMUX_BASE, RTE_I2C13_DMA_RX_DMAMUX_BASE,
3388 #endif
3389 };
3390
3391 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C13_EdmaHandle);
3392 static edma_handle_t LPI2C13_EdmaTxHandle;
3393 static edma_handle_t LPI2C13_EdmaRxHandle;
3394
3395 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3396 ARMCC_SECTION("lpi2c13_edma_driver_state")
3397 static cmsis_lpi2c_edma_driver_state_t LPI2C13_EdmaDriverState = {
3398 #else
3399 static cmsis_lpi2c_edma_driver_state_t LPI2C13_EdmaDriverState = {
3400 #endif
3401 &LPI2C13_Resource, &LPI2C13_EdmaResource, &LPI2C13_EdmaHandle, &LPI2C13_EdmaTxHandle, &LPI2C13_EdmaRxHandle,
3402 };
3403
LPI2C13_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3404 static int32_t LPI2C13_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3405 {
3406 #ifdef RTE_I2C13_PIN_INIT
3407 RTE_I2C13_PIN_INIT();
3408 #endif
3409 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C13_EdmaDriverState);
3410 }
3411
LPI2C13_Master_EdmaUninitialize(void)3412 static int32_t LPI2C13_Master_EdmaUninitialize(void)
3413 {
3414 #ifdef RTE_I2C13_PIN_DEINIT
3415 RTE_I2C13_PIN_DEINIT();
3416 #endif
3417 return LPI2C_Master_EdmaUninitialize(&LPI2C13_EdmaDriverState);
3418 }
3419
LPI2C13_Master_EdmaPowerControl(ARM_POWER_STATE state)3420 static int32_t LPI2C13_Master_EdmaPowerControl(ARM_POWER_STATE state)
3421 {
3422 return LPI2C_Master_EdmaPowerControl(state, &LPI2C13_EdmaDriverState);
3423 }
3424
LPI2C13_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3425 static int32_t LPI2C13_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3426 {
3427 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C13_EdmaDriverState);
3428 }
3429
LPI2C13_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3430 static int32_t LPI2C13_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3431 {
3432 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C13_EdmaDriverState);
3433 }
3434
LPI2C13_Master_EdmaGetDataCount(void)3435 static int32_t LPI2C13_Master_EdmaGetDataCount(void)
3436 {
3437 return LPI2C_Master_EdmaGetDataCount(&LPI2C13_EdmaDriverState);
3438 }
3439
LPI2C13_Master_EdmaControl(uint32_t control,uint32_t arg)3440 static int32_t LPI2C13_Master_EdmaControl(uint32_t control, uint32_t arg)
3441 {
3442 return LPI2C_Master_EdmaControl(control, arg, &LPI2C13_EdmaDriverState);
3443 }
3444
LPI2C13_Master_EdmaGetStatus(void)3445 static ARM_I2C_STATUS LPI2C13_Master_EdmaGetStatus(void)
3446 {
3447 return LPI2C_Master_EdmaGetStatus(&LPI2C13_EdmaDriverState);
3448 }
3449
3450 #endif
3451
3452 #else
3453
3454 static cmsis_i2c_handle_t LPI2C13_Handle;
3455
3456 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3457 ARMCC_SECTION("lpi2c13_interrupt_driver_state")
3458 static cmsis_lpi2c_interrupt_driver_state_t LPI2C13_InterruptDriverState = {
3459 #else
3460 static cmsis_lpi2c_interrupt_driver_state_t LPI2C13_InterruptDriverState = {
3461 #endif
3462 &LPI2C13_Resource,
3463 &LPI2C13_Handle,
3464 };
3465
KSDK_LPI2C13_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)3466 static void KSDK_LPI2C13_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
3467 {
3468 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C13_InterruptDriverState);
3469 }
3470
LPI2C13_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)3471 static int32_t LPI2C13_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
3472 {
3473 #ifdef RTE_I2C13_PIN_INIT
3474 RTE_I2C13_PIN_INIT();
3475 #endif
3476 return LPI2C_InterruptInitialize(cb_event, &LPI2C13_InterruptDriverState);
3477 }
3478
LPI2C13_InterruptUninitialize(void)3479 static int32_t LPI2C13_InterruptUninitialize(void)
3480 {
3481 #ifdef RTE_I2C13_PIN_DEINIT
3482 RTE_I2C13_PIN_DEINIT();
3483 #endif
3484 return LPI2C_InterruptUninitialize(&LPI2C13_InterruptDriverState);
3485 }
3486
LPI2C13_InterruptPowerControl(ARM_POWER_STATE state)3487 static int32_t LPI2C13_InterruptPowerControl(ARM_POWER_STATE state)
3488 {
3489 return LPI2C_InterruptPowerControl(state, &LPI2C13_InterruptDriverState);
3490 }
3491
LPI2C13_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3492 static int32_t LPI2C13_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3493 {
3494 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C13_InterruptDriverState);
3495 }
3496
LPI2C13_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3497 static int32_t LPI2C13_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3498 {
3499 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C13_InterruptDriverState);
3500 }
3501
LPI2C13_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)3502 static int32_t LPI2C13_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
3503 {
3504 LPI2C13_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C13_SLAVE_InterruptCallback;
3505 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C13_InterruptDriverState);
3506 }
3507
LPI2C13_Slave_InterruptReceive(uint8_t * data,uint32_t num)3508 static int32_t LPI2C13_Slave_InterruptReceive(uint8_t *data, uint32_t num)
3509 {
3510 LPI2C13_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C13_SLAVE_InterruptCallback;
3511 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C13_InterruptDriverState);
3512 }
3513
LPI2C13_InterruptGetDataCount(void)3514 static int32_t LPI2C13_InterruptGetDataCount(void)
3515 {
3516 return LPI2C_InterruptGetDataCount(&LPI2C13_InterruptDriverState);
3517 }
3518
LPI2C13_InterruptControl(uint32_t control,uint32_t arg)3519 static int32_t LPI2C13_InterruptControl(uint32_t control, uint32_t arg)
3520 {
3521 return LPI2C_InterruptControl(control, arg, &LPI2C13_InterruptDriverState);
3522 }
3523
LPI2C13_InterruptGetStatus(void)3524 static ARM_I2C_STATUS LPI2C13_InterruptGetStatus(void)
3525 {
3526 return LPI2C_InterruptGetStatus(&LPI2C13_InterruptDriverState);
3527 }
3528
3529 #endif /* RTE_I2C13_DMA_EN */
3530
3531 ARM_DRIVER_I2C Driver_I2C13 = {LPI2Cx_GetVersion,
3532 LPI2Cx_GetCapabilities,
3533 #if defined(RTE_I2C13_DMA_EN) && RTE_I2C13_DMA_EN
3534 LPI2C13_Master_EdmaInitialize,
3535 LPI2C13_Master_EdmaUninitialize,
3536 LPI2C13_Master_EdmaPowerControl,
3537 LPI2C13_Master_EdmaTransmit,
3538 LPI2C13_Master_EdmaReceive,
3539 NULL,
3540 NULL,
3541 LPI2C13_Master_EdmaGetDataCount,
3542 LPI2C13_Master_EdmaControl,
3543 LPI2C13_Master_EdmaGetStatus
3544 #else
3545 LPI2C13_InterruptInitialize,
3546 LPI2C13_InterruptUninitialize,
3547 LPI2C13_InterruptPowerControl,
3548 LPI2C13_Master_InterruptTransmit,
3549 LPI2C13_Master_InterruptReceive,
3550 LPI2C13_Slave_InterruptTransmit,
3551 LPI2C13_Slave_InterruptReceive,
3552 LPI2C13_InterruptGetDataCount,
3553 LPI2C13_InterruptControl,
3554 LPI2C13_InterruptGetStatus
3555 #endif /* RTE_I2C13_DMA_EN */
3556 };
3557
3558 #endif /* LPI2C13 */
3559
3560 #if defined(LPI2C14) && defined(RTE_I2C14) && RTE_I2C14
3561 /* User needs to provide the implementation for LPI2C14_GetFreq/InitPins/DeinitPins
3562 in the application for enabling according instance. */
3563 extern uint32_t LPI2C14_GetFreq(void);
3564
3565 static cmsis_lpi2c_resource_t LPI2C14_Resource = {LPI2C14, LPI2C14_GetFreq};
3566
3567 #if defined(RTE_I2C14_DMA_EN) && RTE_I2C14_DMA_EN
3568
3569 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3570 static cmsis_lpi2c_edma_resource_t LPI2C14_EdmaResource = {
3571 RTE_I2C14_DMA_TX_DMA_BASE, RTE_I2C14_DMA_TX_CH, (uint16_t)RTE_I2C14_DMA_TX_PERI_SEL,
3572 RTE_I2C14_DMA_RX_DMA_BASE, RTE_I2C14_DMA_RX_CH, (uint16_t)RTE_I2C14_DMA_RX_PERI_SEL,
3573 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3574 RTE_I2C14_DMA_TX_DMAMUX_BASE, RTE_I2C14_DMA_RX_DMAMUX_BASE,
3575 #endif
3576 };
3577
3578 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C14_EdmaHandle);
3579 static edma_handle_t LPI2C14_EdmaTxHandle;
3580 static edma_handle_t LPI2C14_EdmaRxHandle;
3581
3582 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3583 ARMCC_SECTION("lpi2c14_edma_driver_state")
3584 static cmsis_lpi2c_edma_driver_state_t LPI2C14_EdmaDriverState = {
3585 #else
3586 static cmsis_lpi2c_edma_driver_state_t LPI2C14_EdmaDriverState = {
3587 #endif
3588 &LPI2C14_Resource, &LPI2C14_EdmaResource, &LPI2C14_EdmaHandle, &LPI2C14_EdmaTxHandle, &LPI2C14_EdmaRxHandle,
3589 };
3590
LPI2C14_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3591 static int32_t LPI2C14_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3592 {
3593 #ifdef RTE_I2C14_PIN_INIT
3594 RTE_I2C14_PIN_INIT();
3595 #endif
3596 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C14_EdmaDriverState);
3597 }
3598
LPI2C14_Master_EdmaUninitialize(void)3599 static int32_t LPI2C14_Master_EdmaUninitialize(void)
3600 {
3601 #ifdef RTE_I2C14_PIN_DEINIT
3602 RTE_I2C14_PIN_DEINIT();
3603 #endif
3604 return LPI2C_Master_EdmaUninitialize(&LPI2C14_EdmaDriverState);
3605 }
3606
LPI2C14_Master_EdmaPowerControl(ARM_POWER_STATE state)3607 static int32_t LPI2C14_Master_EdmaPowerControl(ARM_POWER_STATE state)
3608 {
3609 return LPI2C_Master_EdmaPowerControl(state, &LPI2C14_EdmaDriverState);
3610 }
3611
LPI2C14_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3612 static int32_t LPI2C14_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3613 {
3614 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C14_EdmaDriverState);
3615 }
3616
LPI2C14_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3617 static int32_t LPI2C14_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3618 {
3619 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C14_EdmaDriverState);
3620 }
3621
LPI2C14_Master_EdmaGetDataCount(void)3622 static int32_t LPI2C14_Master_EdmaGetDataCount(void)
3623 {
3624 return LPI2C_Master_EdmaGetDataCount(&LPI2C14_EdmaDriverState);
3625 }
3626
LPI2C14_Master_EdmaControl(uint32_t control,uint32_t arg)3627 static int32_t LPI2C14_Master_EdmaControl(uint32_t control, uint32_t arg)
3628 {
3629 return LPI2C_Master_EdmaControl(control, arg, &LPI2C14_EdmaDriverState);
3630 }
3631
LPI2C14_Master_EdmaGetStatus(void)3632 static ARM_I2C_STATUS LPI2C14_Master_EdmaGetStatus(void)
3633 {
3634 return LPI2C_Master_EdmaGetStatus(&LPI2C14_EdmaDriverState);
3635 }
3636
3637 #endif
3638
3639 #else
3640
3641 static cmsis_i2c_handle_t LPI2C14_Handle;
3642
3643 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3644 ARMCC_SECTION("lpi2c14_interrupt_driver_state")
3645 static cmsis_lpi2c_interrupt_driver_state_t LPI2C14_InterruptDriverState = {
3646 #else
3647 static cmsis_lpi2c_interrupt_driver_state_t LPI2C14_InterruptDriverState = {
3648 #endif
3649 &LPI2C14_Resource,
3650 &LPI2C14_Handle,
3651 };
3652
KSDK_LPI2C14_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)3653 static void KSDK_LPI2C14_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
3654 {
3655 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C14_InterruptDriverState);
3656 }
3657
LPI2C14_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)3658 static int32_t LPI2C14_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
3659 {
3660 #ifdef RTE_I2C14_PIN_INIT
3661 RTE_I2C14_PIN_INIT();
3662 #endif
3663 return LPI2C_InterruptInitialize(cb_event, &LPI2C14_InterruptDriverState);
3664 }
3665
LPI2C14_InterruptUninitialize(void)3666 static int32_t LPI2C14_InterruptUninitialize(void)
3667 {
3668 #ifdef RTE_I2C14_PIN_DEINIT
3669 RTE_I2C14_PIN_DEINIT();
3670 #endif
3671 return LPI2C_InterruptUninitialize(&LPI2C14_InterruptDriverState);
3672 }
3673
LPI2C14_InterruptPowerControl(ARM_POWER_STATE state)3674 static int32_t LPI2C14_InterruptPowerControl(ARM_POWER_STATE state)
3675 {
3676 return LPI2C_InterruptPowerControl(state, &LPI2C14_InterruptDriverState);
3677 }
3678
LPI2C14_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3679 static int32_t LPI2C14_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3680 {
3681 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C14_InterruptDriverState);
3682 }
3683
LPI2C14_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3684 static int32_t LPI2C14_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3685 {
3686 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C14_InterruptDriverState);
3687 }
3688
LPI2C14_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)3689 static int32_t LPI2C14_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
3690 {
3691 LPI2C14_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C14_SLAVE_InterruptCallback;
3692 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C14_InterruptDriverState);
3693 }
3694
LPI2C14_Slave_InterruptReceive(uint8_t * data,uint32_t num)3695 static int32_t LPI2C14_Slave_InterruptReceive(uint8_t *data, uint32_t num)
3696 {
3697 LPI2C14_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C14_SLAVE_InterruptCallback;
3698 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C14_InterruptDriverState);
3699 }
3700
LPI2C14_InterruptGetDataCount(void)3701 static int32_t LPI2C14_InterruptGetDataCount(void)
3702 {
3703 return LPI2C_InterruptGetDataCount(&LPI2C14_InterruptDriverState);
3704 }
3705
LPI2C14_InterruptControl(uint32_t control,uint32_t arg)3706 static int32_t LPI2C14_InterruptControl(uint32_t control, uint32_t arg)
3707 {
3708 return LPI2C_InterruptControl(control, arg, &LPI2C14_InterruptDriverState);
3709 }
3710
LPI2C14_InterruptGetStatus(void)3711 static ARM_I2C_STATUS LPI2C14_InterruptGetStatus(void)
3712 {
3713 return LPI2C_InterruptGetStatus(&LPI2C14_InterruptDriverState);
3714 }
3715
3716 #endif /* RTE_I2C14_DMA_EN */
3717
3718 ARM_DRIVER_I2C Driver_I2C14 = {LPI2Cx_GetVersion,
3719 LPI2Cx_GetCapabilities,
3720 #if defined(RTE_I2C14_DMA_EN) && RTE_I2C14_DMA_EN
3721 LPI2C14_Master_EdmaInitialize,
3722 LPI2C14_Master_EdmaUninitialize,
3723 LPI2C14_Master_EdmaPowerControl,
3724 LPI2C14_Master_EdmaTransmit,
3725 LPI2C14_Master_EdmaReceive,
3726 NULL,
3727 NULL,
3728 LPI2C14_Master_EdmaGetDataCount,
3729 LPI2C14_Master_EdmaControl,
3730 LPI2C14_Master_EdmaGetStatus
3731 #else
3732 LPI2C14_InterruptInitialize,
3733 LPI2C14_InterruptUninitialize,
3734 LPI2C14_InterruptPowerControl,
3735 LPI2C14_Master_InterruptTransmit,
3736 LPI2C14_Master_InterruptReceive,
3737 LPI2C14_Slave_InterruptTransmit,
3738 LPI2C14_Slave_InterruptReceive,
3739 LPI2C14_InterruptGetDataCount,
3740 LPI2C14_InterruptControl,
3741 LPI2C14_InterruptGetStatus
3742 #endif /* RTE_I2C14_DMA_EN */
3743 };
3744
3745 #endif /* LPI2C14 */
3746
3747 #if defined(LPI2C15) && defined(RTE_I2C15) && RTE_I2C15
3748 /* User needs to provide the implementation for LPI2C15_GetFreq/InitPins/DeinitPins
3749 in the application for enabling according instance. */
3750 extern uint32_t LPI2C15_GetFreq(void);
3751
3752 static cmsis_lpi2c_resource_t LPI2C15_Resource = {LPI2C15, LPI2C15_GetFreq};
3753
3754 #if defined(RTE_I2C15_DMA_EN) && RTE_I2C15_DMA_EN
3755
3756 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3757 static cmsis_lpi2c_edma_resource_t LPI2C15_EdmaResource = {
3758 RTE_I2C15_DMA_TX_DMA_BASE, RTE_I2C15_DMA_TX_CH, (uint16_t)RTE_I2C15_DMA_TX_PERI_SEL,
3759 RTE_I2C15_DMA_RX_DMA_BASE, RTE_I2C15_DMA_RX_CH, (uint16_t)RTE_I2C15_DMA_RX_PERI_SEL,
3760 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3761 RTE_I2C15_DMA_TX_DMAMUX_BASE, RTE_I2C15_DMA_RX_DMAMUX_BASE,
3762 #endif
3763 };
3764
3765 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C15_EdmaHandle);
3766 static edma_handle_t LPI2C15_EdmaTxHandle;
3767 static edma_handle_t LPI2C15_EdmaRxHandle;
3768
3769 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3770 ARMCC_SECTION("lpi2c15_edma_driver_state")
3771 static cmsis_lpi2c_edma_driver_state_t LPI2C15_EdmaDriverState = {
3772 #else
3773 static cmsis_lpi2c_edma_driver_state_t LPI2C15_EdmaDriverState = {
3774 #endif
3775 &LPI2C15_Resource, &LPI2C15_EdmaResource, &LPI2C15_EdmaHandle, &LPI2C15_EdmaTxHandle, &LPI2C15_EdmaRxHandle,
3776 };
3777
LPI2C15_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3778 static int32_t LPI2C15_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3779 {
3780 #ifdef RTE_I2C15_PIN_INIT
3781 RTE_I2C15_PIN_INIT();
3782 #endif
3783 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C15_EdmaDriverState);
3784 }
3785
LPI2C15_Master_EdmaUninitialize(void)3786 static int32_t LPI2C15_Master_EdmaUninitialize(void)
3787 {
3788 #ifdef RTE_I2C15_PIN_DEINIT
3789 RTE_I2C15_PIN_DEINIT();
3790 #endif
3791 return LPI2C_Master_EdmaUninitialize(&LPI2C15_EdmaDriverState);
3792 }
3793
LPI2C15_Master_EdmaPowerControl(ARM_POWER_STATE state)3794 static int32_t LPI2C15_Master_EdmaPowerControl(ARM_POWER_STATE state)
3795 {
3796 return LPI2C_Master_EdmaPowerControl(state, &LPI2C15_EdmaDriverState);
3797 }
3798
LPI2C15_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3799 static int32_t LPI2C15_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3800 {
3801 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C15_EdmaDriverState);
3802 }
3803
LPI2C15_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3804 static int32_t LPI2C15_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3805 {
3806 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C15_EdmaDriverState);
3807 }
3808
LPI2C15_Master_EdmaGetDataCount(void)3809 static int32_t LPI2C15_Master_EdmaGetDataCount(void)
3810 {
3811 return LPI2C_Master_EdmaGetDataCount(&LPI2C15_EdmaDriverState);
3812 }
3813
LPI2C15_Master_EdmaControl(uint32_t control,uint32_t arg)3814 static int32_t LPI2C15_Master_EdmaControl(uint32_t control, uint32_t arg)
3815 {
3816 return LPI2C_Master_EdmaControl(control, arg, &LPI2C15_EdmaDriverState);
3817 }
3818
LPI2C15_Master_EdmaGetStatus(void)3819 static ARM_I2C_STATUS LPI2C15_Master_EdmaGetStatus(void)
3820 {
3821 return LPI2C_Master_EdmaGetStatus(&LPI2C15_EdmaDriverState);
3822 }
3823
3824 #endif
3825
3826 #else
3827
3828 static cmsis_i2c_handle_t LPI2C15_Handle;
3829
3830 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3831 ARMCC_SECTION("lpi2c15_interrupt_driver_state")
3832 static cmsis_lpi2c_interrupt_driver_state_t LPI2C15_InterruptDriverState = {
3833 #else
3834 static cmsis_lpi2c_interrupt_driver_state_t LPI2C15_InterruptDriverState = {
3835 #endif
3836 &LPI2C15_Resource,
3837 &LPI2C15_Handle,
3838 };
3839
KSDK_LPI2C15_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)3840 static void KSDK_LPI2C15_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
3841 {
3842 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C15_InterruptDriverState);
3843 }
3844
LPI2C15_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)3845 static int32_t LPI2C15_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
3846 {
3847 #ifdef RTE_I2C15_PIN_INIT
3848 RTE_I2C15_PIN_INIT();
3849 #endif
3850 return LPI2C_InterruptInitialize(cb_event, &LPI2C15_InterruptDriverState);
3851 }
3852
LPI2C15_InterruptUninitialize(void)3853 static int32_t LPI2C15_InterruptUninitialize(void)
3854 {
3855 #ifdef RTE_I2C15_PIN_DEINIT
3856 RTE_I2C15_PIN_DEINIT();
3857 #endif
3858 return LPI2C_InterruptUninitialize(&LPI2C15_InterruptDriverState);
3859 }
3860
LPI2C15_InterruptPowerControl(ARM_POWER_STATE state)3861 static int32_t LPI2C15_InterruptPowerControl(ARM_POWER_STATE state)
3862 {
3863 return LPI2C_InterruptPowerControl(state, &LPI2C15_InterruptDriverState);
3864 }
3865
LPI2C15_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3866 static int32_t LPI2C15_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3867 {
3868 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C15_InterruptDriverState);
3869 }
3870
LPI2C15_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3871 static int32_t LPI2C15_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3872 {
3873 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C15_InterruptDriverState);
3874 }
3875
LPI2C15_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)3876 static int32_t LPI2C15_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
3877 {
3878 LPI2C15_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C15_SLAVE_InterruptCallback;
3879 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C15_InterruptDriverState);
3880 }
3881
LPI2C15_Slave_InterruptReceive(uint8_t * data,uint32_t num)3882 static int32_t LPI2C15_Slave_InterruptReceive(uint8_t *data, uint32_t num)
3883 {
3884 LPI2C15_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C15_SLAVE_InterruptCallback;
3885 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C15_InterruptDriverState);
3886 }
3887
LPI2C15_InterruptGetDataCount(void)3888 static int32_t LPI2C15_InterruptGetDataCount(void)
3889 {
3890 return LPI2C_InterruptGetDataCount(&LPI2C15_InterruptDriverState);
3891 }
3892
LPI2C15_InterruptControl(uint32_t control,uint32_t arg)3893 static int32_t LPI2C15_InterruptControl(uint32_t control, uint32_t arg)
3894 {
3895 return LPI2C_InterruptControl(control, arg, &LPI2C15_InterruptDriverState);
3896 }
3897
LPI2C15_InterruptGetStatus(void)3898 static ARM_I2C_STATUS LPI2C15_InterruptGetStatus(void)
3899 {
3900 return LPI2C_InterruptGetStatus(&LPI2C15_InterruptDriverState);
3901 }
3902
3903 #endif /* RTE_I2C15_DMA_EN */
3904
3905 ARM_DRIVER_I2C Driver_I2C15 = {LPI2Cx_GetVersion,
3906 LPI2Cx_GetCapabilities,
3907 #if defined(RTE_I2C15_DMA_EN) && RTE_I2C15_DMA_EN
3908 LPI2C15_Master_EdmaInitialize,
3909 LPI2C15_Master_EdmaUninitialize,
3910 LPI2C15_Master_EdmaPowerControl,
3911 LPI2C15_Master_EdmaTransmit,
3912 LPI2C15_Master_EdmaReceive,
3913 NULL,
3914 NULL,
3915 LPI2C15_Master_EdmaGetDataCount,
3916 LPI2C15_Master_EdmaControl,
3917 LPI2C15_Master_EdmaGetStatus
3918 #else
3919 LPI2C15_InterruptInitialize,
3920 LPI2C15_InterruptUninitialize,
3921 LPI2C15_InterruptPowerControl,
3922 LPI2C15_Master_InterruptTransmit,
3923 LPI2C15_Master_InterruptReceive,
3924 LPI2C15_Slave_InterruptTransmit,
3925 LPI2C15_Slave_InterruptReceive,
3926 LPI2C15_InterruptGetDataCount,
3927 LPI2C15_InterruptControl,
3928 LPI2C15_InterruptGetStatus
3929 #endif /* RTE_I2C15_DMA_EN */
3930 };
3931
3932 #endif /* LPI2C15 */
3933
3934 #if defined(LPI2C16) && defined(RTE_I2C16) && RTE_I2C16
3935 /* User needs to provide the implementation for LPI2C16_GetFreq/InitPins/DeinitPins
3936 in the application for enabling according instance. */
3937 extern uint32_t LPI2C16_GetFreq(void);
3938
3939 static cmsis_lpi2c_resource_t LPI2C16_Resource = {LPI2C16, LPI2C16_GetFreq};
3940
3941 #if defined(RTE_I2C16_DMA_EN) && RTE_I2C16_DMA_EN
3942
3943 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
3944 static cmsis_lpi2c_edma_resource_t LPI2C16_EdmaResource = {
3945 RTE_I2C16_DMA_TX_DMA_BASE, RTE_I2C16_DMA_TX_CH, (uint16_t)RTE_I2C16_DMA_TX_PERI_SEL,
3946 RTE_I2C16_DMA_RX_DMA_BASE, RTE_I2C16_DMA_RX_CH, (uint16_t)RTE_I2C16_DMA_RX_PERI_SEL,
3947 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
3948 RTE_I2C16_DMA_TX_DMAMUX_BASE, RTE_I2C16_DMA_RX_DMAMUX_BASE,
3949 #endif
3950 };
3951
3952 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C16_EdmaHandle);
3953 static edma_handle_t LPI2C16_EdmaTxHandle;
3954 static edma_handle_t LPI2C16_EdmaRxHandle;
3955
3956 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
3957 ARMCC_SECTION("lpi2c16_edma_driver_state")
3958 static cmsis_lpi2c_edma_driver_state_t LPI2C16_EdmaDriverState = {
3959 #else
3960 static cmsis_lpi2c_edma_driver_state_t LPI2C16_EdmaDriverState = {
3961 #endif
3962 &LPI2C16_Resource, &LPI2C16_EdmaResource, &LPI2C16_EdmaHandle, &LPI2C16_EdmaTxHandle, &LPI2C16_EdmaRxHandle,
3963 };
3964
LPI2C16_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)3965 static int32_t LPI2C16_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
3966 {
3967 #ifdef RTE_I2C16_PIN_INIT
3968 RTE_I2C16_PIN_INIT();
3969 #endif
3970 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C16_EdmaDriverState);
3971 }
3972
LPI2C16_Master_EdmaUninitialize(void)3973 static int32_t LPI2C16_Master_EdmaUninitialize(void)
3974 {
3975 #ifdef RTE_I2C16_PIN_DEINIT
3976 RTE_I2C16_PIN_DEINIT();
3977 #endif
3978 return LPI2C_Master_EdmaUninitialize(&LPI2C16_EdmaDriverState);
3979 }
3980
LPI2C16_Master_EdmaPowerControl(ARM_POWER_STATE state)3981 static int32_t LPI2C16_Master_EdmaPowerControl(ARM_POWER_STATE state)
3982 {
3983 return LPI2C_Master_EdmaPowerControl(state, &LPI2C16_EdmaDriverState);
3984 }
3985
LPI2C16_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)3986 static int32_t LPI2C16_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
3987 {
3988 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C16_EdmaDriverState);
3989 }
3990
LPI2C16_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)3991 static int32_t LPI2C16_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
3992 {
3993 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C16_EdmaDriverState);
3994 }
3995
LPI2C16_Master_EdmaGetDataCount(void)3996 static int32_t LPI2C16_Master_EdmaGetDataCount(void)
3997 {
3998 return LPI2C_Master_EdmaGetDataCount(&LPI2C16_EdmaDriverState);
3999 }
4000
LPI2C16_Master_EdmaControl(uint32_t control,uint32_t arg)4001 static int32_t LPI2C16_Master_EdmaControl(uint32_t control, uint32_t arg)
4002 {
4003 return LPI2C_Master_EdmaControl(control, arg, &LPI2C16_EdmaDriverState);
4004 }
4005
LPI2C16_Master_EdmaGetStatus(void)4006 static ARM_I2C_STATUS LPI2C16_Master_EdmaGetStatus(void)
4007 {
4008 return LPI2C_Master_EdmaGetStatus(&LPI2C16_EdmaDriverState);
4009 }
4010
4011 #endif
4012
4013 #else
4014
4015 static cmsis_i2c_handle_t LPI2C16_Handle;
4016
4017 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4018 ARMCC_SECTION("lpi2c16_interrupt_driver_state")
4019 static cmsis_lpi2c_interrupt_driver_state_t LPI2C16_InterruptDriverState = {
4020 #else
4021 static cmsis_lpi2c_interrupt_driver_state_t LPI2C16_InterruptDriverState = {
4022 #endif
4023 &LPI2C16_Resource,
4024 &LPI2C16_Handle,
4025 };
4026
KSDK_LPI2C16_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)4027 static void KSDK_LPI2C16_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
4028 {
4029 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C16_InterruptDriverState);
4030 }
4031
LPI2C16_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)4032 static int32_t LPI2C16_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
4033 {
4034 #ifdef RTE_I2C16_PIN_INIT
4035 RTE_I2C16_PIN_INIT();
4036 #endif
4037 return LPI2C_InterruptInitialize(cb_event, &LPI2C16_InterruptDriverState);
4038 }
4039
LPI2C16_InterruptUninitialize(void)4040 static int32_t LPI2C16_InterruptUninitialize(void)
4041 {
4042 #ifdef RTE_I2C16_PIN_DEINIT
4043 RTE_I2C16_PIN_DEINIT();
4044 #endif
4045 return LPI2C_InterruptUninitialize(&LPI2C16_InterruptDriverState);
4046 }
4047
LPI2C16_InterruptPowerControl(ARM_POWER_STATE state)4048 static int32_t LPI2C16_InterruptPowerControl(ARM_POWER_STATE state)
4049 {
4050 return LPI2C_InterruptPowerControl(state, &LPI2C16_InterruptDriverState);
4051 }
4052
LPI2C16_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4053 static int32_t LPI2C16_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4054 {
4055 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C16_InterruptDriverState);
4056 }
4057
LPI2C16_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4058 static int32_t LPI2C16_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4059 {
4060 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C16_InterruptDriverState);
4061 }
4062
LPI2C16_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)4063 static int32_t LPI2C16_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
4064 {
4065 LPI2C16_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C16_SLAVE_InterruptCallback;
4066 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C16_InterruptDriverState);
4067 }
4068
LPI2C16_Slave_InterruptReceive(uint8_t * data,uint32_t num)4069 static int32_t LPI2C16_Slave_InterruptReceive(uint8_t *data, uint32_t num)
4070 {
4071 LPI2C16_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C16_SLAVE_InterruptCallback;
4072 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C16_InterruptDriverState);
4073 }
4074
LPI2C16_InterruptGetDataCount(void)4075 static int32_t LPI2C16_InterruptGetDataCount(void)
4076 {
4077 return LPI2C_InterruptGetDataCount(&LPI2C16_InterruptDriverState);
4078 }
4079
LPI2C16_InterruptControl(uint32_t control,uint32_t arg)4080 static int32_t LPI2C16_InterruptControl(uint32_t control, uint32_t arg)
4081 {
4082 return LPI2C_InterruptControl(control, arg, &LPI2C16_InterruptDriverState);
4083 }
4084
LPI2C16_InterruptGetStatus(void)4085 static ARM_I2C_STATUS LPI2C16_InterruptGetStatus(void)
4086 {
4087 return LPI2C_InterruptGetStatus(&LPI2C16_InterruptDriverState);
4088 }
4089
4090 #endif /* RTE_I2C16_DMA_EN */
4091
4092 ARM_DRIVER_I2C Driver_I2C16 = {LPI2Cx_GetVersion,
4093 LPI2Cx_GetCapabilities,
4094 #if defined(RTE_I2C16_DMA_EN) && RTE_I2C16_DMA_EN
4095 LPI2C16_Master_EdmaInitialize,
4096 LPI2C16_Master_EdmaUninitialize,
4097 LPI2C16_Master_EdmaPowerControl,
4098 LPI2C16_Master_EdmaTransmit,
4099 LPI2C16_Master_EdmaReceive,
4100 NULL,
4101 NULL,
4102 LPI2C16_Master_EdmaGetDataCount,
4103 LPI2C16_Master_EdmaControl,
4104 LPI2C16_Master_EdmaGetStatus
4105 #else
4106 LPI2C16_InterruptInitialize,
4107 LPI2C16_InterruptUninitialize,
4108 LPI2C16_InterruptPowerControl,
4109 LPI2C16_Master_InterruptTransmit,
4110 LPI2C16_Master_InterruptReceive,
4111 LPI2C16_Slave_InterruptTransmit,
4112 LPI2C16_Slave_InterruptReceive,
4113 LPI2C16_InterruptGetDataCount,
4114 LPI2C16_InterruptControl,
4115 LPI2C16_InterruptGetStatus
4116 #endif /* RTE_I2C16_DMA_EN */
4117 };
4118
4119 #endif /* LPI2C16 */
4120
4121 #if defined(LPI2C17) && defined(RTE_I2C17) && RTE_I2C17
4122 /* User needs to provide the implementation for LPI2C17_GetFreq/InitPins/DeinitPins
4123 in the application for enabling according instance. */
4124 extern uint32_t LPI2C17_GetFreq(void);
4125
4126 static cmsis_lpi2c_resource_t LPI2C17_Resource = {LPI2C17, LPI2C17_GetFreq};
4127
4128 #if defined(RTE_I2C17_DMA_EN) && RTE_I2C17_DMA_EN
4129
4130 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
4131 static cmsis_lpi2c_edma_resource_t LPI2C17_EdmaResource = {
4132 RTE_I2C17_DMA_TX_DMA_BASE, RTE_I2C17_DMA_TX_CH, (uint16_t)RTE_I2C17_DMA_TX_PERI_SEL,
4133 RTE_I2C17_DMA_RX_DMA_BASE, RTE_I2C17_DMA_RX_CH, (uint16_t)RTE_I2C17_DMA_RX_PERI_SEL,
4134 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
4135 RTE_I2C17_DMA_TX_DMAMUX_BASE, RTE_I2C17_DMA_RX_DMAMUX_BASE,
4136 #endif
4137 };
4138
4139 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C17_EdmaHandle);
4140 static edma_handle_t LPI2C17_EdmaTxHandle;
4141 static edma_handle_t LPI2C17_EdmaRxHandle;
4142
4143 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4144 ARMCC_SECTION("lpi2c17_edma_driver_state")
4145 static cmsis_lpi2c_edma_driver_state_t LPI2C17_EdmaDriverState = {
4146 #else
4147 static cmsis_lpi2c_edma_driver_state_t LPI2C17_EdmaDriverState = {
4148 #endif
4149 &LPI2C17_Resource, &LPI2C17_EdmaResource, &LPI2C17_EdmaHandle, &LPI2C17_EdmaTxHandle, &LPI2C17_EdmaRxHandle,
4150 };
4151
LPI2C17_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)4152 static int32_t LPI2C17_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
4153 {
4154 #ifdef RTE_I2C17_PIN_INIT
4155 RTE_I2C17_PIN_INIT();
4156 #endif
4157 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C17_EdmaDriverState);
4158 }
4159
LPI2C17_Master_EdmaUninitialize(void)4160 static int32_t LPI2C17_Master_EdmaUninitialize(void)
4161 {
4162 #ifdef RTE_I2C17_PIN_DEINIT
4163 RTE_I2C17_PIN_DEINIT();
4164 #endif
4165 return LPI2C_Master_EdmaUninitialize(&LPI2C17_EdmaDriverState);
4166 }
4167
LPI2C17_Master_EdmaPowerControl(ARM_POWER_STATE state)4168 static int32_t LPI2C17_Master_EdmaPowerControl(ARM_POWER_STATE state)
4169 {
4170 return LPI2C_Master_EdmaPowerControl(state, &LPI2C17_EdmaDriverState);
4171 }
4172
LPI2C17_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4173 static int32_t LPI2C17_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4174 {
4175 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C17_EdmaDriverState);
4176 }
4177
LPI2C17_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4178 static int32_t LPI2C17_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4179 {
4180 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C17_EdmaDriverState);
4181 }
4182
LPI2C17_Master_EdmaGetDataCount(void)4183 static int32_t LPI2C17_Master_EdmaGetDataCount(void)
4184 {
4185 return LPI2C_Master_EdmaGetDataCount(&LPI2C17_EdmaDriverState);
4186 }
4187
LPI2C17_Master_EdmaControl(uint32_t control,uint32_t arg)4188 static int32_t LPI2C17_Master_EdmaControl(uint32_t control, uint32_t arg)
4189 {
4190 return LPI2C_Master_EdmaControl(control, arg, &LPI2C17_EdmaDriverState);
4191 }
4192
LPI2C17_Master_EdmaGetStatus(void)4193 static ARM_I2C_STATUS LPI2C17_Master_EdmaGetStatus(void)
4194 {
4195 return LPI2C_Master_EdmaGetStatus(&LPI2C17_EdmaDriverState);
4196 }
4197
4198 #endif
4199
4200 #else
4201
4202 static cmsis_i2c_handle_t LPI2C17_Handle;
4203
4204 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4205 ARMCC_SECTION("lpi2c17_interrupt_driver_state")
4206 static cmsis_lpi2c_interrupt_driver_state_t LPI2C17_InterruptDriverState = {
4207 #else
4208 static cmsis_lpi2c_interrupt_driver_state_t LPI2C17_InterruptDriverState = {
4209 #endif
4210 &LPI2C17_Resource,
4211 &LPI2C17_Handle,
4212 };
4213
KSDK_LPI2C17_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)4214 static void KSDK_LPI2C17_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
4215 {
4216 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C17_InterruptDriverState);
4217 }
4218
LPI2C17_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)4219 static int32_t LPI2C17_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
4220 {
4221 #ifdef RTE_I2C17_PIN_INIT
4222 RTE_I2C17_PIN_INIT();
4223 #endif
4224 return LPI2C_InterruptInitialize(cb_event, &LPI2C17_InterruptDriverState);
4225 }
4226
LPI2C17_InterruptUninitialize(void)4227 static int32_t LPI2C17_InterruptUninitialize(void)
4228 {
4229 #ifdef RTE_I2C17_PIN_DEINIT
4230 RTE_I2C17_PIN_DEINIT();
4231 #endif
4232 return LPI2C_InterruptUninitialize(&LPI2C17_InterruptDriverState);
4233 }
4234
LPI2C17_InterruptPowerControl(ARM_POWER_STATE state)4235 static int32_t LPI2C17_InterruptPowerControl(ARM_POWER_STATE state)
4236 {
4237 return LPI2C_InterruptPowerControl(state, &LPI2C17_InterruptDriverState);
4238 }
4239
LPI2C17_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4240 static int32_t LPI2C17_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4241 {
4242 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C17_InterruptDriverState);
4243 }
4244
LPI2C17_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4245 static int32_t LPI2C17_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4246 {
4247 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C17_InterruptDriverState);
4248 }
4249
LPI2C17_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)4250 static int32_t LPI2C17_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
4251 {
4252 LPI2C17_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C17_SLAVE_InterruptCallback;
4253 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C17_InterruptDriverState);
4254 }
4255
LPI2C17_Slave_InterruptReceive(uint8_t * data,uint32_t num)4256 static int32_t LPI2C17_Slave_InterruptReceive(uint8_t *data, uint32_t num)
4257 {
4258 LPI2C17_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C17_SLAVE_InterruptCallback;
4259 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C17_InterruptDriverState);
4260 }
4261
LPI2C17_InterruptGetDataCount(void)4262 static int32_t LPI2C17_InterruptGetDataCount(void)
4263 {
4264 return LPI2C_InterruptGetDataCount(&LPI2C17_InterruptDriverState);
4265 }
4266
LPI2C17_InterruptControl(uint32_t control,uint32_t arg)4267 static int32_t LPI2C17_InterruptControl(uint32_t control, uint32_t arg)
4268 {
4269 return LPI2C_InterruptControl(control, arg, &LPI2C17_InterruptDriverState);
4270 }
4271
LPI2C17_InterruptGetStatus(void)4272 static ARM_I2C_STATUS LPI2C17_InterruptGetStatus(void)
4273 {
4274 return LPI2C_InterruptGetStatus(&LPI2C17_InterruptDriverState);
4275 }
4276
4277 #endif /* RTE_I2C17_DMA_EN */
4278
4279 ARM_DRIVER_I2C Driver_I2C17 = {LPI2Cx_GetVersion,
4280 LPI2Cx_GetCapabilities,
4281 #if defined(RTE_I2C17_DMA_EN) && RTE_I2C17_DMA_EN
4282 LPI2C17_Master_EdmaInitialize,
4283 LPI2C17_Master_EdmaUninitialize,
4284 LPI2C17_Master_EdmaPowerControl,
4285 LPI2C17_Master_EdmaTransmit,
4286 LPI2C17_Master_EdmaReceive,
4287 NULL,
4288 NULL,
4289 LPI2C17_Master_EdmaGetDataCount,
4290 LPI2C17_Master_EdmaControl,
4291 LPI2C17_Master_EdmaGetStatus
4292 #else
4293 LPI2C17_InterruptInitialize,
4294 LPI2C17_InterruptUninitialize,
4295 LPI2C17_InterruptPowerControl,
4296 LPI2C17_Master_InterruptTransmit,
4297 LPI2C17_Master_InterruptReceive,
4298 LPI2C17_Slave_InterruptTransmit,
4299 LPI2C17_Slave_InterruptReceive,
4300 LPI2C17_InterruptGetDataCount,
4301 LPI2C17_InterruptControl,
4302 LPI2C17_InterruptGetStatus
4303 #endif /* RTE_I2C17_DMA_EN */
4304 };
4305
4306 #endif /* LPI2C17 */
4307
4308 #if defined(LPI2C18) && defined(RTE_I2C18) && RTE_I2C18
4309 /* User needs to provide the implementation for LPI2C18_GetFreq/InitPins/DeinitPins
4310 in the application for enabling according instance. */
4311 extern uint32_t LPI2C18_GetFreq(void);
4312
4313 static cmsis_lpi2c_resource_t LPI2C18_Resource = {LPI2C18, LPI2C18_GetFreq};
4314
4315 #if defined(RTE_I2C18_DMA_EN) && RTE_I2C18_DMA_EN
4316
4317 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
4318 static cmsis_lpi2c_edma_resource_t LPI2C18_EdmaResource = {
4319 RTE_I2C18_DMA_TX_DMA_BASE, RTE_I2C18_DMA_TX_CH, (uint16_t)RTE_I2C18_DMA_TX_PERI_SEL,
4320 RTE_I2C18_DMA_RX_DMA_BASE, RTE_I2C18_DMA_RX_CH, (uint16_t)RTE_I2C18_DMA_RX_PERI_SEL,
4321 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
4322 RTE_I2C18_DMA_TX_DMAMUX_BASE, RTE_I2C18_DMA_RX_DMAMUX_BASE,
4323 #endif
4324 };
4325
4326 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C18_EdmaHandle);
4327 static edma_handle_t LPI2C18_EdmaTxHandle;
4328 static edma_handle_t LPI2C18_EdmaRxHandle;
4329
4330 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4331 ARMCC_SECTION("lpi2c18_edma_driver_state")
4332 static cmsis_lpi2c_edma_driver_state_t LPI2C18_EdmaDriverState = {
4333 #else
4334 static cmsis_lpi2c_edma_driver_state_t LPI2C18_EdmaDriverState = {
4335 #endif
4336 &LPI2C18_Resource, &LPI2C18_EdmaResource, &LPI2C18_EdmaHandle, &LPI2C18_EdmaTxHandle, &LPI2C18_EdmaRxHandle,
4337 };
4338
LPI2C18_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)4339 static int32_t LPI2C18_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
4340 {
4341 #ifdef RTE_I2C18_PIN_INIT
4342 RTE_I2C18_PIN_INIT();
4343 #endif
4344 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C18_EdmaDriverState);
4345 }
4346
LPI2C18_Master_EdmaUninitialize(void)4347 static int32_t LPI2C18_Master_EdmaUninitialize(void)
4348 {
4349 #ifdef RTE_I2C18_PIN_DEINIT
4350 RTE_I2C18_PIN_DEINIT();
4351 #endif
4352 return LPI2C_Master_EdmaUninitialize(&LPI2C18_EdmaDriverState);
4353 }
4354
LPI2C18_Master_EdmaPowerControl(ARM_POWER_STATE state)4355 static int32_t LPI2C18_Master_EdmaPowerControl(ARM_POWER_STATE state)
4356 {
4357 return LPI2C_Master_EdmaPowerControl(state, &LPI2C18_EdmaDriverState);
4358 }
4359
LPI2C18_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4360 static int32_t LPI2C18_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4361 {
4362 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C18_EdmaDriverState);
4363 }
4364
LPI2C18_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4365 static int32_t LPI2C18_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4366 {
4367 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C18_EdmaDriverState);
4368 }
4369
LPI2C18_Master_EdmaGetDataCount(void)4370 static int32_t LPI2C18_Master_EdmaGetDataCount(void)
4371 {
4372 return LPI2C_Master_EdmaGetDataCount(&LPI2C18_EdmaDriverState);
4373 }
4374
LPI2C18_Master_EdmaControl(uint32_t control,uint32_t arg)4375 static int32_t LPI2C18_Master_EdmaControl(uint32_t control, uint32_t arg)
4376 {
4377 return LPI2C_Master_EdmaControl(control, arg, &LPI2C18_EdmaDriverState);
4378 }
4379
LPI2C18_Master_EdmaGetStatus(void)4380 static ARM_I2C_STATUS LPI2C18_Master_EdmaGetStatus(void)
4381 {
4382 return LPI2C_Master_EdmaGetStatus(&LPI2C18_EdmaDriverState);
4383 }
4384
4385 #endif
4386
4387 #else
4388
4389 static cmsis_i2c_handle_t LPI2C18_Handle;
4390
4391 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4392 ARMCC_SECTION("lpi2c18_interrupt_driver_state")
4393 static cmsis_lpi2c_interrupt_driver_state_t LPI2C18_InterruptDriverState = {
4394 #else
4395 static cmsis_lpi2c_interrupt_driver_state_t LPI2C18_InterruptDriverState = {
4396 #endif
4397 &LPI2C18_Resource,
4398 &LPI2C18_Handle,
4399 };
4400
KSDK_LPI2C18_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)4401 static void KSDK_LPI2C18_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
4402 {
4403 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C18_InterruptDriverState);
4404 }
4405
LPI2C18_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)4406 static int32_t LPI2C18_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
4407 {
4408 #ifdef RTE_I2C18_PIN_INIT
4409 RTE_I2C18_PIN_INIT();
4410 #endif
4411 return LPI2C_InterruptInitialize(cb_event, &LPI2C18_InterruptDriverState);
4412 }
4413
LPI2C18_InterruptUninitialize(void)4414 static int32_t LPI2C18_InterruptUninitialize(void)
4415 {
4416 #ifdef RTE_I2C18_PIN_DEINIT
4417 RTE_I2C18_PIN_DEINIT();
4418 #endif
4419 return LPI2C_InterruptUninitialize(&LPI2C18_InterruptDriverState);
4420 }
4421
LPI2C18_InterruptPowerControl(ARM_POWER_STATE state)4422 static int32_t LPI2C18_InterruptPowerControl(ARM_POWER_STATE state)
4423 {
4424 return LPI2C_InterruptPowerControl(state, &LPI2C18_InterruptDriverState);
4425 }
4426
LPI2C18_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4427 static int32_t LPI2C18_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4428 {
4429 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C18_InterruptDriverState);
4430 }
4431
LPI2C18_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4432 static int32_t LPI2C18_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4433 {
4434 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C18_InterruptDriverState);
4435 }
4436
LPI2C18_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)4437 static int32_t LPI2C18_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
4438 {
4439 LPI2C18_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C18_SLAVE_InterruptCallback;
4440 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C18_InterruptDriverState);
4441 }
4442
LPI2C18_Slave_InterruptReceive(uint8_t * data,uint32_t num)4443 static int32_t LPI2C18_Slave_InterruptReceive(uint8_t *data, uint32_t num)
4444 {
4445 LPI2C18_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C18_SLAVE_InterruptCallback;
4446 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C18_InterruptDriverState);
4447 }
4448
LPI2C18_InterruptGetDataCount(void)4449 static int32_t LPI2C18_InterruptGetDataCount(void)
4450 {
4451 return LPI2C_InterruptGetDataCount(&LPI2C18_InterruptDriverState);
4452 }
4453
LPI2C18_InterruptControl(uint32_t control,uint32_t arg)4454 static int32_t LPI2C18_InterruptControl(uint32_t control, uint32_t arg)
4455 {
4456 return LPI2C_InterruptControl(control, arg, &LPI2C18_InterruptDriverState);
4457 }
4458
LPI2C18_InterruptGetStatus(void)4459 static ARM_I2C_STATUS LPI2C18_InterruptGetStatus(void)
4460 {
4461 return LPI2C_InterruptGetStatus(&LPI2C18_InterruptDriverState);
4462 }
4463
4464 #endif /* RTE_I2C18_DMA_EN */
4465
4466 ARM_DRIVER_I2C Driver_I2C18 = {LPI2Cx_GetVersion,
4467 LPI2Cx_GetCapabilities,
4468 #if defined(RTE_I2C18_DMA_EN) && RTE_I2C18_DMA_EN
4469 LPI2C18_Master_EdmaInitialize,
4470 LPI2C18_Master_EdmaUninitialize,
4471 LPI2C18_Master_EdmaPowerControl,
4472 LPI2C18_Master_EdmaTransmit,
4473 LPI2C18_Master_EdmaReceive,
4474 NULL,
4475 NULL,
4476 LPI2C18_Master_EdmaGetDataCount,
4477 LPI2C18_Master_EdmaControl,
4478 LPI2C18_Master_EdmaGetStatus
4479 #else
4480 LPI2C18_InterruptInitialize,
4481 LPI2C18_InterruptUninitialize,
4482 LPI2C18_InterruptPowerControl,
4483 LPI2C18_Master_InterruptTransmit,
4484 LPI2C18_Master_InterruptReceive,
4485 LPI2C18_Slave_InterruptTransmit,
4486 LPI2C18_Slave_InterruptReceive,
4487 LPI2C18_InterruptGetDataCount,
4488 LPI2C18_InterruptControl,
4489 LPI2C18_InterruptGetStatus
4490 #endif /* RTE_I2C18_DMA_EN */
4491 };
4492
4493 #endif /* LPI2C18 */
4494
4495 #if defined(LPI2C19) && defined(RTE_I2C19) && RTE_I2C19
4496 /* User needs to provide the implementation for LPI2C19_GetFreq/InitPins/DeinitPins
4497 in the application for enabling according instance. */
4498 extern uint32_t LPI2C19_GetFreq(void);
4499
4500 static cmsis_lpi2c_resource_t LPI2C19_Resource = {LPI2C19, LPI2C19_GetFreq};
4501
4502 #if defined(RTE_I2C19_DMA_EN) && RTE_I2C19_DMA_EN
4503
4504 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
4505 static cmsis_lpi2c_edma_resource_t LPI2C19_EdmaResource = {
4506 RTE_I2C19_DMA_TX_DMA_BASE, RTE_I2C19_DMA_TX_CH, (uint16_t)RTE_I2C19_DMA_TX_PERI_SEL,
4507 RTE_I2C19_DMA_RX_DMA_BASE, RTE_I2C19_DMA_RX_CH, (uint16_t)RTE_I2C19_DMA_RX_PERI_SEL,
4508 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
4509 RTE_I2C19_DMA_TX_DMAMUX_BASE, RTE_I2C19_DMA_RX_DMAMUX_BASE,
4510 #endif
4511 };
4512
4513 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C19_EdmaHandle);
4514 static edma_handle_t LPI2C19_EdmaTxHandle;
4515 static edma_handle_t LPI2C19_EdmaRxHandle;
4516
4517 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4518 ARMCC_SECTION("lpi2c19_edma_driver_state")
4519 static cmsis_lpi2c_edma_driver_state_t LPI2C19_EdmaDriverState = {
4520 #else
4521 static cmsis_lpi2c_edma_driver_state_t LPI2C19_EdmaDriverState = {
4522 #endif
4523 &LPI2C19_Resource, &LPI2C19_EdmaResource, &LPI2C19_EdmaHandle, &LPI2C19_EdmaTxHandle, &LPI2C19_EdmaRxHandle,
4524 };
4525
LPI2C19_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)4526 static int32_t LPI2C19_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
4527 {
4528 #ifdef RTE_I2C19_PIN_INIT
4529 RTE_I2C19_PIN_INIT();
4530 #endif
4531 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C19_EdmaDriverState);
4532 }
4533
LPI2C19_Master_EdmaUninitialize(void)4534 static int32_t LPI2C19_Master_EdmaUninitialize(void)
4535 {
4536 #ifdef RTE_I2C19_PIN_DEINIT
4537 RTE_I2C19_PIN_DEINIT();
4538 #endif
4539 return LPI2C_Master_EdmaUninitialize(&LPI2C19_EdmaDriverState);
4540 }
4541
LPI2C19_Master_EdmaPowerControl(ARM_POWER_STATE state)4542 static int32_t LPI2C19_Master_EdmaPowerControl(ARM_POWER_STATE state)
4543 {
4544 return LPI2C_Master_EdmaPowerControl(state, &LPI2C19_EdmaDriverState);
4545 }
4546
LPI2C19_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4547 static int32_t LPI2C19_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4548 {
4549 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C19_EdmaDriverState);
4550 }
4551
LPI2C19_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4552 static int32_t LPI2C19_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4553 {
4554 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C19_EdmaDriverState);
4555 }
4556
LPI2C19_Master_EdmaGetDataCount(void)4557 static int32_t LPI2C19_Master_EdmaGetDataCount(void)
4558 {
4559 return LPI2C_Master_EdmaGetDataCount(&LPI2C19_EdmaDriverState);
4560 }
4561
LPI2C19_Master_EdmaControl(uint32_t control,uint32_t arg)4562 static int32_t LPI2C19_Master_EdmaControl(uint32_t control, uint32_t arg)
4563 {
4564 return LPI2C_Master_EdmaControl(control, arg, &LPI2C19_EdmaDriverState);
4565 }
4566
LPI2C19_Master_EdmaGetStatus(void)4567 static ARM_I2C_STATUS LPI2C19_Master_EdmaGetStatus(void)
4568 {
4569 return LPI2C_Master_EdmaGetStatus(&LPI2C19_EdmaDriverState);
4570 }
4571
4572 #endif
4573
4574 #else
4575
4576 static cmsis_i2c_handle_t LPI2C19_Handle;
4577
4578 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4579 ARMCC_SECTION("lpi2c19_interrupt_driver_state")
4580 static cmsis_lpi2c_interrupt_driver_state_t LPI2C19_InterruptDriverState = {
4581 #else
4582 static cmsis_lpi2c_interrupt_driver_state_t LPI2C19_InterruptDriverState = {
4583 #endif
4584 &LPI2C19_Resource,
4585 &LPI2C19_Handle,
4586 };
4587
KSDK_LPI2C19_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)4588 static void KSDK_LPI2C19_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
4589 {
4590 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C19_InterruptDriverState);
4591 }
4592
LPI2C19_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)4593 static int32_t LPI2C19_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
4594 {
4595 #ifdef RTE_I2C19_PIN_INIT
4596 RTE_I2C19_PIN_INIT();
4597 #endif
4598 return LPI2C_InterruptInitialize(cb_event, &LPI2C19_InterruptDriverState);
4599 }
4600
LPI2C19_InterruptUninitialize(void)4601 static int32_t LPI2C19_InterruptUninitialize(void)
4602 {
4603 #ifdef RTE_I2C19_PIN_DEINIT
4604 RTE_I2C19_PIN_DEINIT();
4605 #endif
4606 return LPI2C_InterruptUninitialize(&LPI2C19_InterruptDriverState);
4607 }
4608
LPI2C19_InterruptPowerControl(ARM_POWER_STATE state)4609 static int32_t LPI2C19_InterruptPowerControl(ARM_POWER_STATE state)
4610 {
4611 return LPI2C_InterruptPowerControl(state, &LPI2C19_InterruptDriverState);
4612 }
4613
LPI2C19_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4614 static int32_t LPI2C19_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4615 {
4616 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C19_InterruptDriverState);
4617 }
4618
LPI2C19_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4619 static int32_t LPI2C19_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4620 {
4621 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C19_InterruptDriverState);
4622 }
4623
LPI2C19_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)4624 static int32_t LPI2C19_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
4625 {
4626 LPI2C19_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C19_SLAVE_InterruptCallback;
4627 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C19_InterruptDriverState);
4628 }
4629
LPI2C19_Slave_InterruptReceive(uint8_t * data,uint32_t num)4630 static int32_t LPI2C19_Slave_InterruptReceive(uint8_t *data, uint32_t num)
4631 {
4632 LPI2C19_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C19_SLAVE_InterruptCallback;
4633 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C19_InterruptDriverState);
4634 }
4635
LPI2C19_InterruptGetDataCount(void)4636 static int32_t LPI2C19_InterruptGetDataCount(void)
4637 {
4638 return LPI2C_InterruptGetDataCount(&LPI2C19_InterruptDriverState);
4639 }
4640
LPI2C19_InterruptControl(uint32_t control,uint32_t arg)4641 static int32_t LPI2C19_InterruptControl(uint32_t control, uint32_t arg)
4642 {
4643 return LPI2C_InterruptControl(control, arg, &LPI2C19_InterruptDriverState);
4644 }
4645
LPI2C19_InterruptGetStatus(void)4646 static ARM_I2C_STATUS LPI2C19_InterruptGetStatus(void)
4647 {
4648 return LPI2C_InterruptGetStatus(&LPI2C19_InterruptDriverState);
4649 }
4650
4651 #endif /* RTE_I2C19_DMA_EN */
4652
4653 ARM_DRIVER_I2C Driver_I2C19 = {LPI2Cx_GetVersion,
4654 LPI2Cx_GetCapabilities,
4655 #if defined(RTE_I2C19_DMA_EN) && RTE_I2C19_DMA_EN
4656 LPI2C19_Master_EdmaInitialize,
4657 LPI2C19_Master_EdmaUninitialize,
4658 LPI2C19_Master_EdmaPowerControl,
4659 LPI2C19_Master_EdmaTransmit,
4660 LPI2C19_Master_EdmaReceive,
4661 NULL,
4662 NULL,
4663 LPI2C19_Master_EdmaGetDataCount,
4664 LPI2C19_Master_EdmaControl,
4665 LPI2C19_Master_EdmaGetStatus
4666 #else
4667 LPI2C19_InterruptInitialize,
4668 LPI2C19_InterruptUninitialize,
4669 LPI2C19_InterruptPowerControl,
4670 LPI2C19_Master_InterruptTransmit,
4671 LPI2C19_Master_InterruptReceive,
4672 LPI2C19_Slave_InterruptTransmit,
4673 LPI2C19_Slave_InterruptReceive,
4674 LPI2C19_InterruptGetDataCount,
4675 LPI2C19_InterruptControl,
4676 LPI2C19_InterruptGetStatus
4677 #endif /* RTE_I2C19_DMA_EN */
4678 };
4679
4680 #endif /* LPI2C19 */
4681
4682 #if defined(LPI2C20) && defined(RTE_I2C20) && RTE_I2C20
4683 /* User needs to provide the implementation for LPI2C20_GetFreq/InitPins/DeinitPins
4684 in the application for enabling according instance. */
4685 extern uint32_t LPI2C20_GetFreq(void);
4686
4687 static cmsis_lpi2c_resource_t LPI2C20_Resource = {LPI2C20, LPI2C20_GetFreq};
4688
4689 #if defined(RTE_I2C20_DMA_EN) && RTE_I2C20_DMA_EN
4690
4691 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && FSL_FEATURE_SOC_EDMA_COUNT)
4692 static cmsis_lpi2c_edma_resource_t LPI2C20_EdmaResource = {
4693 RTE_I2C20_DMA_TX_DMA_BASE, RTE_I2C20_DMA_TX_CH, (uint16_t)RTE_I2C20_DMA_TX_PERI_SEL,
4694 RTE_I2C20_DMA_RX_DMA_BASE, RTE_I2C20_DMA_RX_CH, (uint16_t)RTE_I2C20_DMA_RX_PERI_SEL,
4695 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT)
4696 RTE_I2C20_DMA_TX_DMAMUX_BASE, RTE_I2C20_DMA_RX_DMAMUX_BASE,
4697 #endif
4698 };
4699
4700 AT_NONCACHEABLE_SECTION(static lpi2c_master_edma_handle_t LPI2C20_EdmaHandle);
4701 static edma_handle_t LPI2C20_EdmaTxHandle;
4702 static edma_handle_t LPI2C20_EdmaRxHandle;
4703
4704 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4705 ARMCC_SECTION("lpi2c20_edma_driver_state")
4706 static cmsis_lpi2c_edma_driver_state_t LPI2C20_EdmaDriverState = {
4707 #else
4708 static cmsis_lpi2c_edma_driver_state_t LPI2C20_EdmaDriverState = {
4709 #endif
4710 &LPI2C20_Resource, &LPI2C20_EdmaResource, &LPI2C20_EdmaHandle, &LPI2C20_EdmaTxHandle, &LPI2C20_EdmaRxHandle,
4711 };
4712
LPI2C20_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)4713 static int32_t LPI2C20_Master_EdmaInitialize(ARM_I2C_SignalEvent_t cb_event)
4714 {
4715 #ifdef RTE_I2C20_PIN_INIT
4716 RTE_I2C20_PIN_INIT();
4717 #endif
4718 return LPI2C_Master_EdmaInitialize(cb_event, &LPI2C20_EdmaDriverState);
4719 }
4720
LPI2C20_Master_EdmaUninitialize(void)4721 static int32_t LPI2C20_Master_EdmaUninitialize(void)
4722 {
4723 #ifdef RTE_I2C20_PIN_DEINIT
4724 RTE_I2C20_PIN_DEINIT();
4725 #endif
4726 return LPI2C_Master_EdmaUninitialize(&LPI2C20_EdmaDriverState);
4727 }
4728
LPI2C20_Master_EdmaPowerControl(ARM_POWER_STATE state)4729 static int32_t LPI2C20_Master_EdmaPowerControl(ARM_POWER_STATE state)
4730 {
4731 return LPI2C_Master_EdmaPowerControl(state, &LPI2C20_EdmaDriverState);
4732 }
4733
LPI2C20_Master_EdmaTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4734 static int32_t LPI2C20_Master_EdmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4735 {
4736 return LPI2C_Master_EdmaTransmit(addr, data, num, xfer_pending, &LPI2C20_EdmaDriverState);
4737 }
4738
LPI2C20_Master_EdmaReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4739 static int32_t LPI2C20_Master_EdmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4740 {
4741 return LPI2C_Master_EdmaReceive(addr, data, num, xfer_pending, &LPI2C20_EdmaDriverState);
4742 }
4743
LPI2C20_Master_EdmaGetDataCount(void)4744 static int32_t LPI2C20_Master_EdmaGetDataCount(void)
4745 {
4746 return LPI2C_Master_EdmaGetDataCount(&LPI2C20_EdmaDriverState);
4747 }
4748
LPI2C20_Master_EdmaControl(uint32_t control,uint32_t arg)4749 static int32_t LPI2C20_Master_EdmaControl(uint32_t control, uint32_t arg)
4750 {
4751 return LPI2C_Master_EdmaControl(control, arg, &LPI2C20_EdmaDriverState);
4752 }
4753
LPI2C20_Master_EdmaGetStatus(void)4754 static ARM_I2C_STATUS LPI2C20_Master_EdmaGetStatus(void)
4755 {
4756 return LPI2C_Master_EdmaGetStatus(&LPI2C20_EdmaDriverState);
4757 }
4758
4759 #endif
4760
4761 #else
4762
4763 static cmsis_i2c_handle_t LPI2C20_Handle;
4764
4765 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
4766 ARMCC_SECTION("lpi2c20_interrupt_driver_state")
4767 static cmsis_lpi2c_interrupt_driver_state_t LPI2C20_InterruptDriverState = {
4768 #else
4769 static cmsis_lpi2c_interrupt_driver_state_t LPI2C20_InterruptDriverState = {
4770 #endif
4771 &LPI2C20_Resource,
4772 &LPI2C20_Handle,
4773 };
4774
KSDK_LPI2C20_SLAVE_InterruptCallback(LPI2C_Type * base,lpi2c_slave_transfer_t * xfer,void * userData)4775 static void KSDK_LPI2C20_SLAVE_InterruptCallback(LPI2C_Type *base, lpi2c_slave_transfer_t *xfer, void *userData)
4776 {
4777 KSDK_LPI2C_SLAVE_InterruptCallback(base, xfer, userData, &LPI2C20_InterruptDriverState);
4778 }
4779
LPI2C20_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)4780 static int32_t LPI2C20_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
4781 {
4782 #ifdef RTE_I2C20_PIN_INIT
4783 RTE_I2C20_PIN_INIT();
4784 #endif
4785 return LPI2C_InterruptInitialize(cb_event, &LPI2C20_InterruptDriverState);
4786 }
4787
LPI2C20_InterruptUninitialize(void)4788 static int32_t LPI2C20_InterruptUninitialize(void)
4789 {
4790 #ifdef RTE_I2C20_PIN_DEINIT
4791 RTE_I2C20_PIN_DEINIT();
4792 #endif
4793 return LPI2C_InterruptUninitialize(&LPI2C20_InterruptDriverState);
4794 }
4795
LPI2C20_InterruptPowerControl(ARM_POWER_STATE state)4796 static int32_t LPI2C20_InterruptPowerControl(ARM_POWER_STATE state)
4797 {
4798 return LPI2C_InterruptPowerControl(state, &LPI2C20_InterruptDriverState);
4799 }
4800
LPI2C20_Master_InterruptTransmit(uint32_t addr,const uint8_t * data,uint32_t num,bool xfer_pending)4801 static int32_t LPI2C20_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
4802 {
4803 return LPI2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &LPI2C20_InterruptDriverState);
4804 }
4805
LPI2C20_Master_InterruptReceive(uint32_t addr,uint8_t * data,uint32_t num,bool xfer_pending)4806 static int32_t LPI2C20_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
4807 {
4808 return LPI2C_Master_InterruptReceive(addr, data, num, xfer_pending, &LPI2C20_InterruptDriverState);
4809 }
4810
LPI2C20_Slave_InterruptTransmit(const uint8_t * data,uint32_t num)4811 static int32_t LPI2C20_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
4812 {
4813 LPI2C20_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C20_SLAVE_InterruptCallback;
4814 return LPI2C_Slave_InterruptTransmit(data, num, &LPI2C20_InterruptDriverState);
4815 }
4816
LPI2C20_Slave_InterruptReceive(uint8_t * data,uint32_t num)4817 static int32_t LPI2C20_Slave_InterruptReceive(uint8_t *data, uint32_t num)
4818 {
4819 LPI2C20_InterruptDriverState.handle->slave_handle.callback = KSDK_LPI2C20_SLAVE_InterruptCallback;
4820 return LPI2C_Slave_InterruptReceive(data, num, &LPI2C20_InterruptDriverState);
4821 }
4822
LPI2C20_InterruptGetDataCount(void)4823 static int32_t LPI2C20_InterruptGetDataCount(void)
4824 {
4825 return LPI2C_InterruptGetDataCount(&LPI2C20_InterruptDriverState);
4826 }
4827
LPI2C20_InterruptControl(uint32_t control,uint32_t arg)4828 static int32_t LPI2C20_InterruptControl(uint32_t control, uint32_t arg)
4829 {
4830 return LPI2C_InterruptControl(control, arg, &LPI2C20_InterruptDriverState);
4831 }
4832
LPI2C20_InterruptGetStatus(void)4833 static ARM_I2C_STATUS LPI2C20_InterruptGetStatus(void)
4834 {
4835 return LPI2C_InterruptGetStatus(&LPI2C20_InterruptDriverState);
4836 }
4837
4838 #endif /* RTE_I2C20_DMA_EN */
4839
4840 ARM_DRIVER_I2C Driver_I2C20 = {LPI2Cx_GetVersion,
4841 LPI2Cx_GetCapabilities,
4842 #if defined(RTE_I2C20_DMA_EN) && RTE_I2C20_DMA_EN
4843 LPI2C20_Master_EdmaInitialize,
4844 LPI2C20_Master_EdmaUninitialize,
4845 LPI2C20_Master_EdmaPowerControl,
4846 LPI2C20_Master_EdmaTransmit,
4847 LPI2C20_Master_EdmaReceive,
4848 NULL,
4849 NULL,
4850 LPI2C20_Master_EdmaGetDataCount,
4851 LPI2C20_Master_EdmaControl,
4852 LPI2C20_Master_EdmaGetStatus
4853 #else
4854 LPI2C20_InterruptInitialize,
4855 LPI2C20_InterruptUninitialize,
4856 LPI2C20_InterruptPowerControl,
4857 LPI2C20_Master_InterruptTransmit,
4858 LPI2C20_Master_InterruptReceive,
4859 LPI2C20_Slave_InterruptTransmit,
4860 LPI2C20_Slave_InterruptReceive,
4861 LPI2C20_InterruptGetDataCount,
4862 LPI2C20_InterruptControl,
4863 LPI2C20_InterruptGetStatus
4864 #endif /* RTE_I2C20_DMA_EN */
4865 };
4866
4867 #endif /* LPI2C20 */
4868