Сделайте входной буфер для одной задачки, и выходной буфер для другой задачки.
В прерываниях тока грузите данные во входные полбуфера и выгружаете в выходные полбуфера. Полбуфера закончились => преключаетесь на другие полбуфера заранее заготовленные или накопленные и семафорите вниз что типа данные готовы.
А все оставшееся время в фоне разруливаете принятые данные и готовите передаваемые. Собсно для фоновой задачки главное - успеть обсчтать свои пол буфера пока отправляется/принимается - другие полбуфера