If you need a little bit more determinism the beaglebone has a PRU (programmable realtime unit), a separate processor that can pass data back and forth to the main RAM.<p><a href="http://beagleboard.org/pru" rel="nofollow">http://beagleboard.org/pru</a><p>I was able to use one to read in an 8 bit parallel bus at around 8MHz without having to build a separate board with appropriate MCU.
Sure it's low level in that you're poking at physical memory registers, but to me, low level in this context (thinking microcontrollers) means replacing the Linux kernel binary with your own application that does its own direct memory poking.
There used to be one in Rust but it seems that this year it reverted back to C.<p><a href="https://www.reddit.com/r/rust/comments/7pymd9/stanford_cs140e_operating_systems_writing_a/" rel="nofollow">https://www.reddit.com/r/rust/comments/7pymd9/stanford_cs140...</a>