yeah, things like updating display should be done on their own timer. pretty much everything in multipass runs on various timers (like polling CVs, checking for grid presses etc etc). this is the same design as used by other monome eurorack firmwares.
all events are processed by the same queue, so if you have some heavy calculation or a lot of i2c sent when reacting to an event, it’s likely timing accuracy will be reduced. there are a couple of things that could be done - supporting prioritizing events and having a separate queue for sending events to control, perhaps.
if you want to do something more time sensitive i would look at modifying main.c. also, in libavr32 timers run on 1ms intervals, i think there is a way to configure it to run faster but i’ve never tried it.
it sounds like for your application you might be able to just use timers. so basically create a separate timer to update display with the interval of 63ms, that’s what teletype uses. for slewing CVs it uses 6ms.
i should add some functions to make it easier and handle it similarly to how grid LED updates are handled - you put full LED update into render_grid function, and whenever something requires updating the LEDs you just call refresh_grid(); and it will schedule an update.
would love to hear that!