8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 135 136 137 138 139 140 141 ... 195

расположенного по адресу $0Е ($2Е) в моделях ATmega8515x/8535x, ATmegal62x, ATmega8x/16x/32x/64x/128x и по адресу $2D ($4D) — в остальных моделях. Биты с 7-го по 1-й этого регистра доступны только для чтения, а 0-й бит — как для чтения, так и для записи. Формат этого регистра приведен на Рис. 10.3, а назначение его битов описано в Табл. 10.4.

7

6

5

4

3

2

1

0

SPIF

WC0L

-

-

-

-

-

SPI2X

Чтение )/Запись(\Л/) RRRRRRRR/W Начальное значение 00000000

Рис. 10.3. Формат регистра SPSR

Таблица 10.4. Биты регистра SPSR

Бит

Название

Описание

7

SPIF

Флаг прерывания от SPI. Данный флаг устанавливается в 1 по окончании передачи очередного байта. Если флаг SPIE регистра SPCR установлен в 1 и прерывания разрешены, то одновременно с установкой флага генерируется прерывание от SPI. Также флаг SPIF устанавливается в 1 при переводе мик-роконтроллера из режима Master в режим Slave посредством вывода SS (см. раздел 10.4). Флаг сбрасывается аппаратно либо при старте подпрограммы обработки прерывания, либо после чтения регистра состояния SPI с последующим обращением к регистру данных SPI (SPDR)

6

WCOL

Флаг конфликта записи. Данный флаг устанавливается в 1 при попытке записи в регистр данных (SPDR) во время передачи очередного байта. Флаг сбрасывается аппаратно после чтения регистра состояния SPI с последующим обращением к регистру данных SPI

5...1

-

Зарезервированы, читаются как 0

0

SPI2X

Удвоение скорости обмена. При установке этого бита в 1 и работе микроконтроллера в режиме Master частота сигнала SCK удваивается

Передаваемые данные записываются, а принимаемые — считываются из регистра данных SPDR. В моделях ATmega8515x/8535x, ATmegal62x, ATmega8x/16x/32x/64x/128x регистр данных располагается по адресу $0F ($2F), а в остальных моделях — по адресу $2Е ($4Е). Запись в этот регистр инициирует начало передачи, а при его чтении считывается содержимое буфера сдвигового регистра. Другими словами, регистр данных служит буфером между регистровым файлом микроконтроллера и сдвиговым регистром модуля SPI.

Соединение двух микроконтроллеров (ведущий—ведомый) по интерфейсу SPI показано на Рис. 10.4. Вывод SCK ведущего микроконтроллера является выходом тактового сигнала, а ведомого микроконтроллера — входом.


MSB

ВЕДУЩИЙ

LSB

MSB

ВЕДОМЫЙ

LSB

8-битный сдвиговый регистр

MISO MISO

8-битный сдвиговый регистр -X-1—

MOSI MOSI

Генератор тактового сигнала SPI

SCK

SCK

Разрешение сдвига

SS

SS

Рис. 10.4. Соединение микроконтроллеров по интерфейсу SPI

Перед выполнением обмена необходимо, прежде всего, разрешить работу модуля SPI. Для этого следует установить в 1 бит SPE регистра SPCR. Режим работы определяется состоянием бита MSTR этого регистра: если бит установлен в 1, микроконтроллер работает в режиме Master, если сброшен в 0 — в режиме Slave.

Передача данных осуществляется следующим образом. При записи в регистр данных SPI ведущего микроконтроллера запускается генератор тактового сигнала модуля SPI, и данные начинают побитно выдаваться на вывод MOSI и соответственно поступать на вывод MOSI ведомого микроконтроллера. Порядок передачи битов данных определяется состоянием бита DORD регистра SPCR. Если бит установлен в 1, первым передается младший бит байта, если же сброшен в 0 — старший бит. После выдачи последнего бита текущего байта генератор тактового сигнала останавливается с одновременной установкой в 1 флага «Конец передачи» (SPIF). Если прерывания от модуля SPI разрешены (флаг SPIE регистра SPCR установлен в 1), генерируется запрос на прерывание. После этого ведущий микроконтроллер может начать передачу следующего байта либо, подав на вход SS ведомого напряжение ВЫСОКОГО уровня, перевести его в состояние ожидания.

Одновременно с передачей данных от ведущего к ведомому происходит передача и в обратном направлении, при условии, что на входе SS ведомого присутствует напряжение НИЗКОГО уровня. Таким образом, в каждом цикле сдвига происходит обмен данными между устройствами. Соответственно, в конце каждого цикла флаг SPIF устанавливается в 1 как в ведущем микроконтроллере, так и в ведомом. Принятые байты сохраняются в приемных буферах для дальнейшего использования.

В модуле реализована одинарная буферизация при передаче и двойная — при приеме. Это означает, что готовый для передачи байт данных не может быть записан в регистр данных SPI до окончания предыдущего цикла обмена. При попытке изменить содержимое регистра данных во время передачи флаг WCOL регистра SPSR устанавливается в 1. Сбрасывается этот флаг после чтения регистра SPSR с последующим обращением к регистру данных SPI.


Соответственно, при приеме данных принятый байт должен быть про читан из регистра данных SPI до того, как в сдвиговый регистр поступит последний бит следующего байта. В противном случае первый байт будет потерян.

10.3. Режимы передачи данных

Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент считывания сигнала) тактового сигнала SCK, его полярностью и передаваемыми данными. Всего существует 4 таких комбинации, определяемых состоянием битов СРНА и CPOL регистра SPCR (Табл. 10.5).

Таблица 10.5. Задание режима передачи данных

Бит

Описание

CPOL

Полярность тактового сигнала.

0— генерируются импульсы положительной полярности, при отсутствии импульсов на выводе присутствует НИЗКИЙ уровень;

1— генерируются импульсы отрицательной полярности, при отсутствии импульсов на выводе присутствует ВЫСОКИЙ уровень

СРНА

Фаза тактового сигнала.

0— обработка данных производится по переднему фронту импульсов сигнала SCK (для CPOL = 0 — по нарастающему фронту, а для CPOL = 1 — по спадающему фронту);

1— обработка производится по заднему фронту импульсов сигнала SCK

(для CPOL = 0 — по спадающему фронту, а для CPOL = 1 — по нарастающему фронту)

Соответствующие этим режимам форматы обмена данными через SPI приведены на Рис. 10.5 и Рис. 10.6 (передача ведется от старшего бита к младшему).

SCK(CPOL = 0) SCK (CPOL =1)

Моменты выборок

MOSI

(от ведущего) MISO

(от ведомого) S"S~ (к ведомому)

DORD = 0 DORD=1

MSB LSB

Бит 6 Бит1

Бит 5 Бит 2

Бит 4 БитЗ

БитЗ Бит 4

Бит 2 Бит 5

Бит1 Бит 6

Рис. 10.5. Передача данных при СРНА = 0

LSB MSB



0 ... 135 136 137 138 139 140 141 ... 195