1 /******************************************************************************
2 *
3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4 * Analog Devices, Inc.),
5 * Copyright (C) 2023-2024 Analog Devices, Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 ******************************************************************************/
20
21 #include <stdio.h>
22 #include <stddef.h>
23 #include <stdint.h>
24 #include <stdbool.h>
25
26 #include "mxc_device.h"
27 #include "mxc_assert.h"
28 #include "mxc_lock.h"
29 #include "mxc_sys.h"
30 #include "mxc_delay.h"
31 #include "spi_reva1.h"
32 #include "dma.h"
33
34 /* **** Definitions **** */
35
36 /* ************************************************************************** */
MXC_SPI_Init(mxc_spi_regs_t * spi,mxc_spi_type_t controller_target,mxc_spi_interface_t if_mode,int numTargets,uint8_t ts_active_pol_mask,uint32_t freq,mxc_spi_pins_t pins)37 int MXC_SPI_Init(mxc_spi_regs_t *spi, mxc_spi_type_t controller_target, mxc_spi_interface_t if_mode,
38 int numTargets, uint8_t ts_active_pol_mask, uint32_t freq, mxc_spi_pins_t pins)
39 {
40 int spi_num;
41
42 // Remap input parameters for v1 implementation.
43 int masterMode = controller_target;
44 int quadModeUsed = if_mode;
45 int numSlaves = numTargets;
46 int ssPolarity = ts_active_pol_mask;
47 int hz = freq;
48
49 spi_num = MXC_SPI_GET_IDX(spi);
50 MXC_ASSERT(spi_num >= 0);
51
52 if (numSlaves > MXC_SPI_SS_INSTANCES) {
53 return E_BAD_PARAM;
54 }
55
56 // Check if frequency is too high
57 if ((spi_num == 0) && (hz > PeripheralClock)) {
58 return E_BAD_PARAM;
59 }
60
61 if ((spi_num == 1) && (hz > SystemCoreClock)) {
62 return E_BAD_PARAM;
63 }
64
65 mxc_gpio_cfg_t gpio_cfg_spi;
66 gpio_cfg_spi.pad = MXC_GPIO_PAD_NONE;
67 gpio_cfg_spi.port = MXC_GPIO0;
68
69 // Set VDDIO level
70 if (pins.vddioh) {
71 gpio_cfg_spi.vssel = MXC_GPIO_VSSEL_VDDIOH;
72 } else {
73 gpio_cfg_spi.vssel = MXC_GPIO_VSSEL_VDDIO;
74 }
75
76 // Configure GPIO for spi
77 if (spi == MXC_SPI1) {
78 MXC_SYS_Reset_Periph(MXC_SYS_RESET0_SPI1);
79 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPI1);
80
81 //Define pins
82 if (pins.ss1) {
83 gpio_cfg_spi.mask = MXC_GPIO_PIN_26;
84 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
85 MXC_GPIO_Config(&gpio_cfg_spi);
86 }
87
88 if (pins.ss2) {
89 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
90 gpio_cfg_spi.mask = MXC_GPIO_PIN_27;
91 MXC_GPIO_Config(&gpio_cfg_spi);
92 }
93
94 //clear mask
95 gpio_cfg_spi.mask = 0;
96
97 // check rest of the pins
98 if (pins.clock) {
99 gpio_cfg_spi.mask |= MXC_GPIO_PIN_23;
100 }
101
102 if (pins.miso) {
103 gpio_cfg_spi.mask |= MXC_GPIO_PIN_22;
104 }
105
106 if (pins.mosi) {
107 gpio_cfg_spi.mask |= MXC_GPIO_PIN_21;
108 }
109
110 if (pins.sdio2) {
111 gpio_cfg_spi.mask |= MXC_GPIO_PIN_24;
112 }
113
114 if (pins.sdio3) {
115 gpio_cfg_spi.mask |= MXC_GPIO_PIN_25;
116 }
117
118 if (pins.ss0) {
119 gpio_cfg_spi.mask |= MXC_GPIO_PIN_20;
120 }
121
122 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT1;
123
124 #ifdef MXC_SPI0
125 } else if (spi == MXC_SPI0) {
126 MXC_SYS_Reset_Periph(MXC_SYS_RESET1_SPI0);
127 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPI0);
128
129 //Define pins
130 if (pins.ss1) {
131 gpio_cfg_spi.mask = MXC_GPIO_PIN_11;
132 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
133 MXC_GPIO_Config(&gpio_cfg_spi);
134 }
135
136 if (pins.ss2) {
137 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
138 gpio_cfg_spi.mask = MXC_GPIO_PIN_10;
139 MXC_GPIO_Config(&gpio_cfg_spi);
140 }
141
142 //clear mask
143 gpio_cfg_spi.mask = 0;
144
145 // check rest of the pins
146 if (pins.clock) {
147 gpio_cfg_spi.mask |= MXC_GPIO_PIN_7;
148 }
149
150 if (pins.miso) {
151 gpio_cfg_spi.mask |= MXC_GPIO_PIN_6;
152 }
153
154 if (pins.mosi) {
155 gpio_cfg_spi.mask |= MXC_GPIO_PIN_5;
156 }
157
158 if (pins.sdio2) {
159 gpio_cfg_spi.mask |= MXC_GPIO_PIN_8;
160 }
161
162 if (pins.sdio3) {
163 gpio_cfg_spi.mask |= MXC_GPIO_PIN_9;
164 }
165
166 if (pins.ss0) {
167 gpio_cfg_spi.mask |= MXC_GPIO_PIN_4;
168 }
169
170 gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT1;
171 #endif
172 } else {
173 return E_NO_DEVICE;
174 }
175
176 MXC_GPIO_Config(&gpio_cfg_spi);
177
178 return MXC_SPI_RevA1_Init((mxc_spi_reva_regs_t *)spi, masterMode, quadModeUsed, numSlaves,
179 ssPolarity, hz);
180 }
181
MXC_SPI_Shutdown(mxc_spi_regs_t * spi)182 int MXC_SPI_Shutdown(mxc_spi_regs_t *spi)
183 {
184 int spi_num;
185 spi_num = MXC_SPI_GET_IDX(spi);
186 MXC_ASSERT(spi_num >= 0);
187 (void)spi_num;
188
189 MXC_SPI_RevA1_Shutdown((mxc_spi_reva_regs_t *)spi);
190
191 if (spi == MXC_SPI1) {
192 MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPI1);
193 #ifdef MXC_SPI0
194 } else if (spi == MXC_SPI0) {
195 MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPI0);
196 #endif
197 } else {
198 return E_NO_DEVICE;
199 }
200
201 return E_NO_ERROR;
202 }
203
MXC_SPI_ReadyForSleep(mxc_spi_regs_t * spi)204 int MXC_SPI_ReadyForSleep(mxc_spi_regs_t *spi)
205 {
206 return MXC_SPI_RevA1_ReadyForSleep((mxc_spi_reva_regs_t *)spi);
207 }
208
MXC_SPI_GetPeripheralClock(mxc_spi_regs_t * spi)209 int MXC_SPI_GetPeripheralClock(mxc_spi_regs_t *spi)
210 {
211 int retval;
212
213 if (spi == MXC_SPI1) {
214 retval = PeripheralClock;
215 #ifdef MXC_SPI0 // SPI0 is not accessible from the RISC core.
216 } else if (spi == MXC_SPI0) {
217 int sys_clk = (MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_SYSCLK_SEL) >>
218 MXC_F_GCR_CLKCTRL_SYSCLK_SEL_POS;
219 switch (sys_clk) {
220 case MXC_SYS_CLOCK_IPO:
221 retval = IPO_FREQ;
222 break;
223 case MXC_SYS_CLOCK_IBRO:
224 retval = IBRO_FREQ;
225 break;
226 case MXC_SYS_CLOCK_ISO:
227 retval = ISO_FREQ;
228 break;
229 case MXC_SYS_CLOCK_INRO:
230 retval = INRO_FREQ;
231 break;
232 case MXC_SYS_CLOCK_ERTCO:
233 retval = ERTCO_FREQ;
234 break;
235 case MXC_SYS_CLOCK_EXTCLK:
236 retval = EXTCLK_FREQ;
237 break;
238 default:
239 return E_BAD_STATE;
240 }
241 #endif // MXC_SPI0
242 } else {
243 return E_BAD_PARAM;
244 }
245
246 retval /= 2;
247
248 return retval;
249 }
250
MXC_SPI_SetFrequency(mxc_spi_regs_t * spi,unsigned int hz)251 int MXC_SPI_SetFrequency(mxc_spi_regs_t *spi, unsigned int hz)
252 {
253 return MXC_SPI_RevA1_SetFrequency((mxc_spi_reva_regs_t *)spi, hz);
254 }
255
MXC_SPI_GetFrequency(mxc_spi_regs_t * spi)256 unsigned int MXC_SPI_GetFrequency(mxc_spi_regs_t *spi)
257 {
258 return MXC_SPI_RevA1_GetFrequency((mxc_spi_reva_regs_t *)spi);
259 }
260
MXC_SPI_SetDataSize(mxc_spi_regs_t * spi,int dataSize)261 int MXC_SPI_SetDataSize(mxc_spi_regs_t *spi, int dataSize)
262 {
263 return MXC_SPI_RevA1_SetDataSize((mxc_spi_reva_regs_t *)spi, dataSize);
264 }
265
MXC_SPI_GetDataSize(mxc_spi_regs_t * spi)266 int MXC_SPI_GetDataSize(mxc_spi_regs_t *spi)
267 {
268 return MXC_SPI_RevA1_GetDataSize((mxc_spi_reva_regs_t *)spi);
269 }
270
MXC_SPI_SetSlave(mxc_spi_regs_t * spi,int ssIdx)271 int MXC_SPI_SetSlave(mxc_spi_regs_t *spi, int ssIdx)
272 {
273 return MXC_SPI_RevA1_SetSlave((mxc_spi_reva_regs_t *)spi, ssIdx);
274 }
275
MXC_SPI_GetSlave(mxc_spi_regs_t * spi)276 int MXC_SPI_GetSlave(mxc_spi_regs_t *spi)
277 {
278 return MXC_SPI_RevA1_GetSlave((mxc_spi_reva_regs_t *)spi);
279 }
280
MXC_SPI_SetWidth(mxc_spi_regs_t * spi,mxc_spi_width_t spiWidth)281 int MXC_SPI_SetWidth(mxc_spi_regs_t *spi, mxc_spi_width_t spiWidth)
282 {
283 return MXC_SPI_RevA1_SetWidth((mxc_spi_reva_regs_t *)spi, spiWidth);
284 }
285
MXC_SPI_GetWidth(mxc_spi_regs_t * spi)286 mxc_spi_width_t MXC_SPI_GetWidth(mxc_spi_regs_t *spi)
287 {
288 return MXC_SPI_RevA1_GetWidth((mxc_spi_reva_regs_t *)spi);
289 }
290
MXC_SPI_SetMode(mxc_spi_regs_t * spi,mxc_spi_mode_t spiMode)291 int MXC_SPI_SetMode(mxc_spi_regs_t *spi, mxc_spi_mode_t spiMode)
292 {
293 return MXC_SPI_RevA1_SetMode((mxc_spi_reva_regs_t *)spi, spiMode);
294 }
295
MXC_SPI_GetMode(mxc_spi_regs_t * spi)296 mxc_spi_mode_t MXC_SPI_GetMode(mxc_spi_regs_t *spi)
297 {
298 return MXC_SPI_RevA1_GetMode((mxc_spi_reva_regs_t *)spi);
299 }
300
MXC_SPI_StartTransmission(mxc_spi_regs_t * spi)301 int MXC_SPI_StartTransmission(mxc_spi_regs_t *spi)
302 {
303 return MXC_SPI_RevA1_StartTransmission((mxc_spi_reva_regs_t *)spi);
304 }
305
MXC_SPI_GetActive(mxc_spi_regs_t * spi)306 int MXC_SPI_GetActive(mxc_spi_regs_t *spi)
307 {
308 return MXC_SPI_RevA1_GetActive((mxc_spi_reva_regs_t *)spi);
309 }
310
MXC_SPI_AbortTransmission(mxc_spi_regs_t * spi)311 int MXC_SPI_AbortTransmission(mxc_spi_regs_t *spi)
312 {
313 return MXC_SPI_RevA1_AbortTransmission((mxc_spi_reva_regs_t *)spi);
314 }
315
MXC_SPI_ReadRXFIFO(mxc_spi_regs_t * spi,unsigned char * bytes,unsigned int len)316 unsigned int MXC_SPI_ReadRXFIFO(mxc_spi_regs_t *spi, unsigned char *bytes, unsigned int len)
317 {
318 return MXC_SPI_RevA1_ReadRXFIFO((mxc_spi_reva_regs_t *)spi, bytes, len);
319 }
320
MXC_SPI_GetRXFIFOAvailable(mxc_spi_regs_t * spi)321 unsigned int MXC_SPI_GetRXFIFOAvailable(mxc_spi_regs_t *spi)
322 {
323 return MXC_SPI_RevA1_GetRXFIFOAvailable((mxc_spi_reva_regs_t *)spi);
324 }
325
MXC_SPI_WriteTXFIFO(mxc_spi_regs_t * spi,unsigned char * bytes,unsigned int len)326 unsigned int MXC_SPI_WriteTXFIFO(mxc_spi_regs_t *spi, unsigned char *bytes, unsigned int len)
327 {
328 return MXC_SPI_RevA1_WriteTXFIFO((mxc_spi_reva_regs_t *)spi, bytes, len);
329 }
330
MXC_SPI_GetTXFIFOAvailable(mxc_spi_regs_t * spi)331 unsigned int MXC_SPI_GetTXFIFOAvailable(mxc_spi_regs_t *spi)
332 {
333 return MXC_SPI_RevA1_GetTXFIFOAvailable((mxc_spi_reva_regs_t *)spi);
334 }
335
MXC_SPI_ClearRXFIFO(mxc_spi_regs_t * spi)336 void MXC_SPI_ClearRXFIFO(mxc_spi_regs_t *spi)
337 {
338 MXC_SPI_RevA1_ClearRXFIFO((mxc_spi_reva_regs_t *)spi);
339 }
340
MXC_SPI_ClearTXFIFO(mxc_spi_regs_t * spi)341 void MXC_SPI_ClearTXFIFO(mxc_spi_regs_t *spi)
342 {
343 MXC_SPI_RevA1_ClearTXFIFO((mxc_spi_reva_regs_t *)spi);
344 }
345
MXC_SPI_SetRXThreshold(mxc_spi_regs_t * spi,unsigned int numBytes)346 int MXC_SPI_SetRXThreshold(mxc_spi_regs_t *spi, unsigned int numBytes)
347 {
348 return MXC_SPI_RevA1_SetRXThreshold((mxc_spi_reva_regs_t *)spi, numBytes);
349 }
350
MXC_SPI_GetRXThreshold(mxc_spi_regs_t * spi)351 unsigned int MXC_SPI_GetRXThreshold(mxc_spi_regs_t *spi)
352 {
353 return MXC_SPI_RevA1_GetRXThreshold((mxc_spi_reva_regs_t *)spi);
354 }
355
MXC_SPI_SetTXThreshold(mxc_spi_regs_t * spi,unsigned int numBytes)356 int MXC_SPI_SetTXThreshold(mxc_spi_regs_t *spi, unsigned int numBytes)
357 {
358 return MXC_SPI_RevA1_SetTXThreshold((mxc_spi_reva_regs_t *)spi, numBytes);
359 }
360
MXC_SPI_GetTXThreshold(mxc_spi_regs_t * spi)361 unsigned int MXC_SPI_GetTXThreshold(mxc_spi_regs_t *spi)
362 {
363 return MXC_SPI_RevA1_GetTXThreshold((mxc_spi_reva_regs_t *)spi);
364 }
365
MXC_SPI_GetFlags(mxc_spi_regs_t * spi)366 unsigned int MXC_SPI_GetFlags(mxc_spi_regs_t *spi)
367 {
368 return MXC_SPI_RevA1_GetFlags((mxc_spi_reva_regs_t *)spi);
369 }
370
MXC_SPI_ClearFlags(mxc_spi_regs_t * spi)371 void MXC_SPI_ClearFlags(mxc_spi_regs_t *spi)
372 {
373 MXC_SPI_RevA1_ClearFlags((mxc_spi_reva_regs_t *)spi);
374 }
375
MXC_SPI_EnableInt(mxc_spi_regs_t * spi,unsigned int intEn)376 void MXC_SPI_EnableInt(mxc_spi_regs_t *spi, unsigned int intEn)
377 {
378 MXC_SPI_RevA1_EnableInt((mxc_spi_reva_regs_t *)spi, intEn);
379 }
380
MXC_SPI_DisableInt(mxc_spi_regs_t * spi,unsigned int intDis)381 void MXC_SPI_DisableInt(mxc_spi_regs_t *spi, unsigned int intDis)
382 {
383 MXC_SPI_RevA1_DisableInt((mxc_spi_reva_regs_t *)spi, intDis);
384 }
385
MXC_SPI_MasterTransaction(mxc_spi_req_t * req)386 int MXC_SPI_MasterTransaction(mxc_spi_req_t *req)
387 {
388 return MXC_SPI_RevA1_MasterTransaction((mxc_spi_reva_req_t *)req);
389 }
390
MXC_SPI_MasterTransactionAsync(mxc_spi_req_t * req)391 int MXC_SPI_MasterTransactionAsync(mxc_spi_req_t *req)
392 {
393 return MXC_SPI_RevA1_MasterTransactionAsync((mxc_spi_reva_req_t *)req);
394 }
395
MXC_SPI_MasterTransactionDMA(mxc_spi_req_t * req)396 int MXC_SPI_MasterTransactionDMA(mxc_spi_req_t *req)
397 {
398 int reqselTx = -1;
399 int reqselRx = -1;
400
401 int spi_num;
402
403 spi_num = MXC_SPI_GET_IDX(req->spi);
404 MXC_ASSERT(spi_num >= 0);
405
406 if (req->txData != NULL) {
407 switch (spi_num) {
408 case 0:
409 reqselTx = MXC_DMA_REQUEST_SPI1TX;
410 break;
411
412 case 1:
413 reqselTx = MXC_DMA_REQUEST_SPI0TX;
414 break;
415
416 default:
417 return E_BAD_PARAM;
418 }
419 }
420
421 if (req->rxData != NULL) {
422 switch (spi_num) {
423 case 0:
424 reqselRx = MXC_DMA_REQUEST_SPI1RX;
425 break;
426
427 case 1:
428 reqselRx = MXC_DMA_REQUEST_SPI0RX;
429 break;
430
431 default:
432 return E_BAD_PARAM;
433 }
434 }
435
436 return MXC_SPI_RevA1_MasterTransactionDMA((mxc_spi_reva_req_t *)req, reqselTx, reqselRx,
437 MXC_DMA);
438 }
439
MXC_SPI_SlaveTransaction(mxc_spi_req_t * req)440 int MXC_SPI_SlaveTransaction(mxc_spi_req_t *req)
441 {
442 return MXC_SPI_RevA1_SlaveTransaction((mxc_spi_reva_req_t *)req);
443 }
444
MXC_SPI_SlaveTransactionAsync(mxc_spi_req_t * req)445 int MXC_SPI_SlaveTransactionAsync(mxc_spi_req_t *req)
446 {
447 return MXC_SPI_RevA1_SlaveTransactionAsync((mxc_spi_reva_req_t *)req);
448 }
449
MXC_SPI_SlaveTransactionDMA(mxc_spi_req_t * req)450 int MXC_SPI_SlaveTransactionDMA(mxc_spi_req_t *req)
451 {
452 int reqselTx = -1;
453 int reqselRx = -1;
454
455 int spi_num;
456
457 spi_num = MXC_SPI_GET_IDX(req->spi);
458 MXC_ASSERT(spi_num >= 0);
459
460 if (req->txData != NULL) {
461 switch (spi_num) {
462 case 0:
463 reqselTx = MXC_DMA_REQUEST_SPI1TX;
464 break;
465
466 case 1:
467 reqselTx = MXC_DMA_REQUEST_SPI0TX;
468 break;
469
470 default:
471 return E_BAD_PARAM;
472 break;
473 }
474 }
475
476 if (req->rxData != NULL) {
477 switch (spi_num) {
478 case 0:
479 reqselRx = MXC_DMA_REQUEST_SPI1RX;
480 break;
481
482 case 1:
483 reqselRx = MXC_DMA_REQUEST_SPI0RX;
484 break;
485
486 default:
487 return E_BAD_PARAM;
488 break;
489 }
490 }
491
492 return MXC_SPI_RevA1_SlaveTransactionDMA((mxc_spi_reva_req_t *)req, reqselTx, reqselRx,
493 MXC_DMA);
494 }
495
MXC_SPI_SetDefaultTXData(mxc_spi_regs_t * spi,unsigned int defaultTXData)496 int MXC_SPI_SetDefaultTXData(mxc_spi_regs_t *spi, unsigned int defaultTXData)
497 {
498 return MXC_SPI_RevA1_SetDefaultTXData((mxc_spi_reva_regs_t *)spi, defaultTXData);
499 }
500
MXC_SPI_AbortAsync(mxc_spi_regs_t * spi)501 void MXC_SPI_AbortAsync(mxc_spi_regs_t *spi)
502 {
503 MXC_SPI_RevA1_AbortAsync((mxc_spi_reva_regs_t *)spi);
504 }
505
MXC_SPI_AsyncHandler(mxc_spi_regs_t * spi)506 void MXC_SPI_AsyncHandler(mxc_spi_regs_t *spi)
507 {
508 MXC_SPI_RevA1_AsyncHandler((mxc_spi_reva_regs_t *)spi);
509 }
510
MXC_SPI_HWSSControl(mxc_spi_regs_t * spi,int state)511 void MXC_SPI_HWSSControl(mxc_spi_regs_t *spi, int state)
512 {
513 MXC_SPI_RevA1_HWSSControl((mxc_spi_reva_regs_t *)spi, state);
514 }
515
516 /* ** SPI v2 functions to prevent build errors ** */
517
MXC_SPI_Config(mxc_spi_cfg_t * cfg)518 int MXC_SPI_Config(mxc_spi_cfg_t *cfg)
519 {
520 return E_NOT_SUPPORTED;
521 }
522
MXC_SPI_ConfigStruct(mxc_spi_cfg_t * cfg,bool use_dma_tx,bool use_dma_rx)523 int MXC_SPI_ConfigStruct(mxc_spi_cfg_t *cfg, bool use_dma_tx, bool use_dma_rx)
524 {
525 return E_NOT_SUPPORTED;
526 }
527
MXC_SPI_SetTSControl(mxc_spi_regs_t * spi,mxc_spi_tscontrol_t ts_control)528 int MXC_SPI_SetTSControl(mxc_spi_regs_t *spi, mxc_spi_tscontrol_t ts_control)
529 {
530 return E_NOT_SUPPORTED;
531 }
532
MXC_SPI_GetTSControl(mxc_spi_regs_t * spi)533 mxc_spi_tscontrol_t MXC_SPI_GetTSControl(mxc_spi_regs_t *spi)
534 {
535 return E_NOT_SUPPORTED;
536 }
537
MXC_SPI_SetFrameSize(mxc_spi_regs_t * spi,int frame_size)538 int MXC_SPI_SetFrameSize(mxc_spi_regs_t *spi, int frame_size)
539 {
540 return MXC_SPI_SetDataSize(spi, frame_size);
541 }
542
MXC_SPI_GetFrameSize(mxc_spi_regs_t * spi)543 int MXC_SPI_GetFrameSize(mxc_spi_regs_t *spi)
544 {
545 return MXC_SPI_GetDataSize(spi);
546 }
547
MXC_SPI_SetInterface(mxc_spi_regs_t * spi,mxc_spi_interface_t mode)548 int MXC_SPI_SetInterface(mxc_spi_regs_t *spi, mxc_spi_interface_t mode)
549 {
550 return E_NOT_SUPPORTED;
551 }
552
MXC_SPI_GetInterface(mxc_spi_regs_t * spi)553 mxc_spi_interface_t MXC_SPI_GetInterface(mxc_spi_regs_t *spi)
554 {
555 return E_NOT_SUPPORTED;
556 }
557
MXC_SPI_SetClkMode(mxc_spi_regs_t * spi,mxc_spi_clkmode_t clk_mode)558 int MXC_SPI_SetClkMode(mxc_spi_regs_t *spi, mxc_spi_clkmode_t clk_mode)
559 {
560 return E_NOT_SUPPORTED;
561 }
562
MXC_SPI_GetClkMode(mxc_spi_regs_t * spi)563 mxc_spi_clkmode_t MXC_SPI_GetClkMode(mxc_spi_regs_t *spi)
564 {
565 return E_NOT_SUPPORTED;
566 }
567
MXC_SPI_SetCallback(mxc_spi_regs_t * spi,mxc_spi_callback_t callback,void * data)568 int MXC_SPI_SetCallback(mxc_spi_regs_t *spi, mxc_spi_callback_t callback, void *data)
569 {
570 return E_NOT_SUPPORTED;
571 }
572
MXC_SPI_SetDummyTX(mxc_spi_regs_t * spi,uint16_t tx_value)573 int MXC_SPI_SetDummyTX(mxc_spi_regs_t *spi, uint16_t tx_value)
574 {
575 return MXC_SPI_SetDefaultTXData(spi, tx_value);
576 }
577
578 /* ** DMA-Specific Functions ** */
579
MXC_SPI_DMA_Init(mxc_spi_regs_t * spi,mxc_dma_regs_t * dma,bool use_dma_tx,bool use_dma_rx)580 int MXC_SPI_DMA_Init(mxc_spi_regs_t *spi, mxc_dma_regs_t *dma, bool use_dma_tx, bool use_dma_rx)
581 {
582 return E_NOT_SUPPORTED;
583 }
584
MXC_SPI_DMA_GetInitialized(mxc_spi_regs_t * spi)585 bool MXC_SPI_DMA_GetInitialized(mxc_spi_regs_t *spi)
586 {
587 return E_NOT_SUPPORTED;
588 }
589
MXC_SPI_DMA_GetTXChannel(mxc_spi_regs_t * spi)590 int MXC_SPI_DMA_GetTXChannel(mxc_spi_regs_t *spi)
591 {
592 return E_NOT_SUPPORTED;
593 }
594
MXC_SPI_DMA_GetRXChannel(mxc_spi_regs_t * spi)595 int MXC_SPI_DMA_GetRXChannel(mxc_spi_regs_t *spi)
596 {
597 return E_NOT_SUPPORTED;
598 }
599
MXC_SPI_DMA_SetRequestSelect(mxc_spi_regs_t * spi,bool use_dma_tx,bool use_dma_rx)600 int MXC_SPI_DMA_SetRequestSelect(mxc_spi_regs_t *spi, bool use_dma_tx, bool use_dma_rx)
601 {
602 return E_NOT_SUPPORTED;
603 }
604
605 /* ** Transaction Functions ** */
606
MXC_SPI_ControllerTransaction(mxc_spi_req_t * req)607 int MXC_SPI_ControllerTransaction(mxc_spi_req_t *req)
608 {
609 return MXC_SPI_MasterTransaction(req);
610 }
611
MXC_SPI_ControllerTransactionAsync(mxc_spi_req_t * req)612 int MXC_SPI_ControllerTransactionAsync(mxc_spi_req_t *req)
613 {
614 return MXC_SPI_MasterTransactionAsync(req);
615 }
616
MXC_SPI_ControllerTransactionDMA(mxc_spi_req_t * req)617 int MXC_SPI_ControllerTransactionDMA(mxc_spi_req_t *req)
618 {
619 return MXC_SPI_MasterTransactionDMA(req);
620 }
621
MXC_SPI_TargetTransaction(mxc_spi_req_t * req)622 int MXC_SPI_TargetTransaction(mxc_spi_req_t *req)
623 {
624 return MXC_SPI_SlaveTransaction(req);
625 }
626
MXC_SPI_TargetTransactionAsync(mxc_spi_req_t * req)627 int MXC_SPI_TargetTransactionAsync(mxc_spi_req_t *req)
628 {
629 return MXC_SPI_SlaveTransactionAsync(req);
630 }
631
MXC_SPI_TargetTransactionDMA(mxc_spi_req_t * req)632 int MXC_SPI_TargetTransactionDMA(mxc_spi_req_t *req)
633 {
634 return MXC_SPI_SlaveTransactionDMA(req);
635 }
636
637 /* ** Handler Functions ** */
638
MXC_SPI_Handler(mxc_spi_regs_t * spi)639 void MXC_SPI_Handler(mxc_spi_regs_t *spi)
640 {
641 MXC_SPI_AsyncHandler(spi);
642 }
643
MXC_SPI_DMA_TX_Handler(mxc_spi_regs_t * spi)644 void MXC_SPI_DMA_TX_Handler(mxc_spi_regs_t *spi)
645 {
646 return;
647 }
648
MXC_SPI_DMA_RX_Handler(mxc_spi_regs_t * spi)649 void MXC_SPI_DMA_RX_Handler(mxc_spi_regs_t *spi)
650 {
651 return;
652 }
653