1 /*
2  * Copyright 2023 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef _BOARD_H_
9 #define _BOARD_H_
10 
11 #include "clock_config.h"
12 #include "fsl_common.h"
13 #include "fsl_reset.h"
14 #include "fsl_gpio.h"
15 #if defined(MIMXRT798S_cm33_core0_SERIES) || defined(MIMXRT798S_cm33_core1_SERIES)
16 #include "fsl_glikey.h"
17 #endif
18 #if defined(MIMXRT798S_cm33_core0_SERIES)
19 #include "fsl_xspi.h"
20 #include "fsl_power.h"
21 #endif
22 
23 /*******************************************************************************
24  * Definitions
25  ******************************************************************************/
26 /*! @brief The board name */
27 #define BOARD_NAME "MIMXRT700-EVK"
28 
29 /*! @brief The UART to use for debug messages. */
30 #define BOARD_DEBUG_UART_TYPE kSerialPort_Uart
31 #if (defined(MIMXRT798S_cm33_core0_SERIES) || defined(MIMXRT798S_hifi4_SERIES))
32 #define BOARD_DEBUG_UART_BASEADDR     (uint32_t) LPUART0
33 #define BOARD_DEBUG_UART_INSTANCE     0U
34 #define BOARD_DEBUG_UART_CLK_FREQ     CLOCK_GetLPFlexCommClkFreq(0)
35 #define BOARD_DEBUG_UART_CLK_ATTACH   kFCCLK0_to_FLEXCOMM0
36 #define BOARD_DEBUG_UART_FCCLK_DIV    kCLOCK_DivFcclk0Clk
37 #define BOARD_DEBUG_UART_FCCLK_ATTACH kOSC_CLK_to_FCCLK0
38 #define BOARD_UART_IRQ_HANDLER        LP_FLEXCOMM0_IRQHandler
39 #define BOARD_UART_IRQ                LP_FLEXCOMM0_IRQn
40 #elif (defined(MIMXRT798S_cm33_core1_SERIES) || defined(MIMXRT798S_hifi1_SERIES) || defined(MIMXRT798S_ezhv_SERIES))
41 #define BOARD_DEBUG_UART_BASEADDR   (uint32_t) LPUART19
42 #define BOARD_DEBUG_UART_INSTANCE   19U
43 #define BOARD_DEBUG_UART_CLK_FREQ   CLOCK_GetLPFlexCommClkFreq(19)
44 #define BOARD_DEBUG_UART_CLK_ATTACH kSENSE_BASE_to_FLEXCOMM19
45 #define BOARD_DEBUG_UART_CLK_DIV    kCLOCK_DivLPFlexComm19Clk
46 #define BOARD_UART_IRQ_HANDLER      LP_FLEXCOMM19_IRQHandler
47 #define BOARD_UART_IRQ              LP_FLEXCOMM19_IRQn
48 #else
49 #error "Unsupported core!"
50 #endif
51 
52 #ifndef BOARD_DEBUG_UART_BAUDRATE
53 #define BOARD_DEBUG_UART_BAUDRATE 115200
54 #endif /* BOARD_DEBUG_UART_BAUDRATE */
55 
56 /* Board RGB LED color mapping */
57 #define LOGIC_LED_ON  1U
58 #define LOGIC_LED_OFF 0U
59 #ifndef BOARD_LED_GREEN_GPIO
60 #define BOARD_LED_GREEN_GPIO GPIO0
61 #endif
62 #ifndef BOARD_LED_GREEN_GPIO_PIN
63 #define BOARD_LED_GREEN_GPIO_PIN 18U
64 #endif
65 #ifndef BOARD_LED_BLUE_GPIO
66 #define BOARD_LED_BLUE_GPIO GPIO0
67 #endif
68 #ifndef BOARD_LED_BLUE_GPIO_PIN
69 #define BOARD_LED_BLUE_GPIO_PIN 17U
70 #endif
71 
72 #ifndef BOARD_LED_RED_GPIO
73 #define BOARD_LED_RED_GPIO GPIO8
74 #endif
75 #ifndef BOARD_LED_RED_GPIO_PIN
76 #define BOARD_LED_RED_GPIO_PIN 6U
77 #endif
78 
79 /* SSD1963 (TFT_PROTO_5) panel. */
80 /* RST pin. */
81 #define BOARD_SSD1963_RST_GPIO GPIO2
82 #define BOARD_SSD1963_RST_PIN  15
83 /* CS pin. */
84 #define BOARD_SSD1963_CS_GPIO GPIO2
85 #define BOARD_SSD1963_CS_PIN  0
86 /* D/C pin, also named RS pin. */
87 #define BOARD_SSD1963_RS_GPIO GPIO2
88 #define BOARD_SSD1963_RS_PIN  1
89 /* Touch panel. */
90 #define BOARD_SSD1963_TOUCH_I2C_BASEADDR   LPI2C8
91 #define BOARD_SSD1963_TOUCH_I2C_CLOCK_FREQ CLOCK_GetLPFlexCommClkFreq(8U)
92 
93 /* MIPI panel. */
94 #define BOARD_MIPI_PANEL_TOUCH_I2C_BASEADDR   LPI2C8
95 #define BOARD_MIPI_PANEL_TOUCH_I2C_CLOCK_FREQ CLOCK_GetLPFlexCommClkFreq(8U)
96 #define BOARD_MIPI_PANEL_TOUCH_RST_GPIO       GPIO3
97 #define BOARD_MIPI_PANEL_TOUCH_RST_PIN        8
98 #define BOARD_MIPI_PANEL_TOUCH_INT_GPIO       GPIO1
99 #define BOARD_MIPI_PANEL_TOUCH_INT_PIN        13
100 #define BOARD_MIPI_TOUCH_INT_GPIO_IRQ         GPIO10_IRQn
101 #define BOARD_MIPI_TOUCH_INT_GPIO_IRQ_Handler GPIO10_IRQHandler
102 
103 /* RST pin. */
104 #define BOARD_MIPI_RST_GPIO GPIO3
105 #define BOARD_MIPI_RST_PIN  4
106 /* POWER pin .*/
107 #define BOARD_MIPI_POWER_GPIO GPIO1
108 #define BOARD_MIPI_POWER_PIN  10
109 /* Backlight pin. */
110 #define BOARD_MIPI_BL_GPIO GPIO1
111 #define BOARD_MIPI_BL_PIN  14
112 /* TE pin. */
113 #define BOARD_MIPI_TE_GPIO             GPIO3
114 #define BOARD_MIPI_TE_PIN              5
115 #define BOARD_MIPI_TE_GPIO_IRQn        GPIO30_IRQn
116 #define BOARD_MIPI_TE_GPIO_IRQ_Handler GPIO30_IRQHandler
117 
118 #define LED_RED_INIT(output)                                           \
119     GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, output); \
120     BOARD_LED_RED_GPIO->PDDR |= (1U << BOARD_LED_RED_GPIO_PIN)                         /*!< Enable target LED_RED */
121 #define LED_RED_ON()  GPIO_PortSet(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN)   /*!< Turn on target LED_RED */
122 #define LED_RED_OFF() GPIO_PortClear(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn off target LED_RED */
123 #define LED_RED_TOGGLE() \
124     GPIO_PortToggle(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN)                  /*!< Toggle on target LED_RED1 */
125 
126 #define LED_GREEN_INIT(output)                                             \
127     GPIO_PinWrite(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, output); \
128     BOARD_LED_GREEN_GPIO->PDDR |= (1U << BOARD_LED_GREEN_GPIO_PIN)        /*!< Enable target LED_GREEN */
129 #define LED_GREEN_ON() \
130     GPIO_PortSet(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN)    /*!< Turn on target LED_GREEN */
131 #define LED_GREEN_OFF() \
132     GPIO_PortClear(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN)  /*!< Turn off target LED_GREEN */
133 #define LED_GREEN_TOGGLE() \
134     GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
135 
136 #define LED_BLUE_INIT(output)                                            \
137     GPIO_PinWrite(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, output); \
138     BOARD_LED_BLUE_GPIO->PDDR |= (1U << BOARD_LED_BLUE_GPIO_PIN)        /*!< Enable target LED_BLUE */
139 #define LED_BLUE_ON()                                                                                \
140     GPIO_PortSet(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN)    /*!< Turn on target LED_BLUE \
141                                                                          */
142 #define LED_BLUE_OFF()                                                                                \
143     GPIO_PortClear(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN)  /*!< Turn off target LED_BLUE \
144                                                                          */
145 #define LED_BLUE_TOGGLE() \
146     GPIO_PortToggle(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */
147 
148 /* Board SW PIN */
149 #ifndef BOARD_SW5_GPIO /* User button 1 */
150 #define BOARD_SW5_GPIO GPIO0
151 #define BOARD_SW5_NAME "SW5"
152 #endif
153 #ifndef BOARD_SW5_GPIO_PIN
154 #define BOARD_SW5_GPIO_PIN 9U
155 #endif
156 #ifndef BOARD_SW6_GPIO /* User button 3 */
157 #define BOARD_SW6_GPIO GPIO8
158 #endif
159 #ifndef BOARD_SW6_GPIO_PIN
160 #define BOARD_SW6_GPIO_PIN 5U
161 #endif
162 #ifndef BOARD_SW7_GPIO /* User button 2 */
163 #define BOARD_SW7_GPIO GPIO1
164 #endif
165 #ifndef BOARD_SW7_GPIO_PIN
166 #define BOARD_SW7_GPIO_PIN 3U
167 #endif
168 
169 /* USB PHY configuration */
170 #define BOARD_USB_PHY_D_CAL     (0x07U)
171 #define BOARD_USB_PHY_TXCAL45DP (0x06U)
172 #define BOARD_USB_PHY_TXCAL45DM (0x06U)
173 
174 #define BOARD_ACCEL_I2C_BASEADDR LPI2C20
175 
176 #define BOARD_CODEC_I2C_BASEADDR   LPI2C2
177 #define BOARD_CODEC_I2C_CLOCK_FREQ CLOCK_GetLPI2cClkFreq(2)
178 #define BOARD_CODEC_I2C_INSTANCE   2
179 
180 #define BOARD_PMIC_I2C_BASEADDR   LPI2C15
181 #define BOARD_PMIC_I2C_CLOCK_FREQ CLOCK_GetLPI2cClkFreq(15)
182 
183 /* Definitions for eRPC MU transport layer */
184 #if (defined(MIMXRT798S_cm33_core0_SERIES))
185 #define MU_BASE        MU1_MUA
186 #define MU_IRQ         MU1_A_IRQn
187 #define MU_IRQ_HANDLER MU1_A_IRQHandler
188 #elif (defined(MIMXRT798S_cm33_core1_SERIES))
189 #define MU_BASE        MU1_MUB
190 #define MU_IRQ         MU1_B_IRQn
191 #define MU_IRQ_HANDLER MU1_B_IRQHandler
192 #endif
193 #define MU_IRQ_PRIORITY (2)
194 
195 #ifndef BOARD_PSRAM_ENABLE_VARIABLE_LATENCY
196 #define BOARD_PSRAM_ENABLE_VARIABLE_LATENCY     (1U)
197 #endif
198 
199 /* ERPC LPSPI configuration */
200 #define ERPC_BOARD_LPSPI_SLAVE_READY_USE_GPIO (1)
201 #define ERPC_BOARD_LPSPI_BASEADDR             LPSPI14
202 #define ERPC_BOARD_LPSPI_BAUDRATE             500000U
203 #define ERPC_BOARD_LPSPI_CLK_FREQ             (CLOCK_GetFreq(kCLOCK_LPSpi14Clk))
204 #define ERPC_BOARD_LPSPI_INT_GPIO             GPIO1
205 #define ERPC_BOARD_LPSPI_INT_PIN              11U
206 
207 /* ERPC LPI2C configuration */
208 #define ERPC_BOARD_LPI2C_BASEADDR            LPI2C2_BASE
209 #define ERPC_BOARD_LPI2C_BAUDRATE            100000U
210 #define ERPC_BOARD_LPI2C_CLKSRC              kCLOCK_Flexcomm2
211 #define ERPC_BOARD_LPI2C_CLK_FREQ            CLOCK_GetLPFlexCommClkFreq(2u)
212 #define ERPC_BOARD_LPI2C_INT_GPIO            GPIO3
213 #define ERPC_BOARD_LPI2C_INT_PIN             2U
214 
215 #if (defined(MIMXRT798S_cm33_core0_SERIES))
216 #define IS_XIP_XSPI0()                                                                            \
217     ((((uint32_t)BOARD_ConfigMPU >= 0x28000000U) && ((uint32_t)BOARD_ConfigMPU < 0x30000000U)) || \
218      (((uint32_t)BOARD_ConfigMPU >= 0x38000000U) && ((uint32_t)BOARD_ConfigMPU < 0x40000000U)))
219 #define IS_XIP_XSPI1()                                                                            \
220     ((((uint32_t)BOARD_ConfigMPU >= 0x08000000U) && ((uint32_t)BOARD_ConfigMPU < 0x10000000U)) || \
221      (((uint32_t)BOARD_ConfigMPU >= 0x18000000U) && ((uint32_t)BOARD_ConfigMPU < 0x20000000U)))
222 #endif
223 
224 #if defined(__cplusplus)
225 extern "C" {
226 #endif /* __cplusplus */
227 
228 /*******************************************************************************
229  * API
230  ******************************************************************************/
231 void BOARD_InitDebugConsole(void);
232 #if defined(MIMXRT798S_cm33_core0_SERIES) || defined(MIMXRT798S_cm33_core1_SERIES)
233 /*!
234  * @brief Initializes the AHB Secure Controller, allow SRAM and Media access for masters.
235  */
236 void BOARD_InitAHBSC(void);
237 /*!
238  * @brief Enable write for the Glikey protected registers.
239  *
240  * @param base GLIKEY peripheral base pointer
241  * @param idx target index.
242  */
243 void GlikeyWriteEnable(GLIKEY_Type *base, uint8_t idx);
244 /*!
245  * @brief Reset the Glikey to init status.
246  *
247  * @param base GLIKEY peripheral base pointer
248  */
249 void GlikeyClearConfig(GLIKEY_Type *base);
250 #endif
251 
252 #if defined(MIMXRT798S_cm33_core0_SERIES)
253 void BOARD_ConfigMPU(void);
254 void BOARD_Init16bitsPsRam(XSPI_Type *base);
255 void BOARD_XspiClockSafeConfig(void);
256 AT_QUICKACCESS_SECTION_CODE(void BOARD_SetXspiClock(XSPI_Type *base, uint32_t src, uint32_t divider));
257 AT_QUICKACCESS_SECTION_CODE(void BOARD_DeinitXspi(XSPI_Type *base, CACHE64_CTRL_Type *cache));
258 AT_QUICKACCESS_SECTION_CODE(void BOARD_InitXspi(XSPI_Type *base, CACHE64_CTRL_Type *cache));
259 #endif
260 
261 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
262 void BOARD_I2C_Init(LPI2C_Type *base, uint32_t clkSrc_Hz);
263 status_t BOARD_I2C_Send(LPI2C_Type *base,
264                         uint8_t deviceAddress,
265                         uint32_t subAddress,
266                         uint8_t subaddressSize,
267                         uint8_t *txBuff,
268                         uint8_t txBuffSize);
269 status_t BOARD_I2C_Receive(LPI2C_Type *base,
270                            uint8_t deviceAddress,
271                            uint32_t subAddress,
272                            uint8_t subaddressSize,
273                            uint8_t *rxBuff,
274                            uint8_t rxBuffSize);
275 
276 void BOARD_PMIC_I2C_Init(void);
277 void BOARD_PMIC_I2C_Deinit(void);
278 status_t BOARD_PMIC_I2C_Send(
279     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize);
280 status_t BOARD_PMIC_I2C_Receive(
281     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize);
282 
283 
284 #if defined(MIMXRT798S_cm33_core0_SERIES)
285 void BOARD_MIPIPanelTouch_I2C_Init(void);
286 status_t BOARD_MIPIPanelTouch_I2C_Send(
287     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize);
288 status_t BOARD_MIPIPanelTouch_I2C_Receive(
289     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize);
290 #endif
291 #endif /* SDK_I2C_BASED_COMPONENT_USED */
292 
293 #if defined(__cplusplus)
294 }
295 #endif /* __cplusplus */
296 
297 #endif /* _BOARD_H_ */
298