From e03342ff6b237d3ac6c38e133cb23b9770281f4a Mon Sep 17 00:00:00 2001 From: Fan YANG Date: Fri, 31 May 2024 19:46:47 +0800 Subject: [PATCH] [bsp][hpmicro] add HPM5300EVK,HPM5301EVKLITE and HPM6800EVK support & update hpm_sdk - added new boards: hpm5300evk, hpm5301evklite and hpm6800evk - upgaded hpm_sdk - driver updates and bugfixes - add hpmicro BSPs to CI Signed-off-by: Fan YANG --- .github/workflows/bsp_buildings.yml | 19 + bsp/hpmicro/.ignore_format.yml | 3 + bsp/hpmicro/hpm5300evk/.config | 1061 + bsp/hpmicro/hpm5300evk/Kconfig | 21 + bsp/hpmicro/hpm5300evk/README.md | 113 + bsp/hpmicro/hpm5300evk/README_zh.md | 112 + bsp/hpmicro/hpm5300evk/SConscript | 17 + bsp/hpmicro/hpm5300evk/SConstruct | 75 + .../hpm5300evk/applications/SConscript | 14 + bsp/hpmicro/hpm5300evk/applications/main.c | 38 + bsp/hpmicro/hpm5300evk/board/Kconfig | 236 + bsp/hpmicro/hpm5300evk/board/SConscript | 18 + bsp/hpmicro/hpm5300evk/board/board.c | 662 + bsp/hpmicro/hpm5300evk/board/board.h | 385 + .../openocd/boards/hpm5300evk.cfg | 79 + .../openocd/probes/cmsis_dap.cfg | 11 + .../debug_scripts/openocd/probes/ft2232.cfg | 15 + .../debug_scripts/openocd/probes/ft232.cfg | 14 + .../debug_scripts/openocd/probes/jlink.cfg | 11 + .../openocd/probes/nds_aice_micro.cfg | 14 + .../debug_scripts/openocd/soc/hpm5300.cfg | 13 + bsp/hpmicro/hpm5300evk/board/fal_cfg.h | 41 + bsp/hpmicro/hpm5300evk/board/fal_flash_port.c | 254 + .../board/linker_scripts/flash_rtt.ld | 288 + .../board/linker_scripts/ram_rtt.ld | 244 + bsp/hpmicro/hpm5300evk/board/pinmux.c | 325 + bsp/hpmicro/hpm5300evk/board/pinmux.h | 48 + bsp/hpmicro/hpm5300evk/board/rtt_board.c | 118 + bsp/hpmicro/hpm5300evk/board/rtt_board.h | 68 + bsp/hpmicro/hpm5300evk/figures/board.png | Bin 0 -> 374390 bytes bsp/hpmicro/hpm5300evk/rtconfig.h | 254 + bsp/hpmicro/hpm5300evk/rtconfig.py | 109 + .../hpm5300evk/startup/HPM5361/SConscript | 19 + .../hpm5300evk/startup/HPM5361/startup.c | 128 + .../startup/HPM5361/toolchains/gcc/port_gcc.S | 23 + .../startup/HPM5361/toolchains/gcc/start.S | 77 + .../startup/HPM5361/toolchains/gcc/vectors.S | 109 + bsp/hpmicro/hpm5300evk/startup/HPM5361/trap.c | 304 + bsp/hpmicro/hpm5300evk/startup/SConscript | 13 + bsp/hpmicro/hpm5301evklite/.config | 1059 + bsp/hpmicro/hpm5301evklite/Kconfig | 21 + bsp/hpmicro/hpm5301evklite/README.md | 112 + bsp/hpmicro/hpm5301evklite/README_zh.md | 111 + bsp/hpmicro/hpm5301evklite/SConscript | 17 + bsp/hpmicro/hpm5301evklite/SConstruct | 75 + .../hpm5301evklite/applications/SConscript | 14 + .../hpm5301evklite/applications/main.c | 38 + bsp/hpmicro/hpm5301evklite/board/Kconfig | 189 + bsp/hpmicro/hpm5301evklite/board/SConscript | 18 + bsp/hpmicro/hpm5301evklite/board/board.c | 490 + bsp/hpmicro/hpm5301evklite/board/board.h | 270 + .../openocd/boards/hpm5301evklite.cfg | 79 + .../openocd/probes/cmsis_dap.cfg | 11 + .../debug_scripts/openocd/probes/ft2232.cfg | 15 + .../debug_scripts/openocd/probes/ft232.cfg | 14 + .../debug_scripts/openocd/probes/jlink.cfg | 11 + .../openocd/probes/nds_aice_micro.cfg | 14 + .../debug_scripts/openocd/soc/hpm5300.cfg | 13 + bsp/hpmicro/hpm5301evklite/board/fal_cfg.h | 41 + .../hpm5301evklite/board/fal_flash_port.c | 254 + .../board/linker_scripts/flash_rtt.ld | 288 + .../board/linker_scripts/ram_rtt.ld | 244 + bsp/hpmicro/hpm5301evklite/board/pinmux.c | 177 + bsp/hpmicro/hpm5301evklite/board/pinmux.h | 31 + bsp/hpmicro/hpm5301evklite/board/rtt_board.c | 119 + bsp/hpmicro/hpm5301evklite/board/rtt_board.h | 66 + bsp/hpmicro/hpm5301evklite/figures/board.png | Bin 0 -> 371640 bytes bsp/hpmicro/hpm5301evklite/rtconfig.h | 254 + bsp/hpmicro/hpm5301evklite/rtconfig.py | 109 + .../hpm5301evklite/startup/HPM5301/SConscript | 22 + .../hpm5301evklite/startup/HPM5301/startup.c | 128 + .../startup/HPM5301/toolchains/gcc/port_gcc.S | 23 + .../startup/HPM5301/toolchains/gcc/start.S | 77 + .../startup/HPM5301/toolchains/gcc/vectors.S | 93 + .../hpm5301evklite/startup/HPM5301/trap.c | 304 + bsp/hpmicro/hpm5301evklite/startup/SConscript | 13 + bsp/hpmicro/hpm6200evk/README.md | 2 +- bsp/hpmicro/hpm6200evk/README_zh.md | 2 +- bsp/hpmicro/hpm6200evk/board/Kconfig | 237 +- bsp/hpmicro/hpm6200evk/board/board.c | 191 +- bsp/hpmicro/hpm6200evk/board/board.h | 563 +- .../board/linker_scripts/flash_rtt.ld | 6 + .../board/linker_scripts/ram_rtt.ld | 6 + bsp/hpmicro/hpm6200evk/board/pinmux.c | 111 +- bsp/hpmicro/hpm6200evk/board/pinmux.h | 5 + bsp/hpmicro/hpm6200evk/board/rtt_board.c | 56 +- bsp/hpmicro/hpm6200evk/board/rtt_board.h | 13 +- bsp/hpmicro/hpm6200evk/rtconfig.py | 12 +- bsp/hpmicro/hpm6300evk/README.md | 2 +- bsp/hpmicro/hpm6300evk/README_zh.md | 2 +- bsp/hpmicro/hpm6300evk/board/Kconfig | 234 +- bsp/hpmicro/hpm6300evk/board/SConscript | 1 - bsp/hpmicro/hpm6300evk/board/board.c | 288 +- bsp/hpmicro/hpm6300evk/board/board.h | 448 +- bsp/hpmicro/hpm6300evk/board/fal_cfg.h | 8 + .../board/linker_scripts/flash_rtt.ld | 6 + .../board/linker_scripts/flash_rtt_enet.ld | 330 + .../board/linker_scripts/flash_sdram_rtt.ld | 6 + .../board/linker_scripts/ram_rtt.ld | 10 +- .../board/linker_scripts/ram_sdram_rtt.ld | 10 +- bsp/hpmicro/hpm6300evk/board/pinmux.c | 179 +- bsp/hpmicro/hpm6300evk/board/pinmux.h | 13 +- bsp/hpmicro/hpm6300evk/board/rtt_board.c | 56 +- bsp/hpmicro/hpm6300evk/board/rtt_board.h | 11 +- bsp/hpmicro/hpm6300evk/rtconfig.py | 12 +- .../startup/HPM6360/toolchains/gcc/start.S | 9 + bsp/hpmicro/hpm6750evk/README.md | 2 +- bsp/hpmicro/hpm6750evk/README_zh.md | 2 +- bsp/hpmicro/hpm6750evk/board/Kconfig | 283 +- bsp/hpmicro/hpm6750evk/board/SConscript | 1 - bsp/hpmicro/hpm6750evk/board/board.c | 666 +- bsp/hpmicro/hpm6750evk/board/board.h | 667 +- bsp/hpmicro/hpm6750evk/board/eth_phy_port.c | 320 - bsp/hpmicro/hpm6750evk/board/eth_phy_port.h | 158 - bsp/hpmicro/hpm6750evk/board/fal_cfg.h | 10 +- bsp/hpmicro/hpm6750evk/board/fal_flash_port.c | 2 +- bsp/hpmicro/hpm6750evk/board/hpm_sgtl5000.c | 54 +- .../board/linker_scripts/flash_rtt.ld | 6 + .../board/linker_scripts/flash_rtt_enet.ld | 10 +- .../board/linker_scripts/flash_sdram_rtt.ld | 6 + .../board/linker_scripts/ram_rtt.ld | 10 +- .../board/linker_scripts/ram_sdram_rtt.ld | 10 +- bsp/hpmicro/hpm6750evk/board/pinmux.c | 250 +- bsp/hpmicro/hpm6750evk/board/pinmux.h | 19 +- bsp/hpmicro/hpm6750evk/board/rtt_board.c | 56 +- bsp/hpmicro/hpm6750evk/board/rtt_board.h | 21 +- bsp/hpmicro/hpm6750evk/rtconfig.py | 12 +- .../startup/HPM6750/toolchains/gcc/start.S | 9 + bsp/hpmicro/hpm6750evk2/README.md | 2 +- bsp/hpmicro/hpm6750evk2/README_zh.md | 2 +- bsp/hpmicro/hpm6750evk2/board/Kconfig | 426 +- bsp/hpmicro/hpm6750evk2/board/SConscript | 1 - bsp/hpmicro/hpm6750evk2/board/board.c | 605 +- bsp/hpmicro/hpm6750evk2/board/board.h | 684 +- .../openocd/boards/hpm6750evk.cfg | 345 - bsp/hpmicro/hpm6750evk2/board/eth_phy_port.h | 170 - bsp/hpmicro/hpm6750evk2/board/fal_cfg.h | 10 +- .../hpm6750evk2/board/fal_flash_port.c | 2 +- bsp/hpmicro/hpm6750evk2/board/hpm_wm8960.c | 44 +- .../board/linker_scripts/flash_rtt.ld | 6 + .../board/linker_scripts/flash_rtt_enet.ld | 10 +- .../board/linker_scripts/flash_sdram_rtt.ld | 7 + .../board/linker_scripts/ram_rtt.ld | 11 +- .../board/linker_scripts/ram_sdram_rtt.ld | 11 +- bsp/hpmicro/hpm6750evk2/board/pinmux.c | 258 +- bsp/hpmicro/hpm6750evk2/board/pinmux.h | 13 +- bsp/hpmicro/hpm6750evk2/board/rtt_board.c | 56 +- bsp/hpmicro/hpm6750evk2/board/rtt_board.h | 17 +- bsp/hpmicro/hpm6750evk2/rtconfig.py | 12 +- .../startup/HPM6750/toolchains/gcc/start.S | 9 + bsp/hpmicro/hpm6750evkmini/.config | 69 +- bsp/hpmicro/hpm6750evkmini/README.md | 2 +- bsp/hpmicro/hpm6750evkmini/README_zh.md | 2 +- .../hpm6750evkmini/applications/main.c | 3 +- bsp/hpmicro/hpm6750evkmini/board/Kconfig | 230 +- bsp/hpmicro/hpm6750evkmini/board/SConscript | 1 - bsp/hpmicro/hpm6750evkmini/board/board.c | 676 +- bsp/hpmicro/hpm6750evkmini/board/board.h | 654 +- .../hpm6750evkmini/board/eth_phy_port.c | 299 - .../hpm6750evkmini/board/eth_phy_port.h | 113 - bsp/hpmicro/hpm6750evkmini/board/fal_cfg.h | 2 +- .../board/linker_scripts/flash_rtt.ld | 7 +- .../board/linker_scripts/flash_rtt_enet.ld | 330 + .../board/linker_scripts/flash_sdram_rtt.ld | 6 + .../board/linker_scripts/ram_rtt.ld | 10 +- .../board/linker_scripts/ram_sdram_rtt.ld | 6 + bsp/hpmicro/hpm6750evkmini/board/pinmux.c | 338 +- bsp/hpmicro/hpm6750evkmini/board/pinmux.h | 17 +- bsp/hpmicro/hpm6750evkmini/board/rtt_board.c | 59 +- bsp/hpmicro/hpm6750evkmini/board/rtt_board.h | 19 +- bsp/hpmicro/hpm6750evkmini/board/rw007_port.c | 2 +- bsp/hpmicro/hpm6750evkmini/rtconfig.h | 21 +- bsp/hpmicro/hpm6750evkmini/rtconfig.py | 12 +- .../startup/HPM6750/toolchains/gcc/start.S | 9 + bsp/hpmicro/hpm6800evk/.config | 1096 + bsp/hpmicro/hpm6800evk/Kconfig | 21 + bsp/hpmicro/hpm6800evk/README.md | 116 + bsp/hpmicro/hpm6800evk/README_zh.md | 115 + bsp/hpmicro/hpm6800evk/SConscript | 17 + bsp/hpmicro/hpm6800evk/SConstruct | 75 + .../hpm6800evk/applications/SConscript | 14 + bsp/hpmicro/hpm6800evk/applications/main.c | 43 + bsp/hpmicro/hpm6800evk/board/Kconfig | 453 + bsp/hpmicro/hpm6800evk/board/SConscript | 19 + bsp/hpmicro/hpm6800evk/board/board.c | 1489 + bsp/hpmicro/hpm6800evk/board/board.h | 490 + .../openocd/boards/hpm6800evk.cfg | 220 + .../openocd/probes/cmsis_dap.cfg | 11 + .../debug_scripts/openocd/probes/ft2232.cfg | 15 + .../debug_scripts/openocd/probes/ft232.cfg | 14 + .../debug_scripts/openocd/probes/jlink.cfg | 11 + .../openocd/probes/nds_aice_micro.cfg | 14 + .../debug_scripts/openocd/soc/hpm6880.cfg | 13 + bsp/hpmicro/hpm6800evk/board/fal_cfg.h | 49 + bsp/hpmicro/hpm6800evk/board/fal_flash_port.c | 268 + bsp/hpmicro/hpm6800evk/board/hpm_wm8960.c | 543 + bsp/hpmicro/hpm6800evk/board/hpm_wm8960.h | 227 + .../hpm6800evk/board/hpm_wm8960_regs.h | 2139 + .../board/linker_scripts/flash_rtt.ld | 309 + .../board/linker_scripts/flash_rtt_enet.ld | 330 + .../board/linker_scripts/flash_sdram_rtt.ld | 303 + .../board/linker_scripts/ram_rtt.ld | 261 + .../board/linker_scripts/ram_sdram_rtt.ld | 254 + bsp/hpmicro/hpm6800evk/board/pinmux.c | 549 + bsp/hpmicro/hpm6800evk/board/pinmux.h | 62 + bsp/hpmicro/hpm6800evk/board/rtt_board.c | 121 + bsp/hpmicro/hpm6800evk/board/rtt_board.h | 80 + bsp/hpmicro/hpm6800evk/figures/board.png | Bin 0 -> 437672 bytes bsp/hpmicro/hpm6800evk/rtconfig.h | 262 + bsp/hpmicro/hpm6800evk/rtconfig.py | 109 + bsp/hpmicro/hpm6800evk/rtconfig_preinc.h | 13 + .../hpm6800evk/startup/HPM6880/SConscript | 19 + .../hpm6800evk/startup/HPM6880/startup.c | 128 + .../startup/HPM6880/toolchains/gcc/port_gcc.S | 23 + .../startup/HPM6880/toolchains/gcc/start.S | 92 + .../startup/HPM6880/toolchains/gcc/vectors.S | 130 + bsp/hpmicro/hpm6800evk/startup/HPM6880/trap.c | 304 + bsp/hpmicro/hpm6800evk/startup/SConscript | 13 + bsp/hpmicro/libraries/drivers/SConscript | 10 +- bsp/hpmicro/libraries/drivers/drv_adc.c | 22 +- bsp/hpmicro/libraries/drivers/drv_can.c | 24 +- bsp/hpmicro/libraries/drivers/drv_dao.c | 50 +- bsp/hpmicro/libraries/drivers/drv_enet.c | 166 +- bsp/hpmicro/libraries/drivers/drv_enet.h | 71 +- .../drivers/drv_enet_phy.c} | 258 +- bsp/hpmicro/libraries/drivers/drv_enet_phy.h | 63 + bsp/hpmicro/libraries/drivers/drv_ewdt.c | 269 + bsp/hpmicro/libraries/drivers/drv_ewdt.h | 14 + bsp/hpmicro/libraries/drivers/drv_gpio.c | 236 +- bsp/hpmicro/libraries/drivers/drv_hwtimer.c | 5 +- bsp/hpmicro/libraries/drivers/drv_i2c.c | 401 +- bsp/hpmicro/libraries/drivers/drv_i2s.c | 154 +- bsp/hpmicro/libraries/drivers/drv_i2s.h | 2 +- bsp/hpmicro/libraries/drivers/drv_lcd.c | 247 + bsp/hpmicro/libraries/drivers/drv_mcan.c | 136 +- bsp/hpmicro/libraries/drivers/drv_pdm.c | 72 +- bsp/hpmicro/libraries/drivers/drv_pwm.c | 74 +- bsp/hpmicro/libraries/drivers/drv_rtc.c | 3 + bsp/hpmicro/libraries/drivers/drv_sdio.c | 581 +- bsp/hpmicro/libraries/drivers/drv_spi.c | 241 +- bsp/hpmicro/libraries/drivers/drv_uart.c | 8 +- bsp/hpmicro/libraries/drivers/drv_uart.h | 2 +- bsp/hpmicro/libraries/drivers/drv_uart_v2.c | 209 +- bsp/hpmicro/libraries/drivers/drv_wdt.c | 11 +- bsp/hpmicro/libraries/drivers/drv_wdt.h | 2 +- bsp/hpmicro/libraries/hpm_sdk/CHANGELOG.md | 586 +- bsp/hpmicro/libraries/hpm_sdk/README.md | 267 +- bsp/hpmicro/libraries/hpm_sdk/README_zh.md | 274 +- bsp/hpmicro/libraries/hpm_sdk/SConscript | 31 +- bsp/hpmicro/libraries/hpm_sdk/VERSION | 2 +- .../libraries/hpm_sdk/components/SConscript | 89 +- .../hpm_sdk/components/adc/hpm_adc.h | 112 +- .../components/camera/hpm_camera_config.h | 8 + .../camera/ov5640/hpm_camera_ov5640.c | 16 +- .../components/camera/ov5640/hpm_ov5640.c | 391 +- .../camera/ov7725/hpm_camera_ov7725.c | 3 +- .../components/camera/ov7725/hpm_ov7725.c | 18 +- .../components/codec/sgtl5000/hpm_sgtl5000.c | 16 +- .../components/codec/sgtl5000/hpm_sgtl5000.h | 2 +- .../components/codec/wm8960/hpm_wm8960.c | 54 +- .../components/codec/wm8960/hpm_wm8960.h | 2 +- .../debug_console/hpm_debug_console.c | 27 +- .../components/dma_manager/hpm_dma_manager.c | 294 - .../components/dma_manager/hpm_dma_manager.h | 153 - .../hpm_sdk/components/dma_mgr/hpm_dma_mgr.c | 778 + .../hpm_sdk/components/dma_mgr/hpm_dma_mgr.h | 557 + .../components/enet_phy/dp83848/hpm_dp83848.c | 5 +- .../components/enet_phy/dp83867/hpm_dp83867.c | 4 +- .../components/enet_phy/hpm_enet_phy.h | 7 +- .../components/enet_phy/hpm_enet_phy_common.h | 21 +- .../components/enet_phy/lan8720/hpm_lan8720.c | 99 + .../components/enet_phy/lan8720/hpm_lan8720.h | 55 + .../enet_phy/lan8720/hpm_lan8720_regs.h | 457 + .../components/enet_phy/rtl8201/hpm_rtl8201.c | 9 +- .../enet_phy/rtl8201/hpm_rtl8201_regs.h | 4 +- .../components/enet_phy/rtl8211/hpm_rtl8211.c | 9 +- .../enet_phy/rtl8211/hpm_rtl8211_regs.h | 4 +- .../hpm_sdk/components/panel/hpm_panel.c | 122 + .../hpm_sdk/components/panel/hpm_panel.h | 213 + .../components/serial_nor/hpm_serial_nor.c | 1170 + .../components/serial_nor/hpm_serial_nor.h | 159 + .../serial_nor/hpm_serial_nor_host.h | 204 + .../interface/spi/hpm_serial_nor_host_spi.c | 369 + .../hpm_sdk/components/serial_nor/sfdp_def.h | 114 +- .../hpm_sdk/components/smbus/hpm_smbus.c | 7 - .../hpm_sdk/components/spi/hpm_spi.c | 17 +- .../hpm_sdk/components/spi/hpm_spi.h | 2 +- .../components/touch/gt911/hpm_gt911.h | 6 +- .../components/touch/gt911/hpm_touch_gt911.c | 24 +- .../hpm_sdk/components/touch/hpm_touch.h | 5 + .../components/uart_lin/hpm_uart_lin.c | 18 +- .../components/uart_lin/hpm_uart_lin.h | 10 + .../components/usb/device/hpm_usb_device.c | 58 +- .../components/usb/device/hpm_usb_device.h | 5 +- .../components/usb/host/hpm_usb_host.c | 2 +- .../components/usb/host/hpm_usb_host.h | 2 +- .../hpm_sdk/drivers/inc/hpm_adc12_drv.h | 121 +- .../hpm_sdk/drivers/inc/hpm_adc16_drv.h | 133 +- .../hpm_sdk/drivers/inc/hpm_bgpr_drv.h | 78 + .../hpm_sdk/drivers/inc/hpm_cam_drv.h | 37 +- .../hpm_sdk/drivers/inc/hpm_can_drv.h | 107 +- .../hpm_sdk/drivers/inc/hpm_common.h | 106 +- .../hpm_sdk/drivers/inc/hpm_crc_drv.h | 13 - .../hpm_sdk/drivers/inc/hpm_dac_drv.h | 5 +- .../hpm_sdk/drivers/inc/hpm_dao_drv.h | 18 +- .../hpm_sdk/drivers/inc/hpm_display_common.h | 23 + .../hpm_sdk/drivers/inc/hpm_dma_drv.h | 182 +- .../hpm_sdk/drivers/inc/hpm_dmamux_drv.h | 4 + .../hpm_sdk/drivers/inc/hpm_dmav2_drv.h | 686 + .../hpm_sdk/drivers/inc/hpm_enc_pos_drv.h | 65 + .../hpm_sdk/drivers/inc/hpm_enet_drv.h | 29 +- .../hpm_sdk/drivers/inc/hpm_ewdg_drv.h | 520 + .../hpm_sdk/drivers/inc/hpm_femc_drv.h | 1 + .../hpm_sdk/drivers/inc/hpm_gpio_drv.h | 20 +- .../hpm_sdk/drivers/inc/hpm_gptmr_drv.h | 3 +- .../hpm_sdk/drivers/inc/hpm_gwc_drv.h | 198 + .../hpm_sdk/drivers/inc/hpm_i2c_drv.h | 48 +- .../hpm_sdk/drivers/inc/hpm_i2s_common.h | 7 + .../hpm_sdk/drivers/inc/hpm_i2s_drv.h | 126 +- .../hpm_sdk/drivers/inc/hpm_lcb_drv.h | 234 + .../hpm_sdk/drivers/inc/hpm_lcdc_drv.h | 26 + .../hpm_sdk/drivers/inc/hpm_linv2_drv.h | 376 + .../hpm_sdk/drivers/inc/hpm_lvb_drv.h | 289 + .../hpm_sdk/drivers/inc/hpm_mcan_drv.h | 258 +- .../hpm_sdk/drivers/inc/hpm_mipi_csi_drv.h | 93 + .../drivers/inc/hpm_mipi_csi_phy_drv.h | 67 + .../hpm_sdk/drivers/inc/hpm_mipi_dsi_drv.h | 307 + .../drivers/inc/hpm_mipi_dsi_phy_drv.h | 47 + .../hpm_sdk/drivers/inc/hpm_mmc_drv.h | 611 + .../hpm_sdk/drivers/inc/hpm_mono_drv.h | 43 +- .../hpm_sdk/drivers/inc/hpm_opamp_drv.h | 546 + .../hpm_sdk/drivers/inc/hpm_pdgo_drv.h | 285 + .../hpm_sdk/drivers/inc/hpm_pdma_drv.h | 38 + .../hpm_sdk/drivers/inc/hpm_pixelmux_drv.h | 312 + .../hpm_sdk/drivers/inc/hpm_pla_drv.h | 4 +- .../hpm_sdk/drivers/inc/hpm_plb_drv.h | 237 + .../hpm_sdk/drivers/inc/hpm_pllctl_drv.h | 17 +- .../hpm_sdk/drivers/inc/hpm_pllctlv2_drv.h | 2 +- .../hpm_sdk/drivers/inc/hpm_pmp_drv.h | 43 +- .../hpm_sdk/drivers/inc/hpm_ptpc_drv.h | 2 +- .../hpm_sdk/drivers/inc/hpm_pwm_drv.h | 148 +- .../hpm_sdk/drivers/inc/hpm_qei_drv.h | 44 + .../hpm_sdk/drivers/inc/hpm_qeiv2_drv.h | 1424 + .../hpm_sdk/drivers/inc/hpm_qeo_drv.h | 560 + .../hpm_sdk/drivers/inc/hpm_rdc_drv.h | 708 + .../hpm_sdk/drivers/inc/hpm_rtc_drv.h | 32 +- .../hpm_sdk/drivers/inc/hpm_sdm_drv.h | 11 +- .../hpm_sdk/drivers/inc/hpm_sdxc_drv.h | 267 +- .../hpm_sdk/drivers/inc/hpm_sei_drv.h | 1008 + .../hpm_sdk/drivers/inc/hpm_smix_drv.h | 515 + .../hpm_sdk/drivers/inc/hpm_spi_drv.h | 174 +- .../hpm_sdk/drivers/inc/hpm_synt_drv.h | 49 + .../hpm_sdk/drivers/inc/hpm_tamp_drv.h | 221 + .../hpm_sdk/drivers/inc/hpm_trgm_drv.h | 66 +- .../hpm_sdk/drivers/inc/hpm_uart_drv.h | 291 +- .../hpm_sdk/drivers/inc/hpm_usb_drv.h | 86 +- .../hpm_sdk/drivers/src/hpm_acmp_drv.c | 1 + .../hpm_sdk/drivers/src/hpm_adc12_drv.c | 52 +- .../hpm_sdk/drivers/src/hpm_adc16_drv.c | 84 +- .../hpm_sdk/drivers/src/hpm_cam_drv.c | 41 +- .../hpm_sdk/drivers/src/hpm_can_drv.c | 32 +- .../hpm_sdk/drivers/src/hpm_crc_drv.c | 1 - .../hpm_sdk/drivers/src/hpm_dac_drv.c | 6 +- .../hpm_sdk/drivers/src/hpm_dao_drv.c | 31 +- .../hpm_sdk/drivers/src/hpm_dma_drv.c | 6 +- .../hpm_sdk/drivers/src/hpm_dmav2_drv.c | 216 + .../hpm_sdk/drivers/src/hpm_enc_pos_drv.c | 61 + .../hpm_sdk/drivers/src/hpm_enet_drv.c | 18 +- .../hpm_sdk/drivers/src/hpm_ewdg_drv.c | 486 + .../hpm_sdk/drivers/src/hpm_femc_drv.c | 57 +- .../hpm_sdk/drivers/src/hpm_gpio_drv.c | 9 + .../hpm_sdk/drivers/src/hpm_gptmr_drv.c | 1 + .../hpm_sdk/drivers/src/hpm_gwc_drv.c | 45 + .../hpm_sdk/drivers/src/hpm_i2c_drv.c | 265 +- .../hpm_sdk/drivers/src/hpm_i2s_drv.c | 158 +- .../hpm_sdk/drivers/src/hpm_jpeg_drv.c | 7 +- .../hpm_sdk/drivers/src/hpm_lcb_drv.c | 132 + .../hpm_sdk/drivers/src/hpm_lcdc_drv.c | 5 +- .../hpm_sdk/drivers/src/hpm_linv2_drv.c | 373 + .../hpm_sdk/drivers/src/hpm_lvb_drv.c | 143 + .../hpm_sdk/drivers/src/hpm_mcan_drv.c | 262 +- .../hpm_sdk/drivers/src/hpm_mipi_csi_drv.c | 68 + .../drivers/src/hpm_mipi_csi_phy_drv.c | 39 + .../hpm_sdk/drivers/src/hpm_mipi_dsi_drv.c | 548 + .../drivers/src/hpm_mipi_dsi_phy_drv.c | 120 + .../hpm_sdk/drivers/src/hpm_mmc_drv.c | 299 + .../hpm_sdk/drivers/src/hpm_opamp_drv.c | 218 + .../hpm_sdk/drivers/src/hpm_pcfg_drv.c | 3 +- .../hpm_sdk/drivers/src/hpm_pdm_drv.c | 1 + .../hpm_sdk/drivers/src/hpm_pdma_drv.c | 149 +- .../hpm_sdk/drivers/src/hpm_pixelmux_drv.c | 283 + .../hpm_sdk/drivers/src/hpm_plb_drv.c | 24 + .../hpm_sdk/drivers/src/hpm_pllctl_drv.c | 48 +- .../hpm_sdk/drivers/src/hpm_pmp_drv.c | 214 +- .../hpm_sdk/drivers/src/hpm_ptpc_drv.c | 1 + .../hpm_sdk/drivers/src/hpm_pwm_drv.c | 7 +- .../hpm_sdk/drivers/src/hpm_qeiv2_drv.c | 139 + .../hpm_sdk/drivers/src/hpm_qeo_drv.c | 239 + .../hpm_sdk/drivers/src/hpm_rdc_drv.c | 180 + .../hpm_sdk/drivers/src/hpm_rng_drv.c | 2 +- .../hpm_sdk/drivers/src/hpm_rtc_drv.c | 15 + .../hpm_sdk/drivers/src/hpm_sdm_drv.c | 10 +- .../hpm_sdk/drivers/src/hpm_sdp_drv.c | 9 +- .../hpm_sdk/drivers/src/hpm_sdxc_drv.c | 97 +- .../hpm_sdk/drivers/src/hpm_sei_drv.c | 380 + .../hpm_sdk/drivers/src/hpm_smix_drv.c | 233 + .../hpm_sdk/drivers/src/hpm_spi_drv.c | 148 +- .../hpm_sdk/drivers/src/hpm_tamp_drv.c | 36 + .../hpm_sdk/drivers/src/hpm_uart_drv.c | 135 +- .../hpm_sdk/drivers/src/hpm_usb_drv.c | 21 +- .../hpm_sdk/drivers/src/hpm_vad_drv.c | 1 + .../libraries/hpm_sdk/hpm_sdk_version.h.in | 24 - .../hpm_sdk/soc/HPM5301/HPM5301_svd.xml | 13435 ++++ .../libraries/hpm_sdk/soc/HPM5301/SConscript | 24 + .../hpm_sdk/soc/HPM5301/boot/hpm_bootheader.c | 42 + .../hpm_sdk/soc/HPM5301/boot/hpm_bootheader.h | 64 + .../hpm_sdk/soc/HPM5301/hpm_clock_drv.c | 471 + .../hpm_sdk/soc/HPM5301/hpm_clock_drv.h | 307 + .../hpm_sdk/soc/HPM5301/hpm_csr_regs.h | 4276 ++ .../hpm_sdk/soc/HPM5301/hpm_dmamux_regs.h | 80 + .../hpm_sdk/soc/HPM5301/hpm_dmamux_src.h | 56 + .../hpm_sdk/soc/HPM5301/hpm_gpiom_regs.h | 99 + .../hpm_sdk/soc/HPM5301/hpm_gpiom_soc_drv.h | 27 + .../hpm_sdk/soc/HPM5301/hpm_interrupt.h | 865 + .../hpm_sdk/soc/HPM5301/hpm_ioc_regs.h | 259 + .../libraries/hpm_sdk/soc/HPM5301/hpm_iomux.h | 423 + .../hpm_sdk/soc/HPM5301/hpm_l1c_drv.c | 135 + .../hpm_sdk/soc/HPM5301/hpm_l1c_drv.h | 485 + .../libraries/hpm_sdk/soc/HPM5301/hpm_misc.h | 50 + .../hpm_sdk/soc/HPM5301/hpm_otp_drv.c | 181 + .../hpm_sdk/soc/HPM5301/hpm_otp_drv.h | 137 + .../hpm_sdk/soc/HPM5301/hpm_pcfg_drv.h | 497 + .../hpm_sdk/soc/HPM5301/hpm_pcfg_regs.h | 834 + .../hpm_sdk/soc/HPM5301/hpm_pdgo_regs.h | 228 + .../hpm_sdk/soc/HPM5301/hpm_pgpr_regs.h | 211 + .../hpm_sdk/soc/HPM5301/hpm_plic_drv.h | 220 + .../hpm_sdk/soc/HPM5301/hpm_pmic_iomux.h | 87 + .../hpm_sdk/soc/HPM5301/hpm_ppor_drv.h | 148 + .../hpm_sdk/soc/HPM5301/hpm_ppor_regs.h | 166 + .../hpm_sdk/soc/HPM5301/hpm_romapi.h | 651 + .../soc/HPM5301/hpm_romapi_xpi_soc_def.h | 80 + .../hpm_sdk/soc/HPM5301/hpm_ses_reg.xml | 11756 +++ .../soc/HPM5301/hpm_ses_riscv_cpu_regs.xml | 593 + .../libraries/hpm_sdk/soc/HPM5301/hpm_soc.h | 353 + .../hpm_sdk/soc/HPM5301/hpm_soc_feature.h | 195 + .../hpm_sdk/soc/HPM5301/hpm_soc_ip_feature.h | 29 + .../hpm_sdk/soc/HPM5301/hpm_sysctl_drv.c | 290 + .../hpm_sdk/soc/HPM5301/hpm_sysctl_drv.h | 1175 + .../hpm_sdk/soc/HPM5301/hpm_sysctl_regs.h | 1271 + .../hpm_sdk/soc/HPM5301/soc_modules.list | 37 + .../libraries/hpm_sdk/soc/HPM5301/system.c | 63 + .../soc/HPM5301/toolchains/gcc/flash.ld | 250 + .../soc/HPM5301/toolchains/gcc/flash_uf2.ld | 251 + .../soc/HPM5301/toolchains/gcc/flash_xip.ld | 271 + .../soc/HPM5301/toolchains/gcc/initfini.c | 75 + .../hpm_sdk/soc/HPM5301/toolchains/gcc/ram.ld | 247 + .../soc/HPM5301/toolchains/gcc/start.S | 156 + .../hpm_sdk/soc/HPM5301/toolchains/reset.c | 158 + .../hpm_sdk/soc/HPM5301/toolchains/trap.c | 191 + .../hpm_sdk/soc/HPM5301/toolchains/vectors.h | 271 + .../hpm_sdk/soc/HPM5361/HPM5361_svd.xml | 29190 ++++++++ .../libraries/hpm_sdk/soc/HPM5361/SConscript | 24 + .../hpm_sdk/soc/HPM5361/boot/hpm_bootheader.c | 42 + .../hpm_sdk/soc/HPM5361/boot/hpm_bootheader.h | 64 + .../hpm_sdk/soc/HPM5361/hpm_clock_drv.c | 536 + .../hpm_sdk/soc/HPM5361/hpm_clock_drv.h | 330 + .../hpm_sdk/soc/HPM5361/hpm_csr_regs.h | 4276 ++ .../hpm_sdk/soc/HPM5361/hpm_dmamux_regs.h | 80 + .../hpm_sdk/soc/HPM5361/hpm_dmamux_src.h | 78 + .../hpm_sdk/soc/HPM5361/hpm_gpiom_regs.h | 99 + .../hpm_sdk/soc/HPM5361/hpm_gpiom_soc_drv.h | 27 + .../hpm_sdk/soc/HPM5361/hpm_interrupt.h | 865 + .../hpm_sdk/soc/HPM5361/hpm_ioc_regs.h | 259 + .../libraries/hpm_sdk/soc/HPM5361/hpm_iomux.h | 777 + .../hpm_sdk/soc/HPM5361/hpm_l1c_drv.c | 135 + .../hpm_sdk/soc/HPM5361/hpm_l1c_drv.h | 485 + .../hpm_sdk/soc/HPM5361/hpm_mcan_soc.h | 140 + .../libraries/hpm_sdk/soc/HPM5361/hpm_misc.h | 50 + .../hpm_sdk/soc/HPM5361/hpm_otp_drv.c | 181 + .../hpm_sdk/soc/HPM5361/hpm_otp_drv.h | 137 + .../hpm_sdk/soc/HPM5361/hpm_pcfg_drv.h | 497 + .../hpm_sdk/soc/HPM5361/hpm_pcfg_regs.h | 834 + .../hpm_sdk/soc/HPM5361/hpm_pdgo_regs.h | 228 + .../hpm_sdk/soc/HPM5361/hpm_pgpr_regs.h | 211 + .../hpm_sdk/soc/HPM5361/hpm_plic_drv.h | 220 + .../hpm_sdk/soc/HPM5361/hpm_pmic_iomux.h | 87 + .../hpm_sdk/soc/HPM5361/hpm_ppor_drv.h | 148 + .../hpm_sdk/soc/HPM5361/hpm_ppor_regs.h | 166 + .../hpm_sdk/soc/HPM5361/hpm_romapi.h | 938 + .../soc/HPM5361/hpm_romapi_xpi_soc_def.h | 80 + .../hpm_sdk/soc/HPM5361/hpm_ses_reg.xml | 23685 ++++++ .../soc/HPM5361/hpm_ses_riscv_cpu_regs.xml | 593 + .../libraries/hpm_sdk/soc/HPM5361/hpm_soc.h | 550 + .../hpm_sdk/soc/HPM5361/hpm_soc_feature.h | 207 + .../hpm_sdk/soc/HPM5361/hpm_soc_ip_feature.h | 32 + .../hpm_sdk/soc/HPM5361/hpm_sysctl_drv.c | 304 + .../hpm_sdk/soc/HPM5361/hpm_sysctl_drv.h | 1254 + .../hpm_sdk/soc/HPM5361/hpm_sysctl_regs.h | 1271 + .../hpm_sdk/soc/HPM5361/hpm_trgm_regs.h | 535 + .../hpm_sdk/soc/HPM5361/hpm_trgm_soc_drv.h | 120 + .../hpm_sdk/soc/HPM5361/hpm_trgmmux_src.h | 377 + .../hpm_sdk/soc/HPM5361/soc_modules.list | 52 + .../libraries/hpm_sdk/soc/HPM5361/system.c | 63 + .../soc/HPM5361/toolchains/gcc/flash.ld | 250 + .../soc/HPM5361/toolchains/gcc/flash_uf2.ld | 251 + .../soc/HPM5361/toolchains/gcc/flash_xip.ld | 271 + .../soc/HPM5361/toolchains/gcc/initfini.c | 75 + .../hpm_sdk/soc/HPM5361/toolchains/gcc/ram.ld | 247 + .../soc/HPM5361/toolchains/gcc/start.S | 156 + .../hpm_sdk/soc/HPM5361/toolchains/reset.c | 158 + .../hpm_sdk/soc/HPM5361/toolchains/trap.c | 191 + .../hpm_sdk/soc/HPM5361/toolchains/vectors.h | 271 + .../hpm_sdk/soc/HPM6280/HPM6280_svd.xml | 23366 ++++++ .../hpm_sdk/soc/HPM6280/hpm_batt_iomux.h | 122 +- .../hpm_sdk/soc/HPM6280/hpm_bcfg_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_bgpr_regs.h | 108 +- .../hpm_sdk/soc/HPM6280/hpm_bpor_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_clock_drv.c | 116 +- .../hpm_sdk/soc/HPM6280/hpm_clock_drv.h | 56 +- .../hpm_sdk/soc/HPM6280/hpm_csr_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_dmamux_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_dmamux_src.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_gpiom_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_gpiom_soc_drv.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_interrupt.h | 229 +- .../hpm_sdk/soc/HPM6280/hpm_ioc_regs.h | 2 +- .../libraries/hpm_sdk/soc/HPM6280/hpm_iomux.h | 130 +- .../hpm_sdk/soc/HPM6280/hpm_l1c_drv.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_mcan_soc.h | 5 +- .../libraries/hpm_sdk/soc/HPM6280/hpm_misc.h | 2 + .../hpm_sdk/soc/HPM6280/hpm_otp_drv.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_pcfg_drv.h | 28 +- .../hpm_sdk/soc/HPM6280/hpm_pcfg_regs.h | 35 +- .../hpm_sdk/soc/HPM6280/hpm_pgpr_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_pmic_iomux.h | 128 +- .../hpm_sdk/soc/HPM6280/hpm_ppor_drv.h | 38 +- .../hpm_sdk/soc/HPM6280/hpm_ppor_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_romapi.h | 18 +- .../hpm_sdk/soc/HPM6280/hpm_ses_reg.xml | 2143 +- .../soc/HPM6280/hpm_ses_riscv_cpu_regs.xml | 2 +- .../libraries/hpm_sdk/soc/HPM6280/hpm_soc.h | 201 +- .../hpm_sdk/soc/HPM6280/hpm_soc_feature.h | 23 +- .../hpm_sdk/soc/HPM6280/hpm_soc_ip_feature.h | 17 + .../hpm_sdk/soc/HPM6280/hpm_sysctl_drv.c | 76 +- .../hpm_sdk/soc/HPM6280/hpm_sysctl_drv.h | 64 +- .../hpm_sdk/soc/HPM6280/hpm_sysctl_regs.h | 14 +- .../hpm_sdk/soc/HPM6280/hpm_trgm_regs.h | 2 +- .../hpm_sdk/soc/HPM6280/hpm_trgmmux_src.h | 4 +- .../hpm_sdk/soc/HPM6280/soc_modules.list | 95 +- .../libraries/hpm_sdk/soc/HPM6280/system.c | 8 - .../soc/HPM6280/toolchains/gcc/flash.ld | 112 +- .../soc/HPM6280/toolchains/gcc/flash_uf2.ld | 115 +- .../soc/HPM6280/toolchains/gcc/flash_xip.ld | 115 +- .../hpm_sdk/soc/HPM6280/toolchains/gcc/ram.ld | 72 +- .../soc/HPM6280/toolchains/gcc/ram_core1.ld | 75 +- .../soc/HPM6280/toolchains/gcc/start.S | 22 + .../hpm_sdk/soc/HPM6280/toolchains/reset.c | 77 +- .../soc/HPM6280/toolchains/segger/flash.icf | 99 - .../HPM6280/toolchains/segger/flash_uf2.icf | 101 - .../HPM6280/toolchains/segger/flash_xip.icf | 111 - .../soc/HPM6280/toolchains/segger/ram.icf | 95 - .../HPM6280/toolchains/segger/ram_core1.icf | 93 - .../soc/HPM6280/toolchains/segger/startup.s | 392 - .../hpm_sdk/soc/HPM6280/toolchains/trap.c | 35 +- .../hpm_sdk/soc/HPM6280/toolchains/vectors.h | 447 +- .../hpm_sdk/soc/HPM6360/HPM6360_svd.xml | 30387 ++++++++ .../hpm_sdk/soc/HPM6360/hpm_batt_iomux.h | 122 +- .../hpm_sdk/soc/HPM6360/hpm_bcfg_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_bgpr_regs.h | 108 +- .../hpm_sdk/soc/HPM6360/hpm_bpor_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_clock_drv.c | 121 +- .../hpm_sdk/soc/HPM6360/hpm_clock_drv.h | 43 +- .../hpm_sdk/soc/HPM6360/hpm_csr_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_dmamux_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_dmamux_src.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_enet_soc_drv.h | 3 + .../hpm_sdk/soc/HPM6360/hpm_gpiom_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_gpiom_soc_drv.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_interrupt.h | 230 +- .../hpm_sdk/soc/HPM6360/hpm_ioc_regs.h | 2 +- .../libraries/hpm_sdk/soc/HPM6360/hpm_iomux.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_l1c_drv.h | 2 +- .../libraries/hpm_sdk/soc/HPM6360/hpm_misc.h | 2 + .../hpm_sdk/soc/HPM6360/hpm_otp_drv.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_pcfg_drv.h | 28 +- .../hpm_sdk/soc/HPM6360/hpm_pcfg_regs.h | 35 +- .../hpm_sdk/soc/HPM6360/hpm_pgpr_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_pmic_iomux.h | 128 +- .../hpm_sdk/soc/HPM6360/hpm_ppor_drv.h | 38 +- .../hpm_sdk/soc/HPM6360/hpm_ppor_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_romapi.h | 9 +- .../hpm_sdk/soc/HPM6360/hpm_sdxc_soc_drv.h | 38 +- .../hpm_sdk/soc/HPM6360/hpm_ses_reg.xml | 1013 +- .../soc/HPM6360/hpm_ses_riscv_cpu_regs.xml | 2 +- .../libraries/hpm_sdk/soc/HPM6360/hpm_soc.h | 163 +- .../hpm_sdk/soc/HPM6360/hpm_soc_feature.h | 25 +- .../hpm_sdk/soc/HPM6360/hpm_soc_ip_feature.h | 13 + .../hpm_sdk/soc/HPM6360/hpm_sysctl_drv.c | 66 +- .../hpm_sdk/soc/HPM6360/hpm_sysctl_drv.h | 73 +- .../hpm_sdk/soc/HPM6360/hpm_sysctl_regs.h | 14 +- .../hpm_sdk/soc/HPM6360/hpm_trgm_regs.h | 2 +- .../hpm_sdk/soc/HPM6360/hpm_trgmmux_src.h | 6 +- .../hpm_sdk/soc/HPM6360/soc_modules.list | 91 +- .../libraries/hpm_sdk/soc/HPM6360/system.c | 8 - .../soc/HPM6360/toolchains/gcc/flash.ld | 112 +- .../HPM6360/toolchains/gcc/flash_sdram_uf2.ld | 115 +- .../HPM6360/toolchains/gcc/flash_sdram_xip.ld | 117 +- .../soc/HPM6360/toolchains/gcc/flash_uf2.ld | 115 +- .../soc/HPM6360/toolchains/gcc/flash_xip.ld | 117 +- .../hpm_sdk/soc/HPM6360/toolchains/gcc/ram.ld | 75 +- .../soc/HPM6360/toolchains/gcc/start.S | 22 + .../hpm_sdk/soc/HPM6360/toolchains/reset.c | 77 +- .../soc/HPM6360/toolchains/segger/flash.icf | 95 - .../toolchains/segger/flash_sdram_uf2.icf | 96 - .../toolchains/segger/flash_sdram_xip.icf | 106 - .../HPM6360/toolchains/segger/flash_uf2.icf | 97 - .../HPM6360/toolchains/segger/flash_xip.icf | 107 - .../soc/HPM6360/toolchains/segger/ram.icf | 91 - .../soc/HPM6360/toolchains/segger/startup.s | 398 - .../hpm_sdk/soc/HPM6360/toolchains/trap.c | 35 +- .../hpm_sdk/soc/HPM6360/toolchains/vectors.h | 371 +- .../hpm_sdk/soc/HPM6750/HPM6750_svd.xml | 33758 +++++++++ .../hpm_sdk/soc/HPM6750/hpm_batt_iomux.h | 180 +- .../hpm_sdk/soc/HPM6750/hpm_bcfg_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_bgpr_regs.h | 108 +- .../hpm_sdk/soc/HPM6750/hpm_bpor_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_clock_drv.c | 109 +- .../hpm_sdk/soc/HPM6750/hpm_clock_drv.h | 286 +- .../hpm_sdk/soc/HPM6750/hpm_csr_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_dmamux_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_dmamux_src.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_gpiom_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_gpiom_soc_drv.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_interrupt.h | 210 +- .../hpm_sdk/soc/HPM6750/hpm_ioc_regs.h | 4 +- .../libraries/hpm_sdk/soc/HPM6750/hpm_iomux.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_l1c_drv.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_otp_drv.c | 35 +- .../hpm_sdk/soc/HPM6750/hpm_otp_drv.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_pcfg_drv.h | 51 +- .../hpm_sdk/soc/HPM6750/hpm_pcfg_regs.h | 35 +- .../hpm_sdk/soc/HPM6750/hpm_pgpr_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_pmic_iomux.h | 192 +- .../hpm_sdk/soc/HPM6750/hpm_ppor_drv.h | 38 +- .../hpm_sdk/soc/HPM6750/hpm_ppor_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_romapi.h | 9 +- .../hpm_sdk/soc/HPM6750/hpm_sdxc_soc_drv.h | 48 +- .../hpm_sdk/soc/HPM6750/hpm_ses_reg.xml | 2360 +- .../soc/HPM6750/hpm_ses_riscv_cpu_regs.xml | 2 +- .../libraries/hpm_sdk/soc/HPM6750/hpm_soc.h | 258 +- .../hpm_sdk/soc/HPM6750/hpm_soc_feature.h | 28 +- .../hpm_sdk/soc/HPM6750/hpm_soc_ip_feature.h | 13 + .../hpm_sdk/soc/HPM6750/hpm_sysctl_drv.c | 87 +- .../hpm_sdk/soc/HPM6750/hpm_sysctl_drv.h | 40 +- .../hpm_sdk/soc/HPM6750/hpm_sysctl_regs.h | 14 +- .../hpm_sdk/soc/HPM6750/hpm_trgm_regs.h | 2 +- .../hpm_sdk/soc/HPM6750/hpm_trgmmux_src.h | 2 +- .../hpm_sdk/soc/HPM6750/soc_modules.list | 97 +- .../libraries/hpm_sdk/soc/HPM6750/system.c | 7 - .../soc/HPM6750/toolchains/gcc/flash.ld | 108 +- .../HPM6750/toolchains/gcc/flash_sdram_uf2.ld | 107 +- .../HPM6750/toolchains/gcc/flash_sdram_xip.ld | 109 +- .../soc/HPM6750/toolchains/gcc/flash_uf2.ld | 109 +- .../soc/HPM6750/toolchains/gcc/flash_xip.ld | 110 +- .../hpm_sdk/soc/HPM6750/toolchains/gcc/ram.ld | 73 +- .../soc/HPM6750/toolchains/gcc/ram_core1.ld | 79 +- .../soc/HPM6750/toolchains/gcc/start.S | 28 + .../hpm_sdk/soc/HPM6750/toolchains/reset.c | 77 +- .../soc/HPM6750/toolchains/segger/flash.icf | 111 - .../toolchains/segger/flash_sdram_uf2.icf | 113 - .../toolchains/segger/flash_sdram_xip.icf | 120 - .../HPM6750/toolchains/segger/flash_uf2.icf | 113 - .../HPM6750/toolchains/segger/flash_xip.icf | 121 - .../soc/HPM6750/toolchains/segger/ram.icf | 98 - .../HPM6750/toolchains/segger/ram_core1.icf | 94 - .../soc/HPM6750/toolchains/segger/startup.s | 390 - .../hpm_sdk/soc/HPM6750/toolchains/trap.c | 21 +- .../hpm_sdk/soc/HPM6750/toolchains/vectors.h | 285 +- .../hpm_sdk/soc/HPM6880/HPM6880_svd.xml | 54354 ++++++++++++++ .../libraries/hpm_sdk/soc/HPM6880/SConscript | 25 + .../hpm_sdk/soc/HPM6880/boot/hpm_bootheader.c | 42 + .../hpm_sdk/soc/HPM6880/boot/hpm_bootheader.h | 64 + .../hpm_sdk/soc/HPM6880/hpm_batt_iomux.h | 141 + .../hpm_sdk/soc/HPM6880/hpm_bcfg_drv.h | 54 + .../hpm_sdk/soc/HPM6880/hpm_bcfg_regs.h | 193 + .../hpm_sdk/soc/HPM6880/hpm_bgpr_regs.h | 41 + .../hpm_sdk/soc/HPM6880/hpm_bpor_drv.h | 55 + .../hpm_sdk/soc/HPM6880/hpm_bpor_regs.h | 33 + .../hpm_sdk/soc/HPM6880/hpm_clock_drv.c | 545 + .../hpm_sdk/soc/HPM6880/hpm_clock_drv.h | 400 + .../hpm_sdk/soc/HPM6880/hpm_csr_regs.h | 6512 ++ .../hpm_sdk/soc/HPM6880/hpm_dmamux_regs.h | 112 + .../hpm_sdk/soc/HPM6880/hpm_dmamux_src.h | 94 + .../hpm_sdk/soc/HPM6880/hpm_enet_soc_drv.h | 108 + .../hpm_sdk/soc/HPM6880/hpm_gpiom_regs.h | 104 + .../hpm_sdk/soc/HPM6880/hpm_gpiom_soc_drv.h | 27 + .../hpm_sdk/soc/HPM6880/hpm_interrupt.h | 1181 + .../hpm_sdk/soc/HPM6880/hpm_ioc_regs.h | 419 + .../libraries/hpm_sdk/soc/HPM6880/hpm_iomux.h | 1965 + .../hpm_sdk/soc/HPM6880/hpm_l1c_drv.c | 135 + .../hpm_sdk/soc/HPM6880/hpm_l1c_drv.h | 485 + .../hpm_sdk/soc/HPM6880/hpm_mcan_soc.h | 144 + .../libraries/hpm_sdk/soc/HPM6880/hpm_misc.h | 53 + .../hpm_sdk/soc/HPM6880/hpm_otp_drv.c | 181 + .../hpm_sdk/soc/HPM6880/hpm_otp_drv.h | 137 + .../hpm_sdk/soc/HPM6880/hpm_pcfg_drv.h | 888 + .../hpm_sdk/soc/HPM6880/hpm_pcfg_regs.h | 1363 + .../hpm_sdk/soc/HPM6880/hpm_pgpr_regs.h | 211 + .../hpm_sdk/soc/HPM6880/hpm_plic_drv.h | 186 + .../hpm_sdk/soc/HPM6880/hpm_pmic_iomux.h | 147 + .../hpm_sdk/soc/HPM6880/hpm_ppor_drv.h | 155 + .../hpm_sdk/soc/HPM6880/hpm_ppor_regs.h | 139 + .../hpm_sdk/soc/HPM6880/hpm_romapi.h | 1016 + .../soc/HPM6880/hpm_romapi_xpi_soc_def.h | 80 + .../hpm_sdk/soc/HPM6880/hpm_sdxc_soc_drv.h | 162 + .../hpm_sdk/soc/HPM6880/hpm_ses_reg.xml | 60238 ++++++++++++++++ .../soc/HPM6880/hpm_ses_riscv_cpu_regs.xml | 770 + .../libraries/hpm_sdk/soc/HPM6880/hpm_soc.h | 814 + .../hpm_sdk/soc/HPM6880/hpm_soc_feature.h | 221 + .../hpm_sdk/soc/HPM6880/hpm_soc_ip_feature.h | 26 + .../hpm_sdk/soc/HPM6880/hpm_sysctl_drv.c | 244 + .../hpm_sdk/soc/HPM6880/hpm_sysctl_drv.h | 1220 + .../hpm_sdk/soc/HPM6880/hpm_sysctl_regs.h | 1297 + .../hpm_sdk/soc/HPM6880/soc_modules.list | 73 + .../libraries/hpm_sdk/soc/HPM6880/system.c | 63 + .../soc/HPM6880/toolchains/gcc/flash.ld | 258 + .../HPM6880/toolchains/gcc/flash_sdram_uf2.ld | 266 + .../HPM6880/toolchains/gcc/flash_sdram_xip.ld | 278 + .../soc/HPM6880/toolchains/gcc/flash_uf2.ld | 259 + .../soc/HPM6880/toolchains/gcc/flash_xip.ld | 277 + .../soc/HPM6880/toolchains/gcc/initfini.c | 75 + .../hpm_sdk/soc/HPM6880/toolchains/gcc/ram.ld | 258 + .../soc/HPM6880/toolchains/gcc/start.S | 155 + .../hpm_sdk/soc/HPM6880/toolchains/reset.c | 158 + .../hpm_sdk/soc/HPM6880/toolchains/trap.c | 282 + .../hpm_sdk/soc/HPM6880/toolchains/vectors.h | 807 + .../libraries/hpm_sdk/soc/ip/hpm_adc12_regs.h | 52 +- .../libraries/hpm_sdk/soc/ip/hpm_adc16_regs.h | 75 +- .../libraries/hpm_sdk/soc/ip/hpm_cam_regs.h | 88 +- .../libraries/hpm_sdk/soc/ip/hpm_dac_regs.h | 12 +- .../libraries/hpm_sdk/soc/ip/hpm_dao_regs.h | 71 +- .../hpm_sdk/soc/ip/hpm_ddrctl_regs.h | 3636 + .../hpm_sdk/soc/ip/hpm_ddrphy_regs.h | 5989 ++ .../libraries/hpm_sdk/soc/ip/hpm_dmav2_regs.h | 596 + .../libraries/hpm_sdk/soc/ip/hpm_enet_regs.h | 4 +- .../libraries/hpm_sdk/soc/ip/hpm_ewdg_regs.h | 465 + .../libraries/hpm_sdk/soc/ip/hpm_ffa_regs.h | 25 +- .../libraries/hpm_sdk/soc/ip/hpm_gpio_regs.h | 71 +- .../libraries/hpm_sdk/soc/ip/hpm_gpu_regs.h | 651 + .../libraries/hpm_sdk/soc/ip/hpm_gwc_regs.h | 209 + .../libraries/hpm_sdk/soc/ip/hpm_i2s_regs.h | 2 +- .../libraries/hpm_sdk/soc/ip/hpm_lcb_regs.h | 325 + .../libraries/hpm_sdk/soc/ip/hpm_lcdc_regs.h | 2 +- .../libraries/hpm_sdk/soc/ip/hpm_linv2_regs.h | 466 + .../libraries/hpm_sdk/soc/ip/hpm_lvb_regs.h | 442 + .../libraries/hpm_sdk/soc/ip/hpm_mcan_regs.h | 64 +- .../hpm_sdk/soc/ip/hpm_mipi_csi_phy_regs.h | 961 + .../hpm_sdk/soc/ip/hpm_mipi_csi_regs.h | 3618 + .../hpm_sdk/soc/ip/hpm_mipi_dsi_phy_regs.h | 993 + .../hpm_sdk/soc/ip/hpm_mipi_dsi_regs.h | 2882 + .../libraries/hpm_sdk/soc/ip/hpm_mmc_regs.h | 1621 + .../libraries/hpm_sdk/soc/ip/hpm_mon_regs.h | 23 +- .../libraries/hpm_sdk/soc/ip/hpm_mono_regs.h | 35 +- .../libraries/hpm_sdk/soc/ip/hpm_opamp_regs.h | 258 + .../libraries/hpm_sdk/soc/ip/hpm_pdma_regs.h | 6 +- .../hpm_sdk/soc/ip/hpm_pixelmux_regs.h | 1860 + .../libraries/hpm_sdk/soc/ip/hpm_plb_regs.h | 165 + .../hpm_sdk/soc/ip/hpm_pllctlv2_regs.h | 6 +- .../libraries/hpm_sdk/soc/ip/hpm_ptpc_regs.h | 43 +- .../libraries/hpm_sdk/soc/ip/hpm_qeiv2_regs.h | 2000 + .../libraries/hpm_sdk/soc/ip/hpm_qeo_regs.h | 1065 + .../libraries/hpm_sdk/soc/ip/hpm_rdc_regs.h | 1331 + .../libraries/hpm_sdk/soc/ip/hpm_sdadc_regs.h | 238 + .../libraries/hpm_sdk/soc/ip/hpm_sdmv2_regs.h | 692 + .../libraries/hpm_sdk/soc/ip/hpm_sdxc_regs.h | 57 +- .../libraries/hpm_sdk/soc/ip/hpm_sec_regs.h | 16 +- .../libraries/hpm_sdk/soc/ip/hpm_sei_regs.h | 3636 + .../libraries/hpm_sdk/soc/ip/hpm_smix_regs.h | 1018 + .../libraries/hpm_sdk/soc/ip/hpm_spi_regs.h | 260 +- .../libraries/hpm_sdk/soc/ip/hpm_synt_regs.h | 126 +- .../libraries/hpm_sdk/soc/ip/hpm_uart_regs.h | 18 +- .../libraries/hpm_sdk/soc/ip/hpm_usb_regs.h | 41 +- .../libraries/hpm_sdk/utils/hpm_crc32.c | 26 + .../libraries/hpm_sdk/utils/hpm_crc32.h | 21 + .../libraries/hpm_sdk/utils/hpm_ffssi.c | 2 +- 785 files changed, 438158 insertions(+), 16918 deletions(-) create mode 100644 bsp/hpmicro/hpm5300evk/.config create mode 100644 bsp/hpmicro/hpm5300evk/Kconfig create mode 100644 bsp/hpmicro/hpm5300evk/README.md create mode 100644 bsp/hpmicro/hpm5300evk/README_zh.md create mode 100644 bsp/hpmicro/hpm5300evk/SConscript create mode 100644 bsp/hpmicro/hpm5300evk/SConstruct create mode 100644 bsp/hpmicro/hpm5300evk/applications/SConscript create mode 100644 bsp/hpmicro/hpm5300evk/applications/main.c create mode 100644 bsp/hpmicro/hpm5300evk/board/Kconfig create mode 100644 bsp/hpmicro/hpm5300evk/board/SConscript create mode 100644 bsp/hpmicro/hpm5300evk/board/board.c create mode 100644 bsp/hpmicro/hpm5300evk/board/board.h create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/boards/hpm5300evk.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/cmsis_dap.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft2232.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft232.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/jlink.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/nds_aice_micro.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/soc/hpm5300.cfg create mode 100644 bsp/hpmicro/hpm5300evk/board/fal_cfg.h create mode 100644 bsp/hpmicro/hpm5300evk/board/fal_flash_port.c create mode 100644 bsp/hpmicro/hpm5300evk/board/linker_scripts/flash_rtt.ld create mode 100644 bsp/hpmicro/hpm5300evk/board/linker_scripts/ram_rtt.ld create mode 100644 bsp/hpmicro/hpm5300evk/board/pinmux.c create mode 100644 bsp/hpmicro/hpm5300evk/board/pinmux.h create mode 100644 bsp/hpmicro/hpm5300evk/board/rtt_board.c create mode 100644 bsp/hpmicro/hpm5300evk/board/rtt_board.h create mode 100644 bsp/hpmicro/hpm5300evk/figures/board.png create mode 100644 bsp/hpmicro/hpm5300evk/rtconfig.h create mode 100644 bsp/hpmicro/hpm5300evk/rtconfig.py create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/SConscript create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/startup.c create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/toolchains/gcc/port_gcc.S create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/toolchains/gcc/vectors.S create mode 100644 bsp/hpmicro/hpm5300evk/startup/HPM5361/trap.c create mode 100644 bsp/hpmicro/hpm5300evk/startup/SConscript create mode 100644 bsp/hpmicro/hpm5301evklite/.config create mode 100644 bsp/hpmicro/hpm5301evklite/Kconfig create mode 100644 bsp/hpmicro/hpm5301evklite/README.md create mode 100644 bsp/hpmicro/hpm5301evklite/README_zh.md create mode 100644 bsp/hpmicro/hpm5301evklite/SConscript create mode 100644 bsp/hpmicro/hpm5301evklite/SConstruct create mode 100644 bsp/hpmicro/hpm5301evklite/applications/SConscript create mode 100644 bsp/hpmicro/hpm5301evklite/applications/main.c create mode 100644 bsp/hpmicro/hpm5301evklite/board/Kconfig create mode 100644 bsp/hpmicro/hpm5301evklite/board/SConscript create mode 100644 bsp/hpmicro/hpm5301evklite/board/board.c create mode 100644 bsp/hpmicro/hpm5301evklite/board/board.h create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/boards/hpm5301evklite.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/probes/cmsis_dap.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/probes/ft2232.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/probes/ft232.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/probes/jlink.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/probes/nds_aice_micro.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/debug_scripts/openocd/soc/hpm5300.cfg create mode 100644 bsp/hpmicro/hpm5301evklite/board/fal_cfg.h create mode 100644 bsp/hpmicro/hpm5301evklite/board/fal_flash_port.c create mode 100644 bsp/hpmicro/hpm5301evklite/board/linker_scripts/flash_rtt.ld create mode 100644 bsp/hpmicro/hpm5301evklite/board/linker_scripts/ram_rtt.ld create mode 100644 bsp/hpmicro/hpm5301evklite/board/pinmux.c create mode 100644 bsp/hpmicro/hpm5301evklite/board/pinmux.h create mode 100644 bsp/hpmicro/hpm5301evklite/board/rtt_board.c create mode 100644 bsp/hpmicro/hpm5301evklite/board/rtt_board.h create mode 100644 bsp/hpmicro/hpm5301evklite/figures/board.png create mode 100644 bsp/hpmicro/hpm5301evklite/rtconfig.h create mode 100644 bsp/hpmicro/hpm5301evklite/rtconfig.py create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/SConscript create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/startup.c create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/toolchains/gcc/port_gcc.S create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/toolchains/gcc/vectors.S create mode 100644 bsp/hpmicro/hpm5301evklite/startup/HPM5301/trap.c create mode 100644 bsp/hpmicro/hpm5301evklite/startup/SConscript create mode 100644 bsp/hpmicro/hpm6300evk/board/linker_scripts/flash_rtt_enet.ld delete mode 100644 bsp/hpmicro/hpm6750evk/board/eth_phy_port.c delete mode 100644 bsp/hpmicro/hpm6750evk/board/eth_phy_port.h delete mode 100644 bsp/hpmicro/hpm6750evk2/board/debug_scripts/openocd/boards/hpm6750evk.cfg delete mode 100644 bsp/hpmicro/hpm6750evk2/board/eth_phy_port.h delete mode 100644 bsp/hpmicro/hpm6750evkmini/board/eth_phy_port.c delete mode 100644 bsp/hpmicro/hpm6750evkmini/board/eth_phy_port.h create mode 100644 bsp/hpmicro/hpm6750evkmini/board/linker_scripts/flash_rtt_enet.ld create mode 100644 bsp/hpmicro/hpm6800evk/.config create mode 100644 bsp/hpmicro/hpm6800evk/Kconfig create mode 100644 bsp/hpmicro/hpm6800evk/README.md create mode 100644 bsp/hpmicro/hpm6800evk/README_zh.md create mode 100644 bsp/hpmicro/hpm6800evk/SConscript create mode 100644 bsp/hpmicro/hpm6800evk/SConstruct create mode 100644 bsp/hpmicro/hpm6800evk/applications/SConscript create mode 100644 bsp/hpmicro/hpm6800evk/applications/main.c create mode 100644 bsp/hpmicro/hpm6800evk/board/Kconfig create mode 100644 bsp/hpmicro/hpm6800evk/board/SConscript create mode 100644 bsp/hpmicro/hpm6800evk/board/board.c create mode 100644 bsp/hpmicro/hpm6800evk/board/board.h create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/boards/hpm6800evk.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/probes/cmsis_dap.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/probes/ft2232.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/probes/ft232.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/probes/jlink.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/probes/nds_aice_micro.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/debug_scripts/openocd/soc/hpm6880.cfg create mode 100644 bsp/hpmicro/hpm6800evk/board/fal_cfg.h create mode 100644 bsp/hpmicro/hpm6800evk/board/fal_flash_port.c create mode 100644 bsp/hpmicro/hpm6800evk/board/hpm_wm8960.c create mode 100644 bsp/hpmicro/hpm6800evk/board/hpm_wm8960.h create mode 100644 bsp/hpmicro/hpm6800evk/board/hpm_wm8960_regs.h create mode 100644 bsp/hpmicro/hpm6800evk/board/linker_scripts/flash_rtt.ld create mode 100644 bsp/hpmicro/hpm6800evk/board/linker_scripts/flash_rtt_enet.ld create mode 100644 bsp/hpmicro/hpm6800evk/board/linker_scripts/flash_sdram_rtt.ld create mode 100644 bsp/hpmicro/hpm6800evk/board/linker_scripts/ram_rtt.ld create mode 100644 bsp/hpmicro/hpm6800evk/board/linker_scripts/ram_sdram_rtt.ld create mode 100644 bsp/hpmicro/hpm6800evk/board/pinmux.c create mode 100644 bsp/hpmicro/hpm6800evk/board/pinmux.h create mode 100644 bsp/hpmicro/hpm6800evk/board/rtt_board.c create mode 100644 bsp/hpmicro/hpm6800evk/board/rtt_board.h create mode 100644 bsp/hpmicro/hpm6800evk/figures/board.png create mode 100644 bsp/hpmicro/hpm6800evk/rtconfig.h create mode 100644 bsp/hpmicro/hpm6800evk/rtconfig.py create mode 100644 bsp/hpmicro/hpm6800evk/rtconfig_preinc.h create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/SConscript create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/startup.c create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/toolchains/gcc/port_gcc.S create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/toolchains/gcc/vectors.S create mode 100644 bsp/hpmicro/hpm6800evk/startup/HPM6880/trap.c create mode 100644 bsp/hpmicro/hpm6800evk/startup/SConscript rename bsp/hpmicro/{hpm6750evk2/board/eth_phy_port.c => libraries/drivers/drv_enet_phy.c} (52%) create mode 100644 bsp/hpmicro/libraries/drivers/drv_enet_phy.h create mode 100644 bsp/hpmicro/libraries/drivers/drv_ewdt.c create mode 100644 bsp/hpmicro/libraries/drivers/drv_ewdt.h create mode 100644 bsp/hpmicro/libraries/drivers/drv_lcd.c delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/dma_manager/hpm_dma_manager.c delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/dma_manager/hpm_dma_manager.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/dma_mgr/hpm_dma_mgr.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/dma_mgr/hpm_dma_mgr.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/enet_phy/lan8720/hpm_lan8720.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/enet_phy/lan8720/hpm_lan8720.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/enet_phy/lan8720/hpm_lan8720_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/panel/hpm_panel.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/panel/hpm_panel.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/serial_nor/hpm_serial_nor.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/serial_nor/hpm_serial_nor.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/serial_nor/hpm_serial_nor_host.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/components/serial_nor/interface/spi/hpm_serial_nor_host_spi.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_bgpr_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_dmav2_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_enc_pos_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_ewdg_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_gwc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_lcb_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_linv2_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_lvb_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_mipi_csi_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_mipi_csi_phy_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_mipi_dsi_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_mipi_dsi_phy_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_mmc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_opamp_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_pdgo_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_pixelmux_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_plb_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_qeiv2_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_qeo_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_rdc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_sei_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_smix_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/inc/hpm_tamp_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_dmav2_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_enc_pos_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_ewdg_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_gwc_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_lcb_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_linv2_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_lvb_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_mipi_csi_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_mipi_csi_phy_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_mipi_dsi_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_mipi_dsi_phy_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_mmc_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_opamp_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_pixelmux_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_plb_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_qeiv2_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_qeo_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_rdc_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_sei_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_smix_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/drivers/src/hpm_tamp_drv.c delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/hpm_sdk_version.h.in create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/HPM5301_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/SConscript create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/boot/hpm_bootheader.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/boot/hpm_bootheader.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_clock_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_clock_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_csr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_dmamux_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_dmamux_src.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_gpiom_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_gpiom_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_interrupt.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_ioc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_l1c_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_l1c_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_misc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_otp_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_otp_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_pcfg_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_pcfg_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_pdgo_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_pgpr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_plic_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_pmic_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_ppor_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_ppor_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_romapi.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_romapi_xpi_soc_def.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_ses_reg.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_ses_riscv_cpu_regs.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_soc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_soc_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_soc_ip_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_sysctl_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_sysctl_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/hpm_sysctl_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/soc_modules.list create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/system.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/flash.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/flash_uf2.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/flash_xip.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/initfini.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/ram.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/reset.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/trap.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5301/toolchains/vectors.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/HPM5361_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/SConscript create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/boot/hpm_bootheader.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/boot/hpm_bootheader.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_clock_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_clock_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_csr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_dmamux_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_dmamux_src.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_gpiom_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_gpiom_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_interrupt.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_ioc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_l1c_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_l1c_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_mcan_soc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_misc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_otp_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_otp_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_pcfg_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_pcfg_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_pdgo_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_pgpr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_plic_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_pmic_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_ppor_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_ppor_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_romapi.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_romapi_xpi_soc_def.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_ses_reg.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_ses_riscv_cpu_regs.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_soc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_soc_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_soc_ip_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_sysctl_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_sysctl_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_sysctl_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_trgm_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_trgm_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/hpm_trgmmux_src.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/soc_modules.list create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/system.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/flash.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/flash_uf2.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/flash_xip.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/initfini.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/ram.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/reset.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/trap.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM5361/toolchains/vectors.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/HPM6280_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/hpm_soc_ip_feature.h delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/flash.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/flash_uf2.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/flash_xip.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/ram.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/ram_core1.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6280/toolchains/segger/startup.s create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/HPM6360_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/hpm_soc_ip_feature.h delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/flash.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/flash_sdram_uf2.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/flash_sdram_xip.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/flash_uf2.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/flash_xip.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/ram.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6360/toolchains/segger/startup.s create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/HPM6750_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/hpm_soc_ip_feature.h delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/flash.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/flash_sdram_uf2.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/flash_sdram_xip.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/flash_uf2.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/flash_xip.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/ram.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/ram_core1.icf delete mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6750/toolchains/segger/startup.s create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/HPM6880_svd.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/SConscript create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/boot/hpm_bootheader.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/boot/hpm_bootheader.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_batt_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_bcfg_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_bcfg_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_bgpr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_bpor_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_bpor_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_clock_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_clock_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_csr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_dmamux_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_dmamux_src.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_enet_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_gpiom_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_gpiom_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_interrupt.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_ioc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_l1c_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_l1c_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_mcan_soc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_misc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_otp_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_otp_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_pcfg_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_pcfg_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_pgpr_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_plic_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_pmic_iomux.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_ppor_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_ppor_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_romapi.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_romapi_xpi_soc_def.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_sdxc_soc_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_ses_reg.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_ses_riscv_cpu_regs.xml create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_soc.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_soc_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_soc_ip_feature.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_sysctl_drv.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_sysctl_drv.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/hpm_sysctl_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/soc_modules.list create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/system.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/flash.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/flash_sdram_uf2.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/flash_sdram_xip.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/flash_uf2.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/flash_xip.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/initfini.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/ram.ld create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/gcc/start.S create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/reset.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/trap.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/HPM6880/toolchains/vectors.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_ddrctl_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_ddrphy_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_dmav2_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_ewdg_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_gpu_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_gwc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_lcb_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_linv2_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_lvb_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_mipi_csi_phy_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_mipi_csi_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_mipi_dsi_phy_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_mipi_dsi_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_mmc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_opamp_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_pixelmux_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_plb_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_qeiv2_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_qeo_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_rdc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_sdadc_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_sdmv2_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_sei_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/soc/ip/hpm_smix_regs.h create mode 100644 bsp/hpmicro/libraries/hpm_sdk/utils/hpm_crc32.c create mode 100644 bsp/hpmicro/libraries/hpm_sdk/utils/hpm_crc32.h diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 95f5edd46cb..cce98770fef 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -326,6 +326,17 @@ jobs: - "bluetrum/ab32vg1-ab-prougen" - "bouffalo_lab/bl60x" - "bouffalo_lab/bl70x" + - RTT_BSP: "hpmicro" + RTT_TOOL_CHAIN: "RISC-V-GCC-RV32" + SUB_RTT_BSP: + - "hpmicro/hpm6750evkmini" + - "hpmicro/hpm6750evk" + - "hpmicro/hpm6750evk2" + - "hpmicro/hpm6300evk" + - "hpmicro/hpm6200evk" + - "hpmicro/hpm5300evk" + - "hpmicro/hpm5301evklite" + - "hpmicro/hpm6800evk" - RTT_BSP: "llvm-arm" RTT_TOOL_CHAIN: "llvm-arm" SUB_RTT_BSP: @@ -406,6 +417,14 @@ jobs: /opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version echo "RTT_EXEC_PATH=/opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin" >> $GITHUB_ENV + - name: Install riscv32-unknown-elf Toolchains + if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'RISC-V-GCC-RV32' && success() }} + run: | + wget -q https://github.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05.15/riscv32-unknown-elf-newlib-multilib_2022.05.15_linux.tar.gz + sudo tar zxf riscv32-unknown-elf-newlib-multilib_2022.05.15_linux.tar.gz -C /opt + /opt/riscv32-unknown-elf-newlib-multilib/bin/riscv32-unknown-elf-gcc --version + echo "RTT_EXEC_PATH=/opt/riscv32-unknown-elf-newlib-multilib/bin/" >> $GITHUB_ENV + - name: Install Riscv-none-embed ToolChains if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-riscv-none-embed' && success() }} run: | diff --git a/bsp/hpmicro/.ignore_format.yml b/bsp/hpmicro/.ignore_format.yml index cad99bf4706..65bf18b330a 100644 --- a/bsp/hpmicro/.ignore_format.yml +++ b/bsp/hpmicro/.ignore_format.yml @@ -8,4 +8,7 @@ dir_path: - hpm6750evk/startup - hpm6750evk2/startup - hpm6750evkmini/startup + - hpm5300evk/startup + - hpm5301evklite/startup + - hpm6800evk/startup - libraries/hpm_sdk diff --git a/bsp/hpmicro/hpm5300evk/.config b/bsp/hpmicro/hpm5300evk/.config new file mode 100644 index 00000000000..1bd33fdf9b3 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/.config @@ -0,0 +1,1061 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=1024 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=1024 + +# +# kservice optimization +# +# CONFIG_RT_USING_TINY_FFS is not set + +# +# klibc optimization +# +# CONFIG_RT_KLIBC_USING_STDLIB is not set +# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set +# CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG is not set +# CONFIG_RT_USING_DEBUG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +# CONFIG_RT_USING_SCHED_THREAD_CTX is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" +CONFIG_RT_VER_NUM=0x50200 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# CONFIG_RT_USING_CACHE is not set +# CONFIG_RT_USING_HW_ATOMIC is not set +# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_USING_HW_THREAD_SELF is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +CONFIG_RT_USING_LEGACY=y +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y +# CONFIG_RT_SERIAL_USING_DMA is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_DEV_BUS is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_KTIME is not set +# CONFIG_RT_USING_HWTIMER is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_VBUS is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LWIP is not set +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set + +# +# peripheral libraries and drivers +# + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ESP_IDF is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set + +# +# miscellaneous packages +# + +# +# project laboratory +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set + +# +# Uncategorized +# + +# +# Hardware Drivers Config +# +CONFIG_SOC_HPM5000=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART0=y +CONFIG_BSP_UART0_RX_BUFSIZE=128 +CONFIG_BSP_UART0_TX_BUFSIZE=0 +# CONFIG_BSP_USING_UART2 is not set +# CONFIG_BSP_USING_UART7 is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_GPTMR is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_XPI_FLASH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_USB is not set +# CONFIG_BSP_USING_EWDG is not set +# CONFIG_BSP_USING_MCAN is not set +# CONFIG_BSP_USING_ADC is not set diff --git a/bsp/hpmicro/hpm5300evk/Kconfig b/bsp/hpmicro/hpm5300evk/Kconfig new file mode 100644 index 00000000000..79b160b8567 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/hpmicro/hpm5300evk/README.md b/bsp/hpmicro/hpm5300evk/README.md new file mode 100644 index 00000000000..4e6ad210a66 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/README.md @@ -0,0 +1,113 @@ +# HPMicro HPM5300EVK BSP(Board Support Package) Introduction + +[中文页](README_zh.md) | + +## Introduction + +This document provides brief introduction of the BSP (board support package) for the HPM5300EVK development board. + +The document consists of the following parts: + +- HPM5300EVK Board Resources Introduction +- Quickly Getting Started +- Refreences + +By reading the Quickly Get Started section developers can quickly get their hands on this BSP and run RT-Thread on the board. More advanced features will be introduced in the Advanced Features section to help developers take advantage of RT-Thread to drive more on-board resources. + +## Board Resources Introduction + +HPM5300EVK is a development board based on the RISC-V core launched by HPMicro, with rich on-board resources and on-chip resources for motor control, etc. +![board](figures/board.png) + + +## Peripheral Condition + +Each peripheral supporting condition for this BSP is as follows: + + +| **On-board Peripherals** | **Support** | **Note** | +| ------------------------ | ----------- | ------------------------------------- | +| USB | √ | | +| QSPI Flash | √ | | +| GPIO | √ | | +| SPI | √ | | +| I2C | √ | | +| CAN | √ | | +| On-Board Debugger | √ | ft2232 | + + +## Execution Instruction + +### Quickly Getting Started + +The BSP support being build via the 'scons' command, below is the steps of compiling the example via the 'scons' command + +#### Parpare Environment +- Step 1: Prepare [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool) +- Step 2: Prepare [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip) + - Download the package and extract it into a specified directory, for example: `C:\DevTools\riscv32-gnu-toolchain` +- Step 3: Set environment variable `RTT_RISCV_TOOLCHAIN` to `\bin` + - For example: `C:\DevTools\riscv32-gnu-toolchain\bin` +- Step 4: Prepare [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.4.0.zip) + - Download and extract it to specified directory, for example: `C:\DevTools\openocd-hpmicro` + - Add `OpenOCD` environment variable `OPENOCD_HPMICRO` to `\bin` + - For example: `C:\DevTools\openocd-hpmicro\bin` + +#### Configure and Build project + +Open RT-Thread ENV command-line, and change directory to this BSP directory, then users can: + +- Configure the project via `menuconfig` in `RT-Thread ENV` +- Build the project using `scons -jN`, `N` equals to the number of CPU cores +- Clean the project using `scons -c` + +#### Hardware Connection + +- Switch BOOT pin to 2'b00 +- Connect the `PWR_DEBUG` port to PC via TYPE-C cable + + +#### Dowload / Debug + +- Users can download the project via the below command: + ```console + %OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm5300.cfg -f boards\debug_scripts\boards\hpm5300evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown" + ``` + +- Users can debug the project via the below command: + + - Connect debugger via `OpenOCD`: + +```console +%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm5300.cfg -f boards\debug_scripts\boards\hpm5300evk.cfg +``` + - Start Debugger via `GDB`: + +```console +%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf +``` + - In the `gdb shell`, type the following commands: + +```console +load +c +``` + +### **Running Results** + +Once the project is successfully downloaded, the system runs automatically. The LED on the board will flash periodically. + +Connect the serial port of the board to the PC, communicate with it via a serial terminal tool(115200-8-1-N). Reset the board and the startup information of RT-Thread will be observed: + +``` + \ | / +- RT - Thread Operating System + / | \ 5.1.0 build Aug 16 2023 18:18:18 + 2006 - 2024 Copyright by RT-Thread team +``` + +## **References** + +- [RT-Thread Documnent Center](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README) +- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md) +- [HPM5300EVK RT-Thread BSP Package](https://github.com/hpmicro/rtt-bsp-hpm5300evk) \ No newline at end of file diff --git a/bsp/hpmicro/hpm5300evk/README_zh.md b/bsp/hpmicro/hpm5300evk/README_zh.md new file mode 100644 index 00000000000..9b7086ddc10 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/README_zh.md @@ -0,0 +1,112 @@ +# 先楫 HPM5300EVK BSP(板级支持包)说明 + +[English](README.md) | + +## 简介 + +本文档为 HPM5300EVK 的 BSP (板级支持包) 说明。 + +本文包含如下部分: + +- HPM5300EVK 板级资源介绍 +- 快速上手指南 +- 参考链接 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 板级资源介绍 + + HPM5300EVK 是由先楫半导体推出的一款基于RISCV内核的开发板,带有丰富的片上资源和板上资源,可用于电机控制等应用。 + +开发板外观如下图所示: + +![board](figures/board.png) + + +## 板载外设 + +本 BSP 目前对外设的支持情况如下: + + +| **板载外设** | **支持情况** | **备注** | +| ------------------------ | ----------- | ------------------------------------- | +| USB | √ | | +| QSPI Flash | √ | | +| GPIO | √ | | +| SPI | √ | | +| I2C | √ | | +| CAN | √ | | +| 板载调试器 | √ | ft2232 | + + +## 使用说明 + +### 快速开始 + +本BSP支持通过`scons`命令来完成编译,在开始之前,需要先准备好开发所需的环境。 + +#### 准备环境 +- 步骤 1: 准备 [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool) +- 步骤 2: 准备 [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip) + - 下载并解压到指定的目录,如: `C:\DevTools\riscv32-gnu-toolchain` +- 步骤 3: 设置环境变量: `RTT_RISCV_TOOLCHAIN` 为 `\bin`, 如: `C:\DevTools\riscv32-gnu-toolchain\bin` +- 步骤 4: 准备 [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.4.0.zip) + - 下载并解压到指定目录,如: `C:\DevTools\openocd-hpmicro` + - 将 `OPENOCD_HPMICRO`环境变量设置为 `\bin`,如: `C:\DevTools\openocd-hpmicro\bin` + +#### 配置和构建工程 + +通过 RT-Thread ENV 命令行切换目录到当前BSP所在目录后,用户可以: + +- 通过 `menuconfig` 命令 配置RT-Thread BSP的功能 +- 通过 `scons -jN` 命令完成构建, 其中`N` 最大值可以指定为CP拥有的物理内核数 +- 通过 `scons -c` 命令清除构建 + +#### 硬件连接 + +- 将BOOT 引脚拨到2'b00 +- 通过 TYPE-C线将板上的 `PWR_DEBUG` 连接到电脑 + +#### 下载 和 调试 + +- 通过如下命令完成下载: + ```console + %OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\cmsis_dap.cfg -f boards\debug_scripts\soc\hpm5300.cfg -f boards\debug_scripts\boards\hpm5300evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown" + ``` + +- 通过如下命令实现调试: + + - 通过 `OpenOCD` 来连接开发板: +```console +%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm5300.cfg -f boards\debug_scripts\boards\hpm5300evk.cfg +``` + - 通过 `GDB` 实现调试: +```console +%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf +``` + + - 在`GDB Shell`中使用如下命令来加载和运行: + +```console +load +c +``` + +### **运行结果** + +一旦成功下载,程序会自动运行并打印如下结果,板载LED灯会周期性闪烁。 + +配置好串口终端(串口配置为115200, 8-N-1),按复位键后,串口终端会打印如下日志: + +``` + \ | / +- RT - Thread Operating System + / | \ 5.1.0 build Aug 16 2023 18:18:18 + 2006 - 2023 Copyright by RT-Thread team +``` + +## **参考链接** + +- [RT-Thread 文档中心](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README) +- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md) +- [HPM5300EVK RT-Thread BSP 包](https://github.com/hpmicro/rtt-bsp-hpm5300evk) \ No newline at end of file diff --git a/bsp/hpmicro/hpm5300evk/SConscript b/bsp/hpmicro/hpm5300evk/SConscript new file mode 100644 index 00000000000..014c428d0a3 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/SConscript @@ -0,0 +1,17 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +ASFLAGS = ' -I' + cwd + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/hpmicro/hpm5300evk/SConstruct b/bsp/hpmicro/hpm5300evk/SConstruct new file mode 100644 index 00000000000..3dadc575c01 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/SConstruct @@ -0,0 +1,75 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../../rt-thread') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +AddOption('--run', + dest = 'run', + type='string', + nargs=1, + action = 'store', + default = "", + help = 'Upload or debug application using openocd') + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS, + CXXCOM = '$CXX -o $TARGET -c $CXXFLAGS $_CCCOMCOM $SOURCES') + +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env['ASCOM'] = env['ASPPCOM'] + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(os.path.join(SDK_ROOT, 'libraries')): + libraries_path_prefix = os.path.join(SDK_ROOT, 'libraries') +else: + libraries_path_prefix = os.path.join(os.path.dirname(SDK_ROOT), 'libraries') + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + + +GDB = rtconfig.GDB + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +hpm_library = 'hpm_sdk' +rtconfig.BSP_LIBRARY_TYPE = hpm_library + +# include soc +objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library,'soc', rtconfig.CHIP_NAME, 'SConscript'))) + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'SConscript'))) + +# include components +objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'components', 'SConscript'))) + + +# includes rtt drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/hpmicro/hpm5300evk/applications/SConscript b/bsp/hpmicro/hpm5300evk/applications/SConscript new file mode 100644 index 00000000000..a65aa4d8553 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/applications/SConscript @@ -0,0 +1,14 @@ +import rtconfig + +from building import * + +cwd = GetCurrentDir() + +src = Glob('*.c') + +CPPDEFINES=[] +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES) + +Return('group') diff --git a/bsp/hpmicro/hpm5300evk/applications/main.c b/bsp/hpmicro/hpm5300evk/applications/main.c new file mode 100644 index 00000000000..0bbf6370382 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/applications/main.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 hpmicro + * + * Change Logs: + * Date Author Notes + * 2021-08-13 Fan YANG first version + * + */ + +#include +#include +#include "rtt_board.h" +#include + +void thread_entry(void *arg); + + +int main(void) +{ + static uint32_t led_thread_arg = 0; + rt_thread_t led_thread = rt_thread_create("led_th", thread_entry, &led_thread_arg, 1024, 1, 10); + rt_thread_startup(led_thread); + + return 0; +} + + +void thread_entry(void *arg) +{ + rt_pin_mode(APP_LED0_PIN_NUM, PIN_MODE_OUTPUT); + + while(1){ + rt_pin_write(APP_LED0_PIN_NUM, APP_LED_ON); + rt_thread_mdelay(500); + rt_pin_write(APP_LED0_PIN_NUM, APP_LED_OFF); + rt_thread_mdelay(500); + } +} diff --git a/bsp/hpmicro/hpm5300evk/board/Kconfig b/bsp/hpmicro/hpm5300evk/board/Kconfig new file mode 100644 index 00000000000..20bc12d04ba --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/Kconfig @@ -0,0 +1,236 @@ +menu "Hardware Drivers Config" + +config SOC_HPM5000 + bool + select SOC_SERIES_HPM5300 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "On-chip Peripheral Drivers" + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN if BSP_USING_GPIO + default n + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + + if BSP_USING_UART + menuconfig BSP_USING_UART0 + bool "Enable UART0 (Debugger)" + default y + if BSP_USING_UART0 + config BSP_UART0_RX_USING_DMA + bool "Enable UART0 RX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + config BSP_UART0_TX_USING_DMA + bool "Enable UART0 TX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + config BSP_UART0_RX_BUFSIZE + int "Set UART0 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 128 + config BSP_UART0_TX_BUFSIZE + int "Set UART0 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + menuconfig BSP_USING_UART2 + bool "Enable UART2" + default y + if BSP_USING_UART2 + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default y + config BSP_UART2_TX_USING_DMA + bool "Enable UART2 TX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + config BSP_UART2_RX_BUFSIZE + int "Set UART2 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 1024 + config BSP_UART2_TX_BUFSIZE + int "Set UART2 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + menuconfig BSP_USING_UART7 + bool "Enable UART7" + default n + if BSP_USING_UART7 + config BSP_UART7_RX_USING_DMA + bool "Enable UART7 RX DMA" + depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA + default n + config BSP_UART7_TX_USING_DMA + bool "Enable UART7 TX DMA" + depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA + default n + config BSP_UART7_RX_BUFSIZE + int "Set UART7 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 1024 + config BSP_UART7_TX_BUFSIZE + int "Set UART7 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI" + default n + select RT_USING_SPI if BSP_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1" + default y + if BSP_USING_SPI1 + config BSP_SPI1_USING_DMA + bool "Enable SPI1 DMA" + default n + endif + config BSP_USING_SPI2 + bool "Enable SPI2" + default n + if BSP_USING_SPI2 + config BSP_SPI2_USING_DMA + bool "Enable SPI2 DMA" + default n + endif + config BSP_USING_SPI3 + bool "Enable SPI3" + default n + if BSP_USING_SPI3 + config BSP_SPI3_USING_DMA + bool "Enable SPI3 DMA" + default n + endif + endif + + menuconfig BSP_USING_GPTMR + bool "Enable GPTMR" + default n + select RT_USING_HWTIMER if BSP_USING_GPTMR + if BSP_USING_GPTMR + config BSP_USING_GPTMR1 + bool "Enable GPTMR1" + default n + config BSP_USING_GPTMR2 + bool "Enable GPTMR2" + default n + endif + + menuconfig BSP_USING_I2C + bool "Enable I2C" + default n + if BSP_USING_I2C + config BSP_USING_I2C0 + bool "Enable I2C0" + default y + if BSP_USING_I2C0 + config BSP_I2C0_USING_DMA + bool "Enable I2C0 DMA" + default n + endif + + config BSP_USING_I2C3 + bool "Enable I2C3" + default n + if BSP_USING_I2C3 + config BSP_I2C3_USING_DMA + bool "Enable I2C3 DMA" + default n + endif + endif + + menuconfig BSP_USING_XPI_FLASH + bool "Enable XPI FLASH" + default n + select RT_USING_FAL if BSP_USING_XPI_FLASH + + menuconfig BSP_USING_PWM + bool "Enable PWM" + default n + + menuconfig BSP_USING_USB + bool "Enable USB" + default n + if BSP_USING_USB + config BSP_USING_USB_DEVICE + bool "Enable USB Device" + default n + config BSP_USING_USB_HOST + bool "Enable USB HOST" + select RT_USING_CACHE + default n + endif + + menuconfig BSP_USING_EWDG + bool "Enable EWDG" + default n + select RT_USING_WDT if BSP_USING_EWDG + if BSP_USING_EWDG + config BSP_USING_EWDG0 + bool "Enable EWDG0" + default n + config BSP_USING_EWDG1 + bool "Enable EWDG1" + default n + endif + + menuconfig BSP_USING_MCAN + bool "Enable MCAN" + default n + select RT_USING_CAN if BSP_USING_MCAN + if BSP_USING_MCAN + config BSP_USING_MCAN0 + bool "Enable MCAN0" + default n + config BSP_USING_MCAN1 + bool "Enable MCAN1" + default n + config BSP_USING_MCAN2 + bool "Enable MCAN2" + default n + config BSP_USING_MCAN3 + bool "Enable MCAN3" + default n + endif + + menuconfig BSP_USING_ADC + bool "Enable ADC" + default n + select RT_USING_ADC if BSP_USING_ADC + if BSP_USING_ADC + menuconfig BSP_USING_ADC16 + bool "Enable ADC16" + default y + if BSP_USING_ADC16 + config BSP_USING_ADC0 + bool "Enable ADC0" + default y + config BSP_USING_ADC1 + bool "Enable ADC1" + default n + config BSP_USING_ADC2 + bool "Enable ADC2" + default n + endif + endif +endmenu + +endmenu diff --git a/bsp/hpmicro/hpm5300evk/board/SConscript b/bsp/hpmicro/hpm5300evk/board/SConscript new file mode 100644 index 00000000000..dcd1e3543fd --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/SConscript @@ -0,0 +1,18 @@ +from building import * + +cwd = GetCurrentDir() + +# add the general drivers +src = Split(""" + board.c + rtt_board.c + pinmux.c + fal_flash_port.c +""") + +CPPPATH = [cwd] +CPPDEFINES=['D25', 'HPM5361'] + +group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/hpmicro/hpm5300evk/board/board.c b/bsp/hpmicro/hpm5300evk/board/board.c new file mode 100644 index 00000000000..ce3f1ee0cee --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/board.c @@ -0,0 +1,662 @@ +/* + * Copyright (c) 2023 HPMicro + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include "board.h" +#include "hpm_uart_drv.h" +#include "hpm_gptmr_drv.h" +#include "hpm_gpio_drv.h" +#include "hpm_usb_drv.h" +#include "hpm_clock_drv.h" +#include "hpm_pllctlv2_drv.h" +#include "hpm_i2c_drv.h" +#include "hpm_pcfg_drv.h" + +static board_timer_cb timer_cb; + +/** + * @brief FLASH configuration option definitions: + * option[0]: + * [31:16] 0xfcf9 - FLASH configuration option tag + * [15:4] 0 - Reserved + * [3:0] option words (exclude option[0]) + * option[1]: + * [31:28] Flash probe type + * 0 - SFDP SDR / 1 - SFDP DDR + * 2 - 1-4-4 Read (0xEB, 24-bit address) / 3 - 1-2-2 Read(0xBB, 24-bit address) + * 4 - HyperFLASH 1.8V / 5 - HyperFLASH 3V + * 6 - OctaBus DDR (SPI -> OPI DDR) + * 8 - Xccela DDR (SPI -> OPI DDR) + * 10 - EcoXiP DDR (SPI -> OPI DDR) + * [27:24] Command Pads after Power-on Reset + * 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI + * [23:20] Command Pads after Configuring FLASH + * 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI + * [19:16] Quad Enable Sequence (for the device support SFDP 1.0 only) + * 0 - Not needed + * 1 - QE bit is at bit 6 in Status Register 1 + * 2 - QE bit is at bit1 in Status Register 2 + * 3 - QE bit is at bit7 in Status Register 2 + * 4 - QE bit is at bit1 in Status Register 2 and should be programmed by 0x31 + * [15:8] Dummy cycles + * 0 - Auto-probed / detected / default value + * Others - User specified value, for DDR read, the dummy cycles should be 2 * cycles on FLASH datasheet + * [7:4] Misc. + * 0 - Not used + * 1 - SPI mode + * 2 - Internal loopback + * 3 - External DQS + * [3:0] Frequency option + * 1 - 30MHz / 2 - 50MHz / 3 - 66MHz / 4 - 80MHz / 5 - 100MHz / 6 - 120MHz / 7 - 133MHz / 8 - 166MHz + * + * option[2] (Effective only if the bit[3:0] in option[0] > 1) + * [31:20] Reserved + * [19:16] IO voltage + * 0 - 3V / 1 - 1.8V + * [15:12] Pin group + * 0 - 1st group / 1 - 2nd group + * [11:8] Connection selection + * 0 - CA_CS0 / 1 - CB_CS0 / 2 - CA_CS0 + CB_CS0 (Two FLASH connected to CA and CB respectively) + * [7:0] Drive Strength + * 0 - Default value + * option[3] (Effective only if the bit[3:0] in option[0] > 2, required only for the QSPI NOR FLASH that not supports + * JESD216) + * [31:16] reserved + * [15:12] Sector Erase Command Option, not required here + * [11:8] Sector Size Option, not required here + * [7:0] Flash Size Option + * 0 - 4MB / 1 - 8MB / 2 - 16MB + */ +#if defined(FLASH_XIP) && FLASH_XIP +__attribute__ ((section(".nor_cfg_option"))) const uint32_t option[4] = {0xfcf90002, 0x00000006, 0x1000, 0x0}; +#endif + +#if defined(FLASH_UF2) && FLASH_UF2 +ATTR_PLACE_AT(".uf2_signature") const uint32_t uf2_signature = BOARD_UF2_SIGNATURE; +#endif + +void board_init_console(void) +{ +#if !defined(CONFIG_NDEBUG_CONSOLE) || !CONFIG_NDEBUG_CONSOLE +#if BOARD_CONSOLE_TYPE == CONSOLE_TYPE_UART + console_config_t cfg; + + /* uart needs to configure pin function before enabling clock, otherwise the level change of + * uart rx pin when configuring pin function will cause a wrong data to be received. + * And a uart rx dma request will be generated by default uart fifo dma trigger level. + */ + init_uart_pins((UART_Type *) BOARD_CONSOLE_UART_BASE); + + /* Configure the UART clock to 24MHz */ + clock_set_source_divider(BOARD_CONSOLE_UART_CLK_NAME, clk_src_osc24m, 1U); + clock_add_to_group(BOARD_CONSOLE_UART_CLK_NAME, 0); + + cfg.type = BOARD_CONSOLE_TYPE; + cfg.base = (uint32_t)BOARD_CONSOLE_UART_BASE; + cfg.src_freq_in_hz = clock_get_frequency(BOARD_CONSOLE_UART_CLK_NAME); + cfg.baudrate = BOARD_CONSOLE_UART_BAUDRATE; + + if (status_success != console_init(&cfg)) { + /* failed to initialize debug console */ + while (1) { + } + } +#else + while (1) + ; +#endif +#endif +} + +void board_print_banner(void) +{ + const uint8_t banner[] = "\n" +"----------------------------------------------------------------------\n" +"$$\\ $$\\ $$$$$$$\\ $$\\ $$\\ $$\\\n" +"$$ | $$ |$$ __$$\\ $$$\\ $$$ |\\__|\n" +"$$ | $$ |$$ | $$ |$$$$\\ $$$$ |$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\\n" +"$$$$$$$$ |$$$$$$$ |$$\\$$\\$$ $$ |$$ |$$ _____|$$ __$$\\ $$ __$$\\\n" +"$$ __$$ |$$ ____/ $$ \\$$$ $$ |$$ |$$ / $$ | \\__|$$ / $$ |\n" +"$$ | $$ |$$ | $$ |\\$ /$$ |$$ |$$ | $$ | $$ | $$ |\n" +"$$ | $$ |$$ | $$ | \\_/ $$ |$$ |\\$$$$$$$\\ $$ | \\$$$$$$ |\n" +"\\__| \\__|\\__| \\__| \\__|\\__| \\_______|\\__| \\______/\n" +"----------------------------------------------------------------------\n"; +#ifdef SDK_VERSION_STRING + printf("hpm_sdk: %s\n", SDK_VERSION_STRING); +#endif + printf("%s", banner); +} + +void board_print_clock_freq(void) +{ + printf("==============================\n"); + printf(" %s clock summary\n", BOARD_NAME); + printf("==============================\n"); + printf("cpu0:\t\t %luHz\n", clock_get_frequency(clock_cpu0)); + printf("ahb:\t\t %luHz\n", clock_get_frequency(clock_ahb)); + printf("mchtmr0:\t %luHz\n", clock_get_frequency(clock_mchtmr0)); + printf("xpi0:\t\t %luHz\n", clock_get_frequency(clock_xpi0)); + printf("==============================\n"); +} + +void board_init(void) +{ + init_xtal_pins(); + init_py_pins_as_pgpio(); + board_init_usb_dp_dm_pins(); + + board_init_clock(); + board_init_console(); + board_init_pmp(); +#if BOARD_SHOW_CLOCK + board_print_clock_freq(); +#endif +#if BOARD_SHOW_BANNER + board_print_banner(); +#endif +} + +void board_init_usb_dp_dm_pins(void) +{ + /* Disconnect usb dp/dm pins pull down 45ohm resistance */ + + while (sysctl_resource_any_is_busy(HPM_SYSCTL)) { + ; + } + if (pllctlv2_xtal_is_stable(HPM_PLLCTLV2) && pllctlv2_xtal_is_enabled(HPM_PLLCTLV2)) { + if (clock_check_in_group(clock_usb0, 0)) { + usb_phy_disable_dp_dm_pulldown(HPM_USB0); + } else { + clock_add_to_group(clock_usb0, 0); + usb_phy_disable_dp_dm_pulldown(HPM_USB0); + clock_remove_from_group(clock_usb0, 0); + } + } else { + uint8_t tmp; + tmp = sysctl_resource_target_get_mode(HPM_SYSCTL, sysctl_resource_xtal); + sysctl_resource_target_set_mode(HPM_SYSCTL, sysctl_resource_xtal, 0x03); + clock_add_to_group(clock_usb0, 0); + usb_phy_disable_dp_dm_pulldown(HPM_USB0); + clock_remove_from_group(clock_usb0, 0); + while (sysctl_resource_target_is_busy(HPM_SYSCTL, sysctl_resource_usb0)) { + ; + } + sysctl_resource_target_set_mode(HPM_SYSCTL, sysctl_resource_xtal, tmp); + } +} + +void board_init_clock(void) +{ + uint32_t cpu0_freq = clock_get_frequency(clock_cpu0); + + if (cpu0_freq == PLLCTL_SOC_PLL_REFCLK_FREQ) { + /* Configure the External OSC ramp-up time: ~9ms */ + pllctlv2_xtal_set_rampup_time(HPM_PLLCTLV2, 32UL * 1000UL * 9U); + + /* Select clock setting preset1 */ + sysctl_clock_set_preset(HPM_SYSCTL, 2); + } + + /* group0[0] */ + clock_add_to_group(clock_cpu0, 0); + clock_add_to_group(clock_ahb, 0); + clock_add_to_group(clock_lmm0, 0); + clock_add_to_group(clock_mchtmr0, 0); + clock_add_to_group(clock_rom, 0); + clock_add_to_group(clock_can0, 0); + clock_add_to_group(clock_can1, 0); + clock_add_to_group(clock_can2, 0); + clock_add_to_group(clock_can3, 0); + clock_add_to_group(clock_ptpc, 0); + clock_add_to_group(clock_gptmr0, 0); + clock_add_to_group(clock_gptmr1, 0); + clock_add_to_group(clock_gptmr2, 0); + clock_add_to_group(clock_gptmr3, 0); + clock_add_to_group(clock_i2c0, 0); + clock_add_to_group(clock_i2c1, 0); + clock_add_to_group(clock_i2c2, 0); + clock_add_to_group(clock_i2c3, 0); + clock_add_to_group(clock_spi0, 0); + clock_add_to_group(clock_spi1, 0); + clock_add_to_group(clock_spi2, 0); + clock_add_to_group(clock_spi3, 0); + clock_add_to_group(clock_uart0, 0); + clock_add_to_group(clock_uart1, 0); + clock_add_to_group(clock_uart2, 0); + clock_add_to_group(clock_uart3, 0); + clock_add_to_group(clock_uart4, 0); + clock_add_to_group(clock_uart5, 0); + clock_add_to_group(clock_uart6, 0); + /* group0[1] */ + clock_add_to_group(clock_uart7, 0); + clock_add_to_group(clock_watchdog0, 0); + clock_add_to_group(clock_watchdog1, 0); + clock_add_to_group(clock_mbx0, 0); + clock_add_to_group(clock_tsns, 0); + clock_add_to_group(clock_crc0, 0); + clock_add_to_group(clock_adc0, 0); + clock_add_to_group(clock_adc1, 0); + clock_add_to_group(clock_dac0, 0); + clock_add_to_group(clock_dac1, 0); + clock_add_to_group(clock_acmp, 0); + clock_add_to_group(clock_opa0, 0); + clock_add_to_group(clock_opa1, 0); + clock_add_to_group(clock_mot0, 0); + clock_add_to_group(clock_rng, 0); + clock_add_to_group(clock_sdp, 0); + clock_add_to_group(clock_kman, 0); + clock_add_to_group(clock_gpio, 0); + clock_add_to_group(clock_hdma, 0); + clock_add_to_group(clock_xpi0, 0); + clock_add_to_group(clock_usb0, 0); + + /* Connect Group0 to CPU0 */ + clock_connect_group_to_cpu(0, 0); + + /* Bump up DCDC voltage to 1175mv */ + pcfg_dcdc_set_voltage(HPM_PCFG, 1175); + + /* Configure CPU to 480MHz, AXI/AHB to 160MHz */ + sysctl_config_cpu0_domain_clock(HPM_SYSCTL, clock_source_pll0_clk0, 2, 3); + /* Configure PLL0 Post Divider */ + pllctlv2_set_postdiv(HPM_PLLCTLV2, 0, 0, 0); /* PLL0CLK0: 960MHz */ + pllctlv2_set_postdiv(HPM_PLLCTLV2, 0, 1, 3); /* PLL0CLK1: 600MHz */ + pllctlv2_set_postdiv(HPM_PLLCTLV2, 0, 2, 7); /* PLL0CLK2: 400MHz */ + /* Configure PLL0 Frequency to 960MHz */ + pllctlv2_init_pll_with_freq(HPM_PLLCTLV2, 0, 960000000); + + clock_update_core_clock(); + + /* Configure mchtmr to 24MHz */ + clock_set_source_divider(clock_mchtmr0, clk_src_osc24m, 1); +} + +void board_delay_us(uint32_t us) +{ + clock_cpu_delay_us(us); +} + +void board_delay_ms(uint32_t ms) +{ + clock_cpu_delay_ms(ms); +} + +void board_timer_isr(void) +{ + if (gptmr_check_status(BOARD_CALLBACK_TIMER, GPTMR_CH_RLD_STAT_MASK(BOARD_CALLBACK_TIMER_CH))) { + gptmr_clear_status(BOARD_CALLBACK_TIMER, GPTMR_CH_RLD_STAT_MASK(BOARD_CALLBACK_TIMER_CH)); + timer_cb(); + } +} +SDK_DECLARE_EXT_ISR_M(BOARD_CALLBACK_TIMER_IRQ, board_timer_isr); + +void board_timer_create(uint32_t ms, board_timer_cb cb) +{ + uint32_t gptmr_freq; + gptmr_channel_config_t config; + + timer_cb = cb; + gptmr_channel_get_default_config(BOARD_CALLBACK_TIMER, &config); + + clock_add_to_group(BOARD_CALLBACK_TIMER_CLK_NAME, 0); + gptmr_freq = clock_get_frequency(BOARD_CALLBACK_TIMER_CLK_NAME); + + config.reload = gptmr_freq / 1000 * ms; + gptmr_channel_config(BOARD_CALLBACK_TIMER, BOARD_CALLBACK_TIMER_CH, &config, false); + gptmr_enable_irq(BOARD_CALLBACK_TIMER, GPTMR_CH_RLD_IRQ_MASK(BOARD_CALLBACK_TIMER_CH)); + intc_m_enable_irq_with_priority(BOARD_CALLBACK_TIMER_IRQ, 1); + + gptmr_start_counter(BOARD_CALLBACK_TIMER, BOARD_CALLBACK_TIMER_CH); +} + +void board_init_gpio_pins(void) +{ + init_gpio_pins(); + gpio_set_pin_input(BOARD_APP_GPIO_CTRL, BOARD_APP_GPIO_INDEX, BOARD_APP_GPIO_PIN); +} + +void board_init_led_pins(void) +{ + init_led_pins_as_gpio(); + gpio_set_pin_output_with_initial(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, board_get_led_gpio_off_level()); +} + +void board_init_usb_pins(void) +{ + init_usb_pins(); + usb_hcd_set_power_ctrl_polarity(BOARD_USB, true); + /* Wait USB_PWR pin control vbus power stable. Time depend on decoupling capacitor, you can decrease or increase this time */ + board_delay_ms(100); + + /* As QFN32, QFN48 and LQFP64 has no vbus pin, so should be call usb_phy_using_internal_vbus() API to use internal vbus. */ + /* usb_phy_using_internal_vbus(BOARD_USB); */ +} + +void board_led_write(uint8_t state) +{ + gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state); +} + +void board_led_toggle(void) +{ + gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN); +} + +void board_init_uart(UART_Type *ptr) +{ + /* configure uart's pin before opening uart's clock */ + init_uart_pins(ptr); + board_init_uart_clock(ptr); +} + +void board_ungate_mchtmr_at_lp_mode(void) +{ + /* Keep cpu clock on wfi, so that mchtmr irq can still work after wfi */ + sysctl_set_cpu_lp_mode(HPM_SYSCTL, BOARD_RUNNING_CORE, cpu_lp_mode_ungate_cpu_clock); +} + +uint32_t board_init_spi_clock(SPI_Type *ptr) +{ + if (ptr == HPM_SPI1) { + clock_add_to_group(clock_spi1, 0); + return clock_get_frequency(clock_spi1); + } + return 0; +} + +void board_init_spi_pins(SPI_Type *ptr) +{ + init_spi_pins(ptr); +} + +void board_write_spi_cs(uint32_t pin, uint8_t state) +{ + gpio_write_pin(BOARD_SPI_CS_GPIO_CTRL, GPIO_GET_PORT_INDEX(pin), GPIO_GET_PIN_INDEX(pin), state); +} + +void board_init_spi_pins_with_gpio_as_cs(SPI_Type *ptr) +{ + init_spi_pins_with_gpio_as_cs(ptr); + gpio_set_pin_output_with_initial(BOARD_SPI_CS_GPIO_CTRL, GPIO_GET_PORT_INDEX(BOARD_SPI_CS_PIN), + GPIO_GET_PIN_INDEX(BOARD_SPI_CS_PIN), !BOARD_SPI_CS_ACTIVE_LEVEL); +} + +void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level) +{ + (void) usb_index; + (void) level; +} + +uint32_t board_init_adc16_clock(ADC16_Type *ptr, bool clk_src_ahb) +{ + uint32_t freq = 0; + + if (ptr == HPM_ADC0) { + if (clk_src_ahb) { + /* Configure the ADC clock from AHB (@200MHz by default)*/ + clock_set_adc_source(clock_adc0, clk_adc_src_ahb0); + } else { + /* Configure the ADC clock from pll0_clk0 divided by 2 (@200MHz by default) */ + clock_set_adc_source(clock_adc0, clk_adc_src_ana0); + clock_set_source_divider(clock_ana0, clk_src_pll0_clk2, 2U); + } + + freq = clock_get_frequency(clock_adc0); + } else if (ptr == HPM_ADC1) { + if (clk_src_ahb) { + /* Configure the ADC clock from AHB (@200MHz by default)*/ + clock_set_adc_source(clock_adc1, clk_adc_src_ahb0); + } else { + /* Configure the ADC clock from pll0_clk0 divided by 2 (@200MHz by default) */ + clock_set_adc_source(clock_adc1, clk_adc_src_ana1); + clock_set_source_divider(clock_ana1, clk_src_pll0_clk2, 2U); + } + + freq = clock_get_frequency(clock_adc1); + } + + return freq; +} + +void board_init_adc16_pins(void) +{ + init_adc_pins(); +} + +uint32_t board_init_dac_clock(DAC_Type *ptr, bool clk_src_ahb) +{ + uint32_t freq = 0; + + if (ptr == HPM_DAC0) { + if (clk_src_ahb == true) { + /* Configure the DAC clock to 180MHz */ + clock_set_dac_source(clock_dac0, clk_dac_src_ahb0); + } else { + /* Configure the DAC clock to 166MHz */ + clock_set_dac_source(clock_dac0, clk_dac_src_ana2); + clock_set_source_divider(clock_ana2, clk_src_pll0_clk1, 2); + } + + freq = clock_get_frequency(clock_dac0); + } else if (ptr == HPM_DAC1) { + if (clk_src_ahb == true) { + /* Configure the DAC clock to 180MHz */ + clock_set_dac_source(clock_dac1, clk_dac_src_ahb0); + } else { + /* Configure the DAC clock to 166MHz */ + clock_set_dac_source(clock_dac1, clk_dac_src_ana3); + clock_set_source_divider(clock_ana3, clk_src_pll0_clk1, 2); + } + + freq = clock_get_frequency(clock_dac1); + } + + return freq; +} + +void board_init_can(MCAN_Type *ptr) +{ + init_can_pins(ptr); +} + +uint32_t board_init_can_clock(MCAN_Type *ptr) +{ + uint32_t freq = 0; + if (ptr == HPM_MCAN0) { + clock_add_to_group(clock_can0, 0); + clock_set_source_divider(clock_can0, clk_src_pll1_clk0, 10); + freq = clock_get_frequency(clock_can0); + } + if (ptr == HPM_MCAN1) { + clock_add_to_group(clock_can1, 0); + clock_set_source_divider(clock_can1, clk_src_pll1_clk0, 10); + freq = clock_get_frequency(clock_can1); + } + if (ptr == HPM_MCAN2) { + clock_add_to_group(clock_can2, 0); + clock_set_source_divider(clock_can2, clk_src_pll1_clk0, 10); + freq = clock_get_frequency(clock_can2); + } + if (ptr == HPM_MCAN3) { + clock_add_to_group(clock_can3, 0); + clock_set_source_divider(clock_can3, clk_src_pll1_clk0, 10); + freq = clock_get_frequency(clock_can3); + } + return freq; +} + +uint32_t board_init_pwm_clock(PWM_Type *ptr) +{ + uint32_t freq = 0; + (void) ptr; + + clock_add_to_group(clock_mot0, 0); + freq = clock_get_frequency(clock_mot0); + + return freq; +} + +void board_init_rgb_pwm_pins(void) +{ + init_led_pins_as_pwm(); +} + +void board_disable_output_rgb_led(uint8_t color) +{ + (void) color; +} + +void board_enable_output_rgb_led(uint8_t color) +{ + (void) color; +} + +void board_init_dac_pins(DAC_Type *ptr) +{ + init_dac_pins(ptr); +} + +uint8_t board_get_led_pwm_off_level(void) +{ + return BOARD_LED_OFF_LEVEL; +} + +uint8_t board_get_led_gpio_off_level(void) +{ + return BOARD_LED_OFF_LEVEL; +} + +void board_init_pmp(void) +{ +} + +uint32_t board_init_uart_clock(UART_Type *ptr) +{ + uint32_t freq = 0U; + if (ptr == HPM_UART0) { + clock_set_source_divider(clock_uart0, clk_src_osc24m, 1); + clock_add_to_group(clock_uart0, 0); + freq = clock_get_frequency(clock_uart0); + } else if (ptr == HPM_UART1) { + clock_set_source_divider(clock_uart1, clk_src_osc24m, 1); + clock_add_to_group(clock_uart1, 0); + freq = clock_get_frequency(clock_uart1); + } else if (ptr == HPM_UART2) { + clock_set_source_divider(clock_uart2, clk_src_pll0_clk2, 8); + clock_add_to_group(clock_uart2, 0); + freq = clock_get_frequency(clock_uart2); + } else if (ptr == HPM_UART3) { + clock_set_source_divider(clock_uart3, clk_src_pll0_clk2, 8); + clock_add_to_group(clock_uart3, 0); + freq = clock_get_frequency(clock_uart3); + } else if (ptr == HPM_UART7) { + clock_set_source_divider(clock_uart7, clk_src_pll0_clk2, 6); /* 80MHz */ + clock_add_to_group(clock_uart7, 0); + freq = clock_get_frequency(clock_uart7); + } + return freq; +} + +void board_init_sei_pins(SEI_Type *ptr, uint8_t sei_ctrl_idx) +{ + init_sei_pins(ptr, sei_ctrl_idx); +} + +void board_i2c_bus_clear(I2C_Type *ptr) +{ + if (i2c_get_line_scl_status(ptr) == false) { + printf("CLK is low, please power cycle the board\n"); + while (1) { + } + } + if (i2c_get_line_sda_status(ptr) == false) { + printf("SDA is low, try to issue I2C bus clear\n"); + } else { + printf("I2C bus is ready\n"); + return; + } + i2s_gen_reset_signal(ptr, 9); + board_delay_ms(100); + printf("I2C bus is cleared\n"); +} + +void board_init_i2c(I2C_Type *ptr) +{ + i2c_config_t config; + hpm_stat_t stat; + uint32_t freq; + if (ptr == NULL) { + return; + } + init_i2c_pins(ptr); + board_i2c_bus_clear(ptr); + + clock_add_to_group(clock_i2c0, 0); + clock_add_to_group(clock_i2c1, 0); + clock_add_to_group(clock_i2c2, 0); + clock_add_to_group(clock_i2c3, 0); + /* Configure the I2C clock to 24MHz */ + clock_set_source_divider(BOARD_APP_I2C_CLK_NAME, clk_src_osc24m, 1U); + + config.i2c_mode = i2c_mode_normal; + config.is_10bit_addressing = false; + freq = clock_get_frequency(BOARD_APP_I2C_CLK_NAME); + stat = i2c_init_master(ptr, freq, &config); + if (stat != status_success) { + printf("failed to initialize i2c 0x%x\n", (uint32_t) ptr); + while (1) { + } + } + +} + +void board_init_adc_qeiv2_pins(void) +{ + init_adc_qeiv2_pins(); +} + +void board_lin_transceiver_control(bool enable) +{ + init_lin_transceiver_ctrl_pin(); + if (enable) { + gpio_set_pin_output_with_initial(BOARD_12V_EN_GPIO_CTRL, BOARD_12V_EN_GPIO_INDEX, BOARD_12V_EN_GPIO_PIN, 1); /* enable 12v output */ + gpio_set_pin_output_with_initial(BOARD_LIN_TRANSCEIVER_GPIO_CTRL, BOARD_LIN_TRANSCEIVER_GPIO_INDEX, BOARD_LIN_TRANSCEIVER_GPIO_PIN, 1); /* disable transceiver sleep */ + } else { + gpio_set_pin_output_with_initial(BOARD_12V_EN_GPIO_CTRL, BOARD_12V_EN_GPIO_INDEX, BOARD_12V_EN_GPIO_PIN, 0); /* disable 12v output */ + gpio_set_pin_output_with_initial(BOARD_LIN_TRANSCEIVER_GPIO_CTRL, BOARD_LIN_TRANSCEIVER_GPIO_INDEX, BOARD_LIN_TRANSCEIVER_GPIO_PIN, 0); /* enable transceiver sleep */ + } +} + +uint32_t board_init_gptmr_clock(GPTMR_Type *ptr) +{ + uint32_t freq = 0; + clock_name_t gptmr_clock =0; + uint32_t HPM_GPTMR = (uint32_t)ptr; + bool gptmr_valid = true; + + switch(HPM_GPTMR){ + case HPM_GPTMR0_BASE: + gptmr_clock = clock_gptmr0; + break; + case HPM_GPTMR1_BASE: + gptmr_clock = clock_gptmr1; + break; + case HPM_GPTMR2_BASE: + gptmr_clock = clock_gptmr2; + break; + case HPM_GPTMR3_BASE: + gptmr_clock = clock_gptmr3; + break; + default: + gptmr_valid = false; + } + if(gptmr_valid) + { + clock_add_to_group(gptmr_clock, 0); + clock_set_source_divider(gptmr_clock, clk_src_pll1_clk1, 4); + freq = clock_get_frequency(gptmr_clock); + } + return freq; +} diff --git a/bsp/hpmicro/hpm5300evk/board/board.h b/bsp/hpmicro/hpm5300evk/board/board.h new file mode 100644 index 00000000000..ab2718b88e4 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/board.h @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2023-2024 HPMicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef _HPM_BOARD_H +#define _HPM_BOARD_H +#include +#include +#include "hpm_common.h" +#include "hpm_clock_drv.h" +#include "hpm_soc.h" +#include "hpm_soc_feature.h" +#include "pinmux.h" +#if !defined(CONFIG_NDEBUG_CONSOLE) || !CONFIG_NDEBUG_CONSOLE +#include "hpm_debug_console.h" +#endif + +#define BOARD_NAME "hpm5300evk" +#define BOARD_UF2_SIGNATURE (0x0A4D5048UL) + +/* ACMP desction */ +#define BOARD_ACMP HPM_ACMP +#define BOARD_ACMP_CHANNEL ACMP_CHANNEL_CHN1 +#define BOARD_ACMP_IRQ IRQn_ACMP_1 +#define BOARD_ACMP_PLUS_INPUT ACMP_INPUT_DAC_OUT /* use internal DAC */ +#define BOARD_ACMP_MINUS_INPUT ACMP_INPUT_ANALOG_4 /* align with used pin */ + +/* dma section */ +#define BOARD_APP_HDMA HPM_HDMA +#define BOARD_APP_HDMA_IRQ IRQn_HDMA +#define BOARD_APP_DMAMUX HPM_DMAMUX +#define TEST_DMA_CONTROLLER HPM_HDMA +#define TEST_DMA_IRQ IRQn_HDMA + +#ifndef BOARD_RUNNING_CORE +#define BOARD_RUNNING_CORE HPM_CORE0 +#endif + +/* uart section */ +#ifndef BOARD_APP_UART_BASE +#define BOARD_APP_UART_BASE HPM_UART2 +#define BOARD_APP_UART_IRQ IRQn_UART2 +#define BOARD_APP_UART_BAUDRATE (115200UL) +#define BOARD_APP_UART_CLK_NAME clock_uart2 +#define BOARD_APP_UART_RX_DMA_REQ HPM_DMA_SRC_UART2_RX +#define BOARD_APP_UART_TX_DMA_REQ HPM_DMA_SRC_UART2_TX +#endif + +/* uart lin sample section */ +#define BOARD_UART_LIN HPM_UART3 +#define BOARD_UART_LIN_IRQ IRQn_UART3 +#define BOARD_UART_LIN_CLK_NAME clock_uart3 +#define BOARD_UART_LIN_TX_PORT GPIO_DI_GPIOA +#define BOARD_UART_LIN_TX_PIN (15U) /* PA15 should align with used pin in pinmux configuration */ + + +#if !defined(CONFIG_NDEBUG_CONSOLE) || !CONFIG_NDEBUG_CONSOLE +#ifndef BOARD_CONSOLE_TYPE +#define BOARD_CONSOLE_TYPE CONSOLE_TYPE_UART +#endif + +#if BOARD_CONSOLE_TYPE == CONSOLE_TYPE_UART +#ifndef BOARD_CONSOLE_UART_BASE +#define BOARD_CONSOLE_UART_BASE HPM_UART0 +#define BOARD_CONSOLE_UART_CLK_NAME clock_uart0 +#define BOARD_CONSOLE_UART_IRQ IRQn_UART0 +#define BOARD_CONSOLE_UART_TX_DMA_REQ HPM_DMA_SRC_UART0_TX +#define BOARD_CONSOLE_UART_RX_DMA_REQ HPM_DMA_SRC_UART0_RX +#endif +#define BOARD_CONSOLE_UART_BAUDRATE (115200UL) +#endif +#endif + +/* usb cdc acm uart section */ +#define BOARD_USB_CDC_ACM_UART BOARD_APP_UART_BASE +#define BOARD_USB_CDC_ACM_UART_CLK_NAME BOARD_APP_UART_CLK_NAME +#define BOARD_USB_CDC_ACM_UART_TX_DMA_SRC BOARD_APP_UART_TX_DMA_REQ +#define BOARD_USB_CDC_ACM_UART_RX_DMA_SRC BOARD_APP_UART_RX_DMA_REQ + +/* rtthread-nano finsh section */ +#define BOARD_RT_CONSOLE_BASE BOARD_CONSOLE_UART_BASE + +/* modbus sample section */ +#define BOARD_MODBUS_UART_BASE BOARD_APP_UART_BASE +#define BOARD_MODBUS_UART_CLK_NAME BOARD_APP_UART_CLK_NAME +#define BOARD_MODBUS_UART_RX_DMA_REQ BOARD_APP_UART_RX_DMA_REQ +#define BOARD_MODBUS_UART_TX_DMA_REQ BOARD_APP_UART_TX_DMA_REQ + +/* nor flash section */ +#define BOARD_FLASH_BASE_ADDRESS (0x80000000UL) /* Check */ +#define BOARD_FLASH_SIZE (SIZE_1MB) + +/* i2c section */ +#define BOARD_APP_I2C_BASE HPM_I2C0 +#define BOARD_APP_I2C_IRQ IRQn_I2C0 +#define BOARD_APP_I2C_CLK_NAME clock_i2c0 +#define BOARD_APP_I2C_DMA HPM_HDMA +#define BOARD_APP_I2C_DMAMUX HPM_DMAMUX +#define BOARD_APP_I2C_DMA_SRC HPM_DMA_SRC_I2C0 + +/* gptmr section */ +#define BOARD_GPTMR HPM_GPTMR0 +#define BOARD_GPTMR_IRQ IRQn_GPTMR0 +#define BOARD_GPTMR_CHANNEL 0 +#define BOARD_GPTMR_DMA_SRC HPM_DMA_SRC_GPTMR0_0 +#define BOARD_GPTMR_CLK_NAME clock_gptmr0 +#define BOARD_GPTMR_PWM HPM_GPTMR0 +#define BOARD_GPTMR_PWM_CHANNEL 0 +#define BOARD_GPTMR_PWM_DMA_SRC HPM_DMA_SRC_GPTMR0_0 +#define BOARD_GPTMR_PWM_CLK_NAME clock_gptmr0 +#define BOARD_GPTMR_PWM_IRQ IRQn_GPTMR0 +#define BOARD_GPTMR_PWM_SYNC HPM_GPTMR0 +#define BOARD_GPTMR_PWM_SYNC_CHANNEL 1 +#define BOARD_GPTMR_PWM_SYNC_CLK_NAME clock_gptmr0 + +/* User LED */ +#define BOARD_LED_GPIO_CTRL HPM_GPIO0 +#define BOARD_LED_GPIO_INDEX GPIO_DI_GPIOA +#define BOARD_LED_GPIO_PIN 23 + +#define BOARD_LED_OFF_LEVEL 1 +#define BOARD_LED_ON_LEVEL 0 + +/* 12V Power Enable for lin transceiver */ +#define BOARD_SUPPORT_LIN_TRANSCEIVER_CONTROL 1 +#define BOARD_12V_EN_GPIO_CTRL HPM_GPIO0 +#define BOARD_12V_EN_GPIO_INDEX GPIO_DI_GPIOA +#define BOARD_12V_EN_GPIO_PIN 24 +#define BOARD_LIN_TRANSCEIVER_GPIO_CTRL HPM_GPIO0 +#define BOARD_LIN_TRANSCEIVER_GPIO_INDEX GPIO_DI_GPIOA +#define BOARD_LIN_TRANSCEIVER_GPIO_PIN 13 + + +/* gpiom section */ +#define BOARD_APP_GPIOM_BASE HPM_GPIOM +#define BOARD_APP_GPIOM_USING_CTRL HPM_FGPIO +#define BOARD_APP_GPIOM_USING_CTRL_NAME gpiom_core0_fast + +/* User button */ +#define BOARD_APP_GPIO_CTRL HPM_GPIO0 +#define BOARD_APP_GPIO_INDEX GPIO_DI_GPIOA +#define BOARD_APP_GPIO_PIN 9 +#define BOARD_APP_GPIO_IRQ IRQn_GPIO0_A + +/* spi section */ +#define BOARD_APP_SPI_BASE HPM_SPI1 +#define BOARD_APP_SPI_CLK_NAME clock_spi1 +#define BOARD_APP_SPI_IRQ IRQn_SPI1 +#define BOARD_APP_SPI_SCLK_FREQ (20000000UL) +#define BOARD_APP_SPI_ADDR_LEN_IN_BYTES (1U) +#define BOARD_APP_SPI_DATA_LEN_IN_BITS (8U) +#define BOARD_APP_SPI_RX_DMA HPM_DMA_SRC_SPI1_RX +#define BOARD_APP_SPI_TX_DMA HPM_DMA_SRC_SPI1_TX +#define BOARD_SPI_CS_GPIO_CTRL HPM_GPIO0 +#define BOARD_SPI_CS_PIN IOC_PAD_PA26 +#define BOARD_SPI_CS_ACTIVE_LEVEL (0U) + +/* ADC section */ +#define BOARD_APP_ADC16_NAME "ADC0" +#define BOARD_APP_ADC16_BASE HPM_ADC0 +#define BOARD_APP_ADC16_IRQn IRQn_ADC0 +#define BOARD_APP_ADC16_CH_1 (13U) +#define BOARD_APP_ADC16_CLK_NAME (clock_adc0) + +#define BOARD_APP_ADC16_HW_TRIG_SRC HPM_PWM0 +#define BOARD_APP_ADC16_HW_TRGM HPM_TRGM0 +#define BOARD_APP_ADC16_HW_TRGM_IN HPM_TRGM0_INPUT_SRC_PWM0_CH8REF +#define BOARD_APP_ADC16_HW_TRGM_OUT_SEQ TRGM_TRGOCFG_ADC0_STRGI +#define BOARD_APP_ADC16_HW_TRGM_OUT_PMT TRGM_TRGOCFG_ADCX_PTRGI0A + +#define BOARD_APP_ADC16_PMT_TRIG_CH ADC16_CONFIG_TRG0A + +/* DAC section */ +#define BOARD_DAC_BASE HPM_DAC0 +#define BOARD_DAC_IRQn IRQn_DAC0 +#define BOARD_APP_DAC_CLOCK_NAME clock_dac0 + +/* Flash section */ +#define BOARD_APP_XPI_NOR_XPI_BASE (HPM_XPI0) +#define BOARD_APP_XPI_NOR_CFG_OPT_HDR (0xfcf90002U) +#define BOARD_APP_XPI_NOR_CFG_OPT_OPT0 (0x00000006U) +#define BOARD_APP_XPI_NOR_CFG_OPT_OPT1 (0x00001000U) + +/* SDXC section */ +#define BOARD_APP_SDCARD_SDXC_BASE (HPM_SDXC0) +#define BOARD_APP_SDCARD_SUPPORT_1V8 (0) + +/* MCAN section */ +#define BOARD_APP_CAN_BASE HPM_MCAN3 +#define BOARD_APP_CAN_IRQn IRQn_MCAN3 + +/* CALLBACK TIMER section */ +#define BOARD_CALLBACK_TIMER (HPM_GPTMR3) +#define BOARD_CALLBACK_TIMER_CH 1 +#define BOARD_CALLBACK_TIMER_IRQ IRQn_GPTMR3 +#define BOARD_CALLBACK_TIMER_CLK_NAME (clock_gptmr3) + +/* APP PWM */ +#define BOARD_APP_PWM HPM_PWM0 +#define BOARD_APP_PWM_CLOCK_NAME clock_mot0 +#define BOARD_APP_PWM_OUT1 2 +#define BOARD_APP_PWM_OUT2 3 +#define BOARD_APP_TRGM HPM_TRGM0 +#define BOARD_APP_PWM_IRQ IRQn_PWM0 +#define BOARD_APP_TRGM_PWM_OUTPUT TRGM_TRGOCFG_PWM0_SYNCI + +/*BLDC pwm*/ +/*PWM define*/ +#define BOARD_BLDCPWM HPM_PWM0 +#define BOARD_BLDC_UH_PWM_OUTPIN (6U) +#define BOARD_BLDC_UL_PWM_OUTPIN (7U) +#define BOARD_BLDC_VH_PWM_OUTPIN (4U) +#define BOARD_BLDC_VL_PWM_OUTPIN (5U) +#define BOARD_BLDC_WH_PWM_OUTPIN (2U) +#define BOARD_BLDC_WL_PWM_OUTPIN (3U) +#define BOARD_BLDCPWM_TRGM HPM_TRGM0 +#define BOARD_BLDCAPP_PWM_IRQ IRQn_PWM0 +#define BOARD_BLDCPWM_CMP_INDEX_0 (0U) +#define BOARD_BLDCPWM_CMP_INDEX_1 (1U) +#define BOARD_BLDCPWM_CMP_INDEX_2 (2U) +#define BOARD_BLDCPWM_CMP_INDEX_3 (3U) +#define BOARD_BLDCPWM_CMP_INDEX_4 (4U) +#define BOARD_BLDCPWM_CMP_INDEX_5 (5U) +#define BOARD_BLDCPWM_CMP_INDEX_6 (6U) +#define BOARD_BLDCPWM_CMP_INDEX_7 (7U) +#define BOARD_BLDCPWM_CMP_TRIG_CMP (20U) + +/*HALL define*/ + +/*RDC*/ +#define BOARD_RDC_TRGM HPM_TRGM0 +#define BOARD_RDC_TRGIGMUX_IN_NUM HPM_TRGM0_INPUT_SRC_RDC_TRGO_0 +#define BOARD_RDC_TRG_NUM TRGM_TRGOCFG_MOT_GPIO0 +#define BOARD_RDC_TRG_ADC_NUM TRGM_TRGOCFG_ADCX_PTRGI0A +#define BOARD_RDC_ADC_I_BASE HPM_ADC0 +#define BOARD_RDC_ADC_Q_BASE HPM_ADC1 +#define BOARD_RDC_ADC_I_CHN (5U) +#define BOARD_RDC_ADC_Q_CHN (6U) +#define BOARD_RDC_ADC_IRQn IRQn_ADC0 +#define BOARD_RDC_ADC_TRIG_FLAG adc16_event_trig_complete +#define BOARD_RDC_ADC_TRG ADC16_CONFIG_TRG0A + +/*QEI*/ +#define BOARD_BLDC_QEI_TRGM HPM_TRGM0 +#define BOARD_BLDC_QEIV2_BASE HPM_QEI1 +#define BOARD_BLDC_QEIV2_IRQ IRQn_QEI1 +#define BOARD_BLDC_QEI_MOTOR_PHASE_COUNT_PER_REV (16U) +#define BOARD_BLDC_QEI_CLOCK_SOURCE clock_mot0 +#define BOARD_BLDC_QEI_FOC_PHASE_COUNT_PER_REV (4000U) +#define BOARD_BLDC_QEI_ADC_MATRIX_ADC0 trgm_adc_matrix_output_to_qei1_adc0 +#define BOARD_BLDC_QEI_ADC_MATRIX_ADC1 trgm_adc_matrix_output_to_qei1_adc1 + +/*Timer define*/ +#define BOARD_BLDC_TMR_1MS HPM_GPTMR2 +#define BOARD_BLDC_TMR_CH 0 +#define BOARD_BLDC_TMR_CMP 0 +#define BOARD_BLDC_TMR_IRQ IRQn_GPTMR2 +#define BOARD_BLDC_TMR_RELOAD (100000U) + +/*adc*/ +#define BOARD_BLDC_ADC_MODULE (ADCX_MODULE_ADC16) +#define BOARD_BLDC_ADC_U_BASE HPM_ADC0 +#define BOARD_BLDC_ADC_V_BASE HPM_ADC1 +#define BOARD_BLDC_ADC_W_BASE HPM_ADC1 +#define BOARD_BLDC_ADC_TRIG_FLAG adc16_event_trig_complete + +#define BOARD_BLDC_ADC_CH_U (5U) +#define BOARD_BLDC_ADC_CH_V (6U) +#define BOARD_BLDC_ADC_CH_W (4U) +#define BOARD_BLDC_ADC_IRQn IRQn_ADC0 +#define BOARD_BLDC_ADC_PMT_DMA_SIZE_IN_4BYTES (ADC_SOC_PMT_MAX_DMA_BUFF_LEN_IN_4BYTES) +#define BOARD_BLDC_ADC_TRG ADC16_CONFIG_TRG0A +#define BOARD_BLDC_ADC_PREEMPT_TRIG_LEN (1U) +#define BOARD_BLDC_PWM_TRIG_CMP_INDEX (8U) +#define BOARD_BLDC_TRIGMUX_IN_NUM HPM_TRGM0_INPUT_SRC_PWM0_CH8REF +#define BOARD_BLDC_TRG_NUM TRGM_TRGOCFG_ADCX_PTRGI0A + +#define BOARD_PLB_COUNTER HPM_PLB +#define BOARD_PLB_PWM_BASE HPM_PWM0 +#define BOARD_PLB_PWM_CLOCK_NAME clock_mot0 +#define BOARD_PLB_TRGM HPM_TRGM0 +#define BOARD_PLB_PWM_TRG (HPM_TRGM0_INPUT_SRC_PWM0_CH8REF) +#define BOARD_PLB_IN_PWM_TRG_NUM (TRGM_TRGOCFG_PLB_IN_00) +#define BOARD_PLB_IN_PWM_PULSE_TRG_NUM (TRGM_TRGOCFG_PLB_IN_02) +#define BOARD_PLB_OUT_TRG (HPM_TRGM0_INPUT_SRC_PLB_OUT00) +#define BOARD_PLB_IO_TRG_NUM (TRGM_TRGOCFG_MOT_GPIO2) +#define BOARD_PLB_IO_TRG_SHIFT (2) +#define BOARD_PLB_PWM_CMP (8U) +#define BOARD_PLB_PWM_CHN (8U) +#define BOARD_PLB_CHN plb_chn0 + +/* QEO */ +#define BOARD_QEO HPM_QEO0 +#define BOARD_QEO_TRGM_POS trgm_pos_matrix_output_to_qeo0 + +/* moto */ +#define BOARD_MOTOR_CLK_NAME clock_mot0 + +/* SEI */ +#define BOARD_SEI HPM_SEI +#define BOARD_SEI_CTRL SEI_CTRL_1 +#define BOARD_SEI_IRQn IRQn_SEI1 + +/* USB */ +#define BOARD_USB HPM_USB0 + +/* OPAMP */ +#define BOARD_APP_OPAMP HPM_OPAMP0 + +#ifndef BOARD_SHOW_CLOCK +#define BOARD_SHOW_CLOCK 1 +#endif +#ifndef BOARD_SHOW_BANNER +#define BOARD_SHOW_BANNER 1 +#endif + +/* FreeRTOS Definitions */ +#define BOARD_FREERTOS_TIMER HPM_GPTMR2 +#define BOARD_FREERTOS_TIMER_CHANNEL 1 +#define BOARD_FREERTOS_TIMER_IRQ IRQn_GPTMR2 +#define BOARD_FREERTOS_TIMER_CLK_NAME clock_gptmr2 + +/* Threadx Definitions */ +#define BOARD_THREADX_TIMER HPM_GPTMR2 +#define BOARD_THREADX_TIMER_CHANNEL 1 +#define BOARD_THREADX_TIMER_IRQ IRQn_GPTMR2 +#define BOARD_THREADX_TIMER_CLK_NAME clock_gptmr2 +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +typedef void (*board_timer_cb)(void); + +void board_init(void); +void board_init_console(void); +void board_init_gpio_pins(void); +void board_init_led_pins(void); +void board_init_usb_pins(void); +void board_led_write(uint8_t state); +void board_led_toggle(void); +void board_init_uart(UART_Type *ptr); +uint32_t board_init_spi_clock(SPI_Type *ptr); +void board_init_spi_pins(SPI_Type *ptr); +void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level); +uint32_t board_init_adc16_clock(ADC16_Type *ptr, bool clk_src_ahb); +void board_init_adc16_pins(void); +uint32_t board_init_dac_clock(DAC_Type *ptr, bool clk_src_ahb); +void board_init_can(MCAN_Type *ptr); +uint32_t board_init_can_clock(MCAN_Type *ptr); +void board_init_rgb_pwm_pins(void); +void board_disable_output_rgb_led(uint8_t color); +void board_enable_output_rgb_led(uint8_t color); +void board_init_dac_pins(DAC_Type *ptr); +void board_write_spi_cs(uint32_t pin, uint8_t state); +void board_init_spi_pins_with_gpio_as_cs(SPI_Type *ptr); + +void board_init_usb_dp_dm_pins(void); +void board_init_clock(void); +void board_delay_us(uint32_t us); +void board_delay_ms(uint32_t ms); +void board_timer_create(uint32_t ms, board_timer_cb cb); +void board_ungate_mchtmr_at_lp_mode(void); + +uint8_t board_get_led_gpio_off_level(void); +uint8_t board_get_led_pwm_off_level(void); + +void board_init_pmp(void); + +uint32_t board_init_uart_clock(UART_Type *ptr); +void board_init_sei_pins(SEI_Type *ptr, uint8_t sei_ctrl_idx); + +void board_init_i2c(I2C_Type *ptr); + +void board_init_adc_qeiv2_pins(void); + +void board_lin_transceiver_control(bool enable); +uint32_t board_init_gptmr_clock(GPTMR_Type *ptr); +uint32_t board_init_pwm_clock(PWM_Type *ptr); +#if defined(__cplusplus) +} +#endif /* __cplusplus */ +#endif /* _HPM_BOARD_H */ diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/boards/hpm5300evk.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/boards/hpm5300evk.cfg new file mode 100644 index 00000000000..7d495f5b380 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/boards/hpm5300evk.cfg @@ -0,0 +1,79 @@ +# Copyright (c) 2023 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +# openocd flash driver argument: +# - option0: +# [31:28] Flash probe type +# 0 - SFDP SDR / 1 - SFDP DDR +# 2 - 1-4-4 Read (0xEB, 24-bit address) / 3 - 1-2-2 Read(0xBB, 24-bit address) +# 4 - HyperFLASH 1.8V / 5 - HyperFLASH 3V +# 6 - OctaBus DDR (SPI -> OPI DDR) +# 8 - Xccela DDR (SPI -> OPI DDR) +# 10 - EcoXiP DDR (SPI -> OPI DDR) +# [27:24] Command Pads after Power-on Reset +# 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI +# [23:20] Command Pads after Configuring FLASH +# 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI +# [19:16] Quad Enable Sequence (for the device support SFDP 1.0 only) +# 0 - Not needed +# 1 - QE bit is at bit 6 in Status Register 1 +# 2 - QE bit is at bit1 in Status Register 2 +# 3 - QE bit is at bit7 in Status Register 2 +# 4 - QE bit is at bit1 in Status Register 2 and should be programmed by 0x31 +# [15:8] Dummy cycles +# 0 - Auto-probed / detected / default value +# Others - User specified value, for DDR read, the dummy cycles should be 2 * cycles on FLASH datasheet +# [7:4] Misc. +# 0 - Not used +# 1 - SPI mode +# 2 - Internal loopback +# 3 - External DQS +# [3:0] Frequency option +# 1 - 30MHz / 2 - 50MHz / 3 - 66MHz / 4 - 80MHz / 5 - 100MHz / 6 - 120MHz / 7 - 133MHz / 8 - 166MHz +# - option1: +# [31:20] Reserved +# [19:16] IO voltage +# 0 - 3V / 1 - 1.8V +# [15:12] Pin group +# 0 - 1st group / 1 - 2nd group +# [11:8] Connection selection +# 0 - CA_CS0 / 1 - CB_CS0 / 2 - CA_CS0 + CB_CS0 (Two FLASH connected to CA and CB respectively) +# [7:0] Drive Strength +# 0 - Default value + +# xpi0 configs +# - flash driver: hpm_xpi +# - flash ctrl index: 0xF3000000 +# - base address: 0x80000000 +# - flash size: 0x2000000 +# - flash option0: 0x7 +flash bank xpi0 hpm_xpi 0x80000000 0x2000000 1 1 $_TARGET0 0xF3000000 0x6 0x1000 + +proc init_clock {} { + $::_TARGET0 riscv dmi_write 0x39 0xF4002000 + $::_TARGET0 riscv dmi_write 0x3C 0x1 + + $::_TARGET0 riscv dmi_write 0x39 0xF4002000 + $::_TARGET0 riscv dmi_write 0x3C 0x2 + + $::_TARGET0 riscv dmi_write 0x39 0xF4000800 + $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF + + $::_TARGET0 riscv dmi_write 0x39 0xF4000810 + $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF + + $::_TARGET0 riscv dmi_write 0x39 0xF4000820 + $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF + + $::_TARGET0 riscv dmi_write 0x39 0xF4000830 + $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF + echo "clocks has been enabled!" +} + +$_TARGET0 configure -event reset-init { + init_clock +} + +$_TARGET0 configure -event gdb-attach { + reset halt +} diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/cmsis_dap.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/cmsis_dap.cfg new file mode 100644 index 00000000000..0aa1eed3dad --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/cmsis_dap.cfg @@ -0,0 +1,11 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +bindto 0.0.0.0 +adapter speed 8000 +adapter srst delay 500 + +source [find interface/cmsis-dap.cfg] + +transport select jtag +reset_config srst_only diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft2232.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft2232.cfg new file mode 100644 index 00000000000..782edbcf509 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft2232.cfg @@ -0,0 +1,15 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +bindto 0.0.0.0 +adapter speed 10000 +reset_config trst_and_srst +adapter srst delay 50 + +adapter driver ftdi +ftdi_vid_pid 0x0403 0x6010 + +ftdi_layout_init 0x0208 0x020b +ftdi_layout_signal nTRST -data 0x0200 -noe 0x0400 +ftdi_layout_signal nSRST -data 0x0100 -noe 0x0800 + diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft232.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft232.cfg new file mode 100644 index 00000000000..e2c01a2d788 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/ft232.cfg @@ -0,0 +1,14 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +bindto 0.0.0.0 +adapter speed 10000 +reset_config trst_and_srst +adapter srst delay 50 + +adapter driver ftdi +ftdi_vid_pid 0x0403 0x6014 + +ftdi_layout_init 0x0018 0x001b +ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400 +ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800 diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/jlink.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/jlink.cfg new file mode 100644 index 00000000000..5d565c0ecc3 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/jlink.cfg @@ -0,0 +1,11 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +bindto 0.0.0.0 +adapter speed 10000 +adapter srst delay 500 + +source [find interface/jlink.cfg] + +transport select jtag +reset_config srst_only diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/nds_aice_micro.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/nds_aice_micro.cfg new file mode 100644 index 00000000000..a9421a83877 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/probes/nds_aice_micro.cfg @@ -0,0 +1,14 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +bindto 0.0.0.0 +adapter speed 10000 +adapter srst delay 500 +reset_config srst_only + +adapter driver ftdi +ftdi_vid_pid 0x0403 0x6010 + +ftdi_layout_init 0x0008 0x010b +ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400 +ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800 diff --git a/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/soc/hpm5300.cfg b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/soc/hpm5300.cfg new file mode 100644 index 00000000000..c57a36d0174 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/debug_scripts/openocd/soc/hpm5300.cfg @@ -0,0 +1,13 @@ +# Copyright (c) 2021 HPMicro +# SPDX-License-Identifier: BSD-3-Clause + +set _CHIP hpm5301 +set _CPUTAPID 0x1000563D +jtag newtap $_CHIP cpu -irlen 5 -expected-id $_CPUTAPID + +set _TARGET0 $_CHIP.cpu0 +target create $_TARGET0 riscv -chain-position $_CHIP.cpu -coreid 0 + +$_TARGET0 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-area-backup 0 + +targets $_TARGET0 diff --git a/bsp/hpmicro/hpm5300evk/board/fal_cfg.h b/bsp/hpmicro/hpm5300evk/board/fal_cfg.h new file mode 100644 index 00000000000..40d0330d450 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/fal_cfg.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 hpmicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef _FAL_CFG_H_ +#define _FAL_CFG_H_ + +#include +#include + +#ifdef RT_USING_FAL +#define NOR_FLASH_DEV_NAME "norflash0" +#define NOR_FLASH_MEM_BASE 0x80000000UL +#define NOR_FLASH_SIZE_IN_BYTES 0x1000000UL + +/* ===================== Flash device Configuration ========================= */ +extern const struct fal_flash_dev stm32f2_onchip_flash; +extern struct fal_flash_dev nor_flash0; + +/* flash device table */ +#define FAL_FLASH_DEV_TABLE \ +{ \ + &nor_flash0, \ +} +/* ====================== Partition Configuration ========================== */ +#ifdef FAL_PART_HAS_TABLE_CFG +/* partition table */ +#define FAL_PART_TABLE \ +{ \ + {FAL_PART_MAGIC_WORD, "app", NOR_FLASH_DEV_NAME, 0, 256*1024, 0}, \ + {FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 256*1024, 256*1024, 0}, \ + {FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 512*1024, 256*1024, 0}, \ + {FAL_PART_MAGIC_WORD, "flashdb", NOR_FLASH_DEV_NAME, 768*1024, 256*1024, 0}, \ +} +#endif /* FAL_PART_HAS_TABLE_CFG */ +#endif /* RT_USING_FAL */ + +#endif /* _FAL_CFG_H_ */ diff --git a/bsp/hpmicro/hpm5300evk/board/fal_flash_port.c b/bsp/hpmicro/hpm5300evk/board/fal_flash_port.c new file mode 100644 index 00000000000..1ed9fdffd69 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/fal_flash_port.c @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2022-2023 HPMicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Change Logs: + * Date Author Notes + * 2022-03-09 hpmicro First implementation + * 2022-08-01 hpmicro Fixed random crashing during kvdb_init + * 2022-08-03 hpmicro Improved erase speed + * 2023-01-31 hpmicro Fix random crashing issue if the global interrupt is always enabled + * + */ +#include +#include +#ifdef RT_USING_FAL +#include "fal.h" +#include "hpm_romapi.h" +#include "board.h" +#include "hpm_l1c_drv.h" + + +#define FAL_ENTER_CRITICAL() do {\ + disable_global_irq(CSR_MSTATUS_MIE_MASK);\ + }while(0) + +#define FAL_EXIT_CRITICAL() do {\ + enable_global_irq(CSR_MSTATUS_MIE_MASK);\ + }while(0) + +#define FAL_RAMFUNC __attribute__((section(".isr_vector"))) + + +/*************************************************************************************************** + * FAL Porting Guide + * + * 1. Most FLASH devices do not support RWW (Read-while-Write), the codes to access the FLASH + * must be placed at RAM or ROM code + * 2. During FLASH erase/program, it is recommended to disable the interrupt, or place the + * interrupt related codes to RAM + * + ***************************************************************************************************/ + +static int init(void); +static int read(long offset, uint8_t *buf, size_t size); +static int write(long offset, const uint8_t *buf, size_t size); +static int erase(long offset, size_t size); + +static xpi_nor_config_t s_flashcfg; + +/** + * @brief FAL Flash device context + */ +struct fal_flash_dev nor_flash0 = + { + .name = NOR_FLASH_DEV_NAME, + /* If porting this code to the device with FLASH connected to XPI1, the address must be changed to 0x90000000 */ + .addr = NOR_FLASH_MEM_BASE, + .len = 8 * 1024 * 1024, + .blk_size = 4096, + .ops = { .init = init, .read = read, .write = write, .erase = erase }, + .write_gran = 1 + }; + +/** + * @brief FAL initialization + * This function probes the FLASH using the ROM API + */ +FAL_RAMFUNC static int init(void) +{ + int ret = RT_EOK; + xpi_nor_config_option_t cfg_option; + cfg_option.header.U = BOARD_APP_XPI_NOR_CFG_OPT_HDR; + cfg_option.option0.U = BOARD_APP_XPI_NOR_CFG_OPT_OPT0; + cfg_option.option1.U = BOARD_APP_XPI_NOR_CFG_OPT_OPT1; + + FAL_ENTER_CRITICAL(); + hpm_stat_t status = rom_xpi_nor_auto_config(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, &cfg_option); + FAL_EXIT_CRITICAL(); + if (status != status_success) + { + ret = -RT_ERROR; + } + else + { + s_flashcfg.device_info.clk_freq_for_non_read_cmd = 0U; + /* update the flash chip information */ + uint32_t sector_size; + rom_xpi_nor_get_property(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, xpi_nor_property_sector_size, §or_size); + uint32_t flash_size; + rom_xpi_nor_get_property(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, xpi_nor_property_total_size, &flash_size); + nor_flash0.blk_size = sector_size; + nor_flash0.len = flash_size; + } + + return ret; +} + +/** + * @brief FAL read function + * Read data from FLASH + * @param offset FLASH offset + * @param buf Buffer to hold data read by this API + * @param size Size of data to be read + * @return actual read bytes + */ +FAL_RAMFUNC static int read(long offset, uint8_t *buf, size_t size) +{ + uint32_t flash_addr = nor_flash0.addr + offset; + uint32_t aligned_start = HPM_L1C_CACHELINE_ALIGN_DOWN(flash_addr); + uint32_t aligned_end = HPM_L1C_CACHELINE_ALIGN_UP(flash_addr + size); + uint32_t aligned_size = aligned_end - aligned_start; + rt_base_t level = rt_hw_interrupt_disable(); + l1c_dc_invalidate(aligned_start, aligned_size); + rt_hw_interrupt_enable(level); + + (void) rt_memcpy(buf, (void*) flash_addr, size); + + return size; +} + +/** + * @brief Write unaligned data to the page + * @param offset FLASH offset + * @param buf Data buffer + * @param size Size of data to be written + * @return actual size of written data or error code + */ +FAL_RAMFUNC static int write_unaligned_page_data(long offset, const uint32_t *buf, size_t size) +{ + hpm_stat_t status; + + FAL_ENTER_CRITICAL(); + status = rom_xpi_nor_program(BOARD_APP_XPI_NOR_XPI_BASE, xpi_xfer_channel_auto, &s_flashcfg, buf, offset, size); + FAL_EXIT_CRITICAL(); + + if (status != status_success) + { + return -RT_ERROR; + rt_kprintf("write failed, status=%d\n", status); + } + + return size; +} + +/** + * @brief FAL write function + * Write data to specified FLASH address + * @param offset FLASH offset + * @param buf Data buffer + * @param size Size of data to be written + * @return actual size of written data or error code + */ +FAL_RAMFUNC static int write(long offset, const uint8_t *buf, size_t size) +{ + uint32_t *src = NULL; + uint32_t buf_32[64]; + uint32_t write_size; + size_t remaining_size = size; + int ret = (int)size; + + uint32_t page_size; + rom_xpi_nor_get_property(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, xpi_nor_property_page_size, &page_size); + uint32_t offset_in_page = offset % page_size; + if (offset_in_page != 0) + { + uint32_t write_size_in_page = page_size - offset_in_page; + uint32_t write_page_size = MIN(write_size_in_page, size); + (void) rt_memcpy(buf_32, buf, write_page_size); + write_size = write_unaligned_page_data(offset, buf_32, write_page_size); + if (write_size < 0) + { + ret = -RT_ERROR; + goto write_quit; + } + + remaining_size -= write_page_size; + offset += write_page_size; + buf += write_page_size; + } + + while (remaining_size > 0) + { + write_size = MIN(remaining_size, sizeof(buf_32)); + rt_memcpy(buf_32, buf, write_size); + src = &buf_32[0]; + + FAL_ENTER_CRITICAL(); + hpm_stat_t status = rom_xpi_nor_program(BOARD_APP_XPI_NOR_XPI_BASE, xpi_xfer_channel_auto, &s_flashcfg, src, + offset, write_size); + FAL_EXIT_CRITICAL(); + + if (status != status_success) + { + ret = -RT_ERROR; + rt_kprintf("write failed, status=%d\n", status); + break; + } + + remaining_size -= write_size; + buf += write_size; + offset += write_size; + } + +write_quit: + return ret; +} + +/** + * @brief FAL erase function + * Erase specified FLASH region + * @param offset the start FLASH address to be erased + * @param size size of the region to be erased + * @ret RT_EOK Erase operation is successful + * @retval -RT_ERROR Erase operation failed + */ +FAL_RAMFUNC static int erase(long offset, size_t size) +{ + uint32_t aligned_size = (size + nor_flash0.blk_size - 1U) & ~(nor_flash0.blk_size - 1U); + hpm_stat_t status; + int ret = (int)size; + + uint32_t block_size; + uint32_t sector_size; + (void) rom_xpi_nor_get_property(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, xpi_nor_property_sector_size, §or_size); + (void) rom_xpi_nor_get_property(BOARD_APP_XPI_NOR_XPI_BASE, &s_flashcfg, xpi_nor_property_block_size, &block_size); + uint32_t erase_unit; + while (aligned_size > 0) + { + FAL_ENTER_CRITICAL(); + if ((offset % block_size == 0) && (aligned_size >= block_size)) + { + erase_unit = block_size; + status = rom_xpi_nor_erase_block(BOARD_APP_XPI_NOR_XPI_BASE, xpi_xfer_channel_auto, &s_flashcfg, offset); + } + else + { + erase_unit = sector_size; + status = rom_xpi_nor_erase_sector(BOARD_APP_XPI_NOR_XPI_BASE, xpi_xfer_channel_auto, &s_flashcfg, offset); + } + FAL_EXIT_CRITICAL(); + + if (status != status_success) + { + ret = -RT_ERROR; + break; + } + offset += erase_unit; + aligned_size -= erase_unit; + } + + return ret; +} +#endif /* RT_USING_FAL */ diff --git a/bsp/hpmicro/hpm5300evk/board/linker_scripts/flash_rtt.ld b/bsp/hpmicro/hpm5300evk/board/linker_scripts/flash_rtt.ld new file mode 100644 index 00000000000..7f3af8a529c --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/linker_scripts/flash_rtt.ld @@ -0,0 +1,288 @@ +/* + * Copyright 2021-2023 HPMicro + * SPDX-License-Identifier: BSD-3-Clause + */ + +ENTRY(_start) + +FLASH_SIZE = DEFINED(_flash_size) ? _flash_size : 1M; + +STACK_SIZE = DEFINED(_stack_size) ? _stack_size : 0x4000; +HEAP_SIZE = DEFINED(_heap_size) ? _heap_size : 32K; + +MEMORY +{ + XPI0 (rx) : ORIGIN = 0x80000000, LENGTH = FLASH_SIZE + ILM (wx) : ORIGIN = 0x00000000, LENGTH = 128K + DLM (w) : ORIGIN = 0x00080000, LENGTH = 128K + AHB_SRAM (w) : ORIGIN = 0xf0400000, LENGTH = 32K +} + +__nor_cfg_option_load_addr__ = ORIGIN(XPI0) + 0x400; +__boot_header_load_addr__ = ORIGIN(XPI0) + 0x1000; +__app_load_addr__ = ORIGIN(XPI0) + 0x3000; +__boot_header_length__ = __boot_header_end__ - __boot_header_start__; +__app_offset__ = __app_load_addr__ - __boot_header_load_addr__; + +SECTIONS +{ + .nor_cfg_option __nor_cfg_option_load_addr__ : { + KEEP(*(.nor_cfg_option)) + } > XPI0 + + .boot_header __boot_header_load_addr__ : { + __boot_header_start__ = .; + KEEP(*(.boot_header)) + KEEP(*(.fw_info_table)) + KEEP(*(.dc_info)) + __boot_header_end__ = .; + } > XPI0 + + .start __app_load_addr__ : { + . = ALIGN(8); + KEEP(*(.start)) + } > XPI0 + + __vector_load_addr__ = ADDR(.start) + SIZEOF(.start); + .vectors : AT(__vector_load_addr__) { + . = ALIGN(8); + __vector_ram_start__ = .; + KEEP(*(.vector_table)) + KEEP(*(.isr_vector)) + . = ALIGN(8); + __vector_ram_end__ = .; + } > ILM + + .fast : AT(etext + __data_end__ - __tdata_start__) { + . = ALIGN(8); + __ramfunc_start__ = .; + *(.fast) + + /* RT-Thread Core Start */ + KEEP(*context_gcc.o(.text* .rodata*)) + KEEP(*port*.o (.text .text* .rodata .rodata*)) + KEEP(*interrupt_gcc.o (.text .text* .rodata .rodata*)) + KEEP(*trap_common.o (.text .text* .rodata .rodata*)) + KEEP(*irq.o (.text .text* .rodata .rodata*)) + KEEP(*clock.o (.text .text* .rodata .rodata*)) + KEEP(*kservice.o (.text .text* .rodata .rodata*)) + KEEP(*scheduler.o (.text .text* .rodata .rodata*)) + KEEP(*trap*.o (.text .text* .rodata .rodata*)) + KEEP(*idle.o (.text .text* .rodata .rodata*)) + KEEP(*ipc.o (.text .text* .rodata .rodata*)) + KEEP(*thread.o (.text .text* .rodata .rodata*)) + KEEP(*object.o (.text .text* .rodata .rodata*)) + KEEP(*timer.o (.text .text* .rodata .rodata*)) + KEEP(*mem.o (.text .text* .rodata .rodata*)) + KEEP(*mempool.o (.text .text* .rodata .rodata*)) + /* RT-Thread Core End */ + + . = ALIGN(8); + __ramfunc_end__ = .; + } > ILM + + .text (__vector_load_addr__ + __vector_ram_end__ - __vector_ram_start__) : { + . = ALIGN(8); + *(.text) + *(.text*) + *(.rodata) + *(.rodata*) + *(.srodata) + *(.srodata*) + + *(.hash) + *(.dyn*) + *(.gnu*) + *(.pl*) + + KEEP(*(.eh_frame)) + *(.eh_frame*) + + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(8); + + /********************************************* + * + * RT-Thread related sections - Start + * + *********************************************/ + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + + /* RT-Thread related sections - end */ + + /* section information for usbh class */ + . = ALIGN(8); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + + } > XPI0 + + .rel : { + KEEP(*(.rel*)) + } > XPI0 + + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + + .fast_ram (NOLOAD) : { + KEEP(*(.fast_ram)) + } > DLM + + .bss(NOLOAD) : { + . = ALIGN(8); + __bss_start__ = .; + *(.bss) + *(.bss*) + *(.sbss*) + *(.scommon) + *(.scommon*) + *(.dynsbss*) + *(COMMON) + . = ALIGN(8); + _end = .; + __bss_end__ = .; + } > DLM + + /* Note: the .tbss and .tdata section should be adjacent */ + .tbss(NOLOAD) : { + . = ALIGN(8); + __tbss_start__ = .; + *(.tbss*) + *(.tcommon*) + _end = .; + __tbss_end__ = .; + } > DLM + + .tdata : AT(etext) { + . = ALIGN(8); + __tdata_start__ = .; + __thread_pointer = .; + *(.tdata) + *(.tdata*) + . = ALIGN(8); + __tdata_end__ = .; + } > DLM + + .data : AT(etext + __tdata_end__ - __tdata_start__) { + . = ALIGN(8); + __data_start__ = .; + __global_pointer$ = . + 0x800; + *(.data) + *(.data*) + *(.sdata) + *(.sdata*) + + KEEP(*(.jcr)) + KEEP(*(.dynamic)) + KEEP(*(.got*)) + KEEP(*(.got)) + KEEP(*(.gcc_except_table)) + KEEP(*(.gcc_except_table.*)) + + . = ALIGN(8); + PROVIDE(__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE(__preinit_array_end = .); + + . = ALIGN(8); + PROVIDE(__init_array_start = .); + KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE(__init_array_end = .); + + . = ALIGN(8); + PROVIDE(__finit_array_start = .); + KEEP(*(SORT_BY_INIT_PRIORITY(.finit_array.*))) + KEEP(*(.finit_array)) + PROVIDE(__finit_array_end = .); + + . = ALIGN(8); + PROVIDE(__ctors_start__ = .); + KEEP(*crtbegin*.o(.ctors)) + KEEP(*(EXCLUDE_FILE (*crtend*.o) .ctors)) + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(8); + KEEP(*crtbegin*.o(.dtors)) + KEEP(*(EXCLUDE_FILE (*crtend*.o) .dtors)) + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + . = ALIGN(8); + __data_end__ = .; + PROVIDE (__edata = .); + PROVIDE (_edata = .); + PROVIDE (edata = .); + } > DLM + __fw_size__ = __data_end__ - __tdata_start__ + etext - __app_load_addr__; + + .heap(NOLOAD) : { + . = ALIGN(8); + __heap_start__ = .; + . += HEAP_SIZE; + __heap_end__ = .; + } > DLM + + + .stack(NOLOAD) : { + . = ALIGN(8); + __stack_base__ = .; + . += STACK_SIZE; + . = ALIGN(8); + PROVIDE (_stack = .); + PROVIDE (_stack_in_dlm = .); + PROVIDE( __rt_rvstack = . ); + } > DLM + + .noncacheable.init : AT(etext + __data_end__ - __tdata_start__ + __ramfunc_end__ - __ramfunc_start__) { + . = ALIGN(8); + __noncacheable_init_start__ = .; + KEEP(*(.noncacheable.init)) + __noncacheable_init_end__ = .; + . = ALIGN(8); + } > DLM + + .noncacheable.bss (NOLOAD) : { + . = ALIGN(8); + KEEP(*(.noncacheable)) + __noncacheable_bss_start__ = .; + KEEP(*(.noncacheable.bss)) + __noncacheable_bss_end__ = .; + . = ALIGN(8); + } > DLM + + .ahb_sram (NOLOAD) : { + KEEP(*(.ahb_sram)) + } > AHB_SRAM + + /* __noncacheable_start__ = ORIGIN(NONCACHEABLE_RAM); + __noncacheable_end__ = ORIGIN(NONCACHEABLE_RAM) + LENGTH(NONCACHEABLE_RAM); + __share_mem_start__ = ORIGIN(SHARE_RAM); + __share_mem_end__ = ORIGIN(SHARE_RAM) + LENGTH(SHARE_RAM); */ + +} diff --git a/bsp/hpmicro/hpm5300evk/board/linker_scripts/ram_rtt.ld b/bsp/hpmicro/hpm5300evk/board/linker_scripts/ram_rtt.ld new file mode 100644 index 00000000000..196cbe56efe --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/linker_scripts/ram_rtt.ld @@ -0,0 +1,244 @@ +/* + * Copyright 2021-2023 HPMicro + * SPDX-License-Identifier: BSD-3-Clause + */ + +ENTRY(_start) + +STACK_SIZE = DEFINED(_stack_size) ? _stack_size : 0x2000; +HEAP_SIZE = DEFINED(_heap_size) ? _heap_size : 0x8000; +NONCACHEABLE_SIZE = DEFINED(_noncacheable_size) ? _noncacheable_size : 0x8000; + +MEMORY +{ + ILM (wx) : ORIGIN = 0, LENGTH = 128K + DLM (w) : ORIGIN = 0x80000, LENGTH = 128K + NONCACHEABLE_RAM (wx) : ORIGIN = 0x98000, LENGTH = NONCACHEABLE_SIZE + AHB_SRAM (w) : ORIGIN = 0xF0300000, LENGTH = 32k +} + +SECTIONS +{ + .start : { + . = ALIGN(8); + KEEP(*(.start)) + } > ILM + + .vectors : { + . = ALIGN(8); + KEEP(*(.isr_vector)) + KEEP(*(.vector_table)) + . = ALIGN(8); + } > ILM + + .fast_ram (NOLOAD) : { + KEEP(*(.fast_ram)) + } > ILM + + .text : { + . = ALIGN(8); + *(.text) + *(.text*) + *(.rodata) + *(.rodata*) + *(.srodata) + *(.srodata*) + + *(.hash) + *(.dyn*) + *(.gnu*) + *(.pl*) + *(FalPartTable) + + KEEP(*(.eh_frame)) + *(.eh_frame*) + + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(8); + + /********************************************* + * + * RT-Thread related sections - Start + * + *********************************************/ + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + + /* RT-Thread related sections - end */ + + /* section information for usbh class */ + . = ALIGN(8); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + + } > ILM + + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + + .tdata : AT(etext) { + . = ALIGN(8); + __tdata_start__ = .; + __thread_pointer = .; + *(.tdata) + *(.tdata*) + . = ALIGN(8); + __tdata_end__ = .; + } > DLM + + .data : AT(etext + __tdata_end__ - __tdata_start__) { + . = ALIGN(8); + __data_start__ = .; + __global_pointer$ = . + 0x800; + + *(.data) + *(.data*) + *(.sdata) + *(.sdata*) + + KEEP(*(.jcr)) + KEEP(*(.dynamic)) + KEEP(*(.got*)) + KEEP(*(.got)) + KEEP(*(.gcc_except_table)) + KEEP(*(.gcc_except_table.*)) + + . = ALIGN(8); + PROVIDE(__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE(__preinit_array_end = .); + + . = ALIGN(8); + PROVIDE(__init_array_start = .); + KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE(__init_array_end = .); + + . = ALIGN(8); + PROVIDE(__finit_array_start = .); + KEEP(*(SORT_BY_INIT_PRIORITY(.finit_array.*))) + KEEP(*(.finit_array)) + PROVIDE(__finit_array_end = .); + + . = ALIGN(8); + PROVIDE(__ctors_start__ = .); + KEEP(*crtbegin*.o(.ctors)) + KEEP(*(EXCLUDE_FILE (*crtend*.o) .ctors)) + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(8); + KEEP(*crtbegin*.o(.dtors)) + KEEP(*(EXCLUDE_FILE (*crtend*.o) .dtors)) + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + + . = ALIGN(8); + __data_end__ = .; + PROVIDE (__edata = .); + PROVIDE (_edata = .); + PROVIDE (edata = .); + } > DLM + + .fast : AT(etext + __data_end__ - __tdata_start__) { + . = ALIGN(8); + PROVIDE(__ramfunc_start__ = .); + *(.fast) + . = ALIGN(8); + PROVIDE(__ramfunc_end__ = .); + } > DLM + + .rel : { + KEEP(*(.rel*)) + } > DLM + + .bss(NOLOAD) : { + . = ALIGN(8); + __bss_start__ = .; + *(.bss) + *(.bss*) + *(.sbss*) + *(.scommon) + *(.scommon*) + *(.dynsbss*) + *(COMMON) + . = ALIGN(8); + _end = .; + __bss_end__ = .; + } > DLM + + /* Note: .tbss and .tdata should be adjacent */ + .tbss(NOLOAD) : { + . = ALIGN(8); + __tbss_start__ = .; + *(.tbss*) + *(.tcommon*) + _end = .; + __tbss_end__ = .; + } > DLM + + .stack(NOLOAD) : { + . = ALIGN(8); + __stack_base__ = .; + . += STACK_SIZE; + PROVIDE (_stack = .); + PROVIDE (_stack_in_dlm = .); + PROVIDE (__rt_rvstack = .); + } > DLM + + .heap (NOLOAD) : { + . = ALIGN(8); + __heap_start__ = .; + . += HEAP_SIZE; + __heap_end__ = .; + + } > DLM + + .ahb_sram (NOLOAD) : { + KEEP(*(.ahb_sram)) + } > AHB_SRAM + + .noncacheable.init : AT(etext + __data_end__ - __tdata_start__ + __ramfunc_end__ - __ramfunc_start__) { + . = ALIGN(8); + __noncacheable_init_start__ = .; + KEEP(*(.noncacheable.init)) + __noncacheable_init_end__ = .; + . = ALIGN(8); + } > NONCACHEABLE_RAM + + .noncacheable.bss (NOLOAD) : { + . = ALIGN(8); + KEEP(*(.noncacheable)) + __noncacheable_bss_start__ = .; + KEEP(*(.noncacheable.bss)) + __noncacheable_bss_end__ = .; + . = ALIGN(8); + } > NONCACHEABLE_RAM + + __noncacheable_start__ = ORIGIN(NONCACHEABLE_RAM); + __noncacheable_end__ = ORIGIN(NONCACHEABLE_RAM) + LENGTH(NONCACHEABLE_RAM); +} diff --git a/bsp/hpmicro/hpm5300evk/board/pinmux.c b/bsp/hpmicro/hpm5300evk/board/pinmux.c new file mode 100644 index 00000000000..2f17df67529 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/pinmux.c @@ -0,0 +1,325 @@ +/* + * Copyright (c) 2023 HPMicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +/* + * Note: + * PY and PZ IOs: if any SOC pin function needs to be routed to these IOs, + * besides of IOC, PIOC/BIOC needs to be configured SOC_GPIO_X_xx, so that + * expected SoC function can be enabled on these IOs. + * + */ +#include "board.h" +#include "pinmux.h" + +void init_xtal_pins(void) +{ + /* Package QFN32 should be set PA30 and PA31 pins as analog type to enable xtal. */ + /* + * HPM_IOC->PAD[IOC_PAD_PA30].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + * HPM_IOC->PAD[IOC_PAD_PA31].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + */ +} + +void init_py_pins_as_pgpio(void) +{ + /* Set PY00-PY05 default function to PGPIO */ + HPM_PIOC->PAD[IOC_PAD_PY00].FUNC_CTL = PIOC_PY00_FUNC_CTL_PGPIO_Y_00; + HPM_PIOC->PAD[IOC_PAD_PY01].FUNC_CTL = PIOC_PY01_FUNC_CTL_PGPIO_Y_01; + HPM_PIOC->PAD[IOC_PAD_PY02].FUNC_CTL = PIOC_PY02_FUNC_CTL_PGPIO_Y_02; + HPM_PIOC->PAD[IOC_PAD_PY03].FUNC_CTL = PIOC_PY03_FUNC_CTL_PGPIO_Y_03; + HPM_PIOC->PAD[IOC_PAD_PY04].FUNC_CTL = PIOC_PY04_FUNC_CTL_PGPIO_Y_04; + HPM_PIOC->PAD[IOC_PAD_PY05].FUNC_CTL = PIOC_PY05_FUNC_CTL_PGPIO_Y_05; +} + +void init_uart_pins(UART_Type *ptr) +{ + if (ptr == HPM_UART0) { + HPM_IOC->PAD[IOC_PAD_PA00].FUNC_CTL = IOC_PA00_FUNC_CTL_UART0_TXD; + HPM_IOC->PAD[IOC_PAD_PA01].FUNC_CTL = IOC_PA01_FUNC_CTL_UART0_RXD; + } else if (ptr == HPM_UART2) { + HPM_IOC->PAD[IOC_PAD_PB08].FUNC_CTL = IOC_PB08_FUNC_CTL_UART2_TXD; + HPM_IOC->PAD[IOC_PAD_PB09].FUNC_CTL = IOC_PB09_FUNC_CTL_UART2_RXD; + HPM_IOC->PAD[IOC_PAD_PB10].FUNC_CTL = IOC_PB10_FUNC_CTL_UART2_DE; + } else if (ptr == HPM_UART3) { + /* using for uart_lin function */ + HPM_IOC->PAD[IOC_PAD_PA14].FUNC_CTL = IOC_PA14_FUNC_CTL_UART3_RXD; + HPM_IOC->PAD[IOC_PAD_PA15].FUNC_CTL = IOC_PA15_FUNC_CTL_UART3_TXD; + } else if (ptr == HPM_UART7) { + /* using for uart_lin function */ + HPM_IOC->PAD[IOC_PAD_PA31].FUNC_CTL = IOC_PA31_FUNC_CTL_UART7_TXD; + HPM_IOC->PAD[IOC_PAD_PA30].FUNC_CTL = IOC_PA30_FUNC_CTL_UART7_RXD; + } else { + ; + } +} + +void init_lin_transceiver_ctrl_pin(void) +{ + /* PA24 is used to control the 12V power supply of the LIN transceiver */ + HPM_IOC->PAD[IOC_PAD_PA24].FUNC_CTL = IOC_PA24_FUNC_CTL_GPIO_A_24; + /* PA13 is used to control the LIN transceiver not to enter sleep mode */ + HPM_IOC->PAD[IOC_PAD_PA13].FUNC_CTL = IOC_PA13_FUNC_CTL_GPIO_A_13; +} + +/* for uart_lin case, need to configure pin as gpio to sent break signal */ +void init_uart_pin_as_gpio(UART_Type *ptr) +{ + /* pull-up */ + uint32_t pad_ctl = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1); + + if (ptr == HPM_UART3) { + HPM_IOC->PAD[IOC_PAD_PA14].PAD_CTL = pad_ctl; + HPM_IOC->PAD[IOC_PAD_PA15].PAD_CTL = pad_ctl; + HPM_IOC->PAD[IOC_PAD_PA14].FUNC_CTL = IOC_PA14_FUNC_CTL_GPIO_A_14; + HPM_IOC->PAD[IOC_PAD_PA15].FUNC_CTL = IOC_PA15_FUNC_CTL_GPIO_A_15; + } +} + +void init_i2c_pins(I2C_Type *ptr) +{ + if (ptr == HPM_I2C0) { + HPM_IOC->PAD[IOC_PAD_PB02].FUNC_CTL = IOC_PB02_FUNC_CTL_I2C0_SCL | IOC_PAD_FUNC_CTL_LOOP_BACK_MASK; + HPM_IOC->PAD[IOC_PAD_PB03].FUNC_CTL = IOC_PB03_FUNC_CTL_I2C0_SDA | IOC_PAD_FUNC_CTL_LOOP_BACK_MASK; + HPM_IOC->PAD[IOC_PAD_PB02].PAD_CTL = IOC_PAD_PAD_CTL_OD_SET(1) | IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1); + HPM_IOC->PAD[IOC_PAD_PB03].PAD_CTL = IOC_PAD_PAD_CTL_OD_SET(1) | IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1); + } else if (ptr == HPM_I2C1) { + HPM_IOC->PAD[IOC_PAD_PB06].FUNC_CTL = IOC_PB06_FUNC_CTL_I2C1_SDA | IOC_PAD_FUNC_CTL_LOOP_BACK_MASK; + HPM_IOC->PAD[IOC_PAD_PB07].FUNC_CTL = IOC_PB07_FUNC_CTL_I2C1_SCL | IOC_PAD_FUNC_CTL_LOOP_BACK_MASK; + HPM_IOC->PAD[IOC_PAD_PB06].PAD_CTL = IOC_PAD_PAD_CTL_OD_SET(1) | IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1); + HPM_IOC->PAD[IOC_PAD_PB07].PAD_CTL = IOC_PAD_PAD_CTL_OD_SET(1) | IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1); + } else { + ; + } +} + +void init_gpio_pins(void) +{ + /* configure pad setting: pull enable and pull up, schmitt trigger enable */ + /* enable schmitt trigger to eliminate jitter of pin used as button */ + + /* Button */ + uint32_t pad_ctl = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_HYS_SET(1); + HPM_IOC->PAD[IOC_PAD_PA09].FUNC_CTL = IOC_PA09_FUNC_CTL_GPIO_A_09; + HPM_IOC->PAD[IOC_PAD_PA09].PAD_CTL = pad_ctl; +} + +void init_spi_pins(SPI_Type *ptr) +{ + if (ptr == HPM_SPI1) { + HPM_IOC->PAD[IOC_PAD_PA25].FUNC_CTL = IOC_PA25_FUNC_CTL_SPI1_CS_1; + HPM_IOC->PAD[IOC_PAD_PA26].FUNC_CTL = IOC_PA26_FUNC_CTL_SPI1_CS_0; + HPM_IOC->PAD[IOC_PAD_PA27].FUNC_CTL = IOC_PA27_FUNC_CTL_SPI1_SCLK | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1); + HPM_IOC->PAD[IOC_PAD_PA28].FUNC_CTL = IOC_PA28_FUNC_CTL_SPI1_MISO; + HPM_IOC->PAD[IOC_PAD_PA29].FUNC_CTL = IOC_PA29_FUNC_CTL_SPI1_MOSI; + } +} + +void init_spi_pins_with_gpio_as_cs(SPI_Type *ptr) +{ + if (ptr == HPM_SPI1) { + HPM_IOC->PAD[IOC_PAD_PA25].FUNC_CTL = IOC_PA25_FUNC_CTL_GPIO_A_25; + HPM_IOC->PAD[IOC_PAD_PA26].FUNC_CTL = IOC_PA26_FUNC_CTL_GPIO_A_26; + HPM_IOC->PAD[IOC_PAD_PA27].FUNC_CTL = IOC_PA27_FUNC_CTL_SPI1_SCLK | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1); + HPM_IOC->PAD[IOC_PAD_PA28].FUNC_CTL = IOC_PA28_FUNC_CTL_SPI1_MISO; + HPM_IOC->PAD[IOC_PAD_PA29].FUNC_CTL = IOC_PA29_FUNC_CTL_SPI1_MOSI; + } +} + + +void init_gptmr_pins(GPTMR_Type *ptr) +{ + if (ptr == HPM_GPTMR0) { + HPM_IOC->PAD[IOC_PAD_PB06].FUNC_CTL = IOC_PB06_FUNC_CTL_GPTMR0_CAPT_0; + HPM_IOC->PAD[IOC_PAD_PB07].FUNC_CTL = IOC_PB07_FUNC_CTL_GPTMR0_COMP_0; + HPM_IOC->PAD[IOC_PAD_PB08].FUNC_CTL = IOC_PB08_FUNC_CTL_GPTMR0_COMP_1; + } +} + +void init_hall_trgm_pins(void) +{ + init_qeiv2_uvw_pins(HPM_QEI1); +} + +void init_qei_trgm_pins(void) +{ + init_qeiv2_ab_pins(HPM_QEI1); +} + +void init_butn_pins(void) +{ + /* configure pad setting: pull enable and pull up, schmitt trigger enable */ + /* enable schmitt trigger to eliminate jitter of pin used as button */ + + /* Button */ + uint32_t pad_ctl = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_HYS_SET(1); + HPM_IOC->PAD[IOC_PAD_PA09].FUNC_CTL = IOC_PA09_FUNC_CTL_GPIO_A_09; + HPM_IOC->PAD[IOC_PAD_PA09].PAD_CTL = pad_ctl; +} + +void init_acmp_pins(void) +{ + /* configure to ACMP_COMP_1(ALT16) function */ + HPM_IOC->PAD[IOC_PAD_PB09].FUNC_CTL = IOC_PB09_FUNC_CTL_ACMP_COMP_1; + /* configure to CMP1_INN4 function */ + HPM_IOC->PAD[IOC_PAD_PB11].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; +} + +void init_pwm_pins(PWM_Type *ptr) +{ + if (ptr == HPM_PWM0) { + HPM_IOC->PAD[IOC_PAD_PA26].FUNC_CTL = IOC_PA26_FUNC_CTL_PWM0_P_2; + HPM_IOC->PAD[IOC_PAD_PA27].FUNC_CTL = IOC_PA27_FUNC_CTL_PWM0_P_3; + HPM_IOC->PAD[IOC_PAD_PA28].FUNC_CTL = IOC_PA28_FUNC_CTL_PWM0_P_4; + HPM_IOC->PAD[IOC_PAD_PA29].FUNC_CTL = IOC_PA29_FUNC_CTL_PWM0_P_5; + HPM_IOC->PAD[IOC_PAD_PA30].FUNC_CTL = IOC_PA30_FUNC_CTL_PWM0_P_6; + HPM_IOC->PAD[IOC_PAD_PA31].FUNC_CTL = IOC_PA31_FUNC_CTL_PWM0_P_7; + } +} + +void init_adc_pins(void) +{ + HPM_IOC->PAD[IOC_PAD_PB05].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* ADC0.13 */ +} + +void init_adc_bldc_pins(void) +{ + HPM_IOC->PAD[IOC_PAD_PB13].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* ADC_IU: ADC0.5 /ADC1.5 */ + HPM_IOC->PAD[IOC_PAD_PB14].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* ADC_IV: ADC0.6 /ADC1.6 */ +} + +void init_adc_qeiv2_pins(void) +{ + HPM_IOC->PAD[IOC_PAD_PB12].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* ADC_IW: ADC0.4 /ADC1.4 */ + HPM_IOC->PAD[IOC_PAD_PB13].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* ADC_IU: ADC0.5 /ADC1.5 */ +} + +void init_usb_pins(void) +{ + /* Package QFN48 and LQFP64 should be set PA24 and PA25 pins as analog type to enable USB_P and USB_N. */ + /* + * HPM_IOC->PAD[IOC_PAD_PA24].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + * HPM_IOC->PAD[IOC_PAD_PA25].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + */ + + /* Package QFN32 should be set PA26 and PA27 pins as analog type to enable USB_P and USB_N. */ + /* + * HPM_IOC->PAD[IOC_PAD_PA26].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + * HPM_IOC->PAD[IOC_PAD_PA27].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + */ + + /* USB0_ID */ + HPM_IOC->PAD[IOC_PAD_PY00].FUNC_CTL = IOC_PY00_FUNC_CTL_USB0_ID; + /* USB0_OC */ + HPM_IOC->PAD[IOC_PAD_PY01].FUNC_CTL = IOC_PY01_FUNC_CTL_USB0_OC; + /* USB0_PWR */ + HPM_IOC->PAD[IOC_PAD_PY02].FUNC_CTL = IOC_PY02_FUNC_CTL_USB0_PWR; + + /* PY port IO needs to configure PIOC as well */ + HPM_PIOC->PAD[IOC_PAD_PY00].FUNC_CTL = PIOC_PY00_FUNC_CTL_SOC_GPIO_Y_00; + HPM_PIOC->PAD[IOC_PAD_PY01].FUNC_CTL = PIOC_PY01_FUNC_CTL_SOC_GPIO_Y_01; + HPM_PIOC->PAD[IOC_PAD_PY02].FUNC_CTL = PIOC_PY02_FUNC_CTL_SOC_GPIO_Y_02; +} + +void init_can_pins(MCAN_Type *ptr) +{ + if (ptr == HPM_MCAN3) { + HPM_IOC->PAD[IOC_PAD_PY04].FUNC_CTL = IOC_PY04_FUNC_CTL_MCAN3_RXD; + HPM_IOC->PAD[IOC_PAD_PY05].FUNC_CTL = IOC_PY05_FUNC_CTL_MCAN3_TXD; + /* PY port IO needs to configure PIOC as well */ + HPM_PIOC->PAD[IOC_PAD_PY04].FUNC_CTL = PIOC_PY04_FUNC_CTL_SOC_GPIO_Y_04; + HPM_PIOC->PAD[IOC_PAD_PY05].FUNC_CTL = PIOC_PY05_FUNC_CTL_SOC_GPIO_Y_05; + } +} + +void init_led_pins_as_gpio(void) +{ + HPM_IOC->PAD[IOC_PAD_PA23].FUNC_CTL = IOC_PA23_FUNC_CTL_GPIO_A_23; +} + +void init_led_pins_as_pwm(void) +{ + HPM_IOC->PAD[IOC_PAD_PA23].FUNC_CTL = IOC_PA23_FUNC_CTL_TRGM0_P_03; +} + +void init_dac_pins(DAC_Type *ptr) +{ + if (ptr == HPM_DAC0) { + HPM_IOC->PAD[IOC_PAD_PB08].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* DAC0.OUT */ + } else if (ptr == HPM_DAC1) { + HPM_IOC->PAD[IOC_PAD_PB09].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; /* DAC1.OUT */ + } +} + +void init_plb_pins(void) +{ + HPM_IOC->PAD[IOC_PAD_PA26].FUNC_CTL = IOC_PA26_FUNC_CTL_TRGM0_P_02; +} + +void init_qeo_pins(QEO_Type *ptr) +{ + if (ptr == HPM_QEO0) { + HPM_IOC->PAD[IOC_PAD_PA20].FUNC_CTL = IOC_PA20_FUNC_CTL_QEO0_A; + HPM_IOC->PAD[IOC_PAD_PA21].FUNC_CTL = IOC_PA21_FUNC_CTL_QEO0_B; + HPM_IOC->PAD[IOC_PAD_PA22].FUNC_CTL = IOC_PA22_FUNC_CTL_QEO0_Z; + } +} + +void init_sei_pins(SEI_Type *ptr, uint8_t sei_ctrl_idx) +{ + if (ptr == HPM_SEI) { + if (sei_ctrl_idx == SEI_CTRL_1) { + HPM_IOC->PAD[IOC_PAD_PA16].FUNC_CTL = IOC_PA16_FUNC_CTL_SEI1_DE; + HPM_IOC->PAD[IOC_PAD_PA17].FUNC_CTL = IOC_PA17_FUNC_CTL_SEI1_CK; + HPM_IOC->PAD[IOC_PAD_PA18].FUNC_CTL = IOC_PA18_FUNC_CTL_SEI1_TX; + HPM_IOC->PAD[IOC_PAD_PA19].FUNC_CTL = IOC_PA19_FUNC_CTL_SEI1_RX; + } + } +} + +void init_rdc_pin(void) +{ + HPM_IOC->PAD[IOC_PAD_PA28].FUNC_CTL = IOC_PA28_FUNC_CTL_RDC0_EXC_P; + HPM_IOC->PAD[IOC_PAD_PB13].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + HPM_IOC->PAD[IOC_PAD_PB14].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + +/*The GPIO is designed for debug */ +#ifdef RDC_SAMPLE_TEST_GPIO_OUTPUT + HPM_IOC->PAD[IOC_PAD_PB04].FUNC_CTL = IOC_PB04_FUNC_CTL_TRGM0_P_00; +#endif +} + +void init_qeiv2_uvw_pins(QEIV2_Type *ptr) +{ + if (ptr == HPM_QEI1) { + HPM_IOC->PAD[IOC_PAD_PA10].FUNC_CTL = IOC_PA10_FUNC_CTL_QEI1_A; + HPM_IOC->PAD[IOC_PAD_PA11].FUNC_CTL = IOC_PA11_FUNC_CTL_QEI1_B; + HPM_IOC->PAD[IOC_PAD_PA12].FUNC_CTL = IOC_PA12_FUNC_CTL_QEI1_Z; + } +} + +void init_qeiv2_ab_pins(QEIV2_Type *ptr) +{ + if (ptr == HPM_QEI1) { + HPM_IOC->PAD[IOC_PAD_PA10].FUNC_CTL = IOC_PA10_FUNC_CTL_QEI1_A; + HPM_IOC->PAD[IOC_PAD_PA11].FUNC_CTL = IOC_PA11_FUNC_CTL_QEI1_B; + } +} + +void init_qeiv2_abz_pins(QEIV2_Type *ptr) +{ + if (ptr == HPM_QEI1) { + HPM_IOC->PAD[IOC_PAD_PA10].FUNC_CTL = IOC_PA10_FUNC_CTL_QEI1_A; + HPM_IOC->PAD[IOC_PAD_PA11].FUNC_CTL = IOC_PA11_FUNC_CTL_QEI1_B; + HPM_IOC->PAD[IOC_PAD_PA12].FUNC_CTL = IOC_PA12_FUNC_CTL_QEI1_Z; + } +} + +void init_opamp_pins(void) +{ + HPM_IOC->PAD[IOC_PAD_PB00].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; + HPM_IOC->PAD[IOC_PAD_PB04].FUNC_CTL = IOC_PAD_FUNC_CTL_ANALOG_MASK; +} diff --git a/bsp/hpmicro/hpm5300evk/board/pinmux.h b/bsp/hpmicro/hpm5300evk/board/pinmux.h new file mode 100644 index 00000000000..1ff17798655 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/pinmux.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 HPMicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef HPM_PINMUX_H +#define HPM_PINMUX_H + +#ifdef __cplusplus +extern "C" { +#endif +void init_xtal_pins(void); +void init_py_pins_as_pgpio(void); +void init_uart_pins(UART_Type *ptr); +void init_uart_pin_as_gpio(UART_Type *ptr); +void init_i2c_pins(I2C_Type *ptr); +void init_gpio_pins(void); +void init_spi_pins(SPI_Type *ptr); +void init_spi_pins_with_gpio_as_cs(SPI_Type *ptr); +void init_gptmr_pins(GPTMR_Type *ptr); +void init_hall_trgm_pins(void); +void init_qei_trgm_pins(void); +void init_butn_pins(void); +void init_acmp_pins(void); +void init_pwm_pins(PWM_Type *ptr); +void init_adc_pins(void); +void init_adc_bldc_pins(void); +void init_adc_qeiv2_pins(void); +void init_usb_pins(void); +void init_can_pins(MCAN_Type *ptr); +void init_dac_pins(DAC_Type *ptr); +void init_led_pins_as_gpio(void); +void init_led_pins_as_pwm(void); +void init_plb_pins(void); +void init_qeo_pins(QEO_Type *ptr); +void init_sei_pins(SEI_Type *ptr, uint8_t sei_ctrl_idx); +void init_rdc_pin(void); +void init_qeiv2_uvw_pins(QEIV2_Type *ptr); +void init_qeiv2_ab_pins(QEIV2_Type *ptr); +void init_qeiv2_abz_pins(QEIV2_Type *ptr); +void init_opamp_pins(void); +void init_lin_transceiver_ctrl_pin(void); +#ifdef __cplusplus +} +#endif +#endif /* HPM_PINMUX_H */ diff --git a/bsp/hpmicro/hpm5300evk/board/rtt_board.c b/bsp/hpmicro/hpm5300evk/board/rtt_board.c new file mode 100644 index 00000000000..407d5ac9ecd --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/rtt_board.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023-2024 HPMicro + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include "board.h" +#include "rtt_board.h" +#include "hpm_uart_drv.h" +#include "hpm_gpio_drv.h" +#include "hpm_pmp_drv.h" +#include "assert.h" +#include "hpm_clock_drv.h" +#include "hpm_sysctl_drv.h" +#include +#include +#include "hpm_dma_mgr.h" +#include "hpm_mchtmr_drv.h" + +extern int rt_hw_uart_init(void); +void os_tick_config(void); +void rtt_board_init(void); + +void rt_hw_board_init(void) +{ + rtt_board_init(); + + /* Call the RT-Thread Component Board Initialization */ + rt_components_board_init(); +} + +void os_tick_config(void) +{ + sysctl_config_clock(HPM_SYSCTL, clock_node_mchtmr0, clock_source_osc0_clk0, 1); + sysctl_add_resource_to_cpu0(HPM_SYSCTL, sysctl_resource_mchtmr0); + mchtmr_set_compare_value(HPM_MCHTMR, BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND); + enable_mchtmr_irq(); +} + +void rtt_board_init(void) +{ + board_init_clock(); + board_init_console(); + board_init_pmp(); + + dma_mgr_init(); + + /* initialize memory system */ + rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); + + /* Configure the OS Tick */ + os_tick_config(); + + /* Configure the USB pins*/ + board_init_usb_pins(); + + /* Initialize the UART driver first, because later driver initialization may require the rt_kprintf */ + rt_hw_uart_init(); + + /* Set console device */ + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +} + +void app_init_led_pins(void) +{ + gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN); + gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, BOARD_LED_OFF_LEVEL); +} + +void app_led_write(uint32_t index, bool state) +{ + gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state); +} + +void BOARD_LED_write(uint32_t index, bool state) +{ + switch (index) + { + case 0: + gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state); + break; + default: + /* Suppress the toolchain warnings */ + break; + } +} + +void rt_hw_console_output(const char *str) +{ + while (*str != '\0') + { + uart_send_byte(BOARD_APP_UART_BASE, *str++); + } +} + +void app_init_usb_pins(void) +{ + board_init_usb_pins(); +} + +ATTR_PLACE_AT(".isr_vector") void mchtmr_isr(void) +{ + HPM_MCHTMR->MTIMECMP = HPM_MCHTMR->MTIME + BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND; + + rt_tick_increase(); +} + +void rt_hw_cpu_reset(void) +{ + HPM_PPOR->RESET_ENABLE = (1UL << 31); + + HPM_PPOR->SOFTWARE_RESET = 1000U; + while(1) { + + } +} + +MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reset, reset the board); diff --git a/bsp/hpmicro/hpm5300evk/board/rtt_board.h b/bsp/hpmicro/hpm5300evk/board/rtt_board.h new file mode 100644 index 00000000000..78b51752c62 --- /dev/null +++ b/bsp/hpmicro/hpm5300evk/board/rtt_board.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 hpmicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef _RTT_BOARD_H +#define _RTT_BOARD_H +#include "hpm_common.h" +#include "hpm_soc.h" +#include + +/* gpio section */ +#define APP_LED0_PIN_NUM GET_PIN(A, 23) +#define APP_LED_ON (1) +#define APP_LED_OFF (0) + +/* mchtimer section */ +#define BOARD_MCHTMR_FREQ_IN_HZ (24000000UL) + +/* CAN section */ +#define BOARD_CAN_NAME "can0" +#define BOARD_CAN_HWFILTER_INDEX (0U) + +/* UART section */ +#define BOARD_UART_NAME "uart2" +#define BOARD_UART_RX_BUFFER_SIZE BSP_UART2_RX_BUFSIZE + +/* PWM section */ +#define BOARD_PWM_NAME "pwm0" +#define BOARD_PWM_CHANNEL (6) + +#define IRQn_PendSV IRQn_DEBUG0 + +/*************************************************************** + * + * RT-Thread related definitions + * + **************************************************************/ +extern unsigned int __heap_start__; +extern unsigned int __heap_end__; + +#define RT_HW_HEAP_BEGIN ((void*)&__heap_start__) +#define RT_HW_HEAP_END ((void*)&__heap_end__) + + +typedef struct { + uint16_t vdd; + uint8_t bus_width; + uint8_t drive_strength; +}sdxc_io_cfg_t; + +void app_init_led_pins(void); +void app_led_write(uint32_t index, bool state); +void app_init_usb_pins(void); + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + + + + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ +#endif /* _RTT_BOARD_H */ diff --git a/bsp/hpmicro/hpm5300evk/figures/board.png b/bsp/hpmicro/hpm5300evk/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..35c083c12082a7ecac68634ed58037c110c0563d GIT binary patch literal 374390 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%0DRj?@)_ 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 z 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

M#r4}0@!}SJ>Ce%wB5b|># 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