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 "hpm5301evklite" 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 /* nor flash section */ 71 #define BOARD_FLASH_BASE_ADDRESS (0x80000000UL) /* Check */ 72 #define BOARD_FLASH_SIZE (SIZE_1MB) 73 74 /* i2c section */ 75 #define BOARD_APP_I2C_BASE HPM_I2C2 76 #define BOARD_APP_I2C_IRQ IRQn_I2C2 77 #define BOARD_APP_I2C_CLK_NAME clock_i2c2 78 #define BOARD_APP_I2C_DMA HPM_HDMA 79 #define BOARD_APP_I2C_DMAMUX HPM_DMAMUX 80 #define BOARD_APP_I2C_DMA_SRC HPM_DMA_SRC_I2C2 81 82 /* gptmr section */ 83 #define BOARD_GPTMR HPM_GPTMR0 84 #define BOARD_GPTMR_IRQ IRQn_GPTMR0 85 #define BOARD_GPTMR_CHANNEL 0 86 #define BOARD_GPTMR_DMA_SRC HPM_DMA_SRC_GPTMR0_0 87 #define BOARD_GPTMR_CLK_NAME clock_gptmr0 88 #define BOARD_GPTMR_PWM HPM_GPTMR0 89 #define BOARD_GPTMR_PWM_CHANNEL 0 90 #define BOARD_GPTMR_PWM_DMA_SRC HPM_DMA_SRC_GPTMR0_0 91 #define BOARD_GPTMR_PWM_CLK_NAME clock_gptmr0 92 #define BOARD_GPTMR_PWM_IRQ IRQn_GPTMR0 93 #define BOARD_GPTMR_PWM_SYNC HPM_GPTMR0 94 #define BOARD_GPTMR_PWM_SYNC_CHANNEL 1 95 #define BOARD_GPTMR_PWM_SYNC_CLK_NAME clock_gptmr0 96 97 /* User LED */ 98 #define BOARD_LED_GPIO_CTRL HPM_GPIO0 99 #define BOARD_LED_GPIO_INDEX GPIO_DI_GPIOA 100 #define BOARD_LED_GPIO_PIN 10 101 102 #define BOARD_LED_OFF_LEVEL 1 103 #define BOARD_LED_ON_LEVEL 0 104 105 /* 12V Power Enable*/ 106 #define BOARD_12V_EN_GPIO_CTRL HPM_GPIO0 107 #define BOARD_12V_EN_GPIO_INDEX GPIO_DI_GPIOA 108 #define BOARD_12V_EN_GPIO_PIN 24 109 110 /* gpiom section */ 111 #define BOARD_APP_GPIOM_BASE HPM_GPIOM 112 #define BOARD_APP_GPIOM_USING_CTRL HPM_FGPIO 113 #define BOARD_APP_GPIOM_USING_CTRL_NAME gpiom_core0_fast 114 115 /* GPIO read value macro,spec for sample cherryusb on board hpm5301evklite*/ 116 #define BOARD_BUTTON_PRESSED_VALUE 1 117 118 /* tinyuf2 button on hpm5301evklite*/ 119 #define BOARD_BUTTON_TINYUF2_PIN 9 120 121 /* User button */ 122 #define BOARD_APP_GPIO_CTRL HPM_GPIO0 123 #define BOARD_APP_GPIO_INDEX GPIO_DI_GPIOA 124 #define BOARD_APP_GPIO_PIN 3 125 #define BOARD_APP_GPIO_IRQ IRQn_GPIO0_A 126 127 /* spi section */ 128 #define BOARD_APP_SPI_BASE HPM_SPI1 129 #define BOARD_APP_SPI_CLK_NAME clock_spi1 130 #define BOARD_APP_SPI_IRQ IRQn_SPI1 131 #define BOARD_APP_SPI_SCLK_FREQ (20000000UL) 132 #define BOARD_APP_SPI_ADDR_LEN_IN_BYTES (1U) 133 #define BOARD_APP_SPI_DATA_LEN_IN_BITS (8U) 134 #define BOARD_APP_SPI_RX_DMA HPM_DMA_SRC_SPI1_RX 135 #define BOARD_APP_SPI_TX_DMA HPM_DMA_SRC_SPI1_TX 136 #define BOARD_SPI_CS_GPIO_CTRL HPM_GPIO0 137 #define BOARD_SPI_CS_PIN IOC_PAD_PA26 138 #define BOARD_SPI_CS_ACTIVE_LEVEL (0U) 139 140 /* ADC section */ 141 #define BOARD_APP_ADC16_NAME "ADC0" 142 #define BOARD_APP_ADC16_BASE HPM_ADC0 143 #define BOARD_APP_ADC16_IRQn IRQn_ADC0 144 #define BOARD_APP_ADC16_CH_1 (11U) 145 #define BOARD_APP_ADC16_CLK_NAME (clock_adc0) 146 147 #define BOARD_APP_ADC16_PMT_TRIG_CH ADC16_CONFIG_TRG0A 148 149 /* Flash section */ 150 #define BOARD_APP_XPI_NOR_XPI_BASE (HPM_XPI0) 151 #define BOARD_APP_XPI_NOR_CFG_OPT_HDR (0xfcf90002U) 152 #define BOARD_APP_XPI_NOR_CFG_OPT_OPT0 (0x00000006U) 153 #define BOARD_APP_XPI_NOR_CFG_OPT_OPT1 (0x00001000U) 154 155 /* CALLBACK TIMER section */ 156 #define BOARD_CALLBACK_TIMER (HPM_GPTMR1) 157 #define BOARD_CALLBACK_TIMER_CH 0 158 #define BOARD_CALLBACK_TIMER_IRQ IRQn_GPTMR1 159 #define BOARD_CALLBACK_TIMER_CLK_NAME (clock_gptmr1) 160 161 /*Timer define*/ 162 #define BOARD_BLDC_TMR_1MS HPM_GPTMR2 163 #define BOARD_BLDC_TMR_CH 0 164 #define BOARD_BLDC_TMR_CMP 0 165 #define BOARD_BLDC_TMR_IRQ IRQn_GPTMR2 166 #define BOARD_BLDC_TMR_RELOAD (100000U) 167 168 /*adc*/ 169 #define BOARD_BLDC_ADC_MODULE (ADCX_MODULE_ADC16) 170 #define BOARD_BLDC_ADC_U_BASE HPM_ADC0 171 #define BOARD_BLDC_ADC_V_BASE HPM_ADC1 172 #define BOARD_BLDC_ADC_W_BASE HPM_ADC1 173 #define BOARD_BLDC_ADC_TRIG_FLAG adc16_event_trig_complete 174 175 #define BOARD_BLDC_ADC_CH_U (5U) 176 #define BOARD_BLDC_ADC_CH_V (6U) 177 #define BOARD_BLDC_ADC_CH_W (4U) 178 #define BOARD_BLDC_ADC_IRQn IRQn_ADC0 179 #define BOARD_BLDC_ADC_PMT_DMA_SIZE_IN_4BYTES (ADC_SOC_PMT_MAX_DMA_BUFF_LEN_IN_4BYTES) 180 #define BOARD_BLDC_ADC_TRG ADC16_CONFIG_TRG0A 181 #define BOARD_BLDC_ADC_PREEMPT_TRIG_LEN (1U) 182 #define BOARD_BLDC_PWM_TRIG_CMP_INDEX (8U) 183 #define BOARD_BLDC_TRIGMUX_IN_NUM HPM_TRGM0_INPUT_SRC_PWM0_CH8REF 184 #define BOARD_BLDC_TRG_NUM TRGM_TRGOCFG_ADCX_PTRGI0A 185 186 /* USB */ 187 #define BOARD_USB HPM_USB0 188 189 #ifndef BOARD_SHOW_CLOCK 190 #define BOARD_SHOW_CLOCK 1 191 #endif 192 #ifndef BOARD_SHOW_BANNER 193 #define BOARD_SHOW_BANNER 1 194 #endif 195 196 /* FreeRTOS Definitions */ 197 #define BOARD_FREERTOS_TIMER HPM_GPTMR0 198 #define BOARD_FREERTOS_TIMER_CHANNEL 1 199 #define BOARD_FREERTOS_TIMER_IRQ IRQn_GPTMR0 200 #define BOARD_FREERTOS_TIMER_CLK_NAME clock_gptmr0 201 202 #if defined(__cplusplus) 203 extern "C" { 204 #endif /* __cplusplus */ 205 206 typedef void (*board_timer_cb)(void); 207 208 void board_init_gpio_pins(void); 209 void board_init_led_pins(void); 210 void board_init_usb_pins(void); 211 void board_led_write(uint8_t state); 212 void board_led_toggle(void); 213 void board_init_uart(UART_Type *ptr); 214 uint32_t board_init_spi_clock(SPI_Type *ptr); 215 void board_init_spi_pins(SPI_Type *ptr); 216 void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level); 217 uint32_t board_init_adc16_clock(ADC16_Type *ptr, bool clk_src_ahb); 218 void board_init_adc16_pins(void); 219 void board_disable_output_rgb_led(uint8_t color); 220 void board_enable_output_rgb_led(uint8_t color); 221 void board_write_spi_cs(uint32_t pin, uint8_t state); 222 void board_init_spi_pins_with_gpio_as_cs(SPI_Type *ptr); 223 224 void board_init(void); 225 void board_init_usb_dp_dm_pins(void); 226 void board_init_clock(void); 227 void board_delay_us(uint32_t us); 228 void board_delay_ms(uint32_t ms); 229 void board_timer_create(uint32_t ms, board_timer_cb cb); 230 void board_ungate_mchtmr_at_lp_mode(void); 231 232 uint8_t board_get_led_gpio_off_level(void); 233 234 void board_init_pmp(void); 235 236 uint32_t board_init_uart_clock(UART_Type *ptr); 237 238 void board_init_i2c(I2C_Type *ptr); 239 #if defined(__cplusplus) 240 } 241 #endif /* __cplusplus */ 242 #endif /* _HPM_BOARD_H */ 243