• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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