Предыдущий <<  SPDR $0F($2F), SPSR $0E, SPCR $0D ($2D)   >>Следующий

Интерфейс SPI - синхронный последовательный интерфейс - предназначен для организации обмена между двумя устройствами, причем одно из них является инициатором обмена (master ), второе - пассивное (slave ).

Говоря простым языком, в каждом из устройств (master  и slave ) имеются восьмиразрядные регистры сдвига, выход регистра master подключается ко входу регистра slave  и наоборот. Кроме этого, master  генерирует импульсы сдвига, по которым происходит сдвиг информации в обоих устройствах. За 8 тактовых импульсов регистры master  и slave обмениваются содержимым друг с другом. 

 

Регистр SPDR - это как раз и есть регистр сдвига. Если устройство сконфигурировано как master,  то запись байта в регистр SPDR вызовет начало передачи - то есть тактовый генератор выдаст восемь тактов, за которые регистры сдвига master  и slave  устройств обменяются своим содержимым, после чего тактовые импульсы прекращаются, а в обоих устройствах устанавливаются флаги SPIF

Теперь рассмотрим регистры статуса SPSR и управления SPCR

Бит
SPCR
Название Описание
7 SPIE Бит разрешения прерывания.Если он=1, то установка бита SPIF в единицу вызовет прерывание (естественно, если все прерывания не запрещены)
6 SPE Общее разрешение SPI (включение)
5 DORD Порядок передачи. DORD=1 - передается младшим битом вперед, DORD=0 - старшим.
4 MSTR Если MSTR=1 - SPI работает в режиме master
3 CPOL Если CPOL=1, то SCK в режиме ожидания находится в состоянии "1", то есть строб будет логическим "0"
2 CPHA Это что-то относящееся к фазе строба. Толком не разбирался - все работало по умолчанию :-)
1 SPR1 Эти два бита определяют частоту SCK в режиме master. 
00 - Tck / 4
01 - Tck / 16
10 - Tck / 64
11 - Tck / 128
0 SPR0

Бит
SPSR
Название Описание
7 SPIF  Флаг завершения обмена. Если SPIE установлен - вызовет прерывание. Сбрасывается при входе в прерывание, если работать без прерываний - то надо сначала прочесть SPSR, потом SPDR
6 WCOL  Устанавливается, если произошла запись в SPDR во время обмена - то есть ошибочная ситуация.

А вот про пин SS (slave select  ) мы забыли. Если SPI сконфигурирован как slave, то пин SS разрешает tuj работу, если установлен в лог. "0" (что-то типа сигнала "выбор кристалла" у цифровых микросхем). Это позволяет одному master работать с несколькими slave .

Если SPI сконфигурирован как master, то ситуация немного сложнее. В этом случае SS работает только если он определен как входной. Подав на него лог. "0", можно вызвать переключение SPI в режим slave - наверное, это для ситуации, когда slave устройство вдруг захотело что-то передать master-у. Сам я такое извращение никогда не использовал и обмен между двумя устройствами организовывал по другому.

Мой отладочный модуль (  см. тут ) также использует SPI интерфейс, по двум причинам - во первых, к SPI подключен шлейф программатора - удобно при отладке, ничего переключать не надо. И во вторых - этот интерфейс все-таки не так часто используется (хотя это, наверное, весьма спорное утверждение).


Фоторепортаж о модели "Vesuvio", военное судно снабжения ·· Интернет магазин постельного белья ·· удаление бородавок

nml 11-Jul-2009