264
Генерация синхросигнала – это всегда обязанность ведущего: каждый
ведущий генерирует свой собственный сигнал синхронизации при пересылке
данных по шине. Сигнал синхронизации может быть изменен, только если он
«вытягивается» медленным ведомым устройством (путем удержания линии в
низком состоянии), или другим ведущим в случае столкновения.
Данная лабораторная работа посвящена изучению последовательного
интерфейса I
2
С и устройств, подключенных по этому интерфейсу к
микроконтроллеру ADuC812 стенда SDK-1.1, – энергонезависимая память
EEPROM и часы реального времени (RTC).
В рамках лабораторной работы необходимо разработать программу для
контроллера SDK-1.1, которая выполняет конкретную прикладную задачу (см.
варианты задания). Реализация задачи требует знания материалов предыдущих
лабораторных работ: таймеры микроконтроллера ADuC812, последовательный
канал, светодиодные индикаторы, клавиатура, ЖКИ, звуковой
излучатель и др.
В данной работе МК ADuC812 – ведущий, а EEPROM и RTC – ведомые на
шине I
2
С. К особенностям реализации контроллера последовательного
двухпроводного интерфейса в ADuC812 можно отнести следующие: в режиме
ведущего генерация сигналов на линиях данных и синхронизации является
программной (через биты регистров специального назначения); в режиме
ведущего (в отличие от ведомого) НЕ генерируются
прерывания по
приему/передаче данных. С учетом сказанного ниже приведены варианты
реализации драйвера I
2
C:
1. Простой вариант. В драйвере I2C реализуется синхронный обмен
данными, который предполагает отсутствие ситуации неготовности
I2C-устройств. Однако EEPROM и RTC не порты ввода-вывода и все-
таки требуют определенное количество времени на выполнение циклов
чтения/записи/стирания данных. При синхронной организации обмена
эти задержки должна учитывать программа, т.е. драйвер I2C.
2. Усложненный вариант
. Драйвер I2C должен использовать прерывание
таймера, в котором работа с интерфейсом представляет собой
периодический процесс генерации сигналов на линиях данных (SDA) и
синхронизации (SCL) и организуется в виде конечного автомата.
Состояниями данного автомата являются состояния шины I2C по
передаче и приему данных (например, передача старт- или стоп-
состояния, передача адреса ведомого устройства, передача или
прием
байта данных, передача или прием подтверждения и др.). Кроме того,
необходимо отслеживать ошибочные состояния I2C и обрабатывать их.
Частота настройки таймера определяет невысокую скорость передачи
данных по шине I2C. Вся работа с интерфейсом НЕ должна быть
локализована в обработчике прерываний таймера, так как процессом
обмена данными необходимо управлять при помощи API-функций,
которые
взаимодействуют с обработчиком прерывания через буферы.