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 /****** Includes *******/
22 #include <stddef.h>
23 #include <stdint.h>
24 #include "mxc_device.h"
25 #include "mxc_assert.h"
26 #include "mxc_lock.h"
27 #include "mxc_sys.h"
28 #include "spixr.h"
29 #include "spixr_reva.h"
30
31 /****** Functions ******/
MXC_SPIXR_ReadRXFIFO(uint8_t * buf,int len)32 int MXC_SPIXR_ReadRXFIFO(uint8_t *buf, int len)
33 {
34 return MXC_SPIXR_RevA_ReadRXFIFO((mxc_spixr_reva_regs_t *)MXC_SPIXR, buf, len);
35 }
36
MXC_SPIXR_WriteTXFIFO(uint8_t * buf,int len)37 int MXC_SPIXR_WriteTXFIFO(uint8_t *buf, int len)
38 {
39 return MXC_SPIXR_RevA_WriteTXFIFO((mxc_spixr_reva_regs_t *)MXC_SPIXR, buf, len);
40 }
41
MXC_SPIXR_SetSS(int ssIdx)42 void MXC_SPIXR_SetSS(int ssIdx)
43 {
44 MXC_SPIXR_RevA_SetSS((mxc_spixr_reva_regs_t *)MXC_SPIXR, ssIdx);
45 }
46
MXC_SPIXR_GetSS(void)47 int MXC_SPIXR_GetSS(void)
48 {
49 return MXC_SPIXR_RevA_GetSS((mxc_spixr_reva_regs_t *)MXC_SPIXR);
50 }
51
MXC_SPIXR_SetSSCtrl(int stayActive)52 void MXC_SPIXR_SetSSCtrl(int stayActive)
53 {
54 MXC_SPIXR_RevA_SetSSCtrl((mxc_spixr_reva_regs_t *)MXC_SPIXR, stayActive);
55 }
56
MXC_SPIXR_GetSSCtrl(void)57 int MXC_SPIXR_GetSSCtrl(void)
58 {
59 return MXC_SPIXR_RevA_GetSSCtrl((mxc_spixr_reva_regs_t *)MXC_SPIXR);
60 }
61
MXC_SPIXR_Enable(void)62 void MXC_SPIXR_Enable(void)
63 {
64 MXC_SPIXR_RevA_Enable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
65 }
66
MXC_SPIXR_Disable(void)67 void MXC_SPIXR_Disable(void)
68 {
69 MXC_SPIXR_RevA_Disable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
70 }
71
MXC_SPIXR_IsEnabled(void)72 int MXC_SPIXR_IsEnabled(void)
73 {
74 return MXC_SPIXR_RevA_IsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
75 }
76
MXC_SPIXR_ThreeWireModeEnable(void)77 void MXC_SPIXR_ThreeWireModeEnable(void)
78 {
79 MXC_SPIXR_RevA_ThreeWireModeEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
80 }
81
MXC_SPIXR_ThreeWireModeDisable(void)82 void MXC_SPIXR_ThreeWireModeDisable(void)
83 {
84 MXC_SPIXR_RevA_ThreeWireModeDisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
85 }
86
MXC_SPIXR_ThreeWireModeIsEnabled(void)87 int MXC_SPIXR_ThreeWireModeIsEnabled(void)
88 {
89 return MXC_SPIXR_RevA_ThreeWireModeIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
90 }
91
MXC_SPIXR_GetTXFIFOCount(void)92 int MXC_SPIXR_GetTXFIFOCount(void)
93 {
94 return MXC_SPIXR_RevA_GetTXFIFOCount((mxc_spixr_reva_regs_t *)MXC_SPIXR);
95 }
96
MXC_SPIXR_GetRXFIFOCount(void)97 int MXC_SPIXR_GetRXFIFOCount(void)
98 {
99 return MXC_SPIXR_RevA_GetRXFIFOCount((mxc_spixr_reva_regs_t *)MXC_SPIXR);
100 }
101
MXC_SPIXR_SetWidth(mxc_spixr_width_t width)102 int MXC_SPIXR_SetWidth(mxc_spixr_width_t width)
103 {
104 return MXC_SPIXR_RevA_SetWidth((mxc_spixr_reva_regs_t *)MXC_SPIXR,
105 (mxc_spixr_reva_width_t)width);
106 }
107
MXC_SPIXR_SetSPIMode(mxc_spixr_mode_t mode)108 int MXC_SPIXR_SetSPIMode(mxc_spixr_mode_t mode)
109 {
110 return MXC_SPIXR_RevA_SetSPIMode((mxc_spixr_reva_regs_t *)MXC_SPIXR,
111 (mxc_spixr_reva_mode_t)mode);
112 }
113
MXC_SPIXR_SetSSPolarity(int activeLow)114 int MXC_SPIXR_SetSSPolarity(int activeLow)
115 {
116 return MXC_SPIXR_RevA_SetSSPolarity((mxc_spixr_reva_regs_t *)MXC_SPIXR, activeLow);
117 }
118
MXC_SPIXR_SetSSTiming(unsigned int ssIActDelay,unsigned int postActive,unsigned int preActive)119 void MXC_SPIXR_SetSSTiming(unsigned int ssIActDelay, unsigned int postActive,
120 unsigned int preActive)
121 {
122 MXC_SPIXR_RevA_SetSSTiming((mxc_spixr_reva_regs_t *)MXC_SPIXR, ssIActDelay, postActive,
123 preActive);
124 }
125
MXC_SPIXR_SetFrequency(int hz)126 int MXC_SPIXR_SetFrequency(int hz)
127 {
128 return MXC_SPIXR_RevA_SetFrequency((mxc_spixr_reva_regs_t *)MXC_SPIXR, hz);
129 }
130
MXC_SPIXR_GetFrequency(void)131 int MXC_SPIXR_GetFrequency(void)
132 {
133 return MXC_SPIXR_RevA_GetFrequency((mxc_spixr_reva_regs_t *)MXC_SPIXR);
134 }
135
MXC_SPIXR_GetIntFlags(void)136 int MXC_SPIXR_GetIntFlags(void)
137 {
138 return MXC_SPIXR_RevA_GetIntFlags((mxc_spixr_reva_regs_t *)MXC_SPIXR);
139 }
140
MXC_SPIXR_EnableInt(int flags)141 void MXC_SPIXR_EnableInt(int flags)
142 {
143 MXC_SPIXR_RevA_EnableInt((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
144 }
145
MXC_SPIXR_DisableInt(int flags)146 void MXC_SPIXR_DisableInt(int flags)
147 {
148 MXC_SPIXR_RevA_DisableInt((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
149 }
150
MXC_SPIXR_GetWakeUpFlags(void)151 int MXC_SPIXR_GetWakeUpFlags(void)
152 {
153 return MXC_SPIXR_RevA_GetWakeUpFlags((mxc_spixr_reva_regs_t *)MXC_SPIXR);
154 }
155
MXC_SPIXR_EnableWakeUp(int flags)156 void MXC_SPIXR_EnableWakeUp(int flags)
157 {
158 MXC_SPIXR_RevA_EnableWakeUp((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
159 }
160
MXC_SPIXR_DisableWakeUp(int flags)161 void MXC_SPIXR_DisableWakeUp(int flags)
162 {
163 MXC_SPIXR_RevA_DisableWakeUp((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
164 }
165
MXC_SPIXR_ExMemEnable(void)166 void MXC_SPIXR_ExMemEnable(void)
167 {
168 MXC_SPIXR_RevA_ExMemEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
169 }
170
MXC_SPIXR_ExMemDisable(void)171 void MXC_SPIXR_ExMemDisable(void)
172 {
173 MXC_SPIXR_RevA_ExMemDisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
174 }
175
MXC_SPIXR_ExMemUseDummy(int delay255)176 void MXC_SPIXR_ExMemUseDummy(int delay255)
177 {
178 MXC_SPIXR_RevA_ExMemUseDummy((mxc_spixr_reva_regs_t *)MXC_SPIXR, delay255);
179 }
180
MXC_SPIXR_ExMemSetWriteCommand(uint8_t command)181 void MXC_SPIXR_ExMemSetWriteCommand(uint8_t command)
182 {
183 MXC_SPIXR_RevA_ExMemSetWriteCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, command);
184 }
185
MXC_SPIXR_ExMemGetWriteCommand(void)186 uint8_t MXC_SPIXR_ExMemGetWriteCommand(void)
187 {
188 return MXC_SPIXR_RevA_ExMemGetWriteCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR);
189 }
190
MXC_SPIXR_ExMemSetReadCommand(uint8_t command)191 void MXC_SPIXR_ExMemSetReadCommand(uint8_t command)
192 {
193 MXC_SPIXR_RevA_ExMemSetReadCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, command);
194 }
195
MXC_SPIXR_ExMemGetReadCommand(void)196 uint8_t MXC_SPIXR_ExMemGetReadCommand(void)
197 {
198 return MXC_SPIXR_RevA_ExMemGetReadCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR);
199 }
200
MXC_SPIXR_Busy(void)201 int MXC_SPIXR_Busy(void)
202 {
203 return MXC_SPIXR_RevA_Busy((mxc_spixr_reva_regs_t *)MXC_SPIXR);
204 }
205
MXC_SPIXR_Init(mxc_spixr_cfg_t * cfg)206 int MXC_SPIXR_Init(mxc_spixr_cfg_t *cfg)
207 {
208 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SCACHE);
209
210 /* The crypto clock needs to be turned on for crypto to work. */
211 if ((MXC_GCR->clkcn & MXC_F_GCR_CLKCN_HIRC_EN) == 0) {
212 MXC_GCR->clkcn |= MXC_F_GCR_CLKCN_HIRC_EN;
213
214 // Check if TPU clock is ready
215 if (MXC_SYS_Clock_Timeout(MXC_F_GCR_CLKCN_HIRC_RDY) != E_NO_ERROR) {
216 return E_TIME_OUT;
217 }
218 }
219
220 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_TPU);
221
222 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPIXIPD);
223
224 MXC_GPIO_Config(&gpio_cfg_spixr); //Configure GPIO for spid
225
226 return MXC_SPIXR_RevA_Init((mxc_spixr_reva_regs_t *)MXC_SPIXR, (mxc_spixr_reva_cfg_t *)cfg);
227 }
228
MXC_SPIXR_Shutdown(void)229 int MXC_SPIXR_Shutdown(void)
230 {
231 MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SCACHE);
232 MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPIXIPD);
233
234 return MXC_SPIXR_RevA_Shutdown((mxc_spixr_reva_regs_t *)MXC_SPIXR);
235 }
236
MXC_SPIXR_SendCommand(uint8_t * cmd,uint32_t length,uint32_t tx_num_char)237 void MXC_SPIXR_SendCommand(uint8_t *cmd, uint32_t length, uint32_t tx_num_char)
238 {
239 MXC_SPIXR_RevA_SendCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, cmd, length, tx_num_char);
240 }
241
MXC_SPIXR_TXFIFOEnable(void)242 void MXC_SPIXR_TXFIFOEnable(void)
243 {
244 MXC_SPIXR_RevA_TXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
245 }
246
MXC_SPIXR_TXFIFODisable(void)247 void MXC_SPIXR_TXFIFODisable(void)
248 {
249 MXC_SPIXR_RevA_TXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
250 }
251
MXC_SPIXR_TXFIFOIsEnabled(void)252 int MXC_SPIXR_TXFIFOIsEnabled(void)
253 {
254 return MXC_SPIXR_RevA_TXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
255 }
256
MXC_SPIXR_DmaTXFIFOEnable(void)257 void MXC_SPIXR_DmaTXFIFOEnable(void)
258 {
259 MXC_SPIXR_RevA_DmaTXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
260 }
261
MXC_SPIXR_DmaTXFIFODisable(void)262 void MXC_SPIXR_DmaTXFIFODisable(void)
263 {
264 MXC_SPIXR_RevA_DmaTXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
265 }
266
MXC_SPIXR_DmaTXFIFOIsEnabled(void)267 int MXC_SPIXR_DmaTXFIFOIsEnabled(void)
268 {
269 return MXC_SPIXR_RevA_DmaTXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
270 }
271
MXC_SPIXR_RXFIFOEnable(void)272 void MXC_SPIXR_RXFIFOEnable(void)
273 {
274 MXC_SPIXR_RevA_RXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
275 }
276
MXC_SPIXR_RXFIFODisable(void)277 void MXC_SPIXR_RXFIFODisable(void)
278 {
279 MXC_SPIXR_RevA_RXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
280 }
281
MXC_SPIXR_RXFIFOIsEnabled(void)282 int MXC_SPIXR_RXFIFOIsEnabled(void)
283 {
284 return MXC_SPIXR_RevA_RXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
285 }
286
MXC_SPIXR_DmaRXFIFOEnable(void)287 void MXC_SPIXR_DmaRXFIFOEnable(void)
288 {
289 MXC_SPIXR_RevA_DmaRXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
290 }
291
MXC_SPIXR_DmaRXFIFODisable(void)292 void MXC_SPIXR_DmaRXFIFODisable(void)
293 {
294 MXC_SPIXR_RevA_DmaRXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
295 }
296
MXC_SPIXR_DmaRXFIFOIsEnabled(void)297 int MXC_SPIXR_DmaRXFIFOIsEnabled(void)
298 {
299 return MXC_SPIXR_RevA_DmaRXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
300 }
301
MXC_SPIXR_TXFIFOClear(void)302 void MXC_SPIXR_TXFIFOClear(void)
303 {
304 MXC_SPIXR_RevA_TXFIFOClear((mxc_spixr_reva_regs_t *)MXC_SPIXR);
305 }
306
MXC_SPIXR_RXFIFOClear(void)307 void MXC_SPIXR_RXFIFOClear(void)
308 {
309 MXC_SPIXR_RevA_RXFIFOClear((mxc_spixr_reva_regs_t *)MXC_SPIXR);
310 }
311