xref: /btstack/port/renesas-tb-s1ja-cc256x/template/btstack_example/synergy/ssp/inc/ssp_features.h (revision 3b5c872a8c45689e8cc17891f01530f5aa5e911c)
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