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

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

Третья подпрограмма демонстрирует работу модуля USI в качестве ведомого SPI-устройства:

init:

ldi rl6, (1«USIWM0) I (1«USICS1)

sts USICR,rl6; Выполняется только один раз

SlaveSPITransfer:

sts USIDR,rl6

ldi rl6, (1«USI0IF)

sts USISR,rl6 SlaveSPITransfer loop:

Ids rl6,USISR

sbrs rl6,USI0IF

rjmp SlaveSPITransfer loop

Ids rl6,USIDR

ret

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

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

В двухпроводном режиме модуль USI может использоваться для обмена по шине TWI (12С), принципы работы и протокол которой были подробно рассмотрены в главе 11. В отличие от стандартных приемо-передат-чиков TWI, в модуле USI отсутствует ограничение скорости нарастания выходных и фильтрация входных сигналов. Структура модулей USI при работе в двухпроводном режиме показана на Рис. 12.6.

Основное отличие между ведущим и ведомым устройствами заключается в том, что тактовый сигнал генерируется ведущим устройством, а блок управления тактовым сигналом задействован только в ведомом. Формирование импульсов тактового сигнала осуществляется программным изменением бита PORTE4 регистра PORTE, в то время как сдвиг содержимого сдвигового регистра осуществляется аппаратно в обоих устройствах (в двухпроводном режиме эта операция выполняется только по спадающему фронту тактового сигнала). Поскольку ведомое устройство может формировать циклы ожидания, удерживая на линии SCL НИЗКИЙ уровень, ведущее устройство всегда должно контролировать состояние линии SCL после формирования нарастающего фронта. Завершение цикла обмена можно определить по переполнению 4-битного счетчика модуля.

Обратите внимание, что модули USI реализуют обмен только на физическом уровне, а для формирования потока данных необходимо использовать протокол, подобный рассмотренному в главе 11.


й

7654312ТТГ0

ведомый (slave)

БЛОК Удерж

управления тактовым сигналом

sda

Удерж J SCL

ведущий (master)

sda HZ

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

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

Рис. 12.7. Временные диаграммы обмена в двухпроводном режиме

Обмен в режиме TWI выполняется в несколько этапов: 1. Ведущее устройство формирует на шине состояние СТАРТ, выдавая на линию SDA НИЗКИЙ уровень при ВЫСОКОМ уровне на линии SCL (точка А на Рис. 12.7). Выдача на линию SDA НИЗКОГО уровня может быть осуществлена либо записью в сдвиговый регистр значения со сброшенным 7-м битом, либо сбросом 5-го бита регистра PORTE. Разумеется, бит DDE7 регистра DDRE при этом должен быть установлен в 1. Это состояние детектируется схемой обнаружения состояния СТАРТ ведомого модуля (Рис. 12.8), в результате чего устанавливается флаг USISIF и, при необходимости, генерируется прерывание.


2.Помимо установки флага, схема обнаружения состояния СТАРТ удерживает на линии SCL НИЗКИЙ уровень после формирования на ней ведущим спадающего фронта (точка В). Это позволяет выполнить ведомому выход из «спящего» режима или завершить выполнение других операций перед инициализацией сдвигового регистра для приема адреса, которая заключается в сбросе флага USISIF и счетчика.

3.Ведущий выдает на линию SDA первый бит байта и высвобождает линию SCL, формируя на ней нарастающий фронт (точка С). По этому фронту ведомое устройство считывает значение бита и помещает его в сдвиговый регистр.

4.После передачи восьми битов (адрес ведомого устройства плюс бит направления передачи данных) происходит переполнение счетчика ведомого устройства, в результате чего последнее выставляет на линию SCL НИЗКИЙ уровень (точка D). Если адрес, посланный ведущим, не совпадает с адресом ведомого, то ведомый высвобождает линию SCL и переходит к ожиданию появления на шине нового состояния СТАРТ.

5.Если же ведомый распознает свой адрес, то во время передачи бита квитирования он выставляет на линию SDA НИЗКИЙ уровень, после чего снова удерживает на линии SCL напряжение НИЗКОГО уровня (т. е. перед высвобождением линии SCL в момент D необходимо записать в счетчик значение 14). В зависимости от значения бита направления передачи данных либо ведущее, либо ведомое устройство включает выходные буферы. Если данный бит установлен, выполняется операция чтения (линией SDA управляет ведомое устройство). После выдачи подтверждения ведомое устройство снова может выставить на линии SCL НИЗКИЙ уровень (точка Е).

6.Далее выполняется пересылка в заданном направлении требуемого числа байтов данных до тех пор, пока ведущее устройство не сформирует на шине состояние СТОП или ПОВСТАРТ.

Если по каким-либо причинам модуль не может продолжать прием данных, то после приема последнего байта он формирует неподтверждение (NACK), выдавая НИЗКИЙ уровень на линию SDA во время передачи бита квитирования.

На Рис. 12.8 приведена принципиальная схема узла обнаружения состояния СТАРТ модуля USI. Поскольку этот узел является асинхронным, он может использоваться для вывода микроконтроллера из «спящих» режимов, таких как Power Down. Единственное, на что нужно обратить внимание, — время запуска тактового генератора не должно превышать максимально возможную длительность сигнала НИЗКОГО уровня на линии SCL, если эта величина нормируется в используемом протоколе.



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