1 /* 2 * Copyright (c) 2023 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef _HPM_BOARD_H 9 #define _HPM_BOARD_H 10 #include <stdio.h> 11 #include <stdarg.h> 12 #include "hpm_common.h" 13 #include "hpm_clock_drv.h" 14 #include "hpm_soc.h" 15 #include "hpm_soc_feature.h" 16 #include "pinmux.h" 17 #if !defined(CONFIG_NDEBUG_CONSOLE) || !CONFIG_NDEBUG_CONSOLE 18 #include "hpm_debug_console.h" 19 #endif 20 21 #define BOARD_NAME "hpm5300evk" 22 #define BOARD_UF2_SIGNATURE (0x0A4D5048UL) 23 24 /* ACMP desction */ 25 #define BOARD_ACMP HPM_ACMP 26 #define BOARD_ACMP_CHANNEL ACMP_CHANNEL_CHN1 27 #define BOARD_ACMP_IRQ IRQn_ACMP_1 28 #define BOARD_ACMP_PLUS_INPUT ACMP_INPUT_DAC_OUT /* use internal DAC */ 29 #define BOARD_ACMP_MINUS_INPUT ACMP_INPUT_ANALOG_4 /* align with used pin */ 30 31 /* dma section */ 32 #define BOARD_APP_HDMA HPM_HDMA 33 #define BOARD_APP_HDMA_IRQ IRQn_HDMA 34 #define BOARD_APP_DMAMUX HPM_DMAMUX 35 #define TEST_DMA_CONTROLLER HPM_HDMA 36 #define TEST_DMA_IRQ IRQn_HDMA 37 38 /* uart section */ 39 #ifndef BOARD_RUNNING_CORE 40 #define BOARD_RUNNING_CORE HPM_CORE0 41 #endif 42 #ifndef BOARD_APP_UART_BASE 43 #define BOARD_APP_UART_BASE HPM_UART0 44 #define BOARD_APP_UART_IRQ IRQn_UART0 45 #else 46 #ifndef BOARD_APP_UART_IRQ 47 #warning no IRQ specified for application uart 48 #endif 49 #endif 50 51 #define BOARD_APP_UART_BAUDRATE (115200UL) 52 #define BOARD_APP_UART_CLK_NAME clock_uart0 53 #define BOARD_APP_UART_RX_DMA_REQ HPM_DMA_SRC_UART0_RX 54 #define BOARD_APP_UART_TX_DMA_REQ HPM_DMA_SRC_UART0_TX 55 56 #if !defined(CONFIG_NDEBUG_CONSOLE) || !CONFIG_NDEBUG_CONSOLE 57 #ifndef BOARD_CONSOLE_TYPE 58 #define BOARD_CONSOLE_TYPE CONSOLE_TYPE_UART 59 #endif 60 61 #if BOARD_CONSOLE_TYPE == CONSOLE_TYPE_UART 62 #ifndef BOARD_CONSOLE_BASE 63 #define BOARD_CONSOLE_BASE HPM_UART0 64 #define BOARD_CONSOLE_CLK_NAME clock_uart0 65 #endif 66 #define BOARD_CONSOLE_BAUDRATE (115200UL) 67 #endif 68 #endif 69 70 #define BOARD_FREEMASTER_UART_BASE HPM_UART2 71 #define BOARD_FREEMASTER_UART_IRQ IRQn_UART2 72 #define BOARD_FREEMASTER_UART_CLK_NAME clock_uart2 73 74 /* nor flash section */ 75 #define BOARD_FLASH_BASE_ADDRESS (0x80000000UL) /* Check */ 76 #define BOARD_FLASH_SIZE (SIZE_1MB) 77 78 /* i2c section */ 79 #define BOARD_APP_I2C_BASE HPM_I2C0 80 #define BOARD_APP_I2C_IRQ IRQn_I2C0 81 #define BOARD_APP_I2C_CLK_NAME clock_i2c0 82 #define BOARD_APP_I2C_DMA HPM_HDMA 83 #define BOARD_APP_I2C_DMAMUX HPM_DMAMUX 84 #define BOARD_APP_I2C_DMA_SRC HPM_DMA_SRC_I2C0 85 86 /* gptmr section */ 87 #define BOARD_GPTMR HPM_GPTMR0 88 #define BOARD_GPTMR_IRQ IRQn_GPTMR0 89 #define BOARD_GPTMR_CHANNEL 0 90 #define BOARD_GPTMR_DMA_SRC HPM_DMA_SRC_GPTMR0_0 91 #define BOARD_GPTMR_CLK_NAME clock_gptmr0 92 #define BOARD_GPTMR_PWM HPM_GPTMR0 93 #define BOARD_GPTMR_PWM_CHANNEL 0 94 #define BOARD_GPTMR_PWM_DMA_SRC HPM_DMA_SRC_GPTMR0_0 95 #define BOARD_GPTMR_PWM_CLK_NAME clock_gptmr0 96 #define BOARD_GPTMR_PWM_IRQ IRQn_GPTMR0 97 #define BOARD_GPTMR_PWM_SYNC HPM_GPTMR0 98 #define BOARD_GPTMR_PWM_SYNC_CHANNEL 1 99 #define BOARD_GPTMR_PWM_SYNC_CLK_NAME clock_gptmr0 100 101 /* User LED */ 102 #define BOARD_LED_GPIO_CTRL HPM_GPIO0 103 #define BOARD_LED_GPIO_INDEX GPIO_DI_GPIOA 104 #define BOARD_LED_GPIO_PIN 23 105 106 #define BOARD_LED_OFF_LEVEL 1 107 #define BOARD_LED_ON_LEVEL 0 108 109 /* 12V Power Enable*/ 110 #define BOARD_12V_EN_GPIO_CTRL HPM_GPIO0 111 #define BOARD_12V_EN_GPIO_INDEX GPIO_DI_GPIOA 112 #define BOARD_12V_EN_GPIO_PIN 24 113 114 /* gpiom section */ 115 #define BOARD_APP_GPIOM_BASE HPM_GPIOM 116 #define BOARD_APP_GPIOM_USING_CTRL HPM_FGPIO 117 #define BOARD_APP_GPIOM_USING_CTRL_NAME gpiom_core0_fast 118 119 /* User button */ 120 #define BOARD_APP_GPIO_CTRL HPM_GPIO0 121 #define BOARD_APP_GPIO_INDEX GPIO_DI_GPIOA 122 #define BOARD_APP_GPIO_PIN 9 123 #define BOARD_APP_GPIO_IRQ IRQn_GPIO0_A 124 125 /* spi section */ 126 #define BOARD_APP_SPI_BASE HPM_SPI1 127 #define BOARD_APP_SPI_CLK_NAME clock_spi1 128 #define BOARD_APP_SPI_IRQ IRQn_SPI1 129 #define BOARD_APP_SPI_SCLK_FREQ (20000000UL) 130 #define BOARD_APP_SPI_ADDR_LEN_IN_BYTES (1U) 131 #define BOARD_APP_SPI_DATA_LEN_IN_BITS (8U) 132 #define BOARD_APP_SPI_RX_DMA HPM_DMA_SRC_SPI1_RX 133 #define BOARD_APP_SPI_TX_DMA HPM_DMA_SRC_SPI1_TX 134 #define BOARD_SPI_CS_GPIO_CTRL HPM_GPIO0 135 #define BOARD_SPI_CS_PIN IOC_PAD_PA26 136 #define BOARD_SPI_CS_ACTIVE_LEVEL (0U) 137 138 /* ADC section */ 139 #define BOARD_APP_ADC16_NAME "ADC0" 140 #define BOARD_APP_ADC16_BASE HPM_ADC0 141 #define BOARD_APP_ADC16_IRQn IRQn_ADC0 142 #define BOARD_APP_ADC16_CH_1 (11U) 143 #define BOARD_APP_ADC16_CLK_NAME (clock_adc0) 144 145 #define BOARD_APP_ADC16_HW_TRIG_SRC HPM_PWM0 146 #define BOARD_APP_ADC16_HW_TRGM HPM_TRGM0 147 #define BOARD_APP_ADC16_HW_TRGM_IN HPM_TRGM0_INPUT_SRC_PWM0_CH8REF 148 #define BOARD_APP_ADC16_HW_TRGM_OUT_SEQ TRGM_TRGOCFG_ADC0_STRGI 149 #define BOARD_APP_ADC16_HW_TRGM_OUT_PMT TRGM_TRGOCFG_ADCX_PTRGI0A 150 151 #define BOARD_APP_ADC16_PMT_TRIG_CH ADC16_CONFIG_TRG0A 152 153 /* DAC section */ 154 #define BOARD_DAC_BASE HPM_DAC0 155 #define BOARD_DAC_IRQn IRQn_DAC0 156 #define BOARD_APP_DAC_CLOCK_NAME clock_dac0 157 158 /* Flash section */ 159 #define BOARD_APP_XPI_NOR_XPI_BASE (HPM_XPI0) 160 #define BOARD_APP_XPI_NOR_CFG_OPT_HDR (0xfcf90002U) 161 #define BOARD_APP_XPI_NOR_CFG_OPT_OPT0 (0x00000006U) 162 #define BOARD_APP_XPI_NOR_CFG_OPT_OPT1 (0x00001000U) 163 164 /* SDXC section */ 165 #define BOARD_APP_SDCARD_SDXC_BASE (HPM_SDXC0) 166 #define BOARD_APP_SDCARD_SUPPORT_1V8 (0) 167 168 /* MCAN section */ 169 #define BOARD_APP_CAN_BASE HPM_MCAN3 170 #define BOARD_APP_CAN_IRQn IRQn_CAN3 171 172 /* CALLBACK TIMER section */ 173 #define BOARD_CALLBACK_TIMER (HPM_GPTMR3) 174 #define BOARD_CALLBACK_TIMER_CH 1 175 #define BOARD_CALLBACK_TIMER_IRQ IRQn_GPTMR3 176 #define BOARD_CALLBACK_TIMER_CLK_NAME (clock_gptmr3) 177 178 /* APP PWM */ 179 #define BOARD_APP_PWM HPM_PWM0 180 #define BOARD_APP_PWM_CLOCK_NAME clock_mot0 181 #define BOARD_APP_PWM_OUT1 2 182 #define BOARD_APP_PWM_OUT2 3 183 #define BOARD_APP_TRGM HPM_TRGM0 184 #define BOARD_APP_PWM_IRQ IRQn_PWM0 185 #define BOARD_APP_TRGM_PWM_OUTPUT TRGM_TRGOCFG_PWM0_SYNCI 186 187 /*BLDC pwm*/ 188 /*PWM define*/ 189 #define BOARD_BLDCPWM HPM_PWM0 190 #define BOARD_BLDC_UH_PWM_OUTPIN (6U) 191 #define BOARD_BLDC_UL_PWM_OUTPIN (7U) 192 #define BOARD_BLDC_VH_PWM_OUTPIN (4U) 193 #define BOARD_BLDC_VL_PWM_OUTPIN (5U) 194 #define BOARD_BLDC_WH_PWM_OUTPIN (2U) 195 #define BOARD_BLDC_WL_PWM_OUTPIN (3U) 196 #define BOARD_BLDCPWM_TRGM HPM_TRGM0 197 #define BOARD_BLDCAPP_PWM_IRQ IRQn_PWM0 198 #define BOARD_BLDCPWM_CMP_INDEX_0 (0U) 199 #define BOARD_BLDCPWM_CMP_INDEX_1 (1U) 200 #define BOARD_BLDCPWM_CMP_INDEX_2 (2U) 201 #define BOARD_BLDCPWM_CMP_INDEX_3 (3U) 202 #define BOARD_BLDCPWM_CMP_INDEX_4 (4U) 203 #define BOARD_BLDCPWM_CMP_INDEX_5 (5U) 204 #define BOARD_BLDCPWM_CMP_INDEX_6 (6U) 205 #define BOARD_BLDCPWM_CMP_INDEX_7 (7U) 206 #define BOARD_BLDCPWM_CMP_TRIG_CMP (20U) 207 208 /*HALL define*/ 209 210 /*RDC*/ 211 #define BOARD_RDC_TRGM HPM_TRGM0 212 #define BOARD_RDC_TRGIGMUX_IN_NUM HPM_TRGM0_INPUT_SRC_RDC_TRGO_0 213 #define BOARD_RDC_TRG_NUM TRGM_TRGOCFG_MOT_GPIO0 214 #define BOARD_RDC_TRG_ADC_NUM TRGM_TRGOCFG_ADCX_PTRGI0A 215 #define BOARD_RDC_ADC_I_BASE HPM_ADC0 216 #define BOARD_RDC_ADC_Q_BASE HPM_ADC1 217 #define BOARD_RDC_ADC_I_CHN (5U) 218 #define BOARD_RDC_ADC_Q_CHN (6U) 219 #define BOARD_RDC_ADC_IRQn IRQn_ADC0 220 #define BOARD_RDC_ADC_TRIG_FLAG adc16_event_trig_complete 221 #define BOARD_RDC_ADC_TRG ADC16_CONFIG_TRG0A 222 223 /*QEI*/ 224 #define BOARD_BLDC_QEI_TRGM HPM_TRGM0 225 #define BOARD_BLDC_QEIV2_BASE HPM_QEI1 226 #define BOARD_BLDC_QEIV2_IRQ IRQn_QEI1 227 #define BOARD_BLDC_QEI_MOTOR_PHASE_COUNT_PER_REV (16U) 228 #define BOARD_BLDC_QEI_CLOCK_SOURCE clock_mot0 229 #define BOARD_BLDC_QEI_FOC_PHASE_COUNT_PER_REV (4000U) 230 #define BOARD_BLDC_QEI_ADC_MATRIX_ADC0 trgm_adc_matrix_output_to_qei1_adc0 231 #define BOARD_BLDC_QEI_ADC_MATRIX_ADC1 trgm_adc_matrix_output_to_qei1_adc1 232 233 /*Timer define*/ 234 #define BOARD_BLDC_TMR_1MS HPM_GPTMR2 235 #define BOARD_BLDC_TMR_CH 0 236 #define BOARD_BLDC_TMR_CMP 0 237 #define BOARD_BLDC_TMR_IRQ IRQn_GPTMR2 238 #define BOARD_BLDC_TMR_RELOAD (100000U) 239 240 /*adc*/ 241 #define BOARD_BLDC_ADC_MODULE (ADCX_MODULE_ADC16) 242 #define BOARD_BLDC_ADC_U_BASE HPM_ADC0 243 #define BOARD_BLDC_ADC_V_BASE HPM_ADC1 244 #define BOARD_BLDC_ADC_W_BASE HPM_ADC1 245 #define BOARD_BLDC_ADC_TRIG_FLAG adc16_event_trig_complete 246 247 #define BOARD_BLDC_ADC_CH_U (5U) 248 #define BOARD_BLDC_ADC_CH_V (6U) 249 #define BOARD_BLDC_ADC_CH_W (4U) 250 #define BOARD_BLDC_ADC_IRQn IRQn_ADC0 251 #define BOARD_BLDC_ADC_PMT_DMA_SIZE_IN_4BYTES (ADC_SOC_PMT_MAX_DMA_BUFF_LEN_IN_4BYTES) 252 #define BOARD_BLDC_ADC_TRG ADC16_CONFIG_TRG0A 253 #define BOARD_BLDC_ADC_PREEMPT_TRIG_LEN (1U) 254 #define BOARD_BLDC_PWM_TRIG_CMP_INDEX (8U) 255 #define BOARD_BLDC_TRIGMUX_IN_NUM HPM_TRGM0_INPUT_SRC_PWM0_CH8REF 256 #define BOARD_BLDC_TRG_NUM TRGM_TRGOCFG_ADCX_PTRGI0A 257 258 #define BOARD_PLB_COUNTER HPM_PLB 259 #define BOARD_PLB_PWM_BASE HPM_PWM0 260 #define BOARD_PLB_PWM_CLOCK_NAME clock_mot0 261 #define BOARD_PLB_TRGM HPM_TRGM0 262 #define BOARD_PLB_PWM_TRG (HPM_TRGM0_INPUT_SRC_PWM0_CH8REF) 263 #define BOARD_PLB_IN_PWM_TRG_NUM (TRGM_TRGOCFG_PLB_IN_00) 264 #define BOARD_PLB_IN_PWM_PULSE_TRG_NUM (TRGM_TRGOCFG_PLB_IN_02) 265 #define BOARD_PLB_OUT_TRG (HPM_TRGM0_INPUT_SRC_PLB_OUT00) 266 #define BOARD_PLB_IO_TRG_NUM (TRGM_TRGOCFG_MOT_GPIO2) 267 #define BOARD_PLB_IO_TRG_SHIFT (2) 268 #define BOARD_PLB_PWM_CMP (8U) 269 #define BOARD_PLB_PWM_CHN (8U) 270 #define BOARD_PLB_CHN plb_chn0 271 272 /* lin section */ 273 #define BOARD_LIN HPM_LIN3 274 #define BOARD_LIN_CLK_NAME clock_lin3 275 #define BOARD_LIN_IRQ IRQn_LIN3 276 #define BOARD_LIN_BAUDRATE (19200U) 277 278 /* QEO */ 279 #define BOARD_QEO HPM_QEO0 280 #define BOARD_QEO_TRGM_POS trgm_pos_matrix_output_to_qeo0 281 282 /* moto */ 283 #define BOARD_MOTOR_CLK_NAME clock_mot0 284 285 /* SEI */ 286 #define BOARD_SEI HPM_SEI 287 #define BOARD_SEI_CTRL SEI_CTRL_1 288 #define BOARD_SEI_IRQn IRQn_SEI1 289 290 /* USB */ 291 #define BOARD_USB HPM_USB0 292 293 /* OPAMP */ 294 #define BOARD_APP_OPAMP HPM_OPAMP0 295 296 #ifndef BOARD_SHOW_CLOCK 297 #define BOARD_SHOW_CLOCK 1 298 #endif 299 #ifndef BOARD_SHOW_BANNER 300 #define BOARD_SHOW_BANNER 1 301 #endif 302 303 /* FreeRTOS Definitions */ 304 #define BOARD_FREERTOS_TIMER HPM_GPTMR2 305 #define BOARD_FREERTOS_TIMER_CHANNEL 1 306 #define BOARD_FREERTOS_TIMER_IRQ IRQn_GPTMR2 307 #define BOARD_FREERTOS_TIMER_CLK_NAME clock_gptmr2 308 309 #if defined(__cplusplus) 310 extern "C" { 311 #endif /* __cplusplus */ 312 313 typedef void (*board_timer_cb)(void); 314 315 void board_init_gpio_pins(void); 316 void board_init_led_pins(void); 317 void board_init_usb_pins(void); 318 void board_led_write(uint8_t state); 319 void board_led_toggle(void); 320 void board_init_uart(UART_Type *ptr); 321 uint32_t board_init_spi_clock(SPI_Type *ptr); 322 void board_init_spi_pins(SPI_Type *ptr); 323 void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level); 324 uint32_t board_init_adc16_clock(ADC16_Type *ptr, bool clk_src_ahb); 325 void board_init_adc16_pins(void); 326 uint32_t board_init_dac_clock(DAC_Type *ptr, bool clk_src_ahb); 327 void board_init_can(MCAN_Type *ptr); 328 uint32_t board_init_can_clock(MCAN_Type *ptr); 329 void board_init_rgb_pwm_pins(void); 330 void board_disable_output_rgb_led(uint8_t color); 331 void board_enable_output_rgb_led(uint8_t color); 332 void board_init_dac_pins(DAC_Type *ptr); 333 void board_write_spi_cs(uint32_t pin, uint8_t state); 334 void board_init_spi_pins_with_gpio_as_cs(SPI_Type *ptr); 335 void board_init_lin_pins(LINV2_Type *ptr); 336 uint32_t board_init_lin_clock(LINV2_Type *ptr); 337 338 void board_init(void); 339 void board_init_usb_dp_dm_pins(void); 340 void board_init_clock(void); 341 void board_delay_us(uint32_t us); 342 void board_delay_ms(uint32_t ms); 343 void board_timer_create(uint32_t ms, board_timer_cb cb); 344 void board_ungate_mchtmr_at_lp_mode(void); 345 346 uint8_t board_get_led_gpio_off_level(void); 347 uint8_t board_get_led_pwm_off_level(void); 348 349 void board_init_pmp(void); 350 351 uint32_t board_init_uart_clock(UART_Type *ptr); 352 void board_init_sei_pins(SEI_Type *ptr, uint8_t sei_ctrl_idx); 353 354 void board_init_i2c(I2C_Type *ptr); 355 356 void board_init_adc_qeiv2_pins(void); 357 #if defined(__cplusplus) 358 } 359 #endif /* __cplusplus */ 360 #endif /* _HPM_BOARD_H */ 361