Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Stenin Lab / C8051F60-67-устройство МК.pdf
Скачиваний:
150
Добавлен:
10.02.2015
Размер:
5.19 Mб
Скачать

C8051F060/1/2/3/4/5/6/7

Рисунок 20.11. SMB0ADR: Регистр адреса модуля SMBus

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

SLV6

SLV5

SLV4

SLV3

SLV2

SLV1

SLV0

GC

при сбросе:

 

 

 

 

 

 

 

 

00000000

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

SFR Адрес: 0xC3

 

 

 

 

 

 

 

 

SFR страница: 0

Биты 7-1: SLV6-SLV0: Адрес ведомого SMBus

Эти биты загружаются 7-разрядным адресом ведомого, на который будет отвечать модуль SMBus при работе в качестве ведомого передатчика или ведомого приемника. SLV6 является старшим значащим битом адреса и соответствует первому биту адресного байта, полученного по шине SMBus.

Бит 0: GC: Разрешение адреса общего вызова.

Этот бит используется для разрешения распознавания адреса общего вызова (0х00).

0:Адрес общего вызова игнорируется.

1:Адрес общего вызова распознается.

20.4.5.Регистр состояния

Регистр состояния SMB0STA содержит 8-битный код состояния, показывающий текущее состояние модуля SMBus0. Существует 28 возможных состояний модуля SMBus, каждому из которых соответствует уникальный код состояния. Пять старших значащих битов кода состояния могут иметь различные значения, а три младших значащих бита для корректных кодов состояния всегда равны нулю, когда SI = 1. Поэтому все возможные коды состояния кратны восьми. Это позволяет применять в программе код состояния в качестве индекса, используемого для перехода на соответствующую процедуру обслуживания (используя 8 байт кода для обслуживания состояния или для перехода на более сложную процедуру обслуживания).

Для нужд программы пользователя содержимое регистра SMB0STA определено только тогда, когда флаг SI установлен в 1. Программа никогда не должна записывать данные в регистр SMB0STA. Это приведет к неопределенному результату. В табл.20.1 приведены все 28 состояний модуля SMBus вместе с соответствующими им кодами.

Ред. 1.2

246

C8051F060/1/2/3/4/5/6/7

Рисунок 20.12. SMB0STA: Регистр состояния модуля SMBus0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

STA7

STA6

STA5

STA4

STA3

STA2

STA1

STA0

при сбросе:

 

 

 

 

 

 

 

 

11111000

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

SFR Адрес: 0xC1

 

 

 

 

 

 

 

 

SFR страница: 0

Биты 7-3: STA7-STA3: Код состояния модуля SMBus0.

Эти биты содержат код состояния модуля SMBus0. Существует 28 возможных кодов состояния. Каждый код состояния соответствует единственному состоянию модуля SMBus0. Корректный код состояния присутствует в регистре SMB0STA, когда флаг SI (SMB0CN.3) установлен в 1. Содержимое регистра SMB0STA не определено, когда флаг SI равен нулю. Запись в регистр SMB0STA в любое время даст неопределенный результат.

Биты 2-0: STA2-STA0: Три младших значащих бита регистра SMB0STA всегда читаются как 0, когда флаг SI установлен в 1

247

Ред. 1.2

C8051F060/1/2/3/4/5/6/7

Таблица 20.1. Коды состояния модуля SMBus

 

 

Код

 

Режим

 

 

Состояние модуля SMBus

 

 

Типичное действие

 

 

 

 

состояния

 

 

 

 

 

 

 

 

 

(SMB0STA)

 

 

 

 

 

 

 

 

 

 

 

 

0x00

 

Все режимы

 

Ошибка шины (т.е. некорректный

 

 

Установка STO для сброса

 

 

 

 

 

START, некорректный STOP, …)

 

 

SMBus

 

 

 

 

 

 

 

 

 

 

 

 

 

0x08

 

Ведущий

 

Передан бит START.

 

 

Загрузка SMB0DAT адресом

 

 

 

 

передатчик/приемник

 

 

 

ведомого + R/W. Сброс STA.

 

 

 

0x10

 

Ведущий

 

Передан бит «повторный START».

 

 

Загрузка SMB0DAT адресом

 

 

 

 

передатчик/приемник

 

 

 

ведомого + R/W. Сброс STA.

 

 

 

0x18

 

Ведущий передатчик

 

Передан адрес ведомого + W. Получен

 

 

Загрузка SMB0DAT данными

 

 

 

 

 

 

 

 

ACK.

 

 

для передачи

 

 

 

0x20

 

Ведущий передатчик

 

Передан адрес ведомого + W. Получен

 

 

Повтор опроса подтверждения.

 

 

 

 

 

 

 

 

NACK.

 

 

Установка STO + STA.

 

 

 

 

 

 

 

 

 

 

 

1) Загрузка SMB0DAT

 

 

 

 

 

 

 

 

 

 

 

следующим байтом, или

 

 

 

0x28

 

Ведущий передатчик

 

Передан байт данных. Получен ACK.

 

 

2) Установка STO, или

 

 

 

 

 

 

 

3) Сброс STO, а затем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

установка STA для передачи

 

 

 

 

 

 

 

 

 

 

 

бита «повторный START»

 

 

 

0x30

 

Ведущий передатчик

 

Передан байт данных. Получен NACK.

 

 

1) Повтор передачи, или

 

 

 

 

 

 

 

2) Установка STO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0x38

 

Ведущий передатчик

 

Потерян арбитраж.

 

 

Сохранение текущих данных

 

 

 

 

 

 

 

 

 

 

 

Если необходимо принять

 

 

 

0x40

 

Ведущий приемник

 

Передан адрес ведомого + R. Получен

 

 

только один байт, то сброс АА

 

 

 

 

 

ACK.

 

 

(передача NACK после приема

 

 

 

 

 

 

 

 

 

 

 

байта). Ожидание

 

 

 

 

 

 

 

 

 

 

 

принимаемых данных

 

 

 

0x48

 

Ведущий приемник

 

Передан адрес ведомого + R. Получен

 

 

Повтор опроса подтверждения.

 

 

 

 

 

 

 

 

NACK.

 

 

Установка STO + STA.

 

 

 

 

 

 

 

 

 

 

 

Чтение SMB0DAT. Ожидание

 

 

 

0x50

 

Ведущий приемник

 

Получен байт данных. Передан ACK.

 

 

следующего байта. Если

 

 

 

 

 

 

 

 

 

 

 

следующий байт является

 

 

 

 

 

 

 

 

 

 

 

последним, то сброс АА.

 

 

 

0x58

 

Ведущий приемник

 

Получен байт данных. Передан NACK.

 

 

Установка STO.

 

 

 

0x60

 

Ведомый приемник

 

Получен собственный адрес ведомого

 

 

Ожидание данных.

 

 

 

 

 

 

 

 

+ W. Передан ACK.

 

 

 

 

 

 

 

0x68

 

Ведомый приемник

 

При передаче в ведущем режиме

 

 

Сохранить текущие данные для

 

 

 

 

 

 

 

 

адреса ведомого + R/W потерян

 

 

повтора передачи, когда шина

 

 

 

 

 

 

 

 

арбитраж.

 

 

освободится.

 

 

 

 

 

 

 

 

Получен собственный адрес ведомого

 

 

Ожидание данных.

 

 

 

 

 

 

 

 

+ W. Передан ACK.

 

 

 

 

 

 

 

0x70

 

Ведомый приемник

 

Получен адрес общего вызова (0x00).

 

 

Ожидание данных.

 

 

 

 

 

 

 

 

Передан ACK.

 

 

 

 

 

 

 

0x78

 

Ведомый приемник

 

При передаче в ведущем режиме

 

 

Сохранить текущие данные для

 

 

 

 

 

 

 

 

адреса ведомого + R/W потерян

 

 

повтора передачи, когда шина

 

 

 

 

 

 

 

 

арбитраж.

 

 

освободится.

 

 

 

 

 

 

 

 

Получен адрес общего вызова (0x00).

 

 

 

 

 

 

 

 

 

 

 

 

Передан ACK.

 

 

 

 

 

 

 

0x80

 

Ведомый приемник

 

Получен собственный адрес ведомого

 

 

Чтение SMB0DAT. Ожидание

 

 

 

 

 

 

 

 

+ W. Получен байт данных.

 

 

следующего байта или STOP.

 

 

 

 

 

 

 

 

Передан ACK.

 

 

 

 

 

 

 

0x88

 

Ведомый приемник

 

Получен собственный адрес ведомого

 

 

Установка STO для сброса

 

 

 

 

 

 

 

 

+ W. Получен байт данных.

 

 

SMBus.

 

 

 

 

 

 

 

 

Передан NACK.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ред. 1.2

248

C8051F060/1/2/3/4/5/6/7

 

Код

 

Режим

 

 

Состояние модуля SMBus

 

 

Типичное действие

 

 

состояния

 

 

 

 

 

 

 

(SMB0STA)

 

 

 

 

 

 

 

 

 

 

0x90

 

Ведомый приемник

 

Получен адрес общего вызова (0x00).

 

 

Чтение SMB0DAT. Ожидание

 

 

 

 

 

 

 

Получен байт данных.

 

 

следующего байта или STOP.

 

 

 

 

 

 

 

Передан ACK.

 

 

 

 

 

0x98

 

Ведомый приемник

 

Получен адрес общего вызова (0x00).

 

 

Установка STO для сброса

 

 

 

 

 

 

 

Получен байт данных.

 

 

SMBus.

 

 

 

 

 

 

 

Передан NACK.

 

 

 

 

 

0xA0

 

Ведомый приемник

 

Получен бит STOP или «повторный

 

 

Никаких действий не

 

 

 

 

START», когда устройство адресуется

 

 

требуется.

 

 

 

 

 

 

 

в качестве ведомого.

 

 

 

 

 

0xA8

 

Ведомый передатчик

 

Получен собственный адрес ведомого

 

 

Загрузка SMB0DAT данными

 

 

 

 

 

 

 

+ R. Передан ACK.

 

 

для передачи.

 

 

0xB0

 

Ведомый передатчик

 

При передаче в ведущем режиме

 

 

Сохранить текущие данные для

 

 

 

 

 

 

 

адреса ведомого + R/W потерян

 

 

повтора передачи, когда шина

 

 

 

 

 

 

 

арбитраж.

 

 

освободится.

 

 

 

 

 

 

 

Получен собственный адрес ведомого

 

 

Загрузка SMB0DAT данными

 

 

 

 

 

 

 

+ R. Передан ACK.

 

 

для передачи.

 

 

0xB8

 

Ведомый передатчик

 

Передан байт данных. Получен ACK.

 

 

Загрузка SMB0DAT данными

 

 

 

 

 

 

 

 

 

 

для передачи

 

 

0xC0

 

Ведомый передатчик

 

Передан байт данных. Получен NACK.

 

 

Ожидание бита STOP.

 

 

0xC8

 

Ведомый передатчик

 

Передан последний байт данных

 

 

Установка STO для сброса

 

 

 

 

 

 

 

(AA=0). Получен ACK.

 

 

SMBus.

 

 

 

 

Ведомый

 

Истек таймаут высокого уровня на

 

 

Установка STO для сброса

 

 

0xD0

 

 

линии SCL, определяемый значением

 

 

SMBus.

 

 

 

передатчик/приемник

 

 

 

 

 

 

 

 

 

 

регистра SMB0CR (при FTE=1)

 

 

 

 

 

0xF8

 

Все режимы

 

Простой (ожидание)

 

 

Флаг SI не установлен.

 

249

Ред. 1.2

C8051F060/1/2/3/4/5/6/7

ПРИМЕЧАНИЯ

Ред. 1.2

250