From 31cd05f4a3d21f31c9b917c72100bd1e120874ac Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Sun, 6 Nov 2022 14:38:10 +0100 Subject: [PATCH] Setup stack pointer and runtime priority --- programs/assignment2isr.prog | 96 ++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 programs/assignment2isr.prog diff --git a/programs/assignment2isr.prog b/programs/assignment2isr.prog new file mode 100644 index 0000000..d33c190 --- /dev/null +++ b/programs/assignment2isr.prog @@ -0,0 +1,96 @@ +reset: + br always >main + nop +hardfault: + reti + nop +memfault: + reti + nop + +.align +led_addr: .word 0x000F0000 +switches_addr: .word 0x000F0004 +dmem_start_addr: .word 0x00000400 +dmem_end_addr: .word 0x000004FF +base_prescaler: .word 0x1 +priority_mask: .word 0xFFFFFF03 + +main: + // Initialize stack pointer to the end of the data memory + ldr r12, >dmem_end_addr + + // Set runtime priority + ldr r0, >priority_mask + and r14, r0, r14 + + ldr r0,>led_addr //LED addr + addi r6,8 //outer counter top + clr r7 //wait counter + ldr r8,>base_prescaler + +out_loop: + clr r1 + st08 r0,r1 + call >wait_prescaled + nop + +fill: + lsh r1,r1,1 + addi r1,1 + st08 r0,r1 + call >wait_prescaled + nop + + addi r5,1 + cmp neq r5,r6 + br true >fill + nop + clr r5 + +flush: + lsh r1,r1,1 + st08 r0,r1 + call >wait_prescaled + nop + + addi r5,1 + cmp neq r5,r6 + br true >flush + nop + clr r5 + br always >out_loop + nop + +wait_prescaled: + // Load value from the switches + ldr r11, >switches_addr + ld32 r9, r11 + addi r9, 1 + + clr r11 + add r11, r13, r11 // save link register + + clr r10 +inc_j: + call >wait + cmp neq r10,r9 + br true >inc_j + addi r10,1 + + clr r13 + add r13, r13, r11 // restore link register + + ret + nop + + +//subroutine to iterate until counter overflow +wait: + clr r7 //inititalize inner counter +inc_i: + cmp neq r7,r8 + br true >inc_i //if i=cnt_top + addi r7,1 + ret //else + nop