У меня на 72МГц, один 500кбит-поток, ~50% заполнения, по приёму на
прерываниях без DMA разбирается, 19200 ещё поток, так же, только
пониже приоритетом. CAN2.0 на мегабите с циклом обмена 5мс. Настроил весь обмен только на прерываниях, разными приоритетами. Прикладной программист и не знает, как оно работает. Когда удобно - берет данные, когда надо - кладёт. А дальше оно само.
Данные реального времени - в кадрах, менее требовательные ко времени данные - в пакетах, разбитых на те же кадры одного и того же интерфейса. Всё работает, аж приятно!
Разумеется, проверил нагрузку по ногодрыгу, осциллографом. За цикл прикладной программы, загрузка ЦП обработкой интерфейсов, не превышает 85%. Прикладному коду оставшегося хватает с лихвой.
P.S. оптимизация -O3, -flto
Без LTO было бы не так быстро, пришлось бы сделать циклы по длиннее.