Портирование приложений с семейства PIC18 на PIC24F
2.6. Модуль универсального  асинхронного приемопередатчика (UART)
      Новый  модуль универсального асинхронного приемопередатчика (UART)  семейства PIC24F является  полнодуплексным интерфейсом со значительно расширенной функциональностью, по  сравнению с модулем EUSART семейства PIC18.
      Основные  новые особенности модуля UART PIC24F включают в себя  увеличенную скорость обмена, аппаратную поддержку контроля четности,  конфигурация уровня на линии в режиме ожидания, поддержку аппаратного  управления потоком, и т. д.
      В  табл. 29 приведено сравнение основных функций модуля UART  PIC24F и модуля EUSART PIC18.
  Замечание: модуль UART семейства PIC24F не поддерживает синхронный режим обмена.  В качестве синхронного приемопередатчика возможно использование аппаратного  модуля SPI.
      Таблица 29. Сравнение основных  функций модуля UART PIC24F и модуля EUSART PIC18
| Параметры | PIC18 | PIC24F | 
| Асинхронный    дуплексный режим работы с поддержкой: | да | да | 
| Дуплексный 8- и 9-битный обмен | да | да | 
| Поддержка 9-битного обмена с функцией детектирования адреса (9 бит = 1) | да | да | 
| Аппаратное управление потоком (сигналы CTS и RTS) | нет | да | 
| Количество стоповых бит | 1 | 1 или 2 | 
| Выбор уровня на линии в режиме ожидания | нет | да | 
| Генератор скорости передачи | 8- / 16-битный | 16-битный | 
| Предделитель генератора скорости передачи | да | да | 
| Диапазон скоростей обмена | от    300 бод до 115 кбод | от    15 бод до 1 Мбод | 
| Аппаратная поддержка кодирования и декодирования IrDA® | нет | да | 
| Выход частоты 16x(baud rate) для поддержки IrDA® трансивера | нет | да | 
| Наличие буфера FIFO у передатчика | нет | да | 
| Наличие буфера FIFO у приемника | нет | да | 
| Диагностический режим «Loopback» | нет | да | 
| Аппаратная поддержка бита четности | нет (может быть реализована программно) | да | 
| Аппаратная поддержка контроля четности | нет | да | 
| Аппаратная генерация байта синхронизации LIN | да | да | 
| Аппаратная поддержка символов Sync и Break | да | да | 
| Генерирование прерывания по фронту на линии приема | да | да | 
| Аппаратное детектирование ошибки кадра и переполнения буфера | да | да | 
| Возможность останова в режиме IDLE | нет | да | 
| Генерирование прерываний | при приеме и при передаче | при приеме, при передаче и при детектировании ошибки | 
2.6.1. Наименования битов и регистров модуля
      Большинство  служебных битов модуля UART микроконтроллеров  PIC24F имеют  псевдонимы, соответствующие (или похожие) названию аналогичных битов в  семействе PIC18 – см. табл. 30.
      Таблица 30. Сравнение основных  управляющих битов модуля UART семейства PIC24F и модуля EUSART семейства PIC18
| Функция | PIC18 | PIC24F | 
| Включение механизма автоматической настройки скорости обмена (Auto Baud Detect) | ABDEN | ABAUD | 
| Включение адресного режима обмена | ADDEN | ADDEN | 
| Выбор высокой скорости обмена (для PIC18F – высокая/низкая скорость, для PIC24F – выбор делителя генератора тактовой частоты 4x/16x) | BRGH | BRGH | 
| Включение приемника | CREN (только приемник) | UARTEN (приемник и передатчик) | 
| Флаг ошибки фрейма | FERR | FERR | 
| Флаг переполнения буфера | OERR | OERR | 
| Флаг нахождения приемника в режиме ожидания | RCIDL | RIDLE | 
| Флаг прерывания по приему | RCIF | UxRXIF | 
| Флаг наличия данных в буфере приемника | URXDA | |
| 9-й бит принятого фрейма (в 9-битном режиме работы) | RX9D | UxRXREG<8> | 
| Бит разрешения 9-биного приема | RX9 | PDSEL1:PDSEL0 | 
| Бит разрешения 9-битной передачи | TX9 | |
| Отправка символа Break (спецификация LIN) | SENDB | UTXBRK | 
| Состояние сдвигового регистра передатчика | TRMT | TRMT | 
| Включение передатчика | TXEN | UTXEN | 
| Флаг прерывания по передаче | TXIF | UxTXIF | 
| 9-й бит передаваемых данных | TX9D | UxTXREG | 
| Разрешение прерывания по заднему фронту на линии RX (режим WAKE-UP) | WUE | WAKE | 
2.6.2. Функции  модуля UART, отсутствующие  в семействе PIC24F 
      Микроконтроллеры  PIC24F не поддерживают  следующие функции модуля UART контроллеров PIC18:
  Низкая частота  тактового генератора: FOSC/(64 (n+1)) 
