From c2ac614c59ea7a3ed21052f3c5a759748656bacb Mon Sep 17 00:00:00 2001 From: flyingcys Date: Wed, 26 Apr 2023 08:50:03 +0800 Subject: [PATCH] [bsp/bouffalo_lab]add bl808-d0 (#7373) Co-authored-by: chenyisong --- .../{build_bl808.sh => build_bl808_all.sh} | 1 + bsp/bouffalo_lab/bl808/d0/.config | 1046 +++++++++++++++++ bsp/bouffalo_lab/bl808/d0/Kconfig | 24 + bsp/bouffalo_lab/bl808/d0/SConscript | 14 + bsp/bouffalo_lab/bl808/d0/SConstruct | 52 + .../bl808/d0/applications/SConscript | 9 + bsp/bouffalo_lab/bl808/d0/applications/main.c | 19 + bsp/bouffalo_lab/bl808/d0/board/Kconfig | 92 ++ bsp/bouffalo_lab/bl808/d0/board/SConscript | 9 + bsp/bouffalo_lab/bl808/d0/board/board.c | 122 ++ bsp/bouffalo_lab/bl808/d0/board/board.h | 30 + .../bl808/d0/board/linker_scripts/link.lds | 197 ++++ bsp/bouffalo_lab/bl808/d0/flash_prog_cfg.ini | 12 + bsp/bouffalo_lab/bl808/d0/link_stacksize.lds | 1 + bsp/bouffalo_lab/bl808/d0/merge_rtsmart.py | 88 ++ .../bl808/d0/pre_build_bin/hw.dtb.5M | Bin 0 -> 2091 bytes .../bl808/d0/pre_build_bin/opensbi_v0.6.bin | Bin 0 -> 41472 bytes .../bl808/d0/pre_build_bin/spl_bl808_d0.bin | Bin 0 -> 22012 bytes bsp/bouffalo_lab/bl808/d0/rtconfig.h | 278 +++++ bsp/bouffalo_lab/bl808/d0/rtconfig.py | 63 + bsp/bouffalo_lab/bl808/flash_prog_cfg.ini | 5 + bsp/bouffalo_lab/bl808/m0/.config | 14 +- bsp/bouffalo_lab/bl808/m0/board/Kconfig | 5 + bsp/bouffalo_lab/bl808/m0/board/board.c | 8 +- bsp/bouffalo_lab/bl808/m0/board/board.h | 1 + bsp/bouffalo_lab/bl808/m0/rtconfig.h | 8 +- .../bl_mcu_sdk/drivers/lhal/SConscript | 52 +- .../drivers/lhal/include/bflb_core.h | 2 +- .../bl_mcu_sdk/drivers/lhal/src/bflb_gpio.c | 14 +- .../bl_mcu_sdk/drivers/lhal/src/bflb_uart.c | 42 +- .../bl_mcu_sdk/drivers/soc/bl808/SConscript | 9 +- .../soc/bl808/std/include/bl808_ioremap.h | 163 +++ .../soc/bl808/std/include/hardware/bl808.h | 9 + .../drivers/soc/bl808/std/src/bl808_ioremap.c | 93 ++ .../libraries/rt_drivers/drv_uart.c | 178 ++- 35 files changed, 2546 insertions(+), 114 deletions(-) rename bsp/bouffalo_lab/bl808/{build_bl808.sh => build_bl808_all.sh} (76%) create mode 100644 bsp/bouffalo_lab/bl808/d0/.config create mode 100755 bsp/bouffalo_lab/bl808/d0/Kconfig create mode 100755 bsp/bouffalo_lab/bl808/d0/SConscript create mode 100755 bsp/bouffalo_lab/bl808/d0/SConstruct create mode 100755 bsp/bouffalo_lab/bl808/d0/applications/SConscript create mode 100644 bsp/bouffalo_lab/bl808/d0/applications/main.c create mode 100755 bsp/bouffalo_lab/bl808/d0/board/Kconfig create mode 100755 bsp/bouffalo_lab/bl808/d0/board/SConscript create mode 100644 bsp/bouffalo_lab/bl808/d0/board/board.c create mode 100755 bsp/bouffalo_lab/bl808/d0/board/board.h create mode 100755 bsp/bouffalo_lab/bl808/d0/board/linker_scripts/link.lds create mode 100755 bsp/bouffalo_lab/bl808/d0/flash_prog_cfg.ini create mode 100755 bsp/bouffalo_lab/bl808/d0/link_stacksize.lds create mode 100755 bsp/bouffalo_lab/bl808/d0/merge_rtsmart.py create mode 100755 bsp/bouffalo_lab/bl808/d0/pre_build_bin/hw.dtb.5M create mode 100755 bsp/bouffalo_lab/bl808/d0/pre_build_bin/opensbi_v0.6.bin create mode 100755 bsp/bouffalo_lab/bl808/d0/pre_build_bin/spl_bl808_d0.bin create mode 100755 bsp/bouffalo_lab/bl808/d0/rtconfig.h create mode 100755 bsp/bouffalo_lab/bl808/d0/rtconfig.py create mode 100644 bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/bl808_ioremap.h create mode 100644 bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/src/bl808_ioremap.c mode change 100755 => 100644 bsp/bouffalo_lab/libraries/rt_drivers/drv_uart.c diff --git a/bsp/bouffalo_lab/bl808/build_bl808.sh b/bsp/bouffalo_lab/bl808/build_bl808_all.sh similarity index 76% rename from bsp/bouffalo_lab/bl808/build_bl808.sh rename to bsp/bouffalo_lab/bl808/build_bl808_all.sh index 3a03b6285d..a3ef7bb45e 100755 --- a/bsp/bouffalo_lab/bl808/build_bl808.sh +++ b/bsp/bouffalo_lab/bl808/build_bl808_all.sh @@ -2,4 +2,5 @@ scons -C m0 scons -C lp +scons -C d0 diff --git a/bsp/bouffalo_lab/bl808/d0/.config b/bsp/bouffalo_lab/bl808/d0/.config new file mode 100644 index 0000000000..e0d327354c --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/.config @@ -0,0 +1,1046 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Project Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=20 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +CONFIG_RT_USING_SMART=y +# CONFIG_RT_USING_SMP is not set +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_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=16384 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=16384 + +# +# kservice optimization +# +CONFIG_RT_KSERVICE_USING_STDLIB=y +# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +CONFIG_RT_KPRINTF_USING_LONGLONG=y +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_PAGE_LEAK is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_PAGE_MAX_ORDER=11 +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=y +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +CONFIG_RT_VER_NUM=0x50001 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_ARCH_CPU_64BIT=y +CONFIG_RT_USING_CACHE=y +# 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_MM_MMU=y +CONFIG_KERNEL_VADDR_START=0x50000000 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_RISCV64=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=16384 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +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=8192 +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 + +# +# DFS: device virtual file system +# +CONFIG_RT_USING_DFS=y +CONFIG_DFS_USING_POSIX=y +CONFIG_DFS_USING_WORKDIR=y +# CONFIG_RT_USING_DFS_MNTTABLE is not set +CONFIG_DFS_FD_MAX=16 +CONFIG_RT_USING_DFS_V1=y +# CONFIG_RT_USING_DFS_V2 is not set +CONFIG_DFS_FILESYSTEMS_MAX=4 +CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 +# CONFIG_RT_USING_DFS_ELMFAT is not set +CONFIG_RT_USING_DFS_DEVFS=y +# CONFIG_RT_USING_DFS_ROMFS is not set +# CONFIG_RT_USING_DFS_CROMFS is not set +# CONFIG_RT_USING_DFS_RAMFS is not set +# CONFIG_RT_USING_DFS_TMPFS is not set +# CONFIG_RT_USING_FAL is not set +CONFIG_RT_USING_LWP=y +CONFIG_RT_LWP_MAX_NR=30 +CONFIG_LWP_TASK_STACK_SIZE=16384 +CONFIG_RT_CH_MSG_MAX_NR=1024 +CONFIG_LWP_CONSOLE_INPUT_BUFFER_SIZE=1024 +CONFIG_LWP_TID_MAX_NR=64 +CONFIG_RT_LWP_SHM_MAX_NR=64 +# CONFIG_LWP_UNIX98_PTY is not set + +# +# Device Drivers +# +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=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +CONFIG_RT_USING_TTY=y +# CONFIG_RT_TTY_DEBUG is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +CONFIG_RT_USING_NULL=y +CONFIG_RT_USING_ZERO=y +CONFIG_RT_USING_RANDOM=y +# 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_FDT is not set +CONFIG_RT_USING_RTC=y +# CONFIG_RT_USING_ALARM is not set +# CONFIG_RT_USING_SOFT_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 + +# +# 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 +# +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# POSIX (Portable Operating System Interface) layer +# +CONFIG_RT_USING_POSIX_FS=y +CONFIG_RT_USING_POSIX_DEVIO=y +CONFIG_RT_USING_POSIX_STDIO=y +CONFIG_RT_USING_POSIX_POLL=y +CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_SOCKET is not set +CONFIG_RT_USING_POSIX_TERMIOS=y +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_POSIX_MMAN is not set +CONFIG_RT_USING_POSIX_DELAY=y +CONFIG_RT_USING_POSIX_CLOCK=y +CONFIG_RT_USING_POSIX_TIMER=y +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +CONFIG_RT_USING_POSIX_PIPE=y +CONFIG_RT_USING_POSIX_PIPE_SIZE=512 +# 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 + +# +# 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_ADT=y +# 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_LIBMODBUS 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 +# 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_EZ_IOT_OS 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_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 + +# +# 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_LITTLEVGL2RTT 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 + +# +# 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_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_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_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 + +# +# 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_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_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_NUCLEI_SDK 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_FINGERPRINT 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 + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_UKAL 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_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_DIGITALCTRL 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 +# +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR 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_CAPACITIVESENSOR 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_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_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_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_SENSORLAB 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_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_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 + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON 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_SEEED_PCF85063TP 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 + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# CONFIG_PKG_USING_ARDUINO_RTCLIB 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 +# +CONFIG_BSP_USING_BL808=y +CONFIG_BL808_CORE_D0=y +CONFIG_C906_PLIC_PHY_ADDR=0xe0000000 +CONFIG_IRQ_MAX_NR=64 +CONFIG_TIMER_CLK_FREQ=1000000 + +# +# General Drivers Configuration +# +CONFIG_BSP_USING_UART3=y +# CONFIG_UART3_TX_USING_GPIO0 is not set +# CONFIG_UART3_TX_USING_GPIO4 is not set +# CONFIG_UART3_TX_USING_GPIO8 is not set +# CONFIG_UART3_TX_USING_GPIO12 is not set +CONFIG_UART3_TX_USING_GPIO16=y +# CONFIG_UART3_TX_USING_GPIO20 is not set +# CONFIG_UART3_TX_USING_GPIO24 is not set +# CONFIG_UART3_TX_USING_GPIO28 is not set +# CONFIG_UART3_TX_USING_GPIO32 is not set +# CONFIG_UART3_TX_USING_GPIO36 is not set +# CONFIG_UART3_TX_USING_GPIO40 is not set +# CONFIG_UART3_TX_USING_GPIO44 is not set +# CONFIG_UART3_RX_USING_GPIO1 is not set +# CONFIG_UART3_RX_USING_GPIO5 is not set +# CONFIG_UART3_RX_USING_GPIO9 is not set +# CONFIG_UART3_RX_USING_GPIO13 is not set +CONFIG_UART3_RX_USING_GPIO17=y +# CONFIG_UART3_RX_USING_GPIO21 is not set +# CONFIG_UART3_RX_USING_GPIO25 is not set +# CONFIG_UART3_RX_USING_GPIO29 is not set +# CONFIG_UART3_RX_USING_GPIO33 is not set +# CONFIG_UART3_RX_USING_GPIO37 is not set +# CONFIG_UART3_RX_USING_GPIO41 is not set +# CONFIG_UART3_RX_USING_GPIO45 is not set +CONFIG___STACKSIZE__=16384 diff --git a/bsp/bouffalo_lab/bl808/d0/Kconfig b/bsp/bouffalo_lab/bl808/d0/Kconfig new file mode 100755 index 0000000000..b636a4739b --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/Kconfig @@ -0,0 +1,24 @@ +mainmenu "RT-Thread Project 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 "board/Kconfig" + +config __STACKSIZE__ + int "stack size for interrupt" + default 4096 \ No newline at end of file diff --git a/bsp/bouffalo_lab/bl808/d0/SConscript b/bsp/bouffalo_lab/bl808/d0/SConscript new file mode 100755 index 0000000000..c7ef7659ec --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(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/bouffalo_lab/bl808/d0/SConstruct b/bsp/bouffalo_lab/bl808/d0/SConstruct new file mode 100755 index 0000000000..bedd97d88e --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/SConstruct @@ -0,0 +1,52 @@ +import os +import sys +import rtconfig + +from rtconfig import RTT_ROOT + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +from building import * + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env['ASCOM'] = env['ASPPCOM'] + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/../libraries'): + libraries_path_prefix = SDK_ROOT + '/../libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/../libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) + +# include libraries +objs.extend(SConscript(libraries_path_prefix + '/bl_mcu_sdk/SConscript', variant_dir='build/libraries/bl_mcu_sdk', duplicate=0)) + +# include drivers +objs.extend(SConscript(libraries_path_prefix + '/rt_drivers/SConscript', variant_dir='build/libraries/rt_drivers', duplicate=0)) + +stack_size = 4096 + +stack_lds = open('link_stacksize.lds', 'w') +if GetDepend('__STACKSIZE__'): stack_size = GetDepend('__STACKSIZE__') +stack_lds.write('__STACKSIZE__ = %d;' % stack_size) +stack_lds.close() + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/bouffalo_lab/bl808/d0/applications/SConscript b/bsp/bouffalo_lab/bl808/d0/applications/SConscript new file mode 100755 index 0000000000..c583d3016e --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/applications/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/bouffalo_lab/bl808/d0/applications/main.c b/bsp/bouffalo_lab/bl808/d0/applications/main.c new file mode 100644 index 0000000000..124d480b60 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/applications/main.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023/04/25 flyingcys first version + */ + +#include +#include + +int main(void) +{ + rt_kprintf("Hello RT-Smart!\n"); + + return 0; +} diff --git a/bsp/bouffalo_lab/bl808/d0/board/Kconfig b/bsp/bouffalo_lab/bl808/d0/board/Kconfig new file mode 100755 index 0000000000..ed55125f6a --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/board/Kconfig @@ -0,0 +1,92 @@ +config BSP_USING_BL808 + bool + select ARCH_RISCV64 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + select RT_USING_CACHE + select ARCH_MM_MMU + select BL808_CORE_D0 + default y + +config BL808_CORE_D0 + bool + default y + +config C906_PLIC_PHY_ADDR + hex + default 0xe0000000 + +config IRQ_MAX_NR + int + default 64 + +config TIMER_CLK_FREQ + int + default 1000000 + +menu "General Drivers Configuration" + + menuconfig BSP_USING_UART3 + bool "Enable UART3" + default y + if BSP_USING_UART3 + choice + prompt "UART3 TX PIN" + default UART3_TX_USING_GPIO16 + + config UART3_TX_USING_GPIO0 + bool "GPIO_0" + config UART3_TX_USING_GPIO4 + bool "GPIO_4" + config UART3_TX_USING_GPIO8 + bool "GPIO_8" + config UART3_TX_USING_GPIO12 + bool "GPIO_12" + config UART3_TX_USING_GPIO16 + bool "GPIO_16" + config UART3_TX_USING_GPIO20 + bool "GPIO_20" + config UART3_TX_USING_GPIO24 + bool "GPIO_24" + config UART3_TX_USING_GPIO28 + bool "GPIO_28" + config UART3_TX_USING_GPIO32 + bool "GPIO_32" + config UART3_TX_USING_GPIO36 + bool "GPIO_36" + config UART3_TX_USING_GPIO40 + bool "GPIO_40" + config UART3_TX_USING_GPIO44 + bool "GPIO_44" + endchoice + choice + prompt "UART3 RX PIN" + default UART3_RX_USING_GPIO17 + + config UART3_RX_USING_GPIO1 + bool "GPIO_1" + config UART3_RX_USING_GPIO5 + bool "GPIO_5" + config UART3_RX_USING_GPIO9 + bool "GPIO_9" + config UART3_RX_USING_GPIO13 + bool "GPIO_12" + config UART3_RX_USING_GPIO17 + bool "GPIO_17" + config UART3_RX_USING_GPIO21 + bool "GPIO_21" + config UART3_RX_USING_GPIO25 + bool "GPIO_25" + config UART3_RX_USING_GPIO29 + bool "GPIO_29" + config UART3_RX_USING_GPIO33 + bool "GPIO_33" + config UART3_RX_USING_GPIO37 + bool "GPIO_37" + config UART3_RX_USING_GPIO41 + bool "GPIO_41" + config UART3_RX_USING_GPIO45 + bool "GPIO_45" + endchoice + endif +endmenu diff --git a/bsp/bouffalo_lab/bl808/d0/board/SConscript b/bsp/bouffalo_lab/bl808/d0/board/SConscript new file mode 100755 index 0000000000..0907feabe2 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/board/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') + Glob('*.S') +CPPPATH = [cwd] + +group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/bouffalo_lab/bl808/d0/board/board.c b/bsp/bouffalo_lab/bl808/d0/board/board.c new file mode 100644 index 0000000000..c2d2e73fa5 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/board/board.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022/04/25 flyingcys first version + */ +#include +#include + +#include "board.h" + +#include "sbi.h" + +#ifdef RT_USING_SMART +#include "riscv_mmu.h" +#include "mmu.h" +#include "page.h" +#include "lwp_arch.h" + +rt_region_t init_page_region = {(rt_size_t)RT_HW_PAGE_START, (rt_size_t)RT_HW_PAGE_END}; + +extern size_t MMUTable[]; + +struct mem_desc platform_mem_desc[] = { + {KERNEL_VADDR_START, (rt_size_t)RT_HW_PAGE_END - 1, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM}, +}; + +#define NUM_MEM_DESC (sizeof(platform_mem_desc) / sizeof(platform_mem_desc[0])) + +#endif /* RT_USING_SMART */ + +void init_bss(void) +{ + unsigned int *dst; + + dst = &__bss_start; + while (dst < &__bss_end) + { + *dst++ = 0; + } +} + +static void __rt_assert_handler(const char *ex_string, const char *func, rt_size_t line) +{ + rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line); + asm volatile("ebreak" :: + : "memory"); +} + +void primary_cpu_entry(void) +{ + extern void entry(void); + + /* disable global interrupt */ + rt_hw_interrupt_disable(); + rt_assert_set_hook(__rt_assert_handler); + + entry(); +} + +#define IOREMAP_SIZE (1ul << 30) + +#ifndef ARCH_KERNEL_IN_HIGH_VA +#define IOREMAP_VEND USER_VADDR_START +#else +#define IOREMAP_VEND 0ul +#endif + +void rt_hw_board_init(void) +{ +#ifdef RT_USING_SMART + /* init data structure */ + rt_hw_mmu_map_init(&rt_kernel_space, (void *)(IOREMAP_VEND - IOREMAP_SIZE), IOREMAP_SIZE, (rt_size_t *)MMUTable, PV_OFFSET); + + /* init page allocator */ + rt_page_init(init_page_region); + + /* setup region, and enable MMU */ + rt_hw_mmu_setup(&rt_kernel_space, platform_mem_desc, NUM_MEM_DESC); +#endif + + /* initialize memory system */ +#ifdef RT_USING_HEAP + rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); +#endif + + /* initalize interrupt */ + rt_hw_interrupt_init(); + + /* init rtthread hardware */ + rt_hw_tick_init(); + + /* UART driver initialization is open by default */ +#ifdef RT_USING_SERIAL + rt_hw_uart_init(); +#endif + +#ifdef RT_USING_CONSOLE + /* set console device */ + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif /* RT_USING_CONSOLE */ + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_HEAP + rt_kprintf("heap: [0x%08x - 0x%08x]\n", (rt_ubase_t)RT_HW_HEAP_BEGIN, (rt_ubase_t)RT_HW_HEAP_END); +#endif /* RT_USING_HEAP */ +} + +void rt_hw_cpu_reset(void) +{ + sbi_shutdown(); + + while (1) + ; +} +MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reboot, reset machine); diff --git a/bsp/bouffalo_lab/bl808/d0/board/board.h b/bsp/bouffalo_lab/bl808/d0/board/board.h new file mode 100755 index 0000000000..37975c4660 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/board/board.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022/04/25 flyingcys first version + */ + +#ifndef BOARD_H__ +#define BOARD_H__ + +#include + +extern unsigned int __bss_start; +extern unsigned int __bss_end; + +#ifndef RT_USING_SMART +#define KERNEL_VADDR_START 0x0 +#endif + +#define RT_HW_HEAP_BEGIN ((void *)&__bss_end) +#define RT_HW_HEAP_END ((void *)(RT_HW_HEAP_BEGIN + 16 * 1024 * 1024)) +#define RT_HW_PAGE_START RT_HW_HEAP_END +#define RT_HW_PAGE_END ((void *)(KERNEL_VADDR_START + 64 * 1024 * 1024)) + +void rt_hw_board_init(void); + +#endif diff --git a/bsp/bouffalo_lab/bl808/d0/board/linker_scripts/link.lds b/bsp/bouffalo_lab/bl808/d0/board/linker_scripts/link.lds new file mode 100755 index 0000000000..c2b0bea6b6 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/board/linker_scripts/link.lds @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020/12/12 bernard The first version + */ + +INCLUDE "link_stacksize.lds" + +OUTPUT_ARCH( "riscv" ) + +/* + * Memory layout: + * 0x10200000 - 0x10201000: Bootloader + * 0x10201000 - 0x10A00000: Kernel + * 0x10A00000 - 0x11200000: Heap + */ + +MEMORY +{ + SRAM : ORIGIN = 0x50100000, LENGTH = 63M +} + +ENTRY(_start) +SECTIONS +{ + . = 0x50100000 ; + + /* __STACKSIZE__ = 4096; */ + __text_start = .; + .start : + { + *(.start); + } > SRAM + + . = ALIGN(8); + + .text : + { + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(8); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(8); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(8); + + /* section information for initial. */ + . = ALIGN(8); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(8); + + __rt_utest_tc_tab_start = .; + KEEP(*(UtestTcTab)) + __rt_utest_tc_tab_end = .; + + . = ALIGN(8); + _etext = .; + } > SRAM + + .eh_frame_hdr : + { + *(.eh_frame_hdr) + *(.eh_frame_entry) + } > SRAM + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } > SRAM + + . = ALIGN(8); + __text_end = .; + __text_size = __text_end - __text_start; + + .data : + { + *(.data) + *(.data.*) + + *(.data1) + *(.data1.*) + + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + + *(.sdata) + *(.sdata.*) + } > SRAM + + . = ALIGN(8); + .ctors : + { + PROVIDE(__ctors_start__ = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE(__ctors_end__ = .); + } > SRAM + + .dtors : + { + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE(__dtors_end__ = .); + } > SRAM + + /* stack for dual core */ + .stack : + { + . = ALIGN(64); + __stack_start__ = .; + + . += __STACKSIZE__; + __stack_cpu0 = .; + + . += __STACKSIZE__; + __stack_cpu1 = .; + } > SRAM + + . = ALIGN(8); + + .osdebug : + { + _osdebug_start = .; + . += 87K; + _osdebug_end = .; + } > SRAM + + . = ALIGN(8); + + .sbss : + { + __bss_start = .; + *(.sbss) + *(.sbss.*) + *(.dynsbss) + *(.scommon) + } > SRAM + + .bss : + { + *(.bss) + *(.bss.*) + *(.dynbss) + *(COMMON) + __bss_end = .; + } > SRAM + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/bouffalo_lab/bl808/d0/flash_prog_cfg.ini b/bsp/bouffalo_lab/bl808/d0/flash_prog_cfg.ini new file mode 100755 index 0000000000..a39c061752 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/flash_prog_cfg.ini @@ -0,0 +1,12 @@ +[cfg] +# 0: no erase, 1:programmed section erase, 2: chip erase +erase = 1 +# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated +skip_mode = 0x0, 0x0 +# 0: not use isp mode, #1: isp mode +boot2_isp_mode = 0 + +[FW2] +filedir = ./whole_img_d0.bin +address = 0x100000 + diff --git a/bsp/bouffalo_lab/bl808/d0/link_stacksize.lds b/bsp/bouffalo_lab/bl808/d0/link_stacksize.lds new file mode 100755 index 0000000000..8685bc0f1c --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/link_stacksize.lds @@ -0,0 +1 @@ +__STACKSIZE__ = 16384; \ No newline at end of file diff --git a/bsp/bouffalo_lab/bl808/d0/merge_rtsmart.py b/bsp/bouffalo_lab/bl808/d0/merge_rtsmart.py new file mode 100755 index 0000000000..c2676692f4 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/merge_rtsmart.py @@ -0,0 +1,88 @@ +import os +import sys + +compress_flag = 0 + +def create_flash_default_data(length): + datas = bytearray(length) + for i in range(length): + datas[i] = 0xff + return datas + +def gen_flash_bin(): + bootload_file = "./pre_build_bin/spl_bl808_d0.bin" + dtb_file = "./pre_build_bin/hw.dtb.5M" # 64k + opensbi_file = "./pre_build_bin/opensbi_v0.6.bin" # 64k + kernel_file = "./Image.bin" + + kernel_out_img_file = "./whole_img_d0.bin" + + bootload_file_size = os.stat(bootload_file).st_size + dtb_file_size = os.stat(dtb_file).st_size + linux_opensbi_file_size = os.stat(opensbi_file).st_size + kernel_file_size = os.stat(kernel_file).st_size + + whole_img_data = create_flash_default_data(0x10000 + 0x10000 + 0x10000 + kernel_file_size) + + # bootload + print("bootload size:", bootload_file_size) + fp = open(bootload_file, 'rb') + data00 = fp.read() + bytearray(0) + fp.close() + whole_img_data[0x0:0x0+len(data00)] = data00 # 0x0~0x10000 64k + + # dtb + print("dtb size:", dtb_file_size) + fp = open(dtb_file, 'rb') + data0 = fp.read() + bytearray(0) + fp.close() + whole_img_data[0x10000:0x10000+len(data0)] = data0 # 0x0~0x10000 64k + + # opensbi + print("opensbi size:",linux_opensbi_file_size) + fp = open(opensbi_file, 'rb') + data1 = fp.read() + bytearray(0) + fp.close() + whole_img_data[0x20000:0x20000+len(data1)] = data1 # 0x10000~0x20000 64k + + # linux kernel + print("kernel img size:",kernel_file_size) + + b0 = (kernel_file_size & 0xff000000) >> 24 + b1 = (kernel_file_size & 0xff0000) >> 16 + b2 = (kernel_file_size & 0xff00) >> 8 + b3 = kernel_file_size & 0xff + # print(b0) + # print(b1) + # print(b2) + # print(b3) + header2 = [0x00,0x00,0x00,compress_flag,b3,b2,b1,b0] + whole_img_data[0x2fff8:0x30000] = bytearray((header2)) # image header + fp = open(kernel_file, 'rb') + data2 = fp.read() + bytearray(0) + fp.close() + whole_img_data[0x30000:0x30000+len(data2)] = data2 # 4M + + fp = open(kernel_out_img_file, 'wb+') + fp.write(whole_img_data) + fp.close() + +if __name__ == '__main__': + if(len(sys.argv) < 2): + compress_flag = 0 + os.system('cp -rf rtthread_d0.bin Image.bin') + else: + if int(sys.argv[1]) == 1: + print("compress mode...") + compress_flag = 1 + os.system('lz4 -9 -f rtthread_d0.bin Image.bin') + else: + compress_flag = 0 + os.system('cp -rf rtthread_d0.bin Image.bin') + + print("merge bin start...") + gen_flash_bin() + print("merge done!") + + os.system('rm -rf Image.bin') + diff --git a/bsp/bouffalo_lab/bl808/d0/pre_build_bin/hw.dtb.5M b/bsp/bouffalo_lab/bl808/d0/pre_build_bin/hw.dtb.5M new file mode 100755 index 0000000000000000000000000000000000000000..c320ed51f0edc666276d0d728f69b63b72c233ad GIT binary patch literal 2091 zcmZ`)O^akT6wMp8objs_#94??&>({K?9y?DZn2>hg;@v=Ga}-`GVi@qSLnQtNm4ac zv!0b3H-Zbnt$Wx02VJ{zE%+1sI460jdfki{?n~~yC- z5ym&5FF{{~Lb9LW|0K>Ye6!wq0^@bgKg(}_{J}@#@??5z>~!53HFj+oP{h0f9r>k_ z)ucRmdpeJhd4dRHo`kaY6=<@@y`9ynZtZq9g-v1nY3L;S=?Xsb#$JTD!w-Z>A!UU3ES$+s5107-d6b&qEUjWz7R< ztVy;xR+sR^7{`bGoNf9R%605j(yTwBwCDdjAI8ad6c08p`cBhN`5yXM?lU!w5@5St z4)^dJLj4{(qswpwQr^U$=l&yW{0rd-y#^(2cPIXULFw-VV^^U+_nl;jK8AmR@_r@z zSIlPvo4wlgsIK$UwBAYVW^EhR-G_xBxfOnvPhBfThs92aHUrFmH z{9K5Idp;Fo;vs}5o`DNF_Phg^mk0Li{XFgKQZKT+kgICYi_5>Gu>Xzj<_ja;a(46h zX1G1b8f&tjquN)wZR_MC!NB>8J9I&2;Y$uUr|bmz@{sSX-9FjJ+o7xbz1#zycO!9s z+}pu($ZXsCg-g#xz~e4uUqwF@#;Hw*b7_tfcp^pt)8Nj!)~HkO zxA&$K9v@_E+B2ip%A6jLm9%EtS^VP9;~XnaU7^Qhae7p#^%441@ZL`03+{#U+fJRj z`ztheF?=i0*X#ia+~sG-Kl_Hp-S4hH>V2;P_rnn$jiXDK>%E>L@sPB)Yjs;GBg(e! zq}PQ};!swVRnFz5GRBERryr_*4$it%b8-|`oe8gNRY<4ug;n=gswua^dFk==#8*>0 zDe8KahXsd&mosD@*!!2XTgs*a3oDy5<-`u-a<%cQsZ_x0PFpC;MzC3;kj;7i uKv#Y#j4aSyi@)8xZOm2_ID2W&oQSJ+qrI(iG|l>pE^HOOtiTp*kmx@ECTvgu literal 0 HcmV?d00001 diff --git a/bsp/bouffalo_lab/bl808/d0/pre_build_bin/opensbi_v0.6.bin b/bsp/bouffalo_lab/bl808/d0/pre_build_bin/opensbi_v0.6.bin new file mode 100755 index 0000000000000000000000000000000000000000..23f67817ea120b5f1ac612f73e73d4f8ca7d623a GIT binary patch literal 41472 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 ADgXcg literal 0 HcmV?d00001 diff --git a/bsp/bouffalo_lab/bl808/d0/rtconfig.h b/bsp/bouffalo_lab/bl808/d0/rtconfig.h new file mode 100755 index 0000000000..6024907d04 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/rtconfig.h @@ -0,0 +1,278 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Project Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 20 +#define RT_USING_SMART +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 16384 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 16384 + +/* kservice optimization */ + +#define RT_KSERVICE_USING_STDLIB +#define RT_KPRINTF_USING_LONGLONG +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_PAGE_MAX_ORDER 11 +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_MEMTRACE +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 256 +#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_VER_NUM 0x50001 +#define ARCH_CPU_64BIT +#define RT_USING_CACHE +#define ARCH_MM_MMU +#define KERNEL_VADDR_START 0x50000000 +#define ARCH_RISCV +#define ARCH_RISCV64 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 16384 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 8192 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* DFS: device virtual file system */ + +#define RT_USING_DFS +#define DFS_USING_POSIX +#define DFS_USING_WORKDIR +#define DFS_FD_MAX 16 +#define RT_USING_DFS_V1 +#define DFS_FILESYSTEMS_MAX 4 +#define DFS_FILESYSTEM_TYPES_MAX 4 +#define RT_USING_DFS_DEVFS +#define RT_USING_LWP +#define RT_LWP_MAX_NR 30 +#define LWP_TASK_STACK_SIZE 16384 +#define RT_CH_MSG_MAX_NR 1024 +#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 +#define LWP_TID_MAX_NR 64 +#define RT_LWP_SHM_MAX_NR 64 + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_TTY +#define RT_USING_NULL +#define RT_USING_ZERO +#define RT_USING_RANDOM +#define RT_USING_RTC + +/* Using USB */ + + +/* C/C++ and POSIX layer */ + +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + +#define RT_USING_POSIX_FS +#define RT_USING_POSIX_DEVIO +#define RT_USING_POSIX_STDIO +#define RT_USING_POSIX_POLL +#define RT_USING_POSIX_SELECT +#define RT_USING_POSIX_TERMIOS +#define RT_USING_POSIX_DELAY +#define RT_USING_POSIX_CLOCK +#define RT_USING_POSIX_TIMER + +/* Interprocess Communication (IPC) */ + +#define RT_USING_POSIX_PIPE +#define RT_USING_POSIX_PIPE_SIZE 512 + +/* Socket is in the 'Network' category */ + + +/* Network */ + + +/* Utilities */ + +#define RT_USING_ADT + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + + +/* XML: Extensible Markup Language */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + +/* sensors drivers */ + + +/* touch drivers */ + + +/* Kendryte SDK */ + + +/* AI packages */ + + +/* Signal Processing and Control Algorithm Packages */ + + +/* miscellaneous packages */ + +/* project laboratory */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Arduino libraries */ + + +/* Projects */ + + +/* Sensors */ + + +/* Display */ + + +/* Timing */ + + +/* Data Processing */ + + +/* Data Storage */ + +/* Communication */ + + +/* Device Control */ + + +/* Other */ + + +/* Signal IO */ + + +/* Uncategorized */ + +#define BSP_USING_BL808 +#define BL808_CORE_D0 +#define C906_PLIC_PHY_ADDR 0xe0000000 +#define IRQ_MAX_NR 64 +#define TIMER_CLK_FREQ 1000000 + +/* General Drivers Configuration */ + +#define BSP_USING_UART3 +#define UART3_TX_USING_GPIO16 +#define UART3_RX_USING_GPIO17 +#define __STACKSIZE__ 16384 + +#endif diff --git a/bsp/bouffalo_lab/bl808/d0/rtconfig.py b/bsp/bouffalo_lab/bl808/d0/rtconfig.py new file mode 100755 index 0000000000..4b3e4e7970 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/d0/rtconfig.py @@ -0,0 +1,63 @@ +import os + +# toolchains options +ARCH ='risc-v' +VENDOR ='t-head' +CPU ='c906' +CROSS_TOOL ='gcc' + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = r'../../../..' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') + +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'/opt/riscv64_musl/bin' +else: + print('Please make sure your toolchains is GNU GCC!') + exit(0) + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = os.getenv('RTT_CC_PREFIX') or 'riscv64-unknown-linux-musl-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -march=rv64imafdc -mabi=lp64 -mcmodel=medany' + CFLAGS = DEVICE + ' -Wall -Wno-cpp -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare' + CFLAGS += ' -Wno-old-style-declaration -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -fshort-enums -fcommon -ffreestanding -fno-strict-aliasing -fno-jump-tables -save-temps=obj' + CFLAGS += ' -D_POSIX_SOURCE' + CFLAGS += ' -DCFG_COMPONENT_BLOG_ENABLE=0 -DBFLB_USE_HAL_DRIVER -DCPU_D0 -DBL808 -DLOG_UART_ID_0' + + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__' + LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T board/linker_scripts/link.lds' + ' -lsupc++ -lgcc -static' + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf' + AFLAGS += ' -gdwarf' + else: + CFLAGS += ' -O3' + + CXXFLAGS = CFLAGS + +DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n' +POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread_d0.bin\n' + SIZE + ' $TARGET \n' +POST_ACTION += 'python3 merge_rtsmart.py' diff --git a/bsp/bouffalo_lab/bl808/flash_prog_cfg.ini b/bsp/bouffalo_lab/bl808/flash_prog_cfg.ini index 9f1649df30..a3d4f4e7e0 100755 --- a/bsp/bouffalo_lab/bl808/flash_prog_cfg.ini +++ b/bsp/bouffalo_lab/bl808/flash_prog_cfg.ini @@ -13,3 +13,8 @@ address = 0x000000 [FW2] filedir = ./lp/rtthread_lp.bin address = 0xC0000 + +[FW3] +filedir = ./d0/whole_img_d0.bin +address = 0x100000 + diff --git a/bsp/bouffalo_lab/bl808/m0/.config b/bsp/bouffalo_lab/bl808/m0/.config index 1c7d3a1540..cce684d307 100644 --- a/bsp/bouffalo_lab/bl808/m0/.config +++ b/bsp/bouffalo_lab/bl808/m0/.config @@ -59,7 +59,6 @@ CONFIG_RT_USING_MESSAGEQUEUE=y # # Memory Management # -CONFIG_RT_PAGE_MAX_ORDER=11 CONFIG_RT_USING_MEMPOOL=y CONFIG_RT_USING_SMALL_MEM=y # CONFIG_RT_USING_SLAB is not set @@ -83,7 +82,7 @@ CONFIG_RT_USING_DEVICE=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" -CONFIG_RT_VER_NUM=0x50000 +CONFIG_RT_VER_NUM=0x50001 # CONFIG_RT_USING_STDC_ATOMIC is not set # CONFIG_RT_USING_CACHE is not set # CONFIG_RT_USING_HW_ATOMIC is not set @@ -118,6 +117,10 @@ 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 + +# +# DFS: device virtual file system +# # CONFIG_RT_USING_DFS is not set # CONFIG_RT_USING_FAL is not set @@ -608,7 +611,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_LKDGUI is not set # CONFIG_PKG_USING_NRF5X_SDK is not set # CONFIG_PKG_USING_NRFX is not set -# CONFIG_PKG_USING_WM_LIBRARIES is not set # # Kendryte SDK @@ -667,7 +669,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # 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_BL_MCU_SDK 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 @@ -973,7 +974,8 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_BSP_USING_BL808=y CONFIG_BL808_CORE_M0=y -# CONFIG_BSP_USING_PSRAM is not set +CONFIG_BSP_USING_TRIPLECORE=y +CONFIG_BSP_USING_PSRAM=y # # General Drivers Configuration @@ -997,3 +999,5 @@ CONFIG_UART0_RX_USING_GPIO15=y # CONFIG_BSP_USING_RTC is not set # CONFIG_BSP_USING_WDT is not set # CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_HWTIMER is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set diff --git a/bsp/bouffalo_lab/bl808/m0/board/Kconfig b/bsp/bouffalo_lab/bl808/m0/board/Kconfig index d9ec26766e..5b4ceb3f6f 100755 --- a/bsp/bouffalo_lab/bl808/m0/board/Kconfig +++ b/bsp/bouffalo_lab/bl808/m0/board/Kconfig @@ -11,6 +11,11 @@ config BL808_CORE_M0 bool default y +config BSP_USING_TRIPLECORE + bool "Enable Triplecore" + default y + select BSP_USING_PSRAM + config BSP_USING_PSRAM bool "Enable PSRAM" default n diff --git a/bsp/bouffalo_lab/bl808/m0/board/board.c b/bsp/bouffalo_lab/bl808/m0/board/board.c index d8545b54e4..644d77c648 100644 --- a/bsp/bouffalo_lab/bl808/m0/board/board.c +++ b/bsp/bouffalo_lab/bl808/m0/board/board.c @@ -184,16 +184,17 @@ void rt_hw_board_init(void) rt_components_board_init(); #endif +#ifdef BSP_USING_TRIPLECORE /* set CPU D0 boot XIP address and flash address */ Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_D0, 1); /* D0 boot from 0x58000000 */ GLB_Set_CPU_Reset_Address(GLB_CORE_ID_D0, 0x58000000); - /* D0 image offset on flash is CONFIG_D0_FLASH_ADDR+0x1000(header) */ - bflb_sf_ctrl_set_flash_image_offset(CONFIG_D0_FLASH_ADDR + 0x1000, 1, SF_CTRL_FLASH_BANK0); + /* D0 image offset on flash is CONFIG_D0_FLASH_ADDR */ + bflb_sf_ctrl_set_flash_image_offset(CONFIG_D0_FLASH_ADDR, 1, SF_CTRL_FLASH_BANK0); Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_LP, 0); /* LP boot from 0x580C0000 */ - GLB_Set_CPU_Reset_Address(GLB_CORE_ID_LP, 0x580C0000); + GLB_Set_CPU_Reset_Address(GLB_CORE_ID_LP, 0x58000000 + CONFIG_LP_FLASH_ADDR); GLB_Release_CPU(GLB_CORE_ID_D0); GLB_Release_CPU(GLB_CORE_ID_LP); @@ -202,6 +203,7 @@ void rt_hw_board_init(void) BL_WR_WORD(IPC_SYNC_ADDR1, IPC_SYNC_FLAG); BL_WR_WORD(IPC_SYNC_ADDR2, IPC_SYNC_FLAG); L1C_DCache_Clean_By_Addr(IPC_SYNC_ADDR1, 8); +#endif } void rt_hw_cpu_reset(void) diff --git a/bsp/bouffalo_lab/bl808/m0/board/board.h b/bsp/bouffalo_lab/bl808/m0/board/board.h index 87b65931e7..b6322e22e2 100644 --- a/bsp/bouffalo_lab/bl808/m0/board/board.h +++ b/bsp/bouffalo_lab/bl808/m0/board/board.h @@ -26,6 +26,7 @@ #include "bl808_uhs_phy.h" #define CONFIG_D0_FLASH_ADDR 0x100000 +#define CONFIG_LP_FLASH_ADDR 0x0C0000 extern uint8_t __HeapBase; extern uint8_t __HeapLimit; diff --git a/bsp/bouffalo_lab/bl808/m0/rtconfig.h b/bsp/bouffalo_lab/bl808/m0/rtconfig.h index 588144e386..71d1b2d367 100644 --- a/bsp/bouffalo_lab/bl808/m0/rtconfig.h +++ b/bsp/bouffalo_lab/bl808/m0/rtconfig.h @@ -36,7 +36,6 @@ /* Memory Management */ -#define RT_PAGE_MAX_ORDER 11 #define RT_USING_MEMPOOL #define RT_USING_SMALL_MEM #define RT_USING_SMALL_MEM_AS_HEAP @@ -48,7 +47,7 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart0" -#define RT_VER_NUM 0x50000 +#define RT_VER_NUM 0x50001 #define ARCH_RISCV #define ARCH_RISCV_FPU #define ARCH_RISCV_FPU_S @@ -74,6 +73,9 @@ #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +/* DFS: device virtual file system */ + + /* Device Drivers */ #define RT_USING_DEVICE_IPC @@ -227,6 +229,8 @@ #define BSP_USING_BL808 #define BL808_CORE_M0 +#define BSP_USING_TRIPLECORE +#define BSP_USING_PSRAM /* General Drivers Configuration */ diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/SConscript b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/SConscript index ce0285bb0e..447d6dfae3 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/SConscript +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/SConscript @@ -11,29 +11,35 @@ CPPPATH = [cwd, cwd + r'/include/arch/risc-v/t-head/Core/Include', cwd + r'/src/flash'] -src = Split(""" - src/bflb_adc.c - src/bflb_cks.c - src/bflb_ef_ctrl.c - src/bflb_gpio.c - src/bflb_i2c.c - src/bflb_dma.c - src/bflb_rtc.c - src/bflb_sec_aes.c - src/bflb_sec_sha.c - src/bflb_sec_trng.c - src/bflb_spi.c - src/bflb_timer.c - src/bflb_uart.c - src/bflb_wdg.c - src/bflb_flash.c - src/flash/bflb_sf_cfg.c - src/flash/bflb_xip_sflash.c - src/flash/bflb_sflash.c - src/flash/bflb_sf_ctrl.c - src/bflb_l1c.c - src/bflb_mtimer.c -""") +if GetDepend('BL808_CORE_D0'): + src = Split(""" + src/bflb_gpio.c + src/bflb_uart.c + """) +else: + src = Split(""" + src/bflb_adc.c + src/bflb_cks.c + src/bflb_ef_ctrl.c + src/bflb_gpio.c + src/bflb_i2c.c + src/bflb_dma.c + src/bflb_rtc.c + src/bflb_sec_aes.c + src/bflb_sec_sha.c + src/bflb_sec_trng.c + src/bflb_spi.c + src/bflb_timer.c + src/bflb_uart.c + src/bflb_wdg.c + src/bflb_flash.c + src/flash/bflb_sf_cfg.c + src/flash/bflb_xip_sflash.c + src/flash/bflb_sflash.c + src/flash/bflb_sf_ctrl.c + src/bflb_l1c.c + src/bflb_mtimer.c + """) if not GetDepend('BL808_CORE_D0'): src += ['src/bflb_irq.c'] diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/include/bflb_core.h b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/include/bflb_core.h index e68737b854..8f095c8023 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/include/bflb_core.h +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/include/bflb_core.h @@ -90,7 +90,7 @@ void assert_func(uint8_t *file, uint32_t line, uint8_t *function, uint8_t *strin struct bflb_device_s { const char *name; - uint32_t reg_base; + size_t reg_base; uint8_t irq_num; uint8_t idx; uint8_t sub_idx; diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_gpio.c b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_gpio.c index b20e6717cb..43a91ed1db 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_gpio.c +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_gpio.c @@ -4,8 +4,8 @@ void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset) { uint32_t cfg = 0; - uint32_t reg_base; - uint32_t cfg_address; + size_t reg_base; + size_t cfg_address; uint8_t drive; uint8_t function; uint16_t mode; @@ -202,7 +202,7 @@ uint32_t bflb_gpio_pin32_63_read(struct bflb_device_s *dev) void bflb_gpio_int_init(struct bflb_device_s *dev, uint8_t pin, uint8_t trig_mode) { - uint32_t reg_base; + size_t reg_base; uint32_t cfg_address; uint32_t regval; @@ -234,7 +234,7 @@ void bflb_gpio_int_init(struct bflb_device_s *dev, uint8_t pin, uint8_t trig_mod void bflb_gpio_int_mask(struct bflb_device_s *dev, uint8_t pin, bool mask) { - uint32_t reg_base; + size_t reg_base; uint32_t cfg_address; uint32_t regval; @@ -272,7 +272,7 @@ bool bflb_gpio_get_intstatus(struct bflb_device_s *dev, uint8_t pin) void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin) { - uint32_t reg_base; + size_t reg_base; uint32_t cfg_address; uint32_t regval; @@ -298,7 +298,7 @@ void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin) void bflb_gpio_uart_init(struct bflb_device_s *dev, uint8_t pin, uint8_t uart_func) { - uint32_t reg_base; + size_t reg_base; uint32_t regval; uint8_t sig; uint8_t sig_pos; @@ -412,7 +412,7 @@ void bflb_gpio_uart_init(struct bflb_device_s *dev, uint8_t pin, uint8_t uart_fu int bflb_gpio_feature_control(struct bflb_device_s *dev, int cmd, size_t arg) { int ret = 0; - uint32_t reg_base; + size_t reg_base; uint32_t regval; uint8_t pin = arg; diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_uart.c b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_uart.c index abed55c829..d838fb6140 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_uart.c +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/lhal/src/bflb_uart.c @@ -7,7 +7,7 @@ void bflb_uart_init(struct bflb_device_s *dev, const struct bflb_uart_config_s * uint32_t div = 0; uint32_t tx_cfg; uint32_t rx_cfg; - uint32_t reg_base; + size_t reg_base; uint32_t regval; reg_base = dev->reg_base; @@ -119,7 +119,7 @@ void bflb_uart_init(struct bflb_device_s *dev, const struct bflb_uart_config_s * void bflb_uart_deinit(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; uint32_t tx_cfg; uint32_t rx_cfg; @@ -134,7 +134,7 @@ void bflb_uart_deinit(struct bflb_device_s *dev) void bflb_uart_enable(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; uint32_t tx_cfg; uint32_t rx_cfg; @@ -149,7 +149,7 @@ void bflb_uart_enable(struct bflb_device_s *dev) void bflb_uart_disable(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; uint32_t tx_cfg; uint32_t rx_cfg; @@ -164,7 +164,7 @@ void bflb_uart_disable(struct bflb_device_s *dev) void bflb_uart_link_txdma(struct bflb_device_s *dev, bool enable) { - uint32_t reg_base; + size_t reg_base; uint32_t regval; reg_base = dev->reg_base; @@ -179,7 +179,7 @@ void bflb_uart_link_txdma(struct bflb_device_s *dev, bool enable) void bflb_uart_link_rxdma(struct bflb_device_s *dev, bool enable) { - uint32_t reg_base; + size_t reg_base; uint32_t regval; reg_base = dev->reg_base; @@ -195,14 +195,14 @@ void bflb_uart_link_rxdma(struct bflb_device_s *dev, bool enable) ATTR_TCM_SECTION int bflb_uart_putchar(struct bflb_device_s *dev, int ch) { uint64_t start_time; - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; - start_time = bflb_mtimer_get_time_ms(); + // start_time = bflb_mtimer_get_time_ms(); while ((getreg32(reg_base + UART_FIFO_CONFIG_1_OFFSET) & UART_TX_FIFO_CNT_MASK) == 0) { - if ((bflb_mtimer_get_time_ms() - start_time) > 100) { - return -ETIMEDOUT; - } + // if ((bflb_mtimer_get_time_ms() - start_time) > 100) { + // return -ETIMEDOUT; + // } } putreg8(ch, reg_base + UART_FIFO_WDATA_OFFSET); return 0; @@ -211,7 +211,7 @@ ATTR_TCM_SECTION int bflb_uart_putchar(struct bflb_device_s *dev, int ch) ATTR_TCM_SECTION int bflb_uart_getchar(struct bflb_device_s *dev) { int ch = -1; - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; if ((getreg32(reg_base + UART_FIFO_CONFIG_1_OFFSET) & UART_RX_FIFO_CNT_MASK) != 0) { @@ -250,7 +250,7 @@ ATTR_TCM_SECTION int bflb_uart_get(struct bflb_device_s *dev, uint8_t *data, uin bool bflb_uart_txready(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; if ((getreg32(reg_base + UART_FIFO_CONFIG_1_OFFSET) & UART_TX_FIFO_CNT_MASK) != 0) { @@ -262,7 +262,7 @@ bool bflb_uart_txready(struct bflb_device_s *dev) bool bflb_uart_txempty(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; if ((getreg32(reg_base + UART_FIFO_CONFIG_1_OFFSET) & UART_TX_FIFO_CNT_MASK) == (UART_TX_FIFO_CNT_MASK >> 1) + 1) { @@ -274,7 +274,7 @@ bool bflb_uart_txempty(struct bflb_device_s *dev) bool bflb_uart_rxavailable(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; return ((getreg32(reg_base + UART_FIFO_CONFIG_1_OFFSET) & UART_RX_FIFO_CNT_MASK) != 0); @@ -282,7 +282,7 @@ bool bflb_uart_rxavailable(struct bflb_device_s *dev) void bflb_uart_txint_mask(struct bflb_device_s *dev, bool mask) { - uint32_t reg_base; + size_t reg_base; uint32_t int_mask; reg_base = dev->reg_base; @@ -297,7 +297,7 @@ void bflb_uart_txint_mask(struct bflb_device_s *dev, bool mask) void bflb_uart_rxint_mask(struct bflb_device_s *dev, bool mask) { - uint32_t reg_base; + size_t reg_base; uint32_t int_mask; reg_base = dev->reg_base; @@ -314,7 +314,7 @@ void bflb_uart_rxint_mask(struct bflb_device_s *dev, bool mask) void bflb_uart_errint_mask(struct bflb_device_s *dev, bool mask) { - uint32_t reg_base; + size_t reg_base; uint32_t int_mask; reg_base = dev->reg_base; @@ -339,7 +339,7 @@ void bflb_uart_errint_mask(struct bflb_device_s *dev, bool mask) uint32_t bflb_uart_get_intstatus(struct bflb_device_s *dev) { - uint32_t reg_base; + size_t reg_base; uint32_t int_status; uint32_t int_mask; @@ -351,7 +351,7 @@ uint32_t bflb_uart_get_intstatus(struct bflb_device_s *dev) void bflb_uart_int_clear(struct bflb_device_s *dev, uint32_t int_clear) { - uint32_t reg_base; + size_t reg_base; reg_base = dev->reg_base; putreg32(int_clear, reg_base + UART_INT_CLEAR_OFFSET); @@ -360,7 +360,7 @@ void bflb_uart_int_clear(struct bflb_device_s *dev, uint32_t int_clear) int bflb_uart_feature_control(struct bflb_device_s *dev, int cmd, size_t arg) { int ret = 0; - uint32_t reg_base; + size_t reg_base; uint32_t tmp; uint32_t tx_tmp; uint32_t rx_tmp; diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/SConscript b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/SConscript index d6bfd46f57..6d4a32a324 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/SConscript +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/SConscript @@ -7,6 +7,7 @@ src = [] CPPPATH = [cwd] CPPDEFINES = [] +LOCAL_CFLAGS = ' -DARCH_RISCV' if GetDepend('BL808_CORE_M0'): src += Split(""" @@ -52,12 +53,18 @@ if GetDepend('BL808_CORE_M0') or GetDepend('BL808_CORE_LP'): std/src/bl808_uhs_phy.c std/port/bl808_clock.c """) +elif GetDepend('BL808_CORE_D0'): + src += Split(""" + std/src/bl808_ioremap.c + std/src/bl808_clock.c + std/src/bl808_hbn.c + std/port/bl808_clock.c + """) CPPPATH += [cwd + r'/std/include', cwd + r'/std/include/hardware'] CPPDEFINES += ['CONFIG_IRQ_NUM=80', 'BFLB_USE_HAL_DRIVER', 'BL808', 'default_interrupt_handler=SW_handler'] -LOCAL_CFLAGS = ' -DARCH_RISCV' group = DefineGroup('bl808', src, depend = ['BSP_USING_BL808'], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LOCAL_CFLAGS = LOCAL_CFLAGS) diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/bl808_ioremap.h b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/bl808_ioremap.h new file mode 100644 index 0000000000..6f9a1f927e --- /dev/null +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/bl808_ioremap.h @@ -0,0 +1,163 @@ +/** + ****************************************************************************** + * @file bl808_ioremap.h + * @version V1.0 + * @date + * @brief This file is the standard driver header file + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2020 Bouffalo Lab

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of Bouffalo Lab nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +#ifndef __BL808_IOREMAP_H__ +#define __BL808_IOREMAP_H__ + +#include + +#define GLB_BASE_PHY ((uint32_t)0x20000000) +#define MIX_BASE ((uint32_t)0x20001000) +#define GPIP_BASE ((uint32_t)0x20002000) +#define PHY_BASE ((uint32_t)0x20002800) +#define AGC_BASE ((uint32_t)0x20002c00) +#define SEC_DBG_BASE ((uint32_t)0x20003000) +#define SEC_ENG_BASE ((uint32_t)0x20004000) +#define TZ1_BASE ((uint32_t)0x20005000) +#define TZC_SEC_BASE ((uint32_t)0x20005000) +#define TZ2_BASE ((uint32_t)0x20006000) +#define TZC_NSEC_BASE ((uint32_t)0x20006000) +#define EFUSE_BASE ((uint32_t)0x20056000) +#define EF_DATA_BASE ((uint32_t)0x20056000) +#define EF_CTRL_BASE ((uint32_t)0x20056000) +#define CCI_BASE_PHY ((uint32_t)0x20008000) +#define MCU_MISC_BASE ((uint32_t)0x20009000) +#define L1C_BASE ((uint32_t)0x20009000) +#define UART0_BASE ((uint32_t)0x2000a000) +#define UART1_BASE ((uint32_t)0x2000a100) +#define SPI0_BASE ((uint32_t)0x2000a200) +#define I2C0_BASE ((uint32_t)0x2000a300) +#define PWM_BASE ((uint32_t)0x2000a400) +#define TIMER0_BASE ((uint32_t)0x2000a500) +#define IR_BASE ((uint32_t)0x2000a600) +#define CKS_BASE ((uint32_t)0x2000a700) +#define IPC0_BASE ((uint32_t)0x2000a800) +#define IPC1_BASE ((uint32_t)0x2000a840) +#define I2C1_BASE ((uint32_t)0x2000a900) +#define UART2_BASE ((uint32_t)0x2000aa00) +#define I2S_BASE ((uint32_t)0x2000ab00) +#define PDM0_BASE ((uint32_t)0x2000a000) +#define LZ4D_BASE ((uint32_t)0x2000ad00) +#define QSPI_BASE ((uint32_t)0x2000b000) +#define SF_CTRL_BASE ((uint32_t)0x2000b000) +#define SF_CTRL_BUF_BASE ((uint32_t)0x2000b600) +#define DMA0_BASE ((uint32_t)0x2000c000) +#define PDS_BASE_PHY ((uint32_t)0x2000e000) +#define HBN_BASE_PHY ((uint32_t)0x2000f000) +#define AON_BASE ((uint32_t)0x2000f000) +#define EMI_MISC_BASE ((uint32_t)0x20050000) +#define PSRAM_CTRL_BASE ((uint32_t)0x20052000) +#define USB_BASE ((uint32_t)0x20072000) +#define AUDIO_BASE ((uint32_t)0x20055000) +#define SDH_BASE ((uint32_t)0x20060000) +#define EMAC_BASE ((uint32_t)0x20070000) +#define DMA1_BASE ((uint32_t)0x20071000) + +/* MMSYS */ +#define MM_MISC_BASE ((uint32_t)0x30000000) +#define DMA2_BASE ((uint32_t)0x30001000) +#define UART3_BASE ((uint32_t)0x30002000) +#define I2C2_BASE ((uint32_t)0x30003000) +#define I2C3_BASE ((uint32_t)0x30004000) +#define IPC2_BASE ((uint32_t)0x30005000) +#define DMA2D_BASE ((uint32_t)0x30006000) +#define CLKRST_CTRL_BASE ((uint32_t)0x30007000) +#define MM_GLB_BASE_PHY ((uint32_t)0x30007000) +#define SPI1_BASE ((uint32_t)0x30008000) +#define TIMER1_BASE ((uint32_t)0x30009000) +#define PSRAM_UHS_BASE ((uint32_t)0x3000f000) + +/* SUBSYS */ +#define SUB_MISC_BASE ((uint32_t)0x30010000) +#define SUB_BASE ((uint32_t)0x30011000) +#define DVP0_BASE ((uint32_t)0x30012000) +#define DVP1_BASE ((uint32_t)0x30012100) +#define DVP2_BASE ((uint32_t)0x30012200) +#define DVP3_BASE ((uint32_t)0x30012300) +#define DVP4_BASE ((uint32_t)0x30012400) +#define DVP5_BASE ((uint32_t)0x30012500) +#define DVP6_BASE ((uint32_t)0x30012600) +#define DVP7_BASE ((uint32_t)0x30012700) +#define DVP_TSRC0_BASE ((uint32_t)0x30012800) +#define DVP_TSRC1_BASE ((uint32_t)0x30012900) +#define AXI_CTRL_NR3D_BASE ((uint32_t)0x30012a00) +#define OSD_PROBE_BASE ((uint32_t)0x30012b00) +#define OSD_A_BASE ((uint32_t)0x30013000) +#define OSD_B_BASE ((uint32_t)0x30014000) +#define OSD_DP_BASE ((uint32_t)0x30015000) +#define OSD_BLEND0_OFFSET (0x000) +#define OSD_BLEND1_OFFSET (0x100) +#define OSD_BLEND2_OFFSET (0x200) +#define OSD_BLEND3_OFFSET (0x300) +#define OSD_DRAW_LOW_OFFSET (0x400) +#define OSD_DRAW_HIGH_OFFSET (0x504) +#define MIPI_BASE ((uint32_t)0x3001a000) +#define DBI_BASE ((uint32_t)0x3001b000) +#define DSI_BASE ((uint32_t)0x3001a100) +#define CSI_BASE ((uint32_t)0x3001a000) + +/* CODEC_SUBSYS */ +#define CODEC_MISC_BASE ((uint32_t)0x30020000) +#define MJPEG_BASE ((uint32_t)0x30021000) +#define VIDEO_BASE ((uint32_t)0x30022000) +#define MJPEG_DEC_BASE ((uint32_t)0x30023000) +#define BL_CNN_BASE ((uint32_t)0x30024000) + +#define HBN_RAM_BASE ((uint32_t)0x20010000) + +#define RF_BASE ((uint32_t)0x20001000) + + +extern void *glb_base; +extern size_t get_glb_base(void); +#define GLB_BASE get_glb_base() + +extern void *cci_base; +extern size_t get_cci_base(void); +#define CCI_BASE get_cci_base() + +extern void *hbn_base; +extern size_t get_hbn_base(void); +#define PDS_BASE get_pds_base() + +extern void *pds_base; +extern size_t get_pds_base(void); +#define HBN_BASE get_hbn_base() + +extern void *mm_glb_base; +extern size_t get_mm_glb_base(void); +#define MM_GLB_BASE get_mm_glb_base() + +#endif /* __BL808_IOREMAP_H__ */ \ No newline at end of file diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/hardware/bl808.h b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/hardware/bl808.h index 4e34802d14..f77bb2d727 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/hardware/bl808.h +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/include/hardware/bl808.h @@ -399,6 +399,9 @@ typedef enum { /*@} end of group Memory_Map_Section */ /* BL808 peripherals base address */ + +#ifndef RT_USING_SMART + /* WLSYS */ #define GLB_BASE ((uint32_t)0x20000000) #define MIX_BASE ((uint32_t)0x20001000) @@ -501,6 +504,12 @@ typedef enum { #define RF_BASE ((uint32_t)0x20001000) +#else + +#include "bl808_ioremap.h" + +#endif + typedef enum { BL_AHB_MASTER_CPU = 0x00, BL_AHB_MASTER_SDU = 0x01, diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/src/bl808_ioremap.c b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/src/bl808_ioremap.c new file mode 100644 index 0000000000..803f220735 --- /dev/null +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/src/bl808_ioremap.c @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file bl808_ioremap.c + * @version V1.0 + * @date + * @brief This file is the standard driver c file + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2020 Bouffalo Lab

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of Bouffalo Lab nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +#ifdef RT_USING_SMART + +#include +#include +#include "bl808.h" + +void *glb_base = NULL; +size_t get_glb_base(void) +{ + if(glb_base == NULL) + { + glb_base = rt_ioremap((void *)GLB_BASE_PHY, 0x1000); + } + return (size_t)glb_base; +} + +void *cci_base = NULL; +size_t get_cci_base(void) +{ + if(cci_base == NULL) + { + cci_base = rt_ioremap((void *)CCI_BASE_PHY, 0x1000); + } + return (size_t)cci_base; +} + +void *pds_base = NULL; +size_t get_pds_base(void) +{ + if(pds_base == NULL) + { + pds_base = rt_ioremap((void *)PDS_BASE_PHY, 0x1000); + } + return (size_t)pds_base; +} + +void *hbn_base = NULL; +size_t get_hbn_base(void) +{ + if(hbn_base == NULL) + { + hbn_base = rt_ioremap((void *)HBN_BASE_PHY, 0x1000); + } + return (size_t)hbn_base; +} + +void *mm_glb_base = NULL; +size_t get_mm_glb_base(void) +{ + if(mm_glb_base == NULL) + { + mm_glb_base = rt_ioremap((void *)MM_GLB_BASE_PHY, 0x1000); + } + return (size_t)mm_glb_base; +} + +#endif diff --git a/bsp/bouffalo_lab/libraries/rt_drivers/drv_uart.c b/bsp/bouffalo_lab/libraries/rt_drivers/drv_uart.c old mode 100755 new mode 100644 index 4bd3c1cb24..3dac639224 --- a/bsp/bouffalo_lab/libraries/rt_drivers/drv_uart.c +++ b/bsp/bouffalo_lab/libraries/rt_drivers/drv_uart.c @@ -15,6 +15,10 @@ #include "board.h" #include "drv_uart.h" +#ifdef RT_USING_SMART +#include +#endif + #define DBG_TAG "DRV.UART" #define DBG_LVL DBG_WARNING #include @@ -86,13 +90,69 @@ #define UART2_GPIO_RX GPIO_PIN_21 #endif + +// uart3 +#ifdef UART3_TX_USING_GPIO0 +#define UART3_GPIO_TX GPIO_PIN_0 +#elif defined(UART3_TX_USING_GPIO4) +#define UART3_GPIO_TX GPIO_PIN_4 +#elif defined(UART3_TX_USING_GPIO8) +#define UART3_GPIO_TX GPIO_PIN_8 +#elif defined(UART3_TX_USING_GPIO12) +#define UART3_GPIO_TX GPIO_PIN_12 +#elif defined(UART3_TX_USING_GPIO16) +#define UART3_GPIO_TX GPIO_PIN_16 +#elif defined(UART3_TX_USING_GPIO18) +#define UART3_GPIO_TX GPIO_PIN_18 +#elif defined(UART3_TX_USING_GPIO20) +#define UART3_GPIO_TX GPIO_PIN_20 +#elif defined(UART3_TX_USING_GPIO24) +#define UART3_GPIO_TX GPIO_PIN_24 +#elif defined(UART3_TX_USING_GPIO28) +#define UART3_GPIO_TX GPIO_PIN_28 +#elif defined(UART3_TX_USING_GPIO32) +#define UART3_GPIO_TX GPIO_PIN_32 +#elif defined(UART3_TX_USING_GPIO36) +#define UART3_GPIO_TX GPIO_PIN_36 +#elif defined(UART3_TX_USING_GPIO40) +#define UART3_GPIO_TX GPIO_PIN_40 +#elif defined(UART3_TX_USING_GPIO44) +#define UART3_GPIO_TX GPIO_PIN_44 +#endif + +#ifdef UART3_RX_USING_GPIO1 +#define UART3_GPIO_RX GPIO_PIN_1 +#elif defined(UART3_RX_USING_GPIO5) +#define UART3_GPIO_RX GPIO_PIN_5 +#elif defined(UART3_RX_USING_GPIO9) +#define UART3_GPIO_RX GPIO_PIN_9 +#elif defined(UART3_RX_USING_GPIO13) +#define UART3_GPIO_RX GPIO_PIN_13 +#elif defined(UART3_RX_USING_GPIO17) +#define UART3_GPIO_RX GPIO_PIN_17 +#elif defined(UART3_RX_USING_GPIO21) +#define UART3_GPIO_RX GPIO_PIN_21 +#elif defined(UART3_RX_USING_GPIO25) +#define UART3_GPIO_RX GPIO_PIN_25 +#elif defined(UART3_RX_USING_GPIO29) +#define UART3_GPIO_RX GPIO_PIN_29 +#elif defined(UART3_RX_USING_GPIO33) +#define UART3_GPIO_RX GPIO_PIN_33 +#elif defined(UART3_RX_USING_GPIO37) +#define UART3_GPIO_RX GPIO_PIN_37 +#elif defined(UART3_RX_USING_GPIO41) +#define UART3_GPIO_RX GPIO_PIN_41 +#elif defined(UART3_RX_USING_GPIO45) +#define UART3_GPIO_RX GPIO_PIN_45 +#endif + struct device_uart { struct rt_serial_device serial; struct bflb_device_s *bflb_device; }; -static void _uart_rx_irq(int irq, void *arg) +static void uart_irq_handler(int irq, void *arg) { struct rt_serial_device *serial = (struct rt_serial_device *)arg; RT_ASSERT(serial != RT_NULL); @@ -212,15 +272,26 @@ static rt_err_t _uart_control(struct rt_serial_device *serial, int cmd, void *ar { /* disable interrupt */ case RT_DEVICE_CTRL_CLR_INT: + bflb_uart_rxint_mask(uart->bflb_device, true); +#ifdef BL808_CORE_D0 + rt_hw_interrupt_mask(uart->bflb_device->irq_num); + rt_hw_interrupt_install(uart->bflb_device->irq_num, RT_NULL, serial, RT_NULL); +#else bflb_irq_disable(uart->bflb_device->irq_num); - bflb_irq_attach(uart->bflb_device->irq_num, NULL, NULL); + bflb_irq_attach(uart->bflb_device->irq_num, RT_NULL, RT_NULL); +#endif break; /* enable interrupt */ case RT_DEVICE_CTRL_SET_INT: bflb_uart_rxint_mask(uart->bflb_device, false); - bflb_irq_attach(uart->bflb_device->irq_num, _uart_rx_irq, serial); +#ifdef BL808_CORE_D0 + rt_hw_interrupt_install(uart->bflb_device->irq_num, uart_irq_handler, serial, RT_NULL); + rt_hw_interrupt_umask(uart->bflb_device->irq_num); +#else + bflb_irq_attach(uart->bflb_device->irq_num, uart_irq_handler, serial); bflb_irq_enable(uart->bflb_device->irq_num); +#endif break; } return RT_EOK; @@ -265,85 +336,90 @@ static const struct rt_uart_ops _uart_ops = .dma_transmit = RT_NULL }; +static void _uart_init(const char *name, struct device_uart *uart, rt_uint32_t flag) +{ + rt_err_t result = RT_EOK; + + struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; + struct rt_serial_device *serial; + + serial = &uart->serial; + + serial->ops = &_uart_ops; + serial->config = config; + serial->config.baud_rate = UART_DEFAULT_BAUDRATE; + + /* register USART device */ + result = rt_hw_serial_register(serial, + name, + flag, + uart); + RT_ASSERT(result == RT_EOK); +} /* * UART Initiation */ int rt_hw_uart_init(void) { - rt_err_t result = 0; struct bflb_device_s *gpio; - - struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; - struct rt_serial_device *serial; - struct device_uart *uart; + rt_uint32_t flag; gpio = bflb_device_get_by_name("gpio"); #ifdef BSP_USING_UART0 static struct device_uart bl_uart0; - - serial = &bl_uart0.serial; - uart = &bl_uart0; - - serial->ops = &_uart_ops; - serial->config = config; - serial->config.baud_rate = UART_DEFAULT_BAUDRATE; - - uart->bflb_device = bflb_device_get_by_name("uart0"); + bl_uart0.bflb_device = bflb_device_get_by_name("uart0"); bflb_gpio_uart_init(gpio, UART0_GPIO_TX, GPIO_UART_FUNC_UART0_TX); bflb_gpio_uart_init(gpio, UART0_GPIO_RX, GPIO_UART_FUNC_UART0_RX); - /* register USART device */ - result = rt_hw_serial_register(serial, - "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, - uart); - RT_ASSERT(result == RT_EOK); + flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX; + + _uart_init("uart0", &bl_uart0, flag); #endif #ifdef BSP_USING_UART1 static struct device_uart bl_uart1; + bl_uart1.bflb_device = bflb_device_get_by_name("uart1"); - serial = &bl_uart1.serial; - uart = &bl_uart1; - - serial->ops = &_uart_ops; - serial->config = config; - serial->config.baud_rate = UART_DEFAULT_BAUDRATE; - - uart->bflb_device = bflb_device_get_by_name("uart1"); bflb_gpio_uart_init(gpio, UART1_GPIO_TX, GPIO_UART_FUNC_UART1_TX); bflb_gpio_uart_init(gpio, UART1_GPIO_RX, GPIO_UART_FUNC_UART1_RX); - /* register USART device */ - result = rt_hw_serial_register(serial, - "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, - uart); - RT_ASSERT(result == RT_EOK); + flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX; + + _uart_init("uart1", &bl_uart1, flag); #endif #ifdef BSP_USING_UART2 static struct device_uart bl_uart2; + bl_uart2.bflb_device = bflb_device_get_by_name("uart2"); - serial = &bl_uart2.serial; - uart = &bl_uart2; - - serial->ops = &_uart_ops; - serial->config = config; - serial->config.baud_rate = UART_DEFAULT_BAUDRATE; - - uart->bflb_device = bflb_device_get_by_name("uart2"); bflb_gpio_uart_init(gpio, UART2_GPIO_TX, GPIO_UART_FUNC_UART2_TX); bflb_gpio_uart_init(gpio, UART2_GPIO_RX, GPIO_UART_FUNC_UART2_RX); - /* register USART device */ - result = rt_hw_serial_register(serial, - "uart2", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, - uart); - RT_ASSERT(result == RT_EOK); + flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX; + + _uart_init("uart2", &bl_uart2, flag); #endif + +#ifdef BSP_USING_UART3 + static struct device_uart bl_uart3; + bl_uart3.bflb_device = bflb_device_get_by_name("uart3"); + +#ifdef RT_USING_SMART + gpio->reg_base = (size_t)rt_ioremap((void *)gpio->reg_base, 0x1000); + bl_uart3.bflb_device->reg_base = (size_t)rt_ioremap((void *)bl_uart3.bflb_device->reg_base, 0x1000); +#endif + + bflb_gpio_init(gpio, UART3_GPIO_TX, 21 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, UART3_GPIO_RX, 21 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + + flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX; + if(strcmp("uart3", RT_CONSOLE_DEVICE_NAME) == 0) + flag |= RT_DEVICE_FLAG_STREAM; + + _uart_init("uart3", &bl_uart3, flag); +#endif + return 0; }