Split into separate files and tidy up
authorThomas White <taw@physics.org>
Thu, 21 Jun 2018 18:03:16 +0000 (20:03 +0200)
committerThomas White <taw@physics.org>
Thu, 21 Jun 2018 18:03:16 +0000 (20:03 +0200)
.gitignore [new file with mode: 0644]
Makefile
src/main.s
src/slow_status_flash.s [new file with mode: 0644]
src/swi_numbers.h [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..e6d55ee
--- /dev/null
@@ -0,0 +1,3 @@
+kernel.img
+kernel.elf
+*.o
index aeac4a4..1d38433 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,16 @@
 all: kernel.img\r
 \r
 kernel.img: kernel.elf\r
-       arm-linux-gnu-objcopy kernel.elf -O binary kernel.img\r
+       arm-none-eabi-objcopy kernel.elf -O binary kernel.img\r
 \r
-kernel.elf : main.o linkscript.ld\r
-       arm-linux-gnu-ld --no-undefined main.o -o kernel.elf -T linkscript.ld\r
+kernel.elf : main.o slow_status_flash.o linkscript.ld\r
+       arm-none-eabi-ld --no-undefined main.o slow_status_flash.o -o kernel.elf -T linkscript.ld\r
 \r
 main.o: src/main.s\r
-       arm-linux-gnu-as -Isrc src/main.s -o main.o\r
+       arm-none-eabi-as -Isrc src/main.s -o main.o\r
+\r
+slow_status_flash.o: src/slow_status_flash.s\r
+       arm-none-eabi-as -Isrc src/slow_status_flash.s -o slow_status_flash.o\r
 \r
 clean: \r
        rm -f main.o kernel.elf kernel.img\r
index a9f7af3..b981b2a 100644 (file)
@@ -1,6 +1,27 @@
-@ Tiny bare metal example
+/*
+ * main.s
+ *
+ * Copyright © 2018 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 @ vim:ft=armv5
 
+.include "swi_numbers.h"
+
 .section .init
 
 _start:
@@ -25,7 +46,7 @@ hang:
        B       hang
 
 reset:
-       @ Get out of HYP mode
+       /* Get out of HYP mode */
        MRS     R0, CPSR
        BIC     R0, R0, #0x1f
        ORR     R0, R0, #0x13
@@ -34,9 +55,10 @@ reset:
        MSR     ELR_hyp,r0
        ERET
 
-       LDR     R13, =stack_svc         @ Set up stack for SVC mode
+       /* Set up supervisor mode stack */
+       LDR     R13, =stack_svc
 
-       @ Relocate vector table
+       /* Relocate vector table */
        MOV     R10, #0x8000
        MOV     R11, #0
        LDMIA   R10!, {R0-R7}
@@ -44,9 +66,10 @@ reset:
        LDMIA   R10!, {R0-R7}
        STMIA   R11!, {R0-R7}
 
-       LDR R0, =start_cpu1
+       /* Set another CPU doing something */
+       LDR R0, =flash_status_led
        MOV R1, #0x40000000
-       STR R0,[R1, #0xac]
+       STR R0,[R1, #0xbc]
        SEV
 
        LDR     R8, =0x3f200000
@@ -87,32 +110,6 @@ repeat:
        B       repeat
 
 
-start_cpu1:
-       LDR     R8, =0x3f200000
-       LDR     R1, [R8, #0x04]         @ GPFSEL1
-       ORR     R1, R1, #1<<18          @ GPIO pin 16 is output
-       BIC     R1, R1, #3<<21          @ GPIO pin 17 is input
-       ORR     R1, R1, #1<<24          @ GPIO pin 18 is output
-       STR     R1, [R8, #0x04]         @ GPFSEL1
-
-forever:
-       MRC     P15, 0, R0, C0, C0, 5
-       AND     R0, R0, #0x0f
-flashred:
-       MOV     R1, #1<<29
-       STR     R1, [R8, #0x1c]         @ GPSET0
-       BL      longpause
-       MOV     R1, #1<<29
-       STR     R1, [R8, #0x28]         @ GPCLR0
-       BL      longpause
-       SUBS    R0, R0, #1
-       BNE     flashred
-
-       BL      longpause
-       BL      longpause
-       BL      longpause
-       B       forever
-
 swi_handler:
        STMDB   R13!, {R8, LR}
        LDR     R8, =0x3f200000
@@ -131,7 +128,7 @@ flash:
        STMDB   R13!, {R1, R2, R4, LR}
        MOV     R4, #5
 
-flashloop:
+1:
        MOV     R1, #1<<16
        STR     R1, [R8, #0x28]         @ GPCLR0
        MOV     R1, #1<<18
@@ -151,17 +148,13 @@ flashloop:
        STR     R1, [R8, #0x28]         @ GPCLR0
 
        SUBS    R4, R4, #1
-       BNE     flashloop
+       BNE     1b
 
        LDMIA   R13!, {R1, R2, R4, PC}
 
 pause:
        MOV     R2, #0x3f000
-wait:
+1:
        SUBS    R2, R2, #1
-       BNE     wait
+       BNE     1b
        MOV     PC, LR
-
-longpause:
-       MOV     R2, #0x3f0000
-       B       wait
diff --git a/src/slow_status_flash.s b/src/slow_status_flash.s
new file mode 100644 (file)
index 0000000..afb7be4
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * slow_status_flash.s
+ *
+ * Copyright © 2018 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+@ vim:ft=armv5
+
+.section .text
+.global flash_status_led
+
+flash_status_led:
+       LDR     R8, =0x3f200000
+       LDR     R1, [R8, #0x04]         @ GPFSEL1
+       ORR     R1, R1, #1<<18          @ GPIO pin 16 is output
+       BIC     R1, R1, #3<<21          @ GPIO pin 17 is input
+       ORR     R1, R1, #1<<24          @ GPIO pin 18 is output
+       STR     R1, [R8, #0x04]         @ GPFSEL1
+
+forever:
+       MRC     P15, 0, R0, C0, C0, 5
+       AND     R0, R0, #0x0f
+flashred:
+       MOV     R1, #1<<29
+       STR     R1, [R8, #0x1c]         @ GPSET0
+       BL      longpause
+       MOV     R1, #1<<29
+       STR     R1, [R8, #0x28]         @ GPCLR0
+       BL      longpause
+       SUBS    R0, R0, #1
+       BNE     flashred
+
+       BL      longpause
+       BL      longpause
+       BL      longpause
+       B       forever
+
+longpause:
+       MOV     R2, #0x3f0000
+1:
+       SUBS    R2, R2, #1
+       BNE     1b
+       MOV     PC, LR
diff --git a/src/swi_numbers.h b/src/swi_numbers.h
new file mode 100644 (file)
index 0000000..245fccc
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * swi_numbers.h
+ *
+ * Copyright © 2018 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define OS_GetGPIO     (1)
+#define OS_SetGPIO     (2)