diff options
| author | cheapie <no-email-for-you@example.com> | 2026-05-23 20:14:34 -0500 |
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2026-05-23 20:14:34 -0500 |
| commit | 85b5fde272be6ab543aa866baebabddc24566bdb (patch) | |
| tree | b4f2e3bb634effe51c2bdc5585ca4ea8b98d6dfa /c/rrxing | |
| download | rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.gz rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.bz2 rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.xz rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.zip | |
Add initial content
Diffstat (limited to 'c/rrxing')
| -rw-r--r-- | c/rrxing/Makefile | 20 | ||||
| -rw-r--r-- | c/rrxing/rrxing.c | 86 | ||||
| -rwxr-xr-x | c/rrxing/rrxing.elf | bin | 0 -> 7292 bytes | |||
| -rw-r--r-- | c/rrxing/rrxing.hex | 70 | ||||
| -rw-r--r-- | c/rrxing/rrxing.o | bin | 0 -> 7340 bytes | |||
| -rw-r--r-- | c/rrxing/rvcontroller.ld | 45 |
6 files changed, 221 insertions, 0 deletions
diff --git a/c/rrxing/Makefile b/c/rrxing/Makefile new file mode 100644 index 0000000..1087a53 --- /dev/null +++ b/c/rrxing/Makefile @@ -0,0 +1,20 @@ +all: rrxing.hex + +rrxing.o: rrxing.c + clang -target riscv32-none-elf -I../rvcontroller-libraries -march=rv32imacb_zicntr_zicond_zicsr_zifencei_zihintpause_zilsd_zclsd_zabha_zacas_zbkb_zbkx_zcb_zcmp_zcmt -ffreestanding -O3 -c -o rrxing.o rrxing.c + +rrxing.elf: ../rvcontroller-libraries/rvcontroller-init.o ../rvcontroller-libraries/rvcontroller-ecalls.o rrxing.o + riscv32-none-elf-ld -T rvcontroller.ld --no-warn-rwx-segments -o rrxing.elf ../rvcontroller-libraries/rvcontroller-init.o rrxing.o ../rvcontroller-libraries/rvcontroller-ecalls.o + +dump: rrxing.elf + riscv32-none-elf-objdump -d rrxing.elf + +rrxing.hex: rrxing.elf + riscv32-none-elf-objcopy -O ihex rrxing.elf rrxing.hex + +load: rrxing.hex + bash -c "wl-copy < rrxing.hex" + +clean: + rm -f rrxing.bin rrxing.elf rrxing.o init.o + diff --git a/c/rrxing/rrxing.c b/c/rrxing/rrxing.c new file mode 100644 index 0000000..e867e8a --- /dev/null +++ b/c/rrxing/rrxing.c @@ -0,0 +1,86 @@ +#include <stdint.h> +#include <stdbool.h> +#include "rvcontroller-ecalls.h" + +bool streq(char *a, char *b) { + for (int i=0;a[i] != 0 || b[i] != 0;i++) { + if (a[i] != b[i]) { + return false; + } + } + return true; +} + +void sleep(uint32_t delay) { + //This will start having problems after about 130 years + //of uptime, but that's probably acceptable + uint32_t endtime = rdtime() + delay; + while (rdtime() < endtime) {} + return; +} + +bool checkdetector(void) { + char channelbuf[16]; + char msgbuf[16]; + while (digiline_bufferlevel() > 0) { + lightweight_mode(0); + digiline_receive(channelbuf,16,msgbuf,16); + if (streq(channelbuf,"detect")) { + return true; + } + } + lightweight_mode(1); + return false; +} + +void main() { + printstr("Railroad Crossing\nfor RVController\nInitializing HW\n"); + digiline_send("light","OFF"); + digiline_send("bell","off"); + digiline_send("gate","up"); + digiline_clearbuffer(); + while (true) { + printstr("Idle\n"); + lightweight_mode(1); + printstr("Lightweight: On\n"); + while (!checkdetector()) {} + printstr("Train detected\nLightweight: Off\n"); + lightweight_mode(0); + digiline_send("light","YELLOW"); + printstr("Light: Yellow\n"); + sleep(2); + digiline_send("bell","on"); + printstr("Bell: On\n"); + sleep(2); + digiline_send("light","RED"); + printstr("Light: Red\n"); + sleep(3); + digiline_send("gate","down"); + printstr("Gate: Down\n"); + sleep(4); + digiline_send("bell","off"); + printstr("Bell: Off\n"); + + digiline_clearbuffer(); + for (uint8_t time = 15;time > 0;time--) { + printstr("Timeout in "); + printint(time); + printstr("s\n"); + sleep(1); + bool train = checkdetector(); + lightweight_mode(0); //checkdetector() turns this on + if (train) { + digiline_clearbuffer(); + time = 25; + printstr("Time reset by train\n"); + } + } + printstr("Timed out\n"); + + digiline_send("gate","up"); + printstr("Gate: Up\n"); + sleep(2); + digiline_send("light","OFF"); + printstr("Light: Off\n"); + } +} diff --git a/c/rrxing/rrxing.elf b/c/rrxing/rrxing.elf Binary files differnew file mode 100755 index 0000000..fd70937 --- /dev/null +++ b/c/rrxing/rrxing.elf diff --git a/c/rrxing/rrxing.hex b/c/rrxing/rrxing.hex new file mode 100644 index 0000000..a6ac7d8 --- /dev/null +++ b/c/rrxing/rrxing.hex @@ -0,0 +1,70 @@ +:10000000370101006520A948730000008280148137
+:10001000988133E6E60009C685050505E389E6FE15
+:1000200013351600828052B82A84452C2A947524F0
+:10003000E36F85FE52BE4EB822F44AF0692435C102
+:100040001309400693045006130440079309300631
+:1000500019A0952C39C50145612C0808C1450A86AF
+:10006000C146BD2403450101E31525FF03451101E8
+:10007000E31195FE03452101E31D85FC0345310194
+:10008000E31995FC03454101E31535FD0345510195
+:10009000E31185FC034561014DFD0545227402799C
+:1000A0004EBE0545B124227402794EBC4EB80111F2
+:1000B000A2E4CAE052FC5AF862F46AF01305203355
+:1000C000F522130460369305C0362285C52A9309AC
+:1000D0000037930550374E85D52213059037930589
+:1000E000E037E92A0924930B4006130C5006930DC0
+:1000F000400713093006930C8040130D4041930ACA
+:100100007041130510385D220545DD221305703856
+:10011000712A552A21C50145E12A0808C1450A86E8
+:10012000C1467D2203450101E31575FF0345110119
+:10013000E31185FF03452101E31DB5FD03453101B1
+:10014000E31985FD03454101E31525FD03455101F3
+:10015000E311B5FD034561014DFD21A00545492A87
+:100160004DBF1305803999220145592222859305F7
+:10017000903BA9221305003C152A852293042500F3
+:10018000A92AE36F95FE4E859305F03C052A1305D9
+:10019000203D292A9922930425008122E36F95FEB0
+:1001A00022859305C03D192A1305003E0122352200
+:1001B000930435001D22E36F95FE130590379305D8
+:1001C000C03EED281305103FD520012A93044500B9
+:1001D0002922E36F95FE4E8A4E8593055037F92804
+:1001E0001305D03FE1200122BD4909A80545092298
+:1001F0000145FD28FD1913F5F90F3DC913FBF90F52
+:1002000066856D205A8579286A854D20F9209304EA
+:100210001500E120E36F95FE7D2069D90145C928CD
+:100220000808C1450A86C146652003450101E3155A
+:1002300075FF03451101E31185FF03452101E31D0E
+:10024000B5FD03453101E31985FD03454101E31582
+:1002500025FD03455101E311B5FD034561014DFD48
+:100260004128512056859920E14913F5F90F59F598
+:100270001305C0422528130590379305E0373D2824
+:10028000130570432520912893042500B920E36FBE
+:1002900095FE22859305C03615201305104439209C
+:1002A000D28985B58548730000008280914873002B
+:1002B00000008280AD48730000008280930810081F
+:1002C0007300000082809308500873000000828051
+:1002D00093087008730000008280732510C082802C
+:1002E000732500C08280930860087300000082803C
+:1002F0000589F322008093920248B3E2A200739032
+:100300000280828095487300000082809308000874
+:10031000730000008280A14873000000828093086F
+:1003200030087300000082809308400873000000CA
+:1003300082805261696C726F61642043726F737363
+:10034000696E670A666F72205256436F6E74726FE1
+:100350006C6C65720A496E697469616C697A696E60
+:10036000672048570A006C69676874004F4646006A
+:1003700062656C6C006F666600676174650075701D
+:100380000049646C650A004C696768747765696741
+:1003900068743A204F6E0A00547261696E20646579
+:1003A0007465637465640A4C696768747765696726
+:1003B00068743A204F66660A0059454C4C4F570006
+:1003C0004C696768743A2059656C6C6F770A006FE6
+:1003D0006E0042656C6C3A204F6E0A005245440034
+:1003E0004C696768743A205265640A00646F776EDE
+:1003F00000476174653A20446F776E0A0042656C6D
+:100400006C3A204F66660A0054696D656F757420FA
+:10041000696E2000730A0054696D6520726573650A
+:100420007420627920747261696E0A0054696D6586
+:1004300064206F75740A00476174653A2055700A2C
+:0D044000004C696768743A204F66660A0038
+:00000001FF
diff --git a/c/rrxing/rrxing.o b/c/rrxing/rrxing.o Binary files differnew file mode 100644 index 0000000..3d0bd00 --- /dev/null +++ b/c/rrxing/rrxing.o diff --git a/c/rrxing/rvcontroller.ld b/c/rrxing/rvcontroller.ld new file mode 100644 index 0000000..985892b --- /dev/null +++ b/c/rrxing/rvcontroller.ld @@ -0,0 +1,45 @@ +/* Thanks https://github.com/darklife/darkriscv */ + __heap_size = 0x200; /* required amount of heap */ + __stack_size = 0x800; /* required amount of stack */ + ENTRY(_start); + MEMORY + { + RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 0x10000 + } + SECTIONS + { + .text : + { + *(.text.startup) + *(.text) + *(.text) + *(.rodata*) + } > RAM + .data : + { + *(.sbss) + *(.data) + *(.bss) + *(.rela*) + *(COMMON) + } > RAM + + .heap : + { + . = ALIGN(4); + PROVIDE ( end = . ); + _sheap = .; + . = . + __heap_size; + . = ALIGN(4); + _eheap = .; + } >RAM + + .stack : + { + . = ALIGN(4); + _estack = .; + . = . + __stack_size; + . = ALIGN(4); + _sstack = .; + } >RAM + } |
