Setup stack pointer and runtime priority
This commit is contained in:
96
programs/assignment2isr.prog
Normal file
96
programs/assignment2isr.prog
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user