1 /***********************************************************************************************************************
2 * Copyright [2015-2017] Renesas Electronics Corporation and/or its licensors. All Rights Reserved.
3 *
4 * This file is part of Renesas SynergyTM Software Package (SSP)
5 *
6 * The contents of this file (the "contents") are proprietary and confidential to Renesas Electronics Corporation
7 * and/or its licensors ("Renesas") and subject to statutory and contractual protections.
8 *
9 * This file is subject to a Renesas SSP license agreement. Unless otherwise agreed in an SSP license agreement with
10 * Renesas: 1) you may not use, copy, modify, distribute, display, or perform the contents; 2) you may not use any name
11 * or mark of Renesas for advertising or publicity purposes or in connection with your use of the contents; 3) RENESAS
12 * MAKES NO WARRANTY OR REPRESENTATIONS ABOUT THE SUITABILITY OF THE CONTENTS FOR ANY PURPOSE; THE CONTENTS ARE PROVIDED
13 * "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
14 * PARTICULAR PURPOSE, AND NON-INFRINGEMENT; AND 4) RENESAS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, OR
15 * CONSEQUENTIAL DAMAGES, INCLUDING DAMAGES RESULTING FROM LOSS OF USE, DATA, OR PROJECTS, WHETHER IN AN ACTION OF
16 * CONTRACT OR TORT, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE CONTENTS. Third-party contents
17 * included in this file may be subject to different terms.
18 **********************************************************************************************************************/
19 /***********************************************************************************************************************
20 * File Name : ssp_features.h
21 * Description : Contains common feature types and functions used by the SSP.
22 ***********************************************************************************************************************/
23
24 #ifndef SSP_FEATURES_H_
25 #define SSP_FEATURES_H_
26
27 /***********************************************************************************************************************
28 Includes <System Includes> , "Project Includes"
29 ***********************************************************************************************************************/
30 /* C99 includes. */
31 #include <stdint.h>
32 #include <stddef.h>
33 #include <stdbool.h>
34 #include <assert.h>
35 /* Different compiler support. */
36 #include "ssp_common_api.h"
37 #include "../src/bsp/mcu/all/bsp_compiler_support.h"
38
39 /***********************************************************************************************************************
40 Macro definitions
41 ***********************************************************************************************************************/
42 /** Number of Cortex processor exceptions, used as an offset from XPSR value for the IRQn_Type macro. */
43 #define SSP_PRIV_CORTEX_PROCESSOR_EXCEPTIONS (16U)
44
45 /** Used to signify that the requested IRQ vector is not defined in this system. */
46 #define SSP_INVALID_VECTOR ((IRQn_Type) -33)
47
48 /** Used to allocated vector table and vector information array for peripherals with a single channel. Parameters
49 * are as follows:
50 * 1. ISR function name
51 * 2. IP name (ssp_ip_t enum without the SSP_IP_ prefix).
52 * 3. Signal name (ssp_signal_t enum without the SSP_SIGNAL_\<IP_NAME>_ prefix), where \<IP_NAME> is the IP name
53 * from (2) above.
54 */
55 /* Parentheses cannot be added around macro parameters since they are used to construct variable
56 * and section names that do not allow parentheses. */
57 /*LDRA_INSPECTWINDOW 50 */
58 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
59 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
60 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
61 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
62 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
63 /*LDRA_INSPECTED 77 S This macro does not work when surrounded by parentheses. */
64 #define SSP_VECTOR_DEFINE(isr,ip,signal) \
65 void isr (void); \
66 static void * gp_ctrl_##ip##_##signal; \
67 const ssp_vector_t g_vector_##ip##_##signal BSP_PLACE_IN_SECTION_V2(".vector." #ip"_"#signal )=isr; \
68 const ssp_vector_info_t g_vector_info_##ip##_##signal BSP_PLACE_IN_SECTION_V2(".vector_info."#ip"_"#signal)= \
69 {.event_number=ELC_EVENT_##ip##_##signal, .ip_id = SSP_IP_##ip, .ip_channel=0U, \
70 .ip_unit=0U, .ip_signal=SSP_SIGNAL_##ip##_##signal, .pp_ctrl = &gp_ctrl_##ip##_##signal};
71
72 /** Used to allocated vector table and vector information array for peripherals with multiple channels. Parameters
73 * are as follows:
74 * 1. ISR function name
75 * 2. IP name (ssp_ip_t enum without the SSP_IP_ prefix).
76 * 3. Signal name (ssp_signal_t enum without the SSP_SIGNAL_\<IP_NAME>_ prefix), where \<IP_NAME> is the IP name
77 * from (2) above.
78 * 4. Channel number
79 */
80 /* Parentheses cannot be added around macro parameters since they are used to construct variable
81 * and section names that do not allow parentheses. */
82 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
83 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
84 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
85 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
86 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
87 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
88 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
89 /*LDRA_INSPECTED 77 S This macro does not work when surrounded by parentheses. */
90 #define SSP_VECTOR_DEFINE_CHAN(isr,ip,signal,channel) \
91 void isr (void); \
92 static void * gp_ctrl_##ip##_##channel##_##signal; \
93 const ssp_vector_t g_vector_##ip##_##channel##_##signal \
94 BSP_PLACE_IN_SECTION_V2(".vector." #ip"_"#channel"_"#signal )=isr; \
95 const ssp_vector_info_t g_vector_info_##ip##_##channel##_##signal \
96 BSP_PLACE_IN_SECTION_V2(".vector_info."#ip"_"#channel"_"#signal)= \
97 {.event_number=ELC_EVENT_##ip##channel##_##signal, \
98 .ip_id = SSP_IP_##ip, .ip_channel=(channel), .ip_unit=0U, \
99 .ip_signal=SSP_SIGNAL_##ip##_##signal, .pp_ctrl = &gp_ctrl_##ip##_##channel##_##signal};
100
101 /** Used to allocated vector table and vector information array for peripherals with multiple units. Parameters
102 * are as follows:
103 * 1. ISR function name
104 * 2. IP name (ssp_ip_t enum without the SSP_IP_ prefix).
105 * 3. Signal name (ssp_signal_t enum without the SSP_SIGNAL_\<IP_NAME>_ prefix), where \<IP_NAME> is the IP name
106 * from (2) above.
107 * 4. Channel number
108 * 4. Unit name (ssp_ip_unit_t enum without the SSP_IP_UNIT_\<IP_NAME> prefix), where \<IP_NAME> is the IP name
109 * from (2) above.
110 */
111 /* Parentheses cannot be added around macro parameters since they are used to construct variable
112 * and section names that do not allow parentheses. */
113 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
114 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
115 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
116 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
117 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
118 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
119 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
120 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
121 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
122 /*LDRA_INSPECTED 77 S This macro does not work when surrounded by parentheses. */
123 #define SSP_VECTOR_DEFINE_UNIT(isr,ip,unit_name,signal,channel) \
124 void isr (void); \
125 static void * gp_ctrl_##ip##_##unit_name##_##channel##_##signal; \
126 const ssp_vector_t g_vector_##ip##_##unit_name##_##channel##_##signal \
127 BSP_PLACE_IN_SECTION_V2(".vector."#ip"_"#unit_name"_"#channel"_"#signal )=isr; \
128 const ssp_vector_info_t g_vector_info_##ip##_##unit_name##_##channel##_##signal \
129 BSP_PLACE_IN_SECTION_V2(".vector_info."#ip"_"#unit_name"_"#channel"_"#signal)= \
130 {.event_number=ELC_EVENT_##ip##unit_name##_##signal, \
131 .ip_id = SSP_IP_##ip, .ip_channel=(channel), .ip_unit=SSP_IP_UNIT_##ip##unit_name, \
132 .ip_signal=SSP_SIGNAL_##ip##_##signal, .pp_ctrl = &gp_ctrl_##ip##_##unit_name##_##channel##_##signal};
133
134 /** Used to allocated hardware locks. Parameters are as follows:
135 * 1. IP name (ssp_ip_t enum without the SSP_IP_ prefix).
136 * 2. Unit number (used for blocks with variations like USB, not to be confused with ADC unit).
137 * 3. Channel number
138 */
139 /* Parentheses cannot be added around macro parameters since they are used to construct variable
140 * and section names that do not allow parentheses. */
141 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
142 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
143 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
144 /*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S *//*LDRA_INSPECTED 78 S */
145 /*LDRA_INSPECTED 77 S This macro does not work when surrounded by parentheses. */
146 #define SSP_HW_LOCK_DEFINE(ip,unit_number,channel_number) \
147 bsp_lock_t g_hw_lock_##ip##_##unit_number##_##channel_number BSP_PACKED \
148 BSP_PLACE_IN_SECTION_V2(".hw_lock."#ip"_"#unit_number"_"#channel_number); \
149 const ssp_feature_t g_lock_lookup_##ip##_##unit_number##_##channel_number \
150 BSP_PLACE_IN_SECTION_V2(".hw_lock_lookup."#ip"_"#unit_number"_"#channel_number) = \
151 {.id = SSP_IP_##ip, .channel=channel_number, .unit=unit_number};
152
153 /***********************************************************************************************************************
154 Typedef definitions
155 ***********************************************************************************************************************/
156
157 typedef enum e_ssp_ip
158 {
159 SSP_IP_CFLASH=0,
160 SSP_IP_DFLASH=1,
161 SSP_IP_RAM=2,
162 SSP_IP_SYSTEM=3, SSP_IP_LVD=3, SSP_IP_CGC=3, SSP_IP_LPM=3,
163 SSP_IP_FCU=4,
164 SSP_IP_DEBUG=5,
165 SSP_IP_ICU=6,
166 SSP_IP_DMAC=7,
167 SSP_IP_DTC=8,
168 SSP_IP_IOPORT=9,
169 SSP_IP_PFS=10,
170 SSP_IP_ELC=11,
171 SSP_IP_BSC=12,
172 SSP_IP_MPU=13,
173 SSP_IP_MSTP=14,
174 SSP_IP_MMF=15,
175 SSP_IP_KEY=16,
176 SSP_IP_CAC=17,
177 SSP_IP_DOC=18,
178 SSP_IP_CRC=19,
179 SSP_IP_SCI=20,
180 SSP_IP_IIC=21,
181 SSP_IP_SPI=22,
182 SSP_IP_CTSU=23,
183 SSP_IP_SCE=24,
184 SSP_IP_SLCDC=25,
185 SSP_IP_AES=26,
186 SSP_IP_TRNG=27,
187 SSP_IP_ROMC=30,
188 SSP_IP_SRAM=31,
189 SSP_IP_ADC=32,
190 SSP_IP_DAC=33,
191 SSP_IP_TSN=34,
192 SSP_IP_DAAD=35,
193 SSP_IP_COMP_HS=36,
194 SSP_IP_COMP_LP=37,
195 SSP_IP_OPAMP=38,
196 SSP_IP_SDADC=39,
197 SSP_IP_RTC=40,
198 SSP_IP_WDT=41,
199 SSP_IP_IWDT=42,
200 SSP_IP_GPT=43,
201 SSP_IP_POEG=44,
202 SSP_IP_OPS=45,
203 SSP_IP_PSD=46,
204 SSP_IP_AGT=47,
205 SSP_IP_CAN=48,
206 SSP_IP_IRDA=49,
207 SSP_IP_QSPI=50,
208 SSP_IP_USB=51,
209 SSP_IP_SDHIMMC=52,
210 SSP_IP_SRC=53,
211 SSP_IP_SSI=54,
212 SSP_IP_DALI=55,
213 SSP_IP_ETHER=64, SSP_IP_EDMAC=64,
214 SSP_IP_EPTPC=65,
215 SSP_IP_PDC=66,
216 SSP_IP_GLCDC=67,
217 SSP_IP_DRW=68,
218 SSP_IP_JPEG=69,
219 SSP_IP_MAX
220 } ssp_ip_t;
221
222
223 typedef enum e_ssp_signal
224 {
225 SSP_SIGNAL_ADC_COMPARE_MATCH=0,
226 SSP_SIGNAL_ADC_COMPARE_MISMATCH,
227 SSP_SIGNAL_ADC_SCAN_END,
228 SSP_SIGNAL_ADC_SCAN_END_B,
229 SSP_SIGNAL_ADC_WINDOW_A,
230 SSP_SIGNAL_ADC_WINDOW_B,
231 SSP_SIGNAL_AES_RDREQ=0,
232 SSP_SIGNAL_AES_WRREQ,
233 SSP_SIGNAL_AGT_COMPARE_A=0,
234 SSP_SIGNAL_AGT_COMPARE_B,
235 SSP_SIGNAL_AGT_INT,
236 SSP_SIGNAL_CAC_FREQUENCY_ERROR=0,
237 SSP_SIGNAL_CAC_MEASUREMENT_END,
238 SSP_SIGNAL_CAC_OVERFLOW,
239 SSP_SIGNAL_CAN_ERROR=0,
240 SSP_SIGNAL_CAN_FIFO_RX,
241 SSP_SIGNAL_CAN_FIFO_TX,
242 SSP_SIGNAL_CAN_MAILBOX_RX,
243 SSP_SIGNAL_CAN_MAILBOX_TX,
244 SSP_SIGNAL_CGC_MOSC_STOP=0,
245 SSP_SIGNAL_LPM_SNOOZE_REQUEST,
246 SSP_SIGNAL_LVD_LVD1,
247 SSP_SIGNAL_LVD_LVD2,
248 SSP_SIGNAL_VBATT_LVD,
249 SSP_SIGNAL_LVD_VBATT = SSP_SIGNAL_VBATT_LVD,
250 SSP_SIGNAL_COMP_HS_INT=0,
251 SSP_SIGNAL_COMP_LP=0,
252 SSP_SIGNAL_COMP_LP_INT=0,
253 SSP_SIGNAL_CTSU_END=0,
254 SSP_SIGNAL_CTSU_READ,
255 SSP_SIGNAL_CTSU_WRITE,
256 SSP_SIGNAL_DALI_DEI=0,
257 SSP_SIGNAL_DALI_CLI,
258 SSP_SIGNAL_DALI_SDI,
259 SSP_SIGNAL_DALI_BPI,
260 SSP_SIGNAL_DALI_FEI,
261 SSP_SIGNAL_DALI_SDI_OR_BPI,
262 SSP_SIGNAL_DMAC_INT=0,
263 SSP_SIGNAL_DOC_INT=0,
264 SSP_SIGNAL_DRW_INT=0,
265 SSP_SIGNAL_DTC_COMPLETE=0,
266 SSP_SIGNAL_DTC_END,
267 SSP_SIGNAL_EDMAC_EINT=0,
268 SSP_SIGNAL_ELC_SOFTWARE_EVENT_0=0,
269 SSP_SIGNAL_ELC_SOFTWARE_EVENT_1,
270 SSP_SIGNAL_EPTPC_IPLS=0,
271 SSP_SIGNAL_EPTPC_MINT,
272 SSP_SIGNAL_EPTPC_PINT,
273 SSP_SIGNAL_EPTPC_TIMER0_FALL,
274 SSP_SIGNAL_EPTPC_TIMER0_RISE,
275 SSP_SIGNAL_EPTPC_TIMER1_FALL,
276 SSP_SIGNAL_EPTPC_TIMER1_RISE,
277 SSP_SIGNAL_EPTPC_TIMER2_FALL,
278 SSP_SIGNAL_EPTPC_TIMER2_RISE,
279 SSP_SIGNAL_EPTPC_TIMER3_FALL,
280 SSP_SIGNAL_EPTPC_TIMER3_RISE,
281 SSP_SIGNAL_EPTPC_TIMER4_FALL,
282 SSP_SIGNAL_EPTPC_TIMER4_RISE,
283 SSP_SIGNAL_EPTPC_TIMER5_FALL,
284 SSP_SIGNAL_EPTPC_TIMER5_RISE,
285 SSP_SIGNAL_FCU_FIFERR=0,
286 SSP_SIGNAL_FCU_FRDYI,
287 SSP_SIGNAL_GLCDC_LINE_DETECT=0,
288 SSP_SIGNAL_GLCDC_UNDERFLOW_1,
289 SSP_SIGNAL_GLCDC_UNDERFLOW_2,
290 SSP_SIGNAL_GPT_CAPTURE_COMPARE_A=0,
291 SSP_SIGNAL_GPT_CAPTURE_COMPARE_B,
292 SSP_SIGNAL_GPT_COMPARE_C,
293 SSP_SIGNAL_GPT_COMPARE_D,
294 SSP_SIGNAL_GPT_COMPARE_E,
295 SSP_SIGNAL_GPT_COMPARE_F,
296 SSP_SIGNAL_GPT_COUNTER_OVERFLOW,
297 SSP_SIGNAL_GPT_COUNTER_UNDERFLOW,
298 SSP_SIGNAL_GPT_AD_TRIG_A,
299 SSP_SIGNAL_GPT_AD_TRIG_B,
300 SSP_SIGNAL_OPS_UVW_EDGE,
301 SSP_SIGNAL_ICU_IRQ0=0,
302 SSP_SIGNAL_ICU_IRQ1,
303 SSP_SIGNAL_ICU_IRQ2,
304 SSP_SIGNAL_ICU_IRQ3,
305 SSP_SIGNAL_ICU_IRQ4,
306 SSP_SIGNAL_ICU_IRQ5,
307 SSP_SIGNAL_ICU_IRQ6,
308 SSP_SIGNAL_ICU_IRQ7,
309 SSP_SIGNAL_ICU_IRQ8,
310 SSP_SIGNAL_ICU_IRQ9,
311 SSP_SIGNAL_ICU_IRQ10,
312 SSP_SIGNAL_ICU_IRQ11,
313 SSP_SIGNAL_ICU_IRQ12,
314 SSP_SIGNAL_ICU_IRQ13,
315 SSP_SIGNAL_ICU_IRQ14,
316 SSP_SIGNAL_ICU_IRQ15,
317 SSP_SIGNAL_ICU_SNOOZE_CANCEL,
318 SSP_SIGNAL_IIC_ERI=0,
319 SSP_SIGNAL_IIC_RXI,
320 SSP_SIGNAL_IIC_TEI,
321 SSP_SIGNAL_IIC_TXI,
322 SSP_SIGNAL_IIC_WUI,
323 SSP_SIGNAL_IOPORT_EVENT_1=0,
324 SSP_SIGNAL_IOPORT_EVENT_2,
325 SSP_SIGNAL_IOPORT_EVENT_3,
326 SSP_SIGNAL_IOPORT_EVENT_4,
327 SSP_SIGNAL_IWDT_UNDERFLOW=0,
328 SSP_SIGNAL_JPEG_JDTI=0,
329 SSP_SIGNAL_JPEG_JEDI,
330 SSP_SIGNAL_KEY_INT=0,
331 SSP_SIGNAL_PDC_FRAME_END=0,
332 SSP_SIGNAL_PDC_INT,
333 SSP_SIGNAL_PDC_RECEIVE_DATA_READY,
334 SSP_SIGNAL_POEG_EVENT=0,
335 SSP_SIGNAL_QSPI_INT=0,
336 SSP_SIGNAL_RTC_ALARM=0,
337 SSP_SIGNAL_RTC_PERIOD,
338 SSP_SIGNAL_RTC_CARRY,
339 SSP_SIGNAL_SCE_INTEGRATE_RDRDY=0,
340 SSP_SIGNAL_SCE_INTEGRATE_WRRDY,
341 SSP_SIGNAL_SCE_LONG_PLG,
342 SSP_SIGNAL_SCE_PROC_BUSY,
343 SSP_SIGNAL_SCE_RDRDY_0,
344 SSP_SIGNAL_SCE_RDRDY_1,
345 SSP_SIGNAL_SCE_ROMOK,
346 SSP_SIGNAL_SCE_TEST_BUSY,
347 SSP_SIGNAL_SCE_WRRDY_0,
348 SSP_SIGNAL_SCE_WRRDY_1,
349 SSP_SIGNAL_SCE_WRRDY_4,
350 SSP_SIGNAL_SCI_AM=0,
351 SSP_SIGNAL_SCI_ERI,
352 SSP_SIGNAL_SCI_RXI,
353 SSP_SIGNAL_SCI_RXI_OR_ERI,
354 SSP_SIGNAL_SCI_TEI,
355 SSP_SIGNAL_SCI_TXI,
356 SSP_SIGNAL_SDADC_ADI=0,
357 SSP_SIGNAL_SDADC_SCANEND,
358 SSP_SIGNAL_SDADC_CALIEND,
359 SSP_SIGNAL_SDHIMMC_ACCS=0,
360 SSP_SIGNAL_SDHIMMC_CARD,
361 SSP_SIGNAL_SDHIMMC_DMA_REQ,
362 SSP_SIGNAL_SDHIMMC_SDIO,
363 SSP_SIGNAL_SPI_ERI=0,
364 SSP_SIGNAL_SPI_IDLE,
365 SSP_SIGNAL_SPI_RXI,
366 SSP_SIGNAL_SPI_TEI,
367 SSP_SIGNAL_SPI_TXI,
368 SSP_SIGNAL_SRC_CONVERSION_END=0,
369 SSP_SIGNAL_SRC_INPUT_FIFO_EMPTY,
370 SSP_SIGNAL_SRC_OUTPUT_FIFO_FULL,
371 SSP_SIGNAL_SRC_OUTPUT_FIFO_OVERFLOW,
372 SSP_SIGNAL_SRC_OUTPUT_FIFO_UNDERFLOW,
373 SSP_SIGNAL_SSI_INT=0,
374 SSP_SIGNAL_SSI_RXI,
375 SSP_SIGNAL_SSI_TXI,
376 SSP_SIGNAL_SSI_TXI_RXI,
377 SSP_SIGNAL_TRNG_RDREQ=0,
378 SSP_SIGNAL_USB_FIFO_0=0,
379 SSP_SIGNAL_USB_FIFO_1,
380 SSP_SIGNAL_USB_INT,
381 SSP_SIGNAL_USB_RESUME,
382 SSP_SIGNAL_USB_USB_INT_RESUME,
383 SSP_SIGNAL_WDT_UNDERFLOW=0,
384 } ssp_signal_t;
385
386 typedef enum e_ssp_ip_unit
387 {
388 SSP_IP_UNIT_USBFS = 0,
389 SSP_IP_UNIT_USBHS = 1,
390 } ssp_ip_unit_t;
391
392 typedef struct st_ssp_vector_info
393 {
394 void ** pp_ctrl; /* pointer to control handle for usage by ISR */
395 uint32_t event_number: 10;
396 uint32_t ip_channel:6;
397 uint32_t ip_id:8;
398 uint32_t ip_unit:3;
399 uint32_t ip_signal:5;
400 } ssp_vector_info_t;
401
402 typedef void (* ssp_vector_t)(void);
403
404 typedef union st_ssp_feature
405 {
406 /*LDRA_INSPECTED 381 S Anonymous structures and unions are allowed in SSP code. */
407 struct {
408 ssp_ip_t id :8;
409 uint32_t unit :8;
410 uint32_t channel :16;
411 };
412 uint32_t word;
413 } ssp_feature_t;
414
415 /***********************************************************************************************************************
416 * Function Prototypes
417 **********************************************************************************************************************/
418
419 /***********************************************************************************************************************
420 * Inline Functions
421 **********************************************************************************************************************/
422
423 /*******************************************************************************************************************//**
424 * @brief Return active interrupt vector number value
425 *
426 * @return Active interrupt vector number value
427 **********************************************************************************************************************/
R_SSP_CurrentIrqGet(void)428 __STATIC_INLINE IRQn_Type R_SSP_CurrentIrqGet(void)
429 {
430 uint32_t xpsr_value = __get_xPSR();
431 xPSR_Type * p_xpsr = (xPSR_Type *) &xpsr_value;
432 return (IRQn_Type) (p_xpsr->b.ISR - SSP_PRIV_CORTEX_PROCESSOR_EXCEPTIONS);
433 }
434
435 /*******************************************************************************************************************//**
436 * @brief Finds the vector information associated with the requested IRQ.
437 *
438 * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this
439 * function.
440 * @param[out] pp_vector_info Pointer to pointer to vector information for IRQ.
441 **********************************************************************************************************************/
R_SSP_VectorInfoGet(IRQn_Type const irq,ssp_vector_info_t ** pp_vector_info)442 __STATIC_INLINE void R_SSP_VectorInfoGet(IRQn_Type const irq, ssp_vector_info_t ** pp_vector_info)
443 {
444 SSP_PARAMETER_NOT_USED(pp_vector_info);
445
446 /* This provides access to the vector information array defined in bsp_irq.c. This is an inline function instead of
447 * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */
448 extern ssp_vector_info_t * const gp_vector_information;
449
450 *pp_vector_info = &gp_vector_information[irq];
451 }
452
453 #endif /* SSP_FEATURES_H_ */
454