From c06fb44b7f63bbb94523f0f4d2908d34d22b94c2 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Fri, 3 Dec 2021 09:55:06 -0700 Subject: Started moving source files to subdirectories --- src/cpu/irq.S | 62 ++++++++++++++++++++++++++++++++++++++++++++ src/drivers/uart.S | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/irq.S | 62 -------------------------------------------- src/uart.S | 75 ------------------------------------------------------ 4 files changed, 137 insertions(+), 137 deletions(-) create mode 100644 src/cpu/irq.S create mode 100644 src/drivers/uart.S delete mode 100644 src/irq.S delete mode 100644 src/uart.S (limited to 'src') diff --git a/src/cpu/irq.S b/src/cpu/irq.S new file mode 100644 index 0000000..53a749e --- /dev/null +++ b/src/cpu/irq.S @@ -0,0 +1,62 @@ +.globl a_irq_handler +a_irq_handler: + push {lr} + bl disable_irq + // r2 = CORE0_INTERRUPT_SOURCE + // if r2 & 0b100000000 + mov r2, #0x40000000 + ldr r3, [r2, #0x60] + tst r3, #256 + beq a_irq_handler.timer + // r2 = IRQ_PEND2 + // r2 & 1 << 25 + mov r2, #0xB208 + movt r2, #0x3F00 + ldr r3, [r2] + tst r3, #0x2000000 + beq a_irq_handler.exit + mov r2, #0x1040 + movt r2, #0x3F20 + ldr r3, [r2] + tst r3, #16 + beq a_irq_handler.exit + mov r2, #0x1000 + movt r2, #0x3F20 + ldrb r0, [r2] + push {r0} + bl enable_irq + pop {r0} + bl uart_char + ldr r0, =imsg + bl uart_string + pop {pc} +a_irq_handler.timer: + // r2 = CORE0_INTERRUPT_SOURCE + // if r2 & 0b1000 + mov r2, #0x40000000 + ldr r3, [r2, #0x60] + tst r3, #8 + beq a_irq_handler.exit + bl c_timer + //ldr r0, =imsg + //bl uart_string +a_irq_handler.exit: + bl enable_irq + pop {pc} + +.globl a_fiq_handler +a_fiq_handler: + push {lr} + bl disable_fiq + bl c_timer + ldr r0, =fmsg + bl uart_string +a_fiq_handler.exit: + bl enable_fiq + pop {pc} + +.section ".data" +imsg: + .asciz " asm_irq_handler\n" +fmsg: + .asciz " asm_fiq_handler\n" diff --git a/src/drivers/uart.S b/src/drivers/uart.S new file mode 100644 index 0000000..0864b7e --- /dev/null +++ b/src/drivers/uart.S @@ -0,0 +1,75 @@ +.section ".text" + +.globl uart_init +uart_init: + //*UART0_IMSC = 1 << 4; + // IGNORE OVERRUN + mov r2, #0x1038 + movt r2, #0x3F20 + mov r3, #0b10000 + str r3, [r2] + //*IRQ_ENABLE2 = 1 << 25; + mov r2, #0xB214 + movt r2, #0x3F00 + mov r3, #0 + movt r3, #0b1000000000 + str r3, [r2] + //*GPU_INTERRUPTS_ROUTING = 0x00; + // Route GPU interrupts to Core0 + mov r2, #0x000C + movt r2, #0x4000 + eor r3, r3 + str r3, [r2] + bx lr + +.globl uart_char +uart_char: + mov r2, #0x1000 + movt r2, #0x3f20 +uart_char.loop: + ldr r3, [r2, #24] + tst r3, #0b100000 + bne uart_char.loop + str r0, [r2] + bx lr + +.globl uart_string +uart_string: + push {r4, lr} + mov r4, r0 + ldrb r0, [r0] + cmp r0, #0 + popeq {r4, pc} +uart_string.loop: + bl uart_char + ldrb r0, [r4, #1]! + cmp r0, #0 + bne uart_string.loop + pop {r4, pc} + +.globl uart_hex +uart_hex: + push {r4, lr} + mov r2, #0x1000 + movt r2, #0x3f20 +uart_hex.loop: + ldr r3, [r2, #24] + tst r3, #0b100000 + bne uart_hex.loop + mov r3, #7 +uart_hex.hloop: + mov r1, r0 + asr r1, r3 + asr r1, r3 + asr r1, r3 + asr r1, r3 + and r1, #0xf + add r1, #0x30 + cmp r1, #0x3A + blt uart_hex.print + add r1, #7 +uart_hex.print: + str r1, [r2] + subs r3, #1 + bge uart_hex.hloop + pop {r4, pc} diff --git a/src/irq.S b/src/irq.S deleted file mode 100644 index 53a749e..0000000 --- a/src/irq.S +++ /dev/null @@ -1,62 +0,0 @@ -.globl a_irq_handler -a_irq_handler: - push {lr} - bl disable_irq - // r2 = CORE0_INTERRUPT_SOURCE - // if r2 & 0b100000000 - mov r2, #0x40000000 - ldr r3, [r2, #0x60] - tst r3, #256 - beq a_irq_handler.timer - // r2 = IRQ_PEND2 - // r2 & 1 << 25 - mov r2, #0xB208 - movt r2, #0x3F00 - ldr r3, [r2] - tst r3, #0x2000000 - beq a_irq_handler.exit - mov r2, #0x1040 - movt r2, #0x3F20 - ldr r3, [r2] - tst r3, #16 - beq a_irq_handler.exit - mov r2, #0x1000 - movt r2, #0x3F20 - ldrb r0, [r2] - push {r0} - bl enable_irq - pop {r0} - bl uart_char - ldr r0, =imsg - bl uart_string - pop {pc} -a_irq_handler.timer: - // r2 = CORE0_INTERRUPT_SOURCE - // if r2 & 0b1000 - mov r2, #0x40000000 - ldr r3, [r2, #0x60] - tst r3, #8 - beq a_irq_handler.exit - bl c_timer - //ldr r0, =imsg - //bl uart_string -a_irq_handler.exit: - bl enable_irq - pop {pc} - -.globl a_fiq_handler -a_fiq_handler: - push {lr} - bl disable_fiq - bl c_timer - ldr r0, =fmsg - bl uart_string -a_fiq_handler.exit: - bl enable_fiq - pop {pc} - -.section ".data" -imsg: - .asciz " asm_irq_handler\n" -fmsg: - .asciz " asm_fiq_handler\n" diff --git a/src/uart.S b/src/uart.S deleted file mode 100644 index 0864b7e..0000000 --- a/src/uart.S +++ /dev/null @@ -1,75 +0,0 @@ -.section ".text" - -.globl uart_init -uart_init: - //*UART0_IMSC = 1 << 4; - // IGNORE OVERRUN - mov r2, #0x1038 - movt r2, #0x3F20 - mov r3, #0b10000 - str r3, [r2] - //*IRQ_ENABLE2 = 1 << 25; - mov r2, #0xB214 - movt r2, #0x3F00 - mov r3, #0 - movt r3, #0b1000000000 - str r3, [r2] - //*GPU_INTERRUPTS_ROUTING = 0x00; - // Route GPU interrupts to Core0 - mov r2, #0x000C - movt r2, #0x4000 - eor r3, r3 - str r3, [r2] - bx lr - -.globl uart_char -uart_char: - mov r2, #0x1000 - movt r2, #0x3f20 -uart_char.loop: - ldr r3, [r2, #24] - tst r3, #0b100000 - bne uart_char.loop - str r0, [r2] - bx lr - -.globl uart_string -uart_string: - push {r4, lr} - mov r4, r0 - ldrb r0, [r0] - cmp r0, #0 - popeq {r4, pc} -uart_string.loop: - bl uart_char - ldrb r0, [r4, #1]! - cmp r0, #0 - bne uart_string.loop - pop {r4, pc} - -.globl uart_hex -uart_hex: - push {r4, lr} - mov r2, #0x1000 - movt r2, #0x3f20 -uart_hex.loop: - ldr r3, [r2, #24] - tst r3, #0b100000 - bne uart_hex.loop - mov r3, #7 -uart_hex.hloop: - mov r1, r0 - asr r1, r3 - asr r1, r3 - asr r1, r3 - asr r1, r3 - and r1, #0xf - add r1, #0x30 - cmp r1, #0x3A - blt uart_hex.print - add r1, #7 -uart_hex.print: - str r1, [r2] - subs r3, #1 - bge uart_hex.hloop - pop {r4, pc} -- cgit v1.2.1