Ни UART ни SPI к этому (прямого) отношения не имеют.
Речь идет о логическом уровне протокола.
Разумеется, нужно знать частоту_передачи/длительность_импульсов.
Определение начала импульса - прерывание по фронту.
Длительность защитного интервала, нужно полагать, больше чем длительность заголовок+данные
Автомат состояний:
S0: ожидание защитного интервала
-если защитный интервал обнаружен переходим к S1
S1: чтение 7 бит преамбулы
-если последовательность 1010101 нарушается переходим к S0
-если последовательность 1010101 правильная переходим к S2
S2: считываем заголовок и данные
-переходим к S0
Как это реализовать:
ожидание защитного интервала
a) Таймер на время = заголовок+данные, таймер запущен
b) прерывание(фронт на входе) должно переустанавливать Таймер,
соответсвенно Таймер досчитает до конца и выдаст свое прерывание только тогда, когда будет защитный интервал. Т.о. прерывание Таймера и есть признак обнаружения защитного интервала.
чтение преамбулы/данных
a)Таймер на время = период следования битовой последовательности, таймер остановлен
b)прерывание(фронт на входе) должно (с задержкой ~0.5 периода следования битов) разрешить работу таймера, по каждому прерыванию таймера считываем очередной информационный бит
длительность импульса известна (можно посчитать)
Кстати, какое реальное значение скорости передачи? Если период следования битов меньше нескольких десятков микросекунд, то там уже другой коленкор...
Это значит что я должен присоединить источник последовательности к одному из 8 пинов?
Источник последовательности должен быть подключен к одному из выводов с названием INT.., которые описаны в разделе External Interrupts, Sense Control для прерывания должен быть Risig Edge.
С чего начать ?
Найдите в сети, если у Вас нет, вот такую книгу: Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров (djvu ~9 MB)
Посмотрите Атмеловские Application Notes