12.3.2. Режим ведущего приемника
В режиме ведущего приемника осуществляется прием данных от ведомого передатчика. Передача инициализируется тем же самым способом, что и в режиме ведущего передатчика. После генерации ведущим условия START, подпрограмма обработки прерывания должна загрузить адрес ведомого и бит направления данных в регистр данных I2C (I2DAT), а затем сбросить флаг SI в регистре I2CONSET. Бит направления передачи данных (R/W) должен быть установлен в логическую 1, что соответствует чтению данных. Таким образом, первый переданный байт должен содержать адрес ведомого и бит чтения (R).
После передачи ведущим адреса ведомого и бита направления данных и получения от ведомого бита «подтверждение» (АСК), микроконтроллер устанавливает бит SI и возвращает код состояния в регистре состояния I2C (I2STAT). Действия, которые должны быть предприняты пользовательским программным обеспечением в соответствии со значением этого кода состояния, перечислены в Табл. 12.3.
Таблица 12.3. Коды состояния для режима 1С ведущего приемника
Код состояния (I2STAT) |
Текущее состояние шины I2C и аппаратной логики интерфейса |
Ответ пользовательского программного обеспечения |
|||||
Операции с I2DAT |
Операции с битами I2CONSET |
Следующее действие аппаратной логики интерфейса |
|||||
STA |
STO |
SI |
АА |
||||
08h |
Передано условие START |
Загрузить адрес ведомого + R |
X |
0 |
0 |
X |
Адрес ведомого + W будет передан в линию; бит АСК будет принят из линии |
10h |
Передано условие повторный START |
Загрузить адрес ведомого + R |
X |
0 |
0 |
X |
Как и в предыдущем случае, адрес ведомого + W будет передан в линию |
Загрузить адрес ведомого + W |
X |
0 |
0 |
X |
12С перейдет в режим ведущего передатчика |
||
38h |
Арбитраж потерян во время приема бита NOT АСК |
Нет операций с I2DAT |
0 |
0 |
0 |
X |
Шина 12С будет «отпущена»; 12С перейдет в режим ведомого |
Нет операций с I2DAT |
1 |
0 |
0 |
X |
Условие START будет передано в линию, когда шина освободится |
||
40h |
Адрес ведомого + R был передан в линию; бит АСК был принят |
Нет операций с I2DAT |
0 |
0 |
0 |
0 |
Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСК |
Нет операций с I2DAT |
0 |
0 |
0 |
1 |
Будет принят байт данных из линии и возвращен (передан в линию) бит АСК |
||
48h |
Адрес ведомого + R был передан в линию; бит NOT АСК был принят |
Нет операций с I2DAT |
1 |
0 |
0 |
X |
Условие повторный START будет передано в линию |
Нет операций с I2DAT |
0 |
1 |
0 |
X |
Условие STOP будет передано в линию; флаг STO будет сброшен |
||
Нет операций с I2DAT |
1 |
1 |
0 |
X |
Условие STOP, сопровождаемое условием START будет передано в линию; флаг STO будет сброшен |
||
50h |
Байт данных был принят; бит АСК был передан в линию |
■Прочитать байт данных |
0 |
0 |
0 |
0 |
Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСК |
Прочитать байт данных |
0 |
0 |
0 |
1 |
Будет принят байт данных из линии и возвращен (передан в линию) бит АСК |
Таблица 12.3. Коды состояния для режима 12С ведущего приемника (продолжение)
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |