Короче, нужны: 1. Инит канала передачи в прерывании (при условии что ни один канал неинициализирован) 2. Универсальный приемник, который читает с выбранного канала и формирует байт результата. 3. Деинит приема по событию (таймер или спецкод), который закрывает прием, выставляет флаг что данные получены, и сбрасывает флаги выбора каналов.
например, если в течении 30 мс не было данных на канале, считаем прием оконченным, формируем флаг полученных данных, выполняем сброс маски, и переключаем указатель приемника на второй буфер (чтобы не затереть даннеы, если начнется новый прием).