Портирование приложений с семейства PIC18 на PIC24F. 2.6. Модуль UART

    2.6. Модуль универсального асинхронного приемопередатчика (UART)
    Новый модуль универсального асинхронного приемопередатчика (UART) семейства PIC24F является полнодуплексным интерфейсом со значительно расширенной функциональностью, по сравнению с модулем EUSART семейства PIC18.
    Основные новые особенности модуля UART PIC24F включают в себя увеличенную скорость обмена, аппаратную поддержку контроля четности, конфигурация уровня на линии в режиме ожидания, поддержку аппаратного управления потоком, и т. д.

    В табл. 29 приведено сравнение основных функций модуля UART PIC24F и модуля EUSART PIC18.
    Замечание: модуль UART семейства PIC24F не поддерживает синхронный режим обмена. В качестве синхронного приемопередатчика возможно использование аппаратного модуля SPI.
    Таблица 29. Сравнение основных функций модуля UART PIC24F и модуля EUSART PIC18


    Параметры

    PIC18

    PIC24F

    Асинхронный дуплексный режим работы с поддержкой:
    - автоматического выхода из энергосберегающего режима
    - автоматической подстройки скорости обмена
    - передачей 12-битного сигнала Break (см. спецификацию LIN)

    да

    да

    Дуплексный 8- и 9-битный обмен

    да

    да

    Поддержка 9-битного обмена с функцией детектирования адреса (9 бит = 1)

    да

    да

    Аппаратное управление потоком (сигналы CTS и RTS)

    нет

    да

    Количество стоповых бит

    1

    1 или 2

    Выбор уровня на линии в режиме ожидания

    нет

    да

    Генератор скорости передачи

    8- / 16-битный

    16-битный

    Предделитель генератора скорости передачи

    да

    да

    Диапазон скоростей обмена

    от 300 бод до 115 кбод
    (0.25 – 10 MIPS)

    от 15 бод до 1 Мбод
    (16 MIPS)

    Аппаратная поддержка кодирования и декодирования 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:

    1. Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
    2. Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
    3. Если используются прерывания – установить соответствующий бит разрешения TXxIE;
    4. Установить бит TX9, если планируется использование 9-битного обмена;
    5. Разрешить передачу, установив бит TXEN, после этого автоматически будет установлен бит TXxIF;
    6. Если используется 9-битный режим обмена, 9-й бит фрейма должен быть загружен в бит TX9D;
    7. Загрузить байт передаваемых данных в регистр TXREGx;
    8. Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>).

    Для семейства PIC24F:

    1. Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
    2. Включить модуль UART;
    3. Включить передатчик, установив бит UTXEN;
    4. Загрузить данные в младший байт регистра UxTXREG. Данные будут автоматически перемещены в сдвиговый регистр передатчика;
    5. Альтернативным способом передачи данных является загрузка данных в регистр UxTXREG при сброшенном бите UTXEN. После установки бита UTXEN данные будут автоматически перемещены в сдвиговый регистр передатчика и будет включен тактовый генератор модуля;
    6. Прерывания передатчика настраиваются битами UTXISELx.

    2.6.4. Портирование типового приложения (приемник)
    Рассмотрим последовательность инициализации аппаратного модуля U(S)ART в режиме приема для двух архитектур.
    Семейство PIC18:

    1. Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
    2. Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
    3. Если используются прерывания – установить соответствующий бит разрешения RCxIE;
    4. Установить бит RX9, если планируется использование 9-битного обмена;
    5. Разрешить прием, установив бит CREN;
    6. Флаг RCxIF будет установлен после завершения приема фрейма. Если установлен бит разрешения RCxIE, будет сгенерировано прерывание;
    7. Считать регистр RCSTAx для получения 9-го бита фрейма (если используется 9-битный режим приема) и флагов ошибок;
    8. Считать байт принятых данных из регистра RCREGx;
    9. Если обнаружена ошибка прима (ошибка фрейма или переполнение буфера) – сбросить бит разрешения приема CREN;
    10. Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>)

    Для семейства PIC24F:

    1. Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
    2. Включить модуль UART;
    3. Прерывание  будет сгенерировано в случае приема одного или нескольких байт данных, в зависимости он состояния URXISELx;
    4. Считать бит OERR для определения ошибки переполнения приемного буфера. Замечание: бит OERR должен быть сброшен программно;
    5. Считать данные из буфера приема 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). Если в системе используется несколько скоростей обмена, следует убедиться, что они попадают в допустимый диапазон.

    Функции реализации 9-битного обмена должны быть изменены. Так как PIC18F – 8-битная архитектура, для сохранения 9-го бита фрейма используется отдельный бит в конфигурационном регистре. В PIC24F 9-битный обмен реализуется прямым считыванием из 16-битного регистра UxRXREG и записью в 16-битный регистр UxTXREG.

    Яндекс.Метрика