commit a3157fd6220eb81509b1007815db8602b3297566
parent e09ab3fc5d61c36c60025e289bcc7b404ca73953
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Fri,  1 Mar 2024 10:06:11 +0900
try to copy to sram
Diffstat:
4 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/ex3/boot2.s b/ex3/boot2.s
@@ -2,15 +2,30 @@
 .thumb
 
 	.section .boot2
-setup_xip:
+boot2:
+	// setup xip
 	ldr r3, rom_base
-
 	ldrh r0, [r3, #0x14] // rom_func_table
 	ldr r1, =('C' | 'X' << 8) // _flash_enter_cmd_xip()
 	ldrh r2, [r3, #0x18] // rom_table_lookup
 	blx r2
 	blx r0
 
+	// load main program to sram
+	ldr r0, =text_start
+	ldr r1, =text_size
+	mov r2, #0
+	ldr r3, sram_base
+copy:
+	cmp r1, r2
+	beq end
+	ldr r4, [r0, r2]
+	str r4, [r3, r2]
+	add r2, #4
+	b copy
+end:
+
+	// setup vector table
 	ldr r0, =vectors
 	ldr r1, m0plus_vtor 
 	str r0, [r1, #0] // M0PLUS: VTOR
@@ -22,6 +37,8 @@ setup_xip:
 	.align 2
 rom_base:
 	.word 0x00000000
+sram_base:
+	.word 0x20000000
 m0plus_vtor:
 	.word 0xe0000000 + 0xed08
 literals:
diff --git a/ex3/main.c b/ex3/main.c
@@ -6,7 +6,10 @@ void set_alarm(unsigned int);
 int
 main(void) {
 	init();
-	puts("C file");
+	for ( int i = 0; i < 10; i++ ) {
+		printh(*(unsigned int *)(0x20000000 + 4 * i));
+		puts("");
+	}
 	return 0;
 }
 
@@ -15,11 +18,8 @@ isr_svcall(void) {
 	puts("svcall");
 }
 
-int count = 0;
-
 void
 isr_alarm(void) {
-	printh(count++);
 	puts("alarm fired");
 	set_alarm(1000 * 1000);
 }
diff --git a/ex3/memmap.ld b/ex3/memmap.ld
@@ -10,9 +10,13 @@ SECTIONS
 		*(.boot2)
 		. = 0x100;
 	} > FLASH
-
+	.vectors : {
+		*(.vectors)
+	} > FLASH
+	text_start = .;
 	.text : {
 		*(.text)
 	} > FLASH
+	text_size = SIZEOF(.text);
 }
 
diff --git a/ex3/start.s b/ex3/start.s
@@ -1,7 +1,8 @@
 .cpu cortex-m0plus
 .thumb
 
-	.section .text
+	.align 8
+	.section .vectors
 	.global vectors
 vectors:
 	.word 0x20040000 // 0 initial SP
@@ -22,6 +23,8 @@ vectors:
 	.word reset+1  // 15 systick
 	.word isr_alarm+1  // 16 alarm_0
 
+	.align 2
+	.section .text
 reset:
 	bl main
 loop: