Особенности модуля
Модуль инфракрасной связи (IRCOM) способен кодировать и декодировать данные в соответствии с коммуникационным протоколом IrDA® со скоростью до 115,2 Кбит/с. Этот модуль фактически является расширением модуля USART и должен использоваться совместно с ним.
В этой статье по применению приведено описание основных функциональных возможностей модуля IRCOM микроконтроллеров AVR® XMEGA™ с примерами кода. Так же к статье приложен драйвер модуля, написанный на языке C.
Расширенное использование данного модуля (например, использование совместно с системой событий) выходит за рамки этой статьи. Чтобы получить полную информацию об этом модуле обратитесь к спецификации на микроконтроллер и к соответствующим статьям по применению.
Схема кодирования/декодирования для скорости передачи данных до 115,2 Кбит/с в коммуникационном протоколе IrDA очень простая. Данные передаются последовательно. Передатчик посылает инфракрасный импульс с определенной длиной (как правило, 3/16 от скорости передачи данных) всякий раз, когда требуется передать логический ноль. Данные на контактах TXD/RXD являются инвертированным значением переданного/полученного инфракрасного импульса. На рисунке 2-1 иллюстрирован принцип кодирования/декодирования.
Рисунок 2-1. Схема кодирования/декодирования

Примечание: модуль не гарантирует, что данные имеют правильный формат кадра. Проверка должна быть сделана в пользовательском программном обеспечении.
Модуль IRCOM является расширением модуля USART и может использоваться только совместно с ним. IRCOM может быть использован с любым из USART, доступных в микроконтроллере (смотри рисунок 2-2).
Модуль IRCOM активируется при настройке модуля USART для работы в режиме IrDA. IRCOM может быть использован только в сочетании с одним из USART, то есть режим IrDA не должен быть установлен для более чем одного USART одновременно. Это условие должно обеспечиваться пользовательским программным обеспечением.
Для получения дополнительной информации о том, как настроить и использовать USART, обратитесь к документации на микроконтроллер или к статье по применению «AVR1307: Использование модуля USART микроконтроллеров XMEGA».
Обратите внимание на то, что для нормального функционирования расширения IrDA модуль USART не должен использоваться в режиме двойной скорости. Модуль IrDA использует 3/16 от скорости передачи данных для формирования правильного сигнала ИК-порта. При установке режима двойной скорости модуль USART снизит количество выборок до 8, что приведет к генерированию неправильного сигнала (с периодом 3/8 от скорости передачи данных).
Рисунок 2-2. Подключение модуля IRCOM

Длительность импульсов передатчика и приемника определяется двумя регистрами. По умолчанию длина импульса составляет 3/16 от скорости передачи USART. Второй метод подразумевает использование импульсов фиксированной длительности, зависящей от системной тактовой частоты. Можно установить от 1 до 254 тактов системного тактового сигнала на один импульс приемника/передатчика. При использовании этой схемы пользователь должен самостоятельно гарантировать то, что длительность импульсов передатчика/приемника и скорость передачи информации укладываются в спецификацию для коммуникационного протокола IrDA. Кроме того, можно активировать генерацию сигнала той же длительности, что и длительность кодированного импульса. Это может быть полезно при использовании системы событий в качестве входа приемника (смотри следующий раздел).
Ко входу приемника может быть подключена система обработки событий микроконтроллеров XMEGA. Это позволяет IRCOM или USART получать данные из других источников, а не только с соответствующего вывода RXD. В качестве входных данных может быть использовано любое событие, в том числе событие изменения логического уровня на линии ввода-вывода. Если ко входу приемника подключена система событий, линия RXD соответствующего модуля USART будет автоматически отключена.
Подробную информацию о системе обработки событий Вы найдете в руководстве по микроконтроллеру или в статье по применению «AVR1001: Начинаем работать с системой обработки событий микроконтроллеров XMEGA».
Эта статья по применению имеет в своем составе архив с исходным кодом базового драйвера, реализованного на языке C. Он написан с использованием компилятора IAR Embedded Workbench®.
Пример кода отправляет последовательно значения от 0 до 255 и проверяет равенство отправленных и полученных значений. Код можно протестировать замкнув проводом линии PC2 и PC3 порта ввода/вывода между собой.
Драйвер модуля USART, используемый в этой статье, работает в режиме опроса флагов прерываний. В приложениях, активно использующих центральный процессор, более эффективной будет реализация драйвера с применением прерываний. Информацию о драйвере, основанном на прерываниях, можно найти в статье по применению "AVR1307: Использование модуля USART микроконтроллеров XMEGA". В случае применения драйвера, использующего прерывания, процессору более не понадобится проверять флаги получения или отправки данных. Вместо этого он будет автоматически получать уведомления в тот момент, когда это произойдет. Выбор между опрашивающим драйвером и драйвером на основе прерываний зависит от конкретного приложения, и зачастую зависит от протокола, используемого для передачи данных.
Обратите внимание на то, что этот драйвер написан в весьма читаемом стиле и является примером использования периферийного модуля. При использовании драйвера желательно скопировать необходимый код непосредственно в приложение чтобы уменьшить число вызовов функций. Это может ускорить выполнение кода и уменьшить его объем.
Весь исходный код подготовлен для автоматического генерирования документации с помощью программы Doxygen. Doxygen это утилита, предназначенная для генерирования документации из исходных кодов путем анализа исходного кода и специальных ключевых слов. Более подробно про утилиту Doxygen можно узнать на сайте http://www.doxygen.org. Скомпилированная средствами Doxygen документация также поставляется с исходным кодом, прилагаемым к этому документу и доступна из файла readme.html, расположенного в папке с исходным кодом.