SPI (Serial Peripheral Interface) - это полнодуплексный скоростной синхронный
трёхпроводной интерфейс. В настоящее время его поддерживают не только AVR-контроллеры,
но и некоторые модели Microchip и
Motorola, и он становится уже промышленным
стандартом.
SPI в реализации Atmel имеет четыре
задаваемые программно скорости передачи, может передавать байты от старшего к младшему
биту и наоборот, обнаруживает ошибки пакета.
SPIE - разрешение прерывания по окончанию передачи. SPE - SPI включен. Если установлен этот бит, то выводы #SS, MISO, MOSI и SCK
работают как выводы SPI, иначе - как простые выводы порта. DORD - направление передачи данных. Если установлен, то передача идёт с младшего
бита, если сброшен - со старшего. MSTR - если установлен, контроллер работает как Master, если сброшен - как Slave.
Управляется также выводом #SS, если он настроен на ввод - при подаче "0" на #SS
бит MSTR сбрасывается. CPOL - определяет уровень на выходе SCK в режиме ожидания - SCK = CPOL CPHA - если установлен, передача и приём бита производится по обратному фронту,
если сброшен - по прямому. SPR1, SPR0 - делитель тактовой частоты (F - частота генератора контроллера).
SPR1
SPR0
Частота
0
0
F/4
0
1
F/16
1
0
F/64
1
1
F/128
Регистр SPSR - регистр состояния
SPIF
WCOL
-
-
-
-
-
-
SPIF - флаг прерывания по окончанию передачи. Устанавливается и сбрасывается
аппаратно. WCOL - флаг наложения. Устанавливается, когда принятый байт наложился на
ещё не прочитанный в регистре данных. Сбрасывается чтением регистра состояния.
MISO - Master In, Slave Out - выход ведомого, вход ведущего. MOSI - Master Out, Slave In - вход ведомого, выход ведущего. SCK - SPI ClocK - тактовая линия. #SS - Slave Select. Если #SS настроен на ввод, то "0" на #SS означает,
что контроллер работает ведомым, "1" - ведущим. Если #SS настроен на вывод,
то он не используется при связи по SPI.
Передача и приём тактируются по линии SCK в соответствии с конфигурацией, заданой
в регистре управления. После того, как байт передан, тактирование прекращается, в
регистре состояния устанавливается флаг SPIF и вызывается прерывание окончания передачи,
если оно разрешено.
Запись в регистр данных передающего контроллера невозможна, пока не освобождён регистр сдвига
SPI.
Если по окончании приёма регистр данных не прочитан, то при приёме следующего байта возникает
ошибка наложения и предыдущий байт теряется.
Оглавление