diff options
| author | cheapie <cheapiephp@gmail.com> | 2026-11-04 19:34:16 -0600 |
|---|---|---|
| committer | cheapie <cheapiephp@gmail.com> | 2026-11-04 19:34:16 -0600 |
| commit | 203798c72f10d003f16485b1ffb2758b9bcfa58c (patch) | |
| tree | 9a2ce6d1ab689bff19ea71b0379836645905a286 /assembly/rrxing2/util.S | |
| parent | 6fc47c5b8ff009bbae39ac11b57909bff6fb9039 (diff) | |
| download | rvcontroller-203798c72f10d003f16485b1ffb2758b9bcfa58c.tar rvcontroller-203798c72f10d003f16485b1ffb2758b9bcfa58c.tar.gz rvcontroller-203798c72f10d003f16485b1ffb2758b9bcfa58c.tar.bz2 rvcontroller-203798c72f10d003f16485b1ffb2758b9bcfa58c.tar.xz rvcontroller-203798c72f10d003f16485b1ffb2758b9bcfa58c.zip | |
Add work-in-progress rrxing2 program
Diffstat (limited to 'assembly/rrxing2/util.S')
| -rw-r--r-- | assembly/rrxing2/util.S | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/assembly/rrxing2/util.S b/assembly/rrxing2/util.S new file mode 100644 index 0000000..9dda1ab --- /dev/null +++ b/assembly/rrxing2/util.S @@ -0,0 +1,43 @@ +.macro digiline_send channel msg + la a0,(\channel) + la a1,(\msg) + li a7,129 + ecall +.endm + +.macro set_timeri time + li t0,0x80 + csrs mie,t0 # unmask timer interrupt + ld t1,2(gp) # read mtime + li t0,(\time) + add t1,t1,t0 # calculate target value (lower half) + sltu t0,t1,t0 # check if it overflowed + add t2,t2,t0 # add the overflow into the high half if there was any + sd t1,10(gp) # set mtimecmp to the target value +.endm + +.macro stop_timer + li t1,0xffffffff + li t2,0xffffffff + sd t1,10(gp) # set mtime to far in the future + li t1,0x80 + csrc mie,t1 # mask timer interrupt +.endm + +.macro set_timer_to label + cm.push {ra},-16 + la a0,(\label) + lbu a0,0(a0) + call set_timer + cm.pop {ra},16 +.endm + +set_timer: +li t0,0x80 +csrs mie,t0 # unmask timer interrupt +ld t1,2(gp) # read mtime +add t1,t1,a0 # calculate target value (lower half) +sltu t0,t1,a0 # check if it overflowed +add t2,t2,t0 # add the overflow into the high half if there was any +sd t1,10(gp) # set mtimecmp to the target value +ret |