Синхронный режим  работы. Модули  UART PIC24F не поддерживают синхронный обмен как в  режиме ведомого, так и в режиме ведущего. Для организации синхронного обмена  рекомендуется использовать модуль SPI (см. п. 2.4 «Модуль  SPI»).
        Изменение  скорости обмена одним битом. Модули EUSART  семейства  PIC18 имеют возможность изменения скорости обмена с  помощью переключения одного бита BRGH. Для изменения  скорости обмена в PIC24F требуется конфигурация делителя  тактового генератора.
        2.6.3.  Портирование типового приложения (передатчик)
      Рассмотрим  последовательность инициализации аппаратного модуля U(S)ART в режиме  передачи для двух архитектур.
      Семейство  PIC18:
- Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
- Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
- Если используются прерывания – установить соответствующий бит разрешения TXxIE;
- Установить бит TX9, если планируется использование 9-битного обмена;
- Разрешить передачу, установив бит TXEN, после этого автоматически будет установлен бит TXxIF;
- Если используется 9-битный режим обмена, 9-й бит фрейма должен быть загружен в бит TX9D;
- Загрузить байт передаваемых данных в регистр TXREGx;
- Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>).
Для семейства PIC24F:
- Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
- Включить модуль UART;
- Включить передатчик, установив бит UTXEN;
- Загрузить данные в младший байт регистра UxTXREG. Данные будут автоматически перемещены в сдвиговый регистр передатчика;
- Альтернативным способом передачи данных является загрузка данных в регистр UxTXREG при сброшенном бите UTXEN. После установки бита UTXEN данные будут автоматически перемещены в сдвиговый регистр передатчика и будет включен тактовый генератор модуля;
- Прерывания передатчика настраиваются битами UTXISELx.
2.6.4.  Портирование типового приложения (приемник)
      Рассмотрим  последовательность инициализации аппаратного модуля U(S)ART в режиме приема  для двух архитектур.
      Семейство  PIC18:
- Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
- Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
- Если используются прерывания – установить соответствующий бит разрешения RCxIE;
- Установить бит RX9, если планируется использование 9-битного обмена;
- Разрешить прием, установив бит CREN;
- Флаг RCxIF будет установлен после завершения приема фрейма. Если установлен бит разрешения RCxIE, будет сгенерировано прерывание;
- Считать регистр RCSTAx для получения 9-го бита фрейма (если используется 9-битный режим приема) и флагов ошибок;
- Считать байт принятых данных из регистра RCREGx;
- Если обнаружена ошибка прима (ошибка фрейма или переполнение буфера) – сбросить бит разрешения приема CREN;
- Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>)
Для семейства PIC24F:
- Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
- Включить модуль UART;
- Прерывание будет сгенерировано в случае приема одного или нескольких байт данных, в зависимости он состояния URXISELx;
- Считать бит OERR для определения ошибки переполнения приемного буфера. Замечание: бит OERR должен быть сброшен программно;
- Считать данные из буфера приема UxRXREG.
2.6.5.  Рекомендации по портированию приложения
      При  портировании приложения, использующего модуль UART,  особое внимание следует уделить следующим рекомендациям.
      Так  как архитектуры PIC18 и PIC24F отличаются  структурой конвейера выполнения инструкций (частота выполнения инструкций в PIC18 равна FCY = FOSC/4, в PIC24F – FCY  = FOSC/2), необходимо пересчитать значения, используемые  для конфигурации скорости обмена.
      Для  семейства PIC18 максимальная скорость обмена составляет FOSC/4, минимальная – FOSC/(64  * 65536). Для PIC24F максимальная  скорость обмена составляет FCY/4, минимальная FCY/(4 * 65536). Если в системе используется несколько  скоростей обмена, следует убедиться, что они попадают в допустимый диапазон.
