Учебный курс AVR. Использования TWI модуля как ведущего I2C устройства. Работа на прерываниях. Ч5
Все операции, выполняемые TWI модулем, завершаются установкой бита прерывания (TWINT бит регистра TWCR) и соответствующего статусного кода (старшие шесть разрядов регистра TWSR). Это позволяет организовать обмен данными по шине с помощью прерываний.
Суть подхода в следующем. Мы формируем сообщение для передачи, затем инициируем ее старт и разрешаем прерывания. Дальнейшую работу выполняет автоматически вызываемый обработчик прерывания TWI модуля, а микроконтроллер может заниматься другими задачами.
Такой подход экономит время микроконтроллера, потому что не нужно опрашивать в цикле бит прерывания, чтобы продолжить процесс обмена данными.
В этой части мы рассмотрим работу ведущего TWI устройства на прерываниях. Код для этого материала основан на руководстве фирмы Atmel - AVR315: Using TWI module as I2C master.
Учебный курс AVR. Использования TWI модуля. Работа с DS1307. Статусные коды. Ч4
В составе TWI модуля микроконтроллеров AVR есть регистр TWSR. Старшие 6 разрядов этого регистра содержат статусный код, а младшие - управляющие разряды, которые задают коэффициент деления частоты SCL сигнала. Я сейчас говорю про atmega16, в некоторых микроконтроллерах этих разрядов нет, но не суть.
Статусный код отражает результат последней выполненной операции TWI модуля. По нему можно судить, завершилась ли она успешно или что-то пошло не так, стоит ли продолжать передачу данных или ее пора прекращать.
В предыдущей части был рассмотрен топорный вариант работы с DS1307, в котором статусные коды TWI модуля просто игнорировались. В этом материале разобран пример работы с TWI модулем без прерываний, но с использованием статусных кодов.