summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorgreedyhao <[email protected]>2020-12-30 17:43:23 +0800
committergreedyhao <[email protected]>2020-12-30 17:43:23 +0800
commit7741df50abdf70d5cdea1791b8c21b6cfb0e71b4 (patch)
tree3486d7d5812ccb4f90983b16fb3ec6c84af52291 /bsp
parent08aa4e5462a3d480114cfd8e61e9f7dc7c0b10c9 (diff)
[bsp][bluetrum] update link.lds
Diffstat (limited to 'bsp')
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/.config1
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/link.lds13
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets13
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh4
-rw-r--r--bsp/bluetrum/libcpu/cpu/context_gcc.S44
-rw-r--r--bsp/bluetrum/libcpu/cpu/cpuport.c15
6 files changed, 51 insertions, 39 deletions
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/.config b/bsp/bluetrum/ab32vg1-ab-prougen/.config
index d6b19f6f8b..6dea3429e3 100644
--- a/bsp/bluetrum/ab32vg1-ab-prougen/.config
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/.config
@@ -380,6 +380,7 @@ CONFIG_RT_USING_LIBC=y
# CONFIG_PKG_USING_UC_COMMON is not set
# CONFIG_PKG_USING_UC_MODBUS is not set
# CONFIG_PKG_USING_PPOOL is not set
+# CONFIG_PKG_USING_OPENAMP is not set
#
# peripheral libraries and drivers
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
index 10d5b3b590..fa847c2400 100644
--- a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
@@ -60,15 +60,10 @@ SECTIONS
} > ram1 AT > flash
.comm : {
- KEEP (*(.vector))
- EXCLUDE_FILE (*hal_drivers**.o *ab32vg1_hal**.o *components*finsh**.o *components*libc**.o *rt-thread*src**.o *kernel*src**.o *romfs.o *lib_a**.o) *(.text*)
- *idle.o (.text*)
- *ipc.o (.text*)
- *irq.o (.text*)
- *scheduler.o (.text*)
- *timer.o (.text*)
- *kservice.o (.text*)
- EXCLUDE_FILE (*romfs.o *lib_a**.o) *(.rodata*)
+ KEEP(*(.vector))
+ EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *romfs.o *lib_a**.o) *(.text*)
+ *finsh*shell.o (.text*)
+ EXCLUDE_FILE (*components*libc**.o *romfs.o *lib_a**.o) *(.rodata*)
*(.srodata*)
*(.rela*)
*(.data*)
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets b/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets
new file mode 100644
index 0000000000..796588852b
--- /dev/null
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets
@@ -0,0 +1,13 @@
+rtthread.siz:
+ riscv64-unknown-elf-size --format=berkeley "rtthread.elf"
+ sh ../pre_build.sh
+ riscv32-elf-xmaker -b rtthread.xm
+ riscv32-elf-xmaker -b download.xm
+
+clean2:
+ -$(RM) $(CC_DEPS)$(C++_DEPS)$(C_UPPER_DEPS)$(CXX_DEPS)$(SECONDARY_FLASH)$(SECONDARY_SIZE)$(ASM_DEPS)$(S_UPPER_DEPS)$(C_DEPS)$(CPP_DEPS)
+ -$(RM) $(OBJS) *.elf
+ -@echo ' '
+
+
+*.elf: $(wildcard D:/Softwares/RT-ThreadStudio/workspace/ab32vg1/link.lds)
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh b/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh
new file mode 100644
index 0000000000..d5bf03f49d
--- /dev/null
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh
@@ -0,0 +1,4 @@
+cp ../riscv32-elf-xmaker.exe .
+cp ../header.bin .
+cp ../rtthread.xm .
+cp ../download.xm .
diff --git a/bsp/bluetrum/libcpu/cpu/context_gcc.S b/bsp/bluetrum/libcpu/cpu/context_gcc.S
index e9a6cc28e3..639b88573a 100644
--- a/bsp/bluetrum/libcpu/cpu/context_gcc.S
+++ b/bsp/bluetrum/libcpu/cpu/context_gcc.S
@@ -13,7 +13,7 @@
.global rt_interrupt_from_thread
.global rt_interrupt_to_thread
.global rt_cur_thread_sp
-.global rt_switch_flag
+.global rt_thread_switch_interrupt_flag
.global rt_interrupt_nest
/*
@@ -77,12 +77,12 @@ enable_int_ret:
sw x30, 108(sp)
sw x31, 112(sp)
- lw a5, EPC(zero) //Saves current program counter (EPC) as task program counter
+ lw a5, EPC(zero) //Saves current program counter (EPC) as task program counter
sw a5, 116(sp)
lw a5, EPICCON(zero)
sw a5, 120(sp)
- sw sp, rt_cur_thread_sp, a4 //store sp in preempted tasks tcb
+ sw sp, rt_cur_thread_sp, a4 //store sp in preempted tasks tcb
.endm
@@ -90,7 +90,7 @@ enable_int_ret:
.macro restore_context
la a5, rt_cur_thread_sp
- lw sp, 0(a5) //get new task stack pointer
+ lw sp, 0(a5) //get new task stack pointer
/* Load task program counter EPC*/
lw a5, 116(sp)
@@ -140,16 +140,16 @@ enable_int_ret:
*/
.globl rt_hw_context_switch_to
rt_hw_context_switch_to:
- sw zero, rt_interrupt_from_thread, a4 /*set from thread to 0*/
- sw a0, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
+ sw zero, rt_interrupt_from_thread, a4 /*set from thread to 0*/
+ sw a0, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
- sb zero, rt_interrupt_nest, a4 /*rt_interrupt_nest = 0*/
+ sb zero, rt_interrupt_nest, a4 /*rt_interrupt_nest = 0*/
li a5, 1
- sw a5, rt_switch_flag, a4 // rt_switch_flag = 1;
+ sw a5, rt_thread_switch_interrupt_flag, a4 // rt_thread_switch_interrupt_flag = 1;
SWINT /*kick soft interrupt*/
- lw a5, PICCON(zero) /*enable interrupt*/
+ lw a5, PICCON(zero) /*enable interrupt*/
ori a5, a5, 1
sw a5, PICCON(zero)
ret
@@ -161,10 +161,10 @@ rt_hw_context_switch_to:
*/
.globl rt_hw_context_switch
rt_hw_context_switch:
- sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
+ sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
li a5, 1
- sw a5, rt_switch_flag, a4 // rt_switch_flag = 1;
+ sw a5, rt_thread_switch_interrupt_flag, a4 /*rt_thread_switch_interrupt_flag = 1*/
SWINT /*kick soft interrupt*/
ret
@@ -190,37 +190,37 @@ rt_switch_to_thread:
*/
.global rt_hw_context_switch_interrupt
rt_hw_context_switch_interrupt:
- lw a5, rt_switch_flag
+ lw a5, rt_thread_switch_interrupt_flag
bnez a5, _reswitch
li a5, 0x01
- sw a5, rt_switch_flag, a4
- sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
+ sw a5, rt_thread_switch_interrupt_flag, a4
+ sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
_reswitch:
- sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
+ sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
ret
//软中断服务
.global rt_soft_isr
rt_soft_isr:
- li a5, 0x4 // PICPND = BIT(IRQ_SW_VECTOR); 清软中断Pending
+ li a5, 0x4 // PICPND = BIT(IRQ_SW_VECTOR); 清软中断Pending
sw a5, PICPND(zero)
ret
.globl low_prio_irq
low_prio_irq:
save_context
- li a5, 1
- sb a5, rt_interrupt_nest, a4 // rt_interrupt_nest = 1;
+
+ lw a5, rt_interrupt_nest
+ bnez a5, _low_prio_irq_exit
lw a5, cpu_irq_comm_hook
jalr a5
- lw a5, rt_switch_flag
- beqz a5, _low_prio_irq_exit // if (rt_switch_flag)
+ lw a5, rt_thread_switch_interrupt_flag
+ beqz a5, _low_prio_irq_exit // if (rt_thread_switch_interrupt_flag)
jal rt_switch_to_thread
- sw zero, rt_switch_flag, a4 // rt_switch_flag = 0;
+ sw zero, rt_thread_switch_interrupt_flag, a4 // rt_thread_switch_interrupt_flag = 0;
_low_prio_irq_exit:
- sb zero, rt_interrupt_nest, a4 // rt_interrupt_nest = 0;
restore_context
diff --git a/bsp/bluetrum/libcpu/cpu/cpuport.c b/bsp/bluetrum/libcpu/cpu/cpuport.c
index 7689018a51..ec3f9cdbc9 100644
--- a/bsp/bluetrum/libcpu/cpu/cpuport.c
+++ b/bsp/bluetrum/libcpu/cpu/cpuport.c
@@ -14,7 +14,6 @@
volatile rt_ubase_t rt_interrupt_from_thread = 0;
volatile rt_ubase_t rt_interrupt_to_thread = 0;
volatile rt_uint32_t rt_thread_switch_interrupt_flag = 0;
-volatile rt_uint32_t rt_switch_flag = 0;
rt_uint32_t rt_cur_thread_sp = 0;
/**
@@ -42,13 +41,13 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
stk--;
*stk = (rt_uint32_t)0x10003; /* Start address */
stk--;
- *stk = (rt_uint32_t)tentry; /* Start address */
- stk -= 22;
- *stk = (rt_uint32_t)parameter; /* Register a0 parameter*/
- stk -= 6;
- *stk = (rt_uint32_t)tp; /* Register thread pointer */
- stk --;
- *stk = (rt_uint32_t)texit; /* Register ra texit*/
+ *stk = (rt_uint32_t)tentry; /* Start address */
+ stk -= 22;
+ *stk = (rt_uint32_t)parameter; /* Register a0 parameter*/
+ stk -= 6;
+ *stk = (rt_uint32_t)tp; /* Register thread pointer */
+ stk --;
+ *stk = (rt_uint32_t)texit; /* Register ra texit*/
/* return task's current stack address */
return (rt_uint8_t *)stk;