From 85b5fde272be6ab543aa866baebabddc24566bdb Mon Sep 17 00:00:00 2001 From: cheapie Date: Sat, 23 May 2026 20:14:34 -0500 Subject: Add initial content --- c/rrxing/Makefile | 20 +++++++++++ c/rrxing/rrxing.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++ c/rrxing/rrxing.elf | Bin 0 -> 7292 bytes c/rrxing/rrxing.hex | 70 ++++++++++++++++++++++++++++++++++++++ c/rrxing/rrxing.o | Bin 0 -> 7340 bytes c/rrxing/rvcontroller.ld | 45 +++++++++++++++++++++++++ 6 files changed, 221 insertions(+) create mode 100644 c/rrxing/Makefile create mode 100644 c/rrxing/rrxing.c create mode 100755 c/rrxing/rrxing.elf create mode 100644 c/rrxing/rrxing.hex create mode 100644 c/rrxing/rrxing.o create mode 100644 c/rrxing/rvcontroller.ld (limited to 'c/rrxing') 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 +#include +#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 new file mode 100755 index 0000000..fd70937 Binary files /dev/null and b/c/rrxing/rrxing.elf differ 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 new file mode 100644 index 0000000..3d0bd00 Binary files /dev/null and b/c/rrxing/rrxing.o differ 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 + } -- cgit v1.2.3