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 |