|
Предыдущий
<< 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
подключен шлейф программатора -
удобно при отладке, ничего
переключать не надо. И во вторых - этот
интерфейс все-таки не так часто
используется (хотя это, наверное,
весьма спорное утверждение).
|
|