Ну сами посчитайте 16 000 000 / 2 500 000 = 6.4 тактов за период, что Вы успеете сделать за это время? По-моему этого не хватит даже чтобы просто войти в прерывание и сделать reti

Я Вам предлагаю по приёму очередного бита (прерывание от INT0 или INT1) запускать таймер, прерывание от которого будет больше длительности интервала между битами (на сколько, это Ваше решение). Это самое прерывание будет Вам сигнализировать, что поток битов нарушен, а программа уже решит, это признак паузы между посылками (если приняли все 32 бита) или сбой в посылке. UART с обоих сторон подцепите к кольцевым буферам, например. Расскажите лучше, как у Вас организована схема выдачи битов в аринк, также, как приём (две линии, для 0 и для 1), или три линии (+, -, 0)? То, что всё будет в прерываниях - на мой взгляд не страшно, научитесь писать лаконичный и скорострельный код

А мэйн-луп при этом может мигать светодиодом, к примеру

Ну или примените алгоритм, который предложил
Сергей Борщ - вполне приятное решение, единственно, в нём меня смущает жёсткое задание скорости опроса входящих битов, хотя наверно при 32 битах и 5% может всё будет в порядке.