Цитата
По вопросу - как я понял если я взвожу SPE то флаг SPIF должен сам устанавливать? Без взвода SPE аппаратная часть МЦУ сама выставляет нужные флаги, так?
Наверное Вы говорите не про SPE, а про SPIE (Interrupt Enable) flag (тот который MSB в SPCR).
Аппаратная часть выставляет флаг SPIF по окончанию трансфера в любом случае, другой вопрос когда он сбрасывается. А сбрасывается флаг SPIF автоматически
одним из двух возможных путей:
1. При входе в обработчик прерывания SPI.
2. При прочтении SPSR и затем SPDR.
вот цитата из ДШ:
SPIF is cleared by hardware when executing the corresponding interrupt handling vector.
Alternatively, the SPIF bit is cleared by first reading the SPI Status Register with SPIF set, then accessing
the SPI Data Register (SPDR).
Если Вы устанавливаете SPIE, то должны организовать обслуживание SPI должным образом, без циклов задержки. Читайте данные из SPDR в обработчике прерывания, и загружайте новые данные (если есть) в нем же. Это же настолько естественно - факт вызова обаботчика прерывания означает, что:
A. Байт данных получен, прямо сейчас его нужно прочитать из SPDR.
B. Байт данных отправлен и прямо сейчас можно слать следующий байт.
C. SPIF флаг очищен аппартно, можно о нем забыть.