UART реализует в себе поддержку следующих функций:
• Полнодуплексный последовательный обмен данными • Автоматическое управление потоком (flow control) • Проверка принимаемых данных на соответствие биту четности (parity checking) и генерация бита четности для 9-го бита.
Как показано на рис. 1, UART напрямую использует регистры TXD и RXD для передачи и приема данных соответственно. UART использует 1 stop-бит.
Рис. 1. Блок-схема UART.
Примечание: непонятные термины и сокращения см. в Словарике [2].
[Конфигурация выводов]
Различные стандартные сигналы RXD (прием), CTS (Clear To Send, активный уровень 0), RTS (Request To Send, активный уровень 0) и TXD (передача), относящиеся к UART, привязываются к физическим выводам ножек портов на основе конфигурации, настраиваемой в регистрах PSELRXD, PSELCTS, PSELRTS и PSELTXD соответственно.
Если в любом из этих регистров указано значение 0xFFFFFFFF, то связанный с этим регистром сигнал не подключен ни к одному физическому выводу MCU. Регистры PSELRXD, PSELCTS, PSELRTS, PSELTXD и их конфигурации используются только пока UART разрешен, и эти конфигурации сохраняются только на протяжении времени, когда MCU находится в режиме System ON. PSELRXD, PSELCTS, PSELRTS и PSELTXD должны конфигурироваться только тогда, когда UART запрещен.
Для обеспечения корректных уровней сигналов на выводах UART, когда MCU находится в режиме System OFF, эти выводы должны быть сконфигурированы в периферийном устройстве GPIO [3], см. таблицу 1.
Таблица 1. Конфигурация GPIO.
Сигнал UART
Направление
Выходное значение
RXD
Вход
Не применимо
CTS
TXD
Выход
Лог. 1
RTS
Только одно периферийное устройство в любой момент времени может быть назначено для управления определенным выводом GPIO. Невыполнение этого условия может привести к непредсказуемому поведению.
[Передача]
Последовательность передачи UART начинается активацией задачи STARTTX.
Байты передаются путем записи в регистр TXD. Когда байт успешно передан, UART сгенерирует событие TXDRDY, после которого в регистр TXD можно записать новый байт. Последовательность передачи UART немедленно останавливается путем активации задачи STOPTX.
Если управление потоком (flow control) разрешено, то передача автоматически приостановится, когда CTS деактивируется, и возобновится после того, как уровень CTS снова станет активным, см. рис. 2. Байт, который передается, когда CTS деактивировался, будет передан полностью перед приостановкой передачи. Для дополнительной информации см. далее "Приостановка UART".
Рис. 2. Передача UART.
[Прием]
Работа UART на прием начинается активацией задачи STARTRX.
В приемнике UART реализован FIFO, в котором можно сохранить 6 поступивших в регистр RXD байт до того, как произойдет перезапись данных. Байты извлекаются из FIFO чтением регистра RXD. Когда байт извлекается из FIFO, новый ожидающий чтения байт перемещается в регистр RXD. UART будет генерировать событие RXDRDY каждый раз, когда новый байт был перемещен в регистр RXD.
Когда управление потоком (flow control) разрешено, UART будет деактивировать сигнал RTS, когда в FIFO приема есть место только для 4 байт. Таким образом, передатчик на противоположной стороне может без потери передать только 4 байта после того, как сигнал RTS был деактивирован. Если передатчик будет после этого продолжать передачу, то это приведет к перезаписи ранее принятых байт в FIFO (переполнение приема). Для предотвращения такой ситуации передатчик UART противоположной стороны должен обеспечить прекращение передачи, когда деактивирован сигнал RTS.
Сигнал RTS будет активирован снова, когда опустошается FIFO, т. е. когда все байты FIFO были прочитаны CPU, см. рис. 3.
Рис. 3. Прием UART.
Сигнал RTS будет также деактивирован, когда приемник остановлен путем активации задачи STOPRX, что показано на рис. 3. UART может принять до 5 дополнительных байт, если они были переданы сразу после того, как был деактивирован сигнал RTS. Это возможно благодаря тому, что UART, даже когда сработала задача STOPRX, может принимать байты в течение расширенного периода времени, в зависимости от сконфигурированной скорости. UART сгенерирует событие таймаута приемника (RXTO), когда этот период времени истек.
Для предотвращения потери приходящих данных регистр RXD должен читаться только один раз на каждое событие RXDRDY.
Чтобы гарантировать, что CPU сможет определить все поступающие события приема через регистр событий RXDRDY, регистр RXDRDY должен быть очищен перед чтением регистра RXD. Причина в том, что тем самым интерфейсу UART разрешено записать новый байт в регистр RXD, и таким образом разрешается генерация нового события сразу после того, как программой CPU был прочитан регистр RXD (опустошен на 1 байт стек FIFO).
Как показано в точке 2 на рис. 3, событие RXDRDY для байта B генерируется первым после того, как байт A был прочитан из RXD.
Работа без управления потоком. Если flow control не разрешен, то интерфейс UART будет вести себя так, как если бы сигналы управления потоком CTS и RTS были всегда активны.
Конфигурация четности. Когда контроль четности (parity) разрешен, бит четности будет генерироваться и проверяться автоматически на каналах передачи и приема соответственно. Возможна конфигурация только для проверки на четность (even parity, длина кадра 11 бит), либо без контроля четности (длина кадра 10 бит).
[Приостановка UART]
Работа UART может быть приостановлена путем активации задачи SUSPEND.
SUSPEND оказывает действие как на приемник, так и на передатчик UART, т. е. передатчик перестанет передавать, а приемник перестанет принимать байты данных. Передачу и прием UART можно возобновить после того, как UART был приостановлен, путем активации задач STARTTX и STARTRX соответственно.
Текущая передача, которая происходит в момент активации задачи SUSPEND, завершится до конца перед тем, как UART будет приостановлен.
Когда сработала задача SUSPEND, приемник UART будет вести себя так же, как если бы была активирована задача STOPRX.
[Обработка ошибок]
Будет сгенерировано событие ERROR, соответствующее ошибке кадра, если в кадре не будет найден корректный stop-бит. Другое событие ERROR, соответствующее условию разрыва связи (break condition), будет сгенерировано, если сигнал RXD удерживается в лог. 0 дольше, чем длина кадра данных. Фактически ошибка кадра всегда будет генерироваться перед моментом возникновения break condition.
[Регистры UART]
Таблица 1. Экземпляры TIMER.
Баз. адрес
Периф. устройство
Экз.
Описание
Конфигурация
0x40008000
UART
UART0
Универсальный асинхронный приемо-передатчик
Таблица 2. Обзор регистров TIMER.
Регистр
Смещ.
Описание
TASKS_STARTRX
0x000
Задача запуска приема.
TASKS_STOPRX
0x004
Задача остановки приема.
TASKS_STARTTX
0x008
Задача запуска передачи.
TASKS_STOPTX
0x00C
Задача остановки передачи.
TASKS_SUSPEND
0x01C
Задача приостановки UART.
EVENTS_CTS
0x100
Событие активации CTS (установки в 0).
EVENTS_NCTS
0x104
Событие деактивации CTS (установки в 1).
EVENTS_RXDRDY
0x108
Событие приема данных, данные ожидают чтения регистра RXD.
Смещение адреса: 0x304. Запись 1 разрешает соответствующее прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние прерывания: 0 прерывание запрещено, 1 разрешено.
Биты регистра INTENSET:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
CTS
Разрешение прерывания для события CTS. См. EVENTS_CTS.
B
RW
NCTS
Разрешение прерывания для события NCTS. См. EVENTS_NCTS.
C
RW
RXDRDY
Разрешение прерывания для события RXDRDY. См. EVENTS_RXDRDY.
D
RW
TXDRDY
Разрешение прерывания для события TXDRDY. См. EVENTS_TXDRDY.
E
RW
ERROR
Разрешение прерывания для события ERROR. См. EVENTS_ERROR.
F
RW
RXTO
Разрешение прерывания для события RXTO. См. EVENTS_RXTO.
Смещение адреса: 0x308. Запись 1 запрещает соответствующее прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние прерывания: 0 прерывание запрещено, 1 разрешено.
Биты регистра INTENCLR:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
CTS
Запрет прерывания для события CTS. См. EVENTS_CTS.
B
RW
NCTS
Запрет прерывания для события NCTS. См. EVENTS_NCTS.
C
RW
RXDRDY
Запрет прерывания для события RXDRDY. См. EVENTS_RXDRDY.
D
RW
TXDRDY
Запрет прерывания для события TXDRDY. См. EVENTS_TXDRDY.
E
RW
ERROR
Запрет прерывания для события ERROR. См. EVENTS_ERROR.
F
RW
RXTO
Запрет прерывания для события RXTO. См. EVENTS_RXTO.
Ошибка переполнения. Был получен start-бит, когда предыдущие, не прочитанные данные все еще находились в RXD. Предыдущие данные были потеряны. 0: не было ошибки. 1: была ошибка.
B
RW
PARITY
Ошибка контроля четности. Был принят байт, в котором сумма бит не соответствует принятому 9-ому биту четности (если разрешен аппаратный контроль четности). 0: не было ошибки. 1: была ошибка.
C
RW
FRAMING
Ошибка кадра. Не был определен корректный stop-бит после того, как были приняты все биты символа. 0: не было ошибки. 1: была ошибка.
D
RW
BREAK
Ошибка разрыва соединения (break condition). На входе был обнаружен сигнал лог. 0 по длительности больше, чем время интервала кадра (длина кадра 10 бит без контроля четности и 11 бит с контролем четности). 0: не было ошибки. 1: была ошибка.
Аппаратное управление потоком. 0: запрещено. 1: разрешено.
B
RW
PARITY
Управление контролем четности. 0, Excluded: генерация и проверка бита четности запрещены (длина кадра 10 бит). 7, Included: генерация и проверка бита четности разрешены (длина кадра 11 бит).
[Электрические параметры UART]
Символ
Описание
min
Typ
MAX
Ед.
fUART
Скорость работы UART(1)
1000
kbps
IUART1M
Ток потребления при работе на максимальной скорости
55
мкА
IUART115k
Ток потребления при работе на скорости 115200 бод (bps)
55
IUART1k2
Ток потребления при работе на скорости 1200 бод (bps)
55
IUART,IDLE
Ток потребления в режиме ожидания
1
tUART,CTSH
Время лог. 1 сигнала CTS
1
мкс
tUART,START,LP
Время от активации задачи STARTRX/STARTTX до начала передачи, low power mode
tUART,START,CL + tSTART_HFINT
tUART,START,CL
Время от активации задачи STARTRX/STARTTX до начала передачи, constant latency mode
1
Примечание (1): на повышенных скоростях может понадобиться настроить выходы GPIO в режим повышенной нагрузочной способности (High Drive), подробности см. в описании GPIO [3].