Программирование ARM nRF52: UART Mon, September 27 2021  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF52: UART Печать
Добавил(а) microsin   

UART реализует в себе поддержку следующих функций:

• Полнодуплексный последовательный обмен данными
• Автоматическое управление потоком (flow control)
• Проверка принимаемых данных на соответствие биту четности (parity checking) и генерация бита четности для 9-го бита.

Как показано на рис. 1, UART напрямую использует регистры TXD и RXD для передачи и приема данных соответственно. UART использует 1 stop-бит.

nRF52 UART configuration fig01

Рис. 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".

nRF52 UART transmission fig02

Рис. 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.

nRF52 UART reception fig03

Рис. 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.
EVENTS_TXDRDY 0x11C Событие завершения отправки данных из TXD.
EVENTS_ERROR 0x124 Событие детектирования ошибки.
EVENTS_RXTO 0x144 Событие таймаута приемника.
SHORTS 0x200 Регистр шортката.
INTENSET 0x304 Разрешение прерываний.
INTENCLR 0x308 Запрет прерываний.
ERRORSRC 0x480 Источник ошибки.
ENABLE 0x500 Разрешение UART.
PSELRTS 0x508 Выбор ножки для RTS.
PSELTXD 0x50C Выбор ножки для TXD.
PSELCTS 0x510 Выбор ножки для CTS.
PSELRXD 0x514 Выбор ножки для RXD.
RXD 0x518 Регистр для чтения принятых данных.
TXD 0x51C Регистр для записи передаваемых данных.
BAUDRATE 0x524 Регистр установки скорости.
CONFIG 0x56C Конфигурация четности и управления потоком.

Смещение адреса: 0x200. Запись 1 разрешает шорткат, запись 0 запрещает. Чтение показывает текущее состояние.

Биты регистра SHORTS:

№ бита 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                                                       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_STARTRX Шорткат между событием CTS и задачей STARTRX. См. описание EVENTS_CTS и TASKS_STARTRX.
B RW NCTS_STOPRX Шорткат между событием NCTS и задачей TASKS_STOPRX. См. описание EVENTS_NCTS и TASKS_STOPRX.

Смещение адреса: 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.

Смещение адреса: 0x308.

Биты регистра ERRORSRC:

№ бита 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                                                         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 OVERRUN Ошибка переполнения. Был получен 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: была ошибка.

Смещение адреса: 0x500.

Биты регистра ENABLE:

№ бита 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                                                         A A A 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 ENABLE Разрешение или запрет UART.
0: UART запрещен.
1: UART разрешен.

Смещение адреса: 0x508.

Биты регистра PSELRTS:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0xFFFFFFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Назначение бит:

Id RW Поле Описание
A RW PSELRTS Номер ножки порта P0, которая должна работать в качестве сигнала RTS.
0 .. 31: выбранный порт P0.00 .. P0.31.
0xFFFFFFFF: ножка сигнала не выбрана.

Смещение адреса: 0x50C.

Биты регистра PSELTXD:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0xFFFFFFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Назначение бит:

Id RW Поле Описание
A RW PSELTXD Номер ножки порта P0, которая должна работать в качестве сигнала TXD.
0 .. 31: выбранный порт P0.00 .. P0.31.
0xFFFFFFFF: ножка сигнала не выбрана.

Смещение адреса: 0x510.

Биты регистра PSELCTS:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0xFFFFFFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Назначение бит:

Id RW Поле Описание
A RW PSELCTS Номер ножки порта P0, которая должна работать в качестве сигнала CTS.
0 .. 31: выбранный порт P0.00 .. P0.31.
0xFFFFFFFF: ножка сигнала не выбрана.

Смещение адреса: 0x514.

Биты регистра PSELRXD:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0xFFFFFFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Назначение бит:

Id RW Поле Описание
A RW PSELRXD Номер ножки порта P0, которая должна работать в качестве сигнала RXD.
0 .. 31: выбранный порт P0.00 .. P0.31.
0xFFFFFFFF: ножка сигнала не выбрана.

Смещение адреса: 0x518.

Биты регистра RXD:

№ бита 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                                                 A A A A A A A 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 R RXD Данные, которые были приняты в предыдущей транзакции.

Смещение адреса: 0x51C.

Биты регистра TXD:

№ бита 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                                                 A A A A A A A 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 W TXD Данные, которые должны быть переданы.

Смещение адреса: 0x524.

Биты регистра BAUDRATE:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x04000000 0 0 0 0 0 1 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 BAUDRATE 0x0004F000, Baud1200: 1200 бод (реальная скорость 1205 бод) 0x0009D000, Baud2400: 2400 бод (реальная скорость 2396 бод)
0x0013B000, Baud4800: 4800 бод (реальная скорость 4808 бод)
0x00275000, Baud9600: 9600 бод (реальная скорость 9598 бод)
0x003B0000, Baud14400: 14400 бод (реальная скорость 14414 бод)
0x004EA000, Baud19200: 19200 бод (реальная скорость 19208 бод)
0x0075F000, Baud28800: 28800 бод (реальная скорость 28829 бод)
0x009D5000, Baud38400: 38400 бод (реальная скорость 38462 бод)
0x00EBF000, Baud57600: 57600 бод (реальная скорость 57762 бод)
0x013A9000, Baud76800: 76800 бод (реальная скорость 76923 бод)
0x01D7E000, Baud115200: 115200 бод (реальная скорость 115942 бод)
0x03AFB000, Baud230400: 230400 бод (реальная скорость 231884 бод)
0x04000000, Baud250000: 250000 бод
0x075F7000, Baud460800: 460800 бод (реальная скорость 470588 бод)
0x0EBED000, Baud921600: 921600 бод (реальная скорость 941176 бод)
0x10000000, Baud1M: 1 мегабод

Смещение адреса: 0x56C.

Биты регистра CONFIG:

№ бита 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                                                         B B 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 HWFC Аппаратное управление потоком.
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].

[Ссылки]

1. UART Universal asynchronous receiver/transmitter nRF52832 site:nordicsemi.com.
2. nRFxx: аббревиатуры и термины.
3. nRF5x: порты GPIO.

 

Добавить комментарий


Защитный код
Обновить

Top of Page