mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
[bsp/bouffalo_lab]add bl808-d0 (#7373)
Co-authored-by: chenyisong <chenyisong@tuya.com>
This commit is contained in:
1 parent
efbdeb25ee
commit
c2ac614c59
35 files changed
+2546
-114
No files matched your search
@@ -2,4 +2,5 @@
|
||||
|
||||
scons -C m0
|
||||
scons -C lp
|
||||
scons -C d0
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Executable
+24
@@ -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
|
||||
Executable
+14
@@ -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')
|
||||
Executable
+52
@@ -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)
|
||||
+9
@@ -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')
|
||||
@@ -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 <rtthread.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rt_kprintf("Hello RT-Smart!\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
Executable
+92
@@ -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
|
||||
Executable
+9
@@ -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')
|
||||
@@ -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 <rthw.h>
|
||||
#include <rtthread.h>
|
||||
|
||||
#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);
|
||||
Executable
+30
@@ -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 <rtconfig.h>
|
||||
|
||||
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
|
||||
+197
@@ -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) }
|
||||
}
|
||||
Executable
+12
@@ -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
|
||||
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
__STACKSIZE__ = 16384;
|
||||
Executable
+88
@@ -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')
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Executable
+278
File diff suppressed because it is too large.
Load diff
Executable
+63
@@ -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'
|
||||
@@ -13,3 +13,8 @@ address = 0x000000
|
||||
[FW2]
|
||||
filedir = ./lp/rtthread_lp.bin
|
||||
address = 0xC0000
|
||||
|
||||
[FW3]
|
||||
filedir = ./d0/whole_img_d0.bin
|
||||
address = 0x100000
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file bl808_ioremap.h
|
||||
* @version V1.0
|
||||
* @date
|
||||
* @brief This file is the standard driver header file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>
|
||||
*
|
||||
* 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 <stdlib.h>
|
||||
|
||||
#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__ */
|
||||
@@ -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,
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file bl808_ioremap.c
|
||||
* @version V1.0
|
||||
* @date
|
||||
* @brief This file is the standard driver c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>
|
||||
*
|
||||
* 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 <stdlib.h>
|
||||
#include <ioremap.h>
|
||||
#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
|
||||
Executable → Regular
+127
-51
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user