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

0 ... 151 152 153 154 155 156 157 ... 195

12.3. Режимы работы модуля USI

Как уже говорилось, модуль USI имеет два основных режима работы:

•трехпроводный режим;

•двухпроводный режим.

Кроме того, отдельные узлы модуля могут использоваться и для других целей, не обязательно связанных с передачей данных.

12.3.1. Трехпроводный режим

В трехпроводном режиме модуль USI может использоваться для обмена по шине SPI (режимы 0 или 1). Принципы работы этой шины были подробно рассмотрены в главе 10. Основное отличие модуля USI от стан-дартного модуля SPI заключается в отсутствии в модуле USI входа SS для выбора ведомого устройства. Однако при необходимости поддержка этого сигнала может быть легко реализована программно. Структура модулей USI при работе в трехпроводном режиме показана на Рис. 12.4.

—•-►

DO I

DI I

USCK

I

н

-

/D0<tdl l U<J

ВЕДОМЫЙ (SLAVE)

к]

<г-

1

DO 1

DI

Г? 6 5 4 3 2 1 ОГ

ВЕДУЩИЙ (MASTER)

kl

w-<r-]

PORTE4

1

USCK

Рис. 12.4. Модули USI в трехпроводном режиме

Сдвиговые регистры обоих модулей (ведущего и ведомого) соединяются между собой таким образом, чтобы после восьми импульсов на линии USCK содержимое сдвигового регистра ведущего оказалось в сдвиговом регистре ведомого, и наоборот. По этому же тактовому сигналу инкремен-тируется 4-битный счетчик модуля USI. Соответственно для определения момента завершения обмена можно использовать флаг прерывания по переполнению счетчика (USIOF). Тактовый сигнал формируется ведущим


устройством. Состояние вывода USCK изменяется переключением бита PORTE4 или же посредством записи лог. 1 в бит USITC регистра USICR.

Временные диаграммы обмена в трехпроводном режиме представлены на Рис. 12.5.

V. мзв У

6X5X4

X з

X 2

X 1 X LSB К

6 X 5 X 4

X з

X 2

DO

[ А) (£)(C)(D)(E)

Puc. 12.5. Временные диаграммы обмена в трехпроводном режиме

Верхний график сигнала USCK соответствует 0-му режиму внешнего тактового сигнала (USICS0 = 0). В этом режиме данные, поступающие на вход DI, считываются по нарастающему фронту сигнала USCK, а изменение состояния выхода DO (сдвиг содержимого сдвигового регистра) производится по спадающему фронту. Нижний график сигнала USCK соответствует 1-му режиму внешнего тактового сигнала (USICS0 = 1). В этом режиме назначения фронтов тактового сигнала меняются на противоположные: входные данные считываются по спадающему фронту, а выходные данные выводятся по нарастающему фронту. Указанные режимы соответствуют 0-му и 1-му режимам SPI.

Таким образом, обмен в режиме SPI выполняется в несколько этапов:

1.Оба устройства подготавливают выходные данные, включают выходные драйверы и сбрасывают содержимое своих 4-битных счетчиков (точки А и В на Рис. 12.5). Подготовка данных заключается в загрузке их в сдвиговый регистр, а выходные драйверы включаются установкой соответствующего бита регистра направления передачи данных. Порядок событий А и В может быть любым, важно только, чтобы интервал между последним из событий и началом считывания данных был не меньше половины периода сигнала USCK.

2.Ведущий формирует импульсы тактового сигнала, программно изменяя состояние линии USCK (точки С и D на Рис. 12.5). Значение бита данных на входах (DI) ведущего и ведомого устройства считы-вается по первому фронту сигнала USCK (точка С), а состояние выхода (DO) изменяется по противоположному фронту (точка D). Инкрементирование счетчика производится по каждому фронту.


3.Для передачи байта 2-й этап повторяется 8 раз.

4.После 8-го импульса тактового сигнала происходит переполнение счетчика, указывающее на завершение обмена, при этом принятый байт находится в регистре данных USIDR.

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

Первая подпрограмма реализует передачу одного байта данных ведущим устройством. Передаваемый байт содержится в регистре R16, по окончании обмена в этом же регистре находится принятый байт. Предполагается, что выводы DO и USCK уже настроены на выход.

SPITransfer:

sts USIDR,rl6; Загружаем сдвиговый регистр

ldi rl6, (1«USI0IF) ; Сбрасываем флаг прерывания sts USISR,rl6; и счетчик

SPITransfer loop:

ldi rl6, (1«USIWM0) I (1«USICS1) I (1«USICLK) I (1«USITC) sts USICR,rl6; Задаем режим и переключаем USCK

Ids rl6,USISR

sbrs rl6,USI0IF; Проверяем флаг переполнения

rjmp SPITransfer loop

Ids rl6,USIDR; Запоминаем принятый байт

ret

Вторая подпрограмма выполняет те же самые функции, но при этом обеспечивается максимально возможная скорость передачи (/SCK =/ск/4).

SPITransfer Fast:

stsUSIDR,rl6

ldirl6, (1«USIWM0) I (1«USICS0) I (1«USITC)

ldirl7, (1«USIWM0) I (1«USICS1) I (1«USITC) I (1«USICLK)

stsUSICR, rl6; MSB

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6

stsUSICR,rl7

stsUSICR,rl6; LSB

stsUSICR,rl7

Idsrl6,USIDR

ret



0 ... 151 152 153 154 155 156 157 ... 195