1 /* 2 * Copyright 2018-2019, 2023 NXP 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef _BOARD_H_ 8 #define _BOARD_H_ 9 10 #include "clock_config.h" 11 #include "fsl_common.h" 12 #include "fsl_reset.h" 13 #include "fsl_gpio.h" 14 15 /******************************************************************************* 16 * Definitions 17 ******************************************************************************/ 18 /*! @brief The board name */ 19 #define BOARD_NAME "MIMXRT685-EVK" 20 #define BOARD_I3C_CODEC (1) 21 22 /*! @brief The UART to use for debug messages. */ 23 #define BOARD_DEBUG_UART_TYPE kSerialPort_Uart 24 #define BOARD_DEBUG_UART_BASEADDR (uint32_t) USART0 25 #define BOARD_DEBUG_UART_INSTANCE 0U 26 #define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U) 27 #define BOARD_DEBUG_UART_FRG_CLK \ 28 (&(const clock_frg_clk_config_t){0, kCLOCK_FrgPllDiv, 255, 0}) /*!< Select FRG0 mux as frg_pll */ 29 #define BOARD_DEBUG_UART_CLK_ATTACH kFRG_to_FLEXCOMM0 30 #define BOARD_DEBUG_UART_RST kFC0_RST_SHIFT_RSTn 31 #define BOARD_DEBUG_UART_CLKSRC kCLOCK_Flexcomm0 32 #define BOARD_UART_IRQ_HANDLER FLEXCOMM0_IRQHandler 33 #define BOARD_UART_IRQ FLEXCOMM0_IRQn 34 35 #ifndef BOARD_DEBUG_UART_BAUDRATE 36 #define BOARD_DEBUG_UART_BAUDRATE 115200 37 #endif /* BOARD_DEBUG_UART_BAUDRATE */ 38 39 #define BOARD_FLEXSPI_PSRAM FLEXSPI 40 #ifndef BOARD_ENABLE_PSRAM_CACHE 41 #define BOARD_ENABLE_PSRAM_CACHE 1 42 #endif 43 44 #if BOARD_I3C_CODEC && (defined(SDK_I3C_BASED_COMPONENT_USED) && SDK_I3C_BASED_COMPONENT_USED) 45 #define BOARD_CODEC_I2C_BASEADDR I3C 46 #define BOARD_CODEC_I2C_CLOCK_FREQ CLOCK_GetI3cClkFreq() 47 #define BOARD_CODEC_I2C_INSTANCE 0 48 #else 49 #define BOARD_CODEC_I2C_BASEADDR I2C4 50 #define BOARD_CODEC_I2C_CLOCK_FREQ CLOCK_GetFlexCommClkFreq(4U) 51 #define BOARD_CODEC_I2C_INSTANCE 4 52 #endif 53 54 #define BOARD_PMIC_I2C_BASEADDR I2C15 55 #define BOARD_PMIC_I2C_CLOCK_FREQ CLOCK_GetFlexCommClkFreq(15U) 56 57 #define BOARD_ACCEL_I2C_BASEADDR I2C2 58 #define BOARD_ACCEL_I2C_ADDR 0x1E 59 #define BOARD_ACCEL_I2C_CLOCK_FREQ CLOCK_GetFlexCommClkFreq(2U) 60 61 /* Board led color mapping */ 62 #define LOGIC_LED_ON 1U 63 #define LOGIC_LED_OFF 0U 64 65 #ifndef BOARD_LED_RED_GPIO 66 #define BOARD_LED_RED_GPIO GPIO 67 #endif 68 #define BOARD_LED_RED_GPIO_PORT 0U 69 #ifndef BOARD_LED_RED_GPIO_PIN 70 #define BOARD_LED_RED_GPIO_PIN 31U 71 #endif 72 73 #ifndef BOARD_LED_GREEN_GPIO 74 #define BOARD_LED_GREEN_GPIO GPIO 75 #endif 76 #define BOARD_LED_GREEN_GPIO_PORT 0U 77 #ifndef BOARD_LED_GREEN_GPIO_PIN 78 #define BOARD_LED_GREEN_GPIO_PIN 14U 79 #endif 80 #ifndef BOARD_LED_BLUE_GPIO 81 #define BOARD_LED_BLUE_GPIO GPIO 82 #endif 83 #define BOARD_LED_BLUE_GPIO_PORT 0U 84 #ifndef BOARD_LED_BLUE_GPIO_PIN 85 #define BOARD_LED_BLUE_GPIO_PIN 26U 86 #endif 87 88 #ifndef BOARD_FLASH_RESET_GPIO 89 #define BOARD_FLASH_RESET_GPIO GPIO 90 #endif 91 #ifndef BOARD_FLASH_RESET_GPIO_PORT 92 #define BOARD_FLASH_RESET_GPIO_PORT 2U 93 #endif 94 #ifndef BOARD_FLASH_RESET_GPIO_PIN 95 #define BOARD_FLASH_RESET_GPIO_PIN 12U 96 #endif 97 98 /* Board microphone defines */ 99 #ifndef BOARD_DMIC_NUM 100 #define BOARD_DMIC_NUM 2 101 #endif 102 103 #define LED_RED_INIT(output) \ 104 GPIO_PinInit(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, \ 105 &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_RED */ 106 #define LED_RED_ON() \ 107 GPIO_PortSet(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \ 108 1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn on target LED_RED */ 109 #define LED_RED_OFF() \ 110 GPIO_PortClear(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \ 111 1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn off target LED_RED */ 112 #define LED_RED_TOGGLE() \ 113 GPIO_PortToggle(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \ 114 1U << BOARD_LED_RED_GPIO_PIN) /*!< Toggle on target LED_RED */ 115 116 #define LED_GREEN_INIT(output) \ 117 GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, BOARD_LED_GREEN_GPIO_PIN, \ 118 &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_GREEN */ 119 #define LED_GREEN_ON() \ 120 GPIO_PortSet(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \ 121 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn on target LED_GREEN */ 122 #define LED_GREEN_OFF() \ 123 GPIO_PortClear(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \ 124 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn off target LED_GREEN */ 125 #define LED_GREEN_TOGGLE() \ 126 GPIO_PortToggle(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \ 127 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */ 128 129 #define LED_BLUE_INIT(output) \ 130 GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, BOARD_LED_BLUE_GPIO_PIN, \ 131 &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_BLUE */ 132 #define LED_BLUE_ON() \ 133 GPIO_PortSet(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \ 134 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn on target LED_BLUE */ 135 #define LED_BLUE_OFF() \ 136 GPIO_PortClear(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \ 137 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn off target LED_BLUE */ 138 #define LED_BLUE_TOGGLE() \ 139 GPIO_PortToggle(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \ 140 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */ 141 142 /* Board SW PIN */ 143 #ifndef BOARD_SW1_GPIO 144 #define BOARD_SW1_GPIO GPIO 145 #endif 146 #define BOARD_SW1_GPIO_PORT 1U 147 #ifndef BOARD_SW1_GPIO_PIN 148 #define BOARD_SW1_GPIO_PIN 1U 149 #endif 150 151 #ifndef BOARD_SW2_GPIO 152 #define BOARD_SW2_GPIO GPIO 153 #endif 154 #define BOARD_SW2_GPIO_PORT 0U 155 #ifndef BOARD_SW2_GPIO_PIN 156 #define BOARD_SW2_GPIO_PIN 10U 157 #endif 158 159 /* USDHC configuration */ 160 #define BOARD_SD_SUPPORT_180V (1) 161 #define BOARD_USDHC_CD_GPIO_BASE GPIO 162 #define BOARD_USDHC_CD_GPIO_PORT (2) 163 #define BOARD_USDHC_CD_GPIO_PIN (9) 164 #define BOARD_SD_POWER_RESET_GPIO (GPIO) 165 #define BOARD_SD_POWER_RESET_GPIO_PORT (2) 166 #define BOARD_SD_POWER_RESET_GPIO_PIN (10) 167 168 /* Card detect handled by uSDHC, no GPIO interrupt */ 169 #define BOARD_SD_DETECT_TYPE kSDMMCHOST_DetectCardByHostCD 170 #define BOARD_USDHC_CD_PORT_IRQ USDHC0_IRQn 171 #define BOARD_USDHC_CD_STATUS() 0 172 #define BOARD_USDHC_CD_INTERRUPT_STATUS() 0 173 #define BOARD_USDHC_CD_CLEAR_INTERRUPT(flag) 174 #define BOARD_USDHC_CD_GPIO_INIT() 175 176 #define BOARD_HAS_SDCARD (1U) 177 #define BOARD_USDHC_CARD_INSERT_CD_LEVEL (0U) 178 179 #define BOARD_USDHC_MMCCARD_POWER_CONTROL_INIT() 180 #define BOARD_USDHC_MMCCARD_POWER_CONTROL(state) 181 #define BOARD_USDHC_SDCARD_POWER_CONTROL_INIT() \ 182 { \ 183 GPIO_PortInit(BOARD_SD_POWER_RESET_GPIO, BOARD_SD_POWER_RESET_GPIO_PORT); \ 184 GPIO_PinInit(BOARD_SD_POWER_RESET_GPIO, BOARD_SD_POWER_RESET_GPIO_PORT, BOARD_SD_POWER_RESET_GPIO_PIN, \ 185 &(gpio_pin_config_t){kGPIO_DigitalOutput, 0}); \ 186 } 187 188 #define BOARD_MMC_SUPPORT_8BIT_BUS 0 189 190 #define BOARD_USDHC_SDCARD_POWER_CONTROL(state) \ 191 (state ? \ 192 GPIO_PortSet(BOARD_SD_POWER_RESET_GPIO, BOARD_SD_POWER_RESET_GPIO_PORT, 1 << BOARD_SD_POWER_RESET_GPIO_PIN) : \ 193 GPIO_PortClear(BOARD_SD_POWER_RESET_GPIO, BOARD_SD_POWER_RESET_GPIO_PORT, \ 194 1 << BOARD_SD_POWER_RESET_GPIO_PIN)) 195 196 #define BOARD_USDHC0_BASEADDR USDHC0 197 198 #define BOARD_USDHC0_CLK_FREQ CLOCK_GetSdioClkFreq(0) 199 200 #define BOARD_USDHC_SWITCH_VOLTAGE_FUNCTION 1U 201 202 #define BOARD_SD_HOST_BASEADDR BOARD_USDHC0_BASEADDR 203 #define BOARD_SD_HOST_CLK_FREQ BOARD_USDHC0_CLK_FREQ 204 #define BOARD_SD_HOST_IRQ USDHC0_IRQn 205 206 #define BOARD_SD_Pin_Config(speed, strength) 207 208 /* USB PHY condfiguration */ 209 #define BOARD_USB_PHY_D_CAL (0x0CU) 210 #define BOARD_USB_PHY_TXCAL45DP (0x06U) 211 #define BOARD_USB_PHY_TXCAL45DM (0x06U) 212 213 #define BOARD_FLASH_SIZE (0x4000000U) 214 215 /* Display. */ 216 #define BOARD_LCD_DC_GPIO GPIO 217 #define BOARD_LCD_DC_GPIO_PORT 1U 218 #define BOARD_LCD_DC_GPIO_PIN 7U 219 220 #define BOARD_BT_UART_INSTANCE 4 221 #define BOARD_BT_UART_BAUDRATE 3000000 222 #define BOARD_BT_UART_CLK_FREQ CLOCK_GetFlexCommClkFreq(4U) 223 #define BOARD_BT_UART_FRG_CLK \ 224 (&(const clock_frg_clk_config_t){4, kCLOCK_FrgPllDiv, 255, 4}) /*!< Select FRG0 mux as frg_pll */ 225 #define BOARD_BT_UART_CLK_ATTACH kFRG_to_FLEXCOMM4 226 #define BOARD_BT_UART_RST kFC4_RST_SHIFT_RSTn 227 #define BOARD_BT_UART_IRQ FLEXCOMM4_IRQn 228 #define BOARD_BT_UART_IRQ_HANDLER FLEXCOMM4_IRQHandler 229 #define BOARD_BT_UART_CLKSRC kCLOCK_Flexcomm4 230 231 /* ERPC SPI configuration */ 232 #define ERPC_BOARD_SPI_SLAVE_READY_USE_GPIO (1) 233 #define ERPC_BOARD_SPI_BASEADDR SPI14_BASE 234 #define ERPC_BOARD_SPI_BAUDRATE 500000U 235 #define ERPC_BOARD_SPI_CLKSRC kCLOCK_Flexcomm14 236 #define ERPC_BOARD_SPI_CLK_FREQ CLOCK_GetFlexCommClkFreq(14) 237 #define ERPC_BOARD_SPI_INT_GPIO GPIO 238 #define ERPC_BOARD_SPI_INT_PORT 1U 239 #define ERPC_BOARD_SPI_INT_PIN 16U 240 #define ERPC_BOARD_SPI_INT_PIN_IRQ PIN_INT1_IRQn 241 #define ERPC_BOARD_SPI_INT_PIN_IRQ_HANDLER PIN_INT1_IRQHandler 242 #define ERPC_BOARD_SPI_INT_GPIO_LPC (1) 243 244 /* ERPC I2C configuration */ 245 #define ERPC_BOARD_I2C_BASEADDR I2C2_BASE 246 #define ERPC_BOARD_I2C_BAUDRATE 100000U 247 #define ERPC_BOARD_I2C_CLKSRC kCLOCK_Flexcomm2 248 #define ERPC_BOARD_I2C_CLK_FREQ CLOCK_GetFlexCommClkFreq(2) 249 #define ERPC_BOARD_I2C_INT_GPIO GPIO 250 #define ERPC_BOARD_I2C_INT_PORT 1U 251 #define ERPC_BOARD_I2C_INT_PIN 16U 252 #define ERPC_BOARD_I2C_INT_PIN_IRQ PIN_INT1_IRQn 253 #define ERPC_BOARD_I2C_INT_PIN_IRQ_HANDLER PIN_INT1_IRQHandler 254 255 #if defined(__cplusplus) 256 extern "C" { 257 #endif /* __cplusplus */ 258 259 /******************************************************************************* 260 * API 261 ******************************************************************************/ 262 263 void BOARD_InitDebugConsole(void); 264 status_t BOARD_InitPsRam(void); 265 void BOARD_FlexspiClockSafeConfig(void); 266 AT_QUICKACCESS_SECTION_CODE(void BOARD_SetFlexspiClock(uint32_t src, uint32_t divider)); 267 AT_QUICKACCESS_SECTION_CODE(void BOARD_DeinitXip(FLEXSPI_Type *base)); 268 AT_QUICKACCESS_SECTION_CODE(void BOARD_InitXip(FLEXSPI_Type *base)); 269 AT_QUICKACCESS_SECTION_CODE(void BOARD_SetDeepSleepPinConfig(void)); 270 AT_QUICKACCESS_SECTION_CODE(void BOARD_RestoreDeepSleepPinConfig(void)); 271 AT_QUICKACCESS_SECTION_CODE(void BOARD_EnterDeepSleep(const uint32_t exclude_from_pd[4])); 272 AT_QUICKACCESS_SECTION_CODE(void BOARD_EnterDeepPowerDown(const uint32_t exclude_from_pd[4])); 273 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED 274 void BOARD_I2C_Init(I2C_Type *base, uint32_t clkSrc_Hz); 275 status_t BOARD_I2C_Send(I2C_Type *base, 276 uint8_t deviceAddress, 277 uint32_t subAddress, 278 uint8_t subaddressSize, 279 uint8_t *txBuff, 280 uint8_t txBuffSize); 281 status_t BOARD_I2C_Receive(I2C_Type *base, 282 uint8_t deviceAddress, 283 uint32_t subAddress, 284 uint8_t subaddressSize, 285 uint8_t *rxBuff, 286 uint8_t rxBuffSize); 287 #endif 288 #if defined(SDK_I3C_BASED_COMPONENT_USED) && SDK_I3C_BASED_COMPONENT_USED 289 void BOARD_I3C_Init(I3C_Type *base, uint32_t clkSrc_Hz); 290 status_t BOARD_I3C_Send(I3C_Type *base, 291 uint8_t deviceAddress, 292 uint32_t subAddress, 293 uint8_t subaddressSize, 294 uint8_t *txBuff, 295 uint8_t txBuffSize); 296 status_t BOARD_I3C_Receive(I3C_Type *base, 297 uint8_t deviceAddress, 298 uint32_t subAddress, 299 uint8_t subaddressSize, 300 uint8_t *rxBuff, 301 uint8_t rxBuffSize); 302 #endif 303 #if defined BOARD_USE_CODEC 304 void BOARD_Codec_I2C_Init(void); 305 status_t BOARD_Codec_I2C_Send( 306 uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize); 307 status_t BOARD_Codec_I2C_Receive( 308 uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize); 309 #endif 310 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED 311 void BOARD_PMIC_I2C_Init(void); 312 status_t BOARD_PMIC_I2C_Send( 313 uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize); 314 status_t BOARD_PMIC_I2C_Receive( 315 uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize); 316 317 void BOARD_Accel_I2C_Init(void); 318 status_t BOARD_Accel_I2C_Send(uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint32_t txBuff); 319 status_t BOARD_Accel_I2C_Receive( 320 uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint8_t *rxBuff, uint8_t rxBuffSize); 321 322 #endif /* SDK_I2C_BASED_COMPONENT_USED */ 323 #if defined(__cplusplus) 324 } 325 #endif /* __cplusplus */ 326 327 #endif /* _BOARD_H_ */ 328