121 lines
1.3 KiB
Plaintext
Executable File
121 lines
1.3 KiB
Plaintext
Executable File
reset:
|
|
br always >main
|
|
nop
|
|
|
|
hardfault:
|
|
reti
|
|
nop
|
|
|
|
memfault:
|
|
reti
|
|
nop
|
|
|
|
irq3:
|
|
br always >irq3_handler
|
|
nop
|
|
|
|
.align
|
|
addr:
|
|
.word 0x000F0000
|
|
addrsw:
|
|
.word 0x000F0006
|
|
//w_cnt_top: .word 0x1FC000
|
|
w_cnt_top: .word 0x1 //for simulation only
|
|
|
|
// Constant Declaration
|
|
.align
|
|
sp_init: .word 0x400 // Stackpointer Initial Value
|
|
|
|
|
|
main:
|
|
ldr r12, >sp_init
|
|
clr r14
|
|
ldr r0,>addr //LED addr
|
|
ldr r2,>addrsw //sw addr
|
|
addi r6,8 //outer counter top
|
|
clr r7 //wait counter
|
|
|
|
here:
|
|
nop
|
|
nop
|
|
nop
|
|
br always >here
|
|
nop
|
|
|
|
out_loop:
|
|
ldr r8,>w_cnt_top
|
|
clr r1
|
|
st08 r0,r1
|
|
call >wait
|
|
nop
|
|
|
|
fill:
|
|
lsh r1,r1,1
|
|
addi r1,1
|
|
st08 r0,r1
|
|
call >wait
|
|
nop
|
|
|
|
addi r5,1
|
|
cmp neq r5,r6
|
|
br true >fill
|
|
nop
|
|
clr r5
|
|
|
|
flush:
|
|
lsh r1,r1,1
|
|
st08 r0,r1
|
|
call >wait
|
|
nop
|
|
|
|
addi r5,1
|
|
cmp neq r5,r6
|
|
br true >flush
|
|
nop
|
|
clr r5
|
|
br always >out_loop
|
|
nop
|
|
|
|
//subroutine to iterate until counter overflow
|
|
wait:
|
|
clr r3
|
|
ld16 r3,r2 //loading switches content to r3 from r2 address
|
|
clr r9
|
|
clr r10
|
|
clr r11
|
|
br always >nfound
|
|
nop
|
|
found: rsh r8,r8,1 //one found
|
|
nfound: clr r4
|
|
addi r4,1
|
|
addi r10,1 //loop counter max 16
|
|
and r9,r3,r4
|
|
cmp eq r9,r4
|
|
br true >found
|
|
rsh r3,r3,1
|
|
clr r4
|
|
addi r4,16
|
|
cmp le r10,r4
|
|
br true >nfound
|
|
nop
|
|
|
|
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
|
|
|
|
|
|
|
|
irq3_handler:
|
|
|
|
|
|
|
|
|
|
|
|
br always >out_loop
|
|
nop
|
|
reti
|