Сообщение от Igor_w77
|
"В направлении передачи данных система выполнена как однобуферная, а в направлении приема используется двойная буферизация. Это означает, что передаваемые байты не могут быть записаны в регистр данных SPI, прежде чем полностью завершится цикл сдвига. Во время приема данных необходимо следить, чтобы принятая посылка была считана из регистра данных SPI, прежде чем завершится цикл входящего сдвига новой посылки. В противном случае первый байт будет потерян."
|
Это значит что для приема информации от слейва необходимо мастеру в регистр SPDR забросить любое число и ждать пока установится флаг прерывания. После этого можно считать с регистра SPDR полученое число. Без числа в регистре даных прием не происходит.
Инициализация SPI в ATMEGA32 производится двумя регистрами
SPCR
7 SPIE - Запрет прерываний, 1-Разрешено
6 SPE - 0-SPI останов, 1- Работа
5 DORD - Начало передачи, 0-со старшего бита 1- с младшего
4 MSTR - 1 - SPI Сконфигурирован Мастер, 0- slave
3 CPOL - Полярность тактового игнала, 0-(+), 1-(-)
2 CPHA - Захват тактового сигнала, 0-по переднему фронту,1-по Заднему
1-0 SPR1, SPR0 - Деление частоты контролера 0-на 4, 1-16,2-64,3-128 без умножения на 2
SPSR=0x01 умножение частоты на 2.
ATMEGA32 работает с кварцом на частотах до 16МГц.
ПОМОГИТЕ КТО ЗНАЕТ!!!
При работе с Протеусом 7 SP3, при инициализации SPI на умножение частоты на 2, SPSR=0x01 выдается ошибка: Attempted to write address.
Такая ошибка только в Протеусе. AVR Studio ошибки не выдает и в даташите этот регистр описан.