Портирование приложений с семейства 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). Если в системе используется несколько скоростей обмена, следует убедиться, что они попадают в допустимый диапазон.