www.chms.ru - вывоз мусора в Балашихе 

Динамо-машины  Однокристальные микроконтроллеры 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [ 51 ] 52 53 54 55 56 57 58 59 60 61 62 63

S1C0N

ENS1

Рис. 4.10. Иницна-ацзация режима .slave-receiver

Как уже было сказано ранее, биты CR2...CR0 не воздействуют на скорость приема в slave-режпмс. Бит АА должен быть уста1ювлен для получения возможности подтверждения собственного slave-адреса или general call address. Не забывайте также загружать в регистр S1ADR собственный slave-адрес микроконтроллера.

После инициализации порта он входит в состояние ожидания получения slave-адреса с битом направления данных W. После получения адреса генерируется прерывание (устанавливается бит SI) и код состояния в регистре статуса. Возможные варианты кодов состояния приводятся в табл. 4.4.

Режим slave может автоматически устанавливаться в случае multi-master организации шины при программном арбитраже (коды 68h и 78h). Обратите внимание: при сброшенном бите АА микроконтроллер может не подтвердить прием собственного slave-адреса или general call address. Таким образом, бит АА можно использовать для временной изоляции порта 1С микроконтроллера от шины.

Slave Transmitter. В этом режиме микроконтроллер в роле slave-устройства передает данные на другое master-устройство. Ишь циализацня производится точно так же, как и в предыдущем примере. После инициализации порт PC ожидает прием собственного

slave-адреса, получения сигнала АСК устанавливаются коды в регистре состояния. Их может быть несколько: 4()h, 48h, 38h - для режима master или 68h, 78h, BOh - в случае ргузретения slave-режима (бит АА = 1). Действия, которые нужно предпринимать при получении кодов, приведены в табл. 4.3.

После вынолнения условия laquo;повторный Start raquo; генерируется код lOh, производится загрузка S1 DAT slave-адресом с условием W.

Slave Receiver. В этом режиме микроконтроллер становится slave-устройством и получает данные от master-устройства, располагающегося на шипе. Инициализация режима показана на рис. 4.10.



slave-адреса с битом направления данных R. После получения slave-адреса и подтверждения АСК устанавливается бит SI, код в регистре статуса. Возможные комбинации кодов приведены в табл. 4.5.

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

Код F8h указывает на то, что флаг SI не установлен, а также порт 1 С не активизирован. Обычно устанавливается в промежутках между генерацией других кодов.

Код OOh указывает на ошибку, произошедшую во время обмена данными но шине 1С. Обычно ошибки связаны с генерацией условий Start и Stop в непредусмотренное время, например, в течегте передачи байта slave-адреса, байта данных или условия АСК. Ошибка может быть также вызвана помехой на шине. При обнаружении ошибки устанавливается бит SI.

Чтобы избавиться от состояния ошибки, нужно предпринять следующие действия: установить бит STO и очистить бит SI. Эти действия переведут порт в неадресуемый slave-режим и освободят линии SDA и SCL.

Аппаратные средства порта могут отследить одновременную генерацию условия laquo;повторный Start raquo; от двух master-абонентов. Причем эти условия могут быть сгенерированы как в режимах master receiver, так и master transmitter, Данная ситуация показана на рис. 4.11.

1

Slave W 1 АСК 1 Data

Другой master

Slave

1 1

продолжает

Другой master генерирует повторный start

Повтор

Рис. 4.11. Одновременная генерация условия laquo;повторный START raquo; двумя master-устройствами

Потеря арбитража отражается в регистре S1STA кодами 38h, 68h, BOh.

Правила написания программного обеспечения также приводятся в документе [33]. Мы не будем останавливаться на них, поскольку не



задавались такой целью. Читагель, пожелавший работать с VC интерфейсом на уровне программирования микроконтроллеров со специализированными портами, сделает это самостоятельно.

Таблица 4.2

Состояние регистров

Код S1STA

Состояние шины PC

S1DAT

S1C0N

Дальнейшие действия

Передача условия Start

Загрузка slave W

slave -t- W будет передан; бит АСК будет получен

Повторная передача условия Start

Загрузка slave + W Загрузка slave + R

Аналогично slave + W будет передан;

slave + W передан, ACK получен

Загрузка байта данных S1 DAT неактивен S1 DAT неактивен S1DAT неактивен

0 1 0 1

0 0 0 0

X X X X

Байт данных будет передан; бит АСК будет получен; laquo;повторный Start raquo; будет передан; условие Stop будет передано; флаг STO будет сброшен; условие Stop, сопровождаемое условием Start, будет передано; флаг STO будет сброшен

slave + W передан, ACK не получен

Загрузка байта данных 81 DAT неактивен S1DAT неактивен S1 DAT неактивен

0 0 0 0

X X X X

Аналогично предыдущей ситуации

Данные из регистра S1 DAT переданы, АСК получен

Загрузка байта данных S1 DAT неактивен S1 DAT неактивен S1 DAT неактивен

0 0 0 0

X X X X

Аналогично предыдущей ситуации

Данные из регистра S1 DAT переданы, АСК не получен

Загрузка байта данных S1 DAT неактивен S1 DAT неактивен S1 DAT неактивен

0 0 0 0

X X X X

Аналогично предыдущей ситуации

Арбитраж slave + R/W байта данных

S1 DAT неактивен S1 DAT неактивен

Шина освобождается, вводится неадресуемый режим, условие Start будет передано, когда шина освободится



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [ 51 ] 52 53 54 55 56 57 58 59 60 61 62 63