summaryrefslogtreecommitdiff
path: root/assembly/rrxing2/util.S
diff options
context:
space:
mode:
authorcheapie <cheapiephp@gmail.com>2026-11-04 19:34:16 -0600
committercheapie <cheapiephp@gmail.com>2026-11-04 19:34:16 -0600
commit203798c72f10d003f16485b1ffb2758b9bcfa58c (patch)
tree9a2ce6d1ab689bff19ea71b0379836645905a286 /assembly/rrxing2/util.S
parent6fc47c5b8ff009bbae39ac11b57909bff6fb9039 (diff)
downloadrvcontroller-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.S43
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