1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 #ifndef FSP_FEATURES_H
8 #define FSP_FEATURES_H
9 
10 /***********************************************************************************************************************
11  * Includes   <System Includes> , "Project Includes"
12  **********************************************************************************************************************/
13 
14 /* C99 includes. */
15 #include <stdint.h>
16 #include <stddef.h>
17 #include <stdbool.h>
18 #include <assert.h>
19 
20 /* Different compiler support. */
21 #include "fsp_common_api.h"
22 #include "bsp_compiler_support.h"
23 #include "bsp_module_stop.h"
24 #include "bsp_clocks.h"
25 
26 /***********************************************************************************************************************
27  * Macro definitions
28  **********************************************************************************************************************/
29 
30 /*******************************************************************************************************************//**
31  * @addtogroup BSP_MCU
32  * @{
33  **********************************************************************************************************************/
34 
35 /*******************************************************************************************************************//**
36  * Cancels the module stop state.
37  *
38  * @param      ip       fsp_ip_t enum value for the module to be started
39  * @param      ch       The channel. Use channel 0 for modules without channels.
40  **********************************************************************************************************************/
41 #define R_BSP_MODULE_START(ip, ch)                   (R_BSP_MODULE_START_ ## ip(ip, ch))
42 
43 /*******************************************************************************************************************//**
44  * Enables the module stop state.
45  *
46  * @param      ip       fsp_ip_t enum value for the module to be stopped
47  * @param      ch       The channel. Use channel 0 for modules without channels.
48  **********************************************************************************************************************/
49 #define R_BSP_MODULE_STOP(ip, ch)                    (R_BSP_MODULE_STOP_ ## ip(ip, ch))
50 
51 /*******************************************************************************************************************//**
52  * @} (end addtogroup BSP_MCU)
53  **********************************************************************************************************************/
54 
55 #define R_BSP_MODULE_START_FSP_IP_GTM(ip, ch)        {R_BSP_MODULE_CLKON(ip, ch); \
56                                                       R_BSP_MSTP_START(ip, ch);   \
57                                                       R_BSP_MODULE_RSTON(ip, ch); \
58                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
59 
60 #define R_BSP_MODULE_STOP_FSP_IP_GTM(ip, ch)         {R_BSP_MSTP_STOP(ip, ch); \
61                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
62 
63 #define R_BSP_MODULE_START_FSP_IP_MTU3(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch); \
64                                                       R_BSP_MSTP_START(ip, ch);   \
65                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
66 
67 #define R_BSP_MODULE_STOP_FSP_IP_MTU3(ip, ch)        {NULL;}
68 
69 #define R_BSP_MODULE_START_FSP_IP_GPT(ip, ch)        {R_BSP_MODULE_CLKON(ip, ch); \
70                                                       R_BSP_MSTP_START(ip, ch);   \
71                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
72 
73 #define R_BSP_MODULE_STOP_FSP_IP_GPT(ip, ch)         {NULL;}
74 
75 #define R_BSP_MODULE_START_FSP_IP_POEG(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch); \
76                                                       R_BSP_MSTP_START(ip, ch);   \
77                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
78 
79 #define R_BSP_MODULE_STOP_FSP_IP_POEG(ip, ch)        {R_BSP_MSTP_STOP(ip, ch); \
80                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
81 
82 #define R_BSP_MODULE_START_FSP_IP_SCIF(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch); \
83                                                       R_BSP_MSTP_START(ip, ch);   \
84                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
85 
86 #define R_BSP_MODULE_STOP_FSP_IP_SCIF(ip, ch)        {R_BSP_MSTP_STOP(ip, ch); \
87                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
88 
89 #define R_BSP_MODULE_START_FSP_IP_RIIC(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch); \
90                                                       R_BSP_MSTP_START(ip, ch);   \
91                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
92 
93 #define R_BSP_MODULE_STOP_FSP_IP_RIIC(ip, ch)        {R_BSP_MSTP_STOP(ip, ch); \
94                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
95 
96 #define R_BSP_MODULE_START_FSP_IP_RSPI(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch); \
97                                                       R_BSP_MSTP_START(ip, ch);   \
98                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
99 
100 #define R_BSP_MODULE_STOP_FSP_IP_RSPI(ip, ch)        {R_BSP_MSTP_STOP(ip, ch); \
101                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
102 
103 #define R_BSP_MODULE_START_FSP_IP_MHU(ip, ch)        {R_BSP_MODULE_CLKON(ip, ch); \
104                                                       R_BSP_MSTP_START(ip, ch);   \
105                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
106 
107 #define R_BSP_MODULE_STOP_FSP_IP_MHU(ip, ch)         {NULL;}
108 
109 #define R_BSP_MODULE_START_FSP_IP_DMAC(ip, ch)       {R_BSP_MODULE_CLKON(ip, ch);          \
110                                                       R_BSP_MSTP_START(FSP_IP_DMAC_s, ch); \
111                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
112 
113 #define R_BSP_MODULE_STOP_FSP_IP_DMAC(ip, ch)        {NULL;}
114 
115 #define R_BSP_MODULE_START_FSP_IP_DMAC_s(ip, ch)     {R_BSP_MODULE_CLKON(ip, ch); \
116                                                       R_BSP_MSTP_START(ip, ch);   \
117                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
118 
119 #define R_BSP_MODULE_STOP_FSP_IP_DMAC_s(ip, ch)      {NULL;}
120 
121 #define R_BSP_MODULE_START_FSP_IP_SSI(ip, ch)        {R_BSP_MODULE_CLKON(ip, ch); \
122                                                       R_BSP_MSTP_START(ip, ch);   \
123                                                       R_BSP_MODULE_RSTOFF(ip, ch);}
124 
125 #define R_BSP_MODULE_STOP_FSP_IP_SSI(ip, ch)         {R_BSP_MSTP_STOP(ip, ch); \
126                                                       R_BSP_MODULE_CLKOFF(ip, ch);}
127 
128 #if BSP_FEATURE_CANFD_LITE
129  #define R_BSP_MODULE_START_FSP_IP_CANFD(ip, ch)     {R_BSP_MSTP_START(ip, ch);}
130 #else
131  #if BSP_FEATURE_CANFD_HAS_RSCANFD == 0
132   #define R_BSP_MODULE_START_FSP_IP_CANFD(ip, ch)    {R_BSP_MSTP_START(ip, 0U);    \
133                                                       R_BSP_MODULE_CLKON(ip, 0U);  \
134                                                       R_BSP_MODULE_CLKON(ip, 1U);  \
135                                                       R_BSP_MODULE_RSTOFF(ip, 0U); \
136                                                       R_BSP_MODULE_RSTOFF(ip, 1U);}
137  #else
138   #define R_BSP_MODULE_START_FSP_IP_CANFD(ip, ch)    {R_BSP_MSTP_START(ip, 0U);    \
139                                                       R_BSP_MODULE_CLKON(ip, 0U);  \
140                                                       R_BSP_MODULE_RSTOFF(ip, 0U); \
141                                                       R_BSP_MODULE_RSTOFF(ip, 1U);}
142  #endif
143 #endif
144 
145 #if BSP_FEATURE_CANFD_LITE
146  #define R_BSP_MODULE_STOP_FSP_IP_CANFD(ip, ch)    {R_BSP_MSTP_STOP(ip, ch)};
147 #else
148  #define R_BSP_MODULE_STOP_FSP_IP_CANFD(ip, ch)    {R_BSP_MODULE_CLKOFF(ip, 0U); \
149                                                     R_BSP_MSTP_STOP(ip, 0U);}
150 #endif
151 
152 #define R_BSP_MODULE_START_FSP_IP_ADC(ip, ch)      {R_BSP_MODULE_CLKON(ip, ch); \
153                                                     R_BSP_MSTP_START(ip, ch);   \
154                                                     R_BSP_MODULE_RSTOFF(ip, ch);}
155 
156 #define R_BSP_MODULE_STOP_FSP_IP_ADC(ip, ch)       {R_BSP_MSTP_STOP(ip, ch); \
157                                                     R_BSP_MODULE_CLKOFF(ip, ch);}
158 
159 #define R_BSP_MODULE_START_FSP_IP_TSU(ip, ch)      {R_BSP_MODULE_CLKON(ip, ch); \
160                                                     R_BSP_MSTP_START(ip, ch);   \
161                                                     R_BSP_MODULE_RSTOFF(ip, ch);}
162 
163 #define R_BSP_MODULE_STOP_FSP_IP_TSU(ip, ch)       {R_BSP_MSTP_STOP(ip, ch); \
164                                                     R_BSP_MODULE_CLKOFF(ip, ch);}
165 
166 #define R_BSP_MODULE_START_FSP_IP_WDT(ip, ch)      {R_BSP_MODULE_CLKON(ip, ch); \
167                                                     R_BSP_MSTP_START(ip, ch)    \
168                                                     R_BSP_MODULE_RSTOFF(ip, ch);}
169 
170 #define R_BSP_MODULE_STOP_FSP_IP_WDT(ip, ch)       {NULL;}
171 
172 #define R_BSP_MODULE_START_FSP_IP_SCI(ip, ch)      {R_BSP_MODULE_CLKON(ip, ch); \
173                                                     R_BSP_MSTP_START(ip, ch);   \
174                                                     R_BSP_MODULE_RSTOFF(ip, ch);}
175 
176 #define R_BSP_MODULE_STOP_FSP_IP_SCI(ip, ch)       {R_BSP_MSTP_STOP(ip, ch); \
177                                                     R_BSP_MODULE_CLKOFF(ip, ch);}
178 
179 #define R_BSP_MODULE_START_FSP_IP_XSPI(ip, ch)     {R_BSP_MODULE_CLKON(ip, ch); \
180                                                     R_BSP_MSTP_START(ip, ch);   \
181                                                     R_BSP_MODULE_RSTOFF(ip, ch);}
182 
183 #define R_BSP_MODULE_STOP_FSP_IP_XSPI(ip, ch)      {R_BSP_MSTP_STOP(ip, ch); \
184                                                     R_BSP_MODULE_CLKOFF(ip, ch);}
185 
186 /* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
187 
188 FSP_HEADER
189 
190 /*******************************************************************************************************************//**
191  * @addtogroup BSP_MCU
192  * @{
193  **********************************************************************************************************************/
194 
195 /***********************************************************************************************************************
196  * Typedef definitions
197  **********************************************************************************************************************/
198 
199 #ifndef BSP_OVERRIDE_FSP_IP_T
200 
201 /** Available modules. */
202 typedef enum e_fsp_ip
203 {
204     FSP_IP_GTM    = 0,                 ///< General Timer
205     FSP_IP_GPT    = 1,                 ///< General PWM Timer
206     FSP_IP_POEG   = 2,                 ///< Port Output Enable for GPT
207     FSP_IP_PORT   = 3,                 ///< I/O Ports
208     FSP_IP_IM33   = 4,                 ///< IM33 (Interrupt controller)
209     FSP_IP_SCIF   = 5,                 ///< Serial Communications Interface with FIFO
210     FSP_IP_RIIC   = 6,                 ///< I2C Bus Interface
211     FSP_IP_RSPI   = 7,                 ///< Renesas Serial Peripheral Interface
212     FSP_IP_MHU    = 8,                 ///< Message Handling Unit
213     FSP_IP_DMAC   = 9,                 ///< Direct Memory Access Controller
214     FSP_IP_DMAC_s = 9,                 ///< Direct Memory Access Controller
215     FSP_IP_SSI    = 10,                ///< Serial Sound Interface
216     FSP_IP_CANFD  = 11,                ///< CANFD Interface (RS-CANFD)
217     FSP_IP_ADC    = 12,                ///< A/D Converter
218     FSP_IP_TSU    = 13,                ///< Thermal Sensor Unit
219     FSP_IP_WDT    = 14,                ///< Watchdog Timer
220     FSP_IP_SCI    = 15,                ///< Serial Communications Interface
221     FSP_IP_MTU3   = 16,                ///< Multi-Function Timer Pulse Unit 3
222     FSP_IP_XSPI   = 17,                ///< Expanded Serial Peripheral Interface
223 } fsp_ip_t;
224 
225 #endif
226 
227 typedef void (* fsp_vector_t)(void);
228 
229 /** @} (end addtogroup BSP_MCU) */
230 
231 /** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
232 FSP_FOOTER
233 
234 #endif                                 /* FSP_FEATURES_H */
235