You're right that I really should be doing this in hardware. But a couple hundred msec wouldn't be a problem for what I'm doing.
I think just running it with a higher priority on my unloaded linux box should be good enough, but I haven't tested and don't know what's available in the kernel for timing these days.