Руководство пользователя MSP430 (1041606), страница 25
Текст из файла (страница 25)
13.2.6 Контроллер скорости передачи UART
Контроллер (генератор) скорости передачи USART может создавать стандартные скорости передачи от источников нестандартных частот. Контроллер скорости передачи использует один прескалер/делитель и модулятор, показанные на рис.13-7. Эта комбинация позволяет получить дробные коэффициенты деления при генерации скорости передачи в бодах. Максимальная скорость передачи USART составляет одну треть источника таковой частоты USART BRCLK.
Рис.13-7 Контроллер генератора передачи MSP430
Синхронизация каждого бита показана на рис.13-8. Для каждого полученного бита используется мажоритарный принцип определения значения бита. Мажоритарные выборки происходят в N/2-1, N/2 и N/2+1 периоды BRCLK, где N – число импульсов BRCLKs на один импульс BITCLK.
Рис.13-8 Синхронизация скорости передачи BITCLK
Синхронизация скорости передачи бит
Первая ступень контролера скорости передачи – 16-разрядный счетчик и компаратор. В начале передачи или приема каждого бита счетчик загружается величиной INT(N/2), где N – значение, сохраненное в комбина4ции UxBR0 и UxBR1. Счетчик перезагружает INT(N/2) каждый полупериод периода бита, обеспечивая полный период бита N BRCLK. Для данного источника тактирования BRCLK, скорость передачи определяется требуемым коэффициентом деления N:
Коэффициент деления N зачастую является нецелым числом, целочисленная часть которого может быть принята прескалером/делителем. Вторая ступень генератора скорости передачи – модулятор, используемый для максимально точного учета дробной части. Коэффициент деления N в этом случае определяется так:
где:
N - получаемый коэффициент деления;
UxBR - 16-разрядное представление регистров UxBR0 и UxBR1;
i - позиция бита в фрэйме;
n - общее количество битов в фрэйме;
mi - данные каждого соответствующего модуляционного бита (1 или 0).
BITCLK может подстраиваться от бита к биту с помощью модулятора для удовлетворения потребностей в синхронизации в случае, когда необходим делитель нецелого числа. Синхронизация каждого бита расширяется одним тактовым циклом BRCLK, если бит модулятора mi установлен. Каждый раз при получении или передаче бита, следующий бит в регистре управления модуляцией определяет синхронизацию этого бита. Установленный модуляционный бит увеличивает коэффициент деления на единицу, в то же время очищенный бит модуляции сохраняет коэффициент деления, заданный UxBR.
Синхронизация стартового бита определяется UxBR плюс m0, следующего бита UxBR плюс m1 и так далее. Модуляционная последовательность начинается с младшего бита. Когда символ содержит более 8 бит, модуляционная последовательность вновь начинается с m0 и продолжается до окончания обработки всех битов.
Определение модуляционного значения
Определение модуляционного значения – интерактивный процесс. Использование формулы ошибки синхронизации, начиная со стартового бита, позволяет рассчитать ошибку для каждого бита с последующей установкой или сбросом соответствующего бита модуляции. Модуляционный бит устанавливается с наименьшей выбранной ошибкой и рассчитанной ошибкой следующего бита. Этот процесс продолжается до минимизации ошибок всех битов. Если фрэйм содержит более 8 бит, модуляционные биты повторяются. К примеру, 9-ый бит фрэйма использует бит модуляции 0.
Синхронизация битов при передаче
Синхронизация каждого символа в совокупности представляет собой сумму синхронизаций отдельных разрядов. При модуляции каждого бита сокращается накапливающая поразрядная погрешность. Индивидуальную разрядную погрешность можно рассчитать так:
где:
baudrate - желаемая скорость передачи в бодах;
BRCLK - входная частота: UCLKI, ACLK или SMCLK;
j - позиция бита – 0 для стартового бита, 1 для бита данных D0 и т.д.;
UxBR - коэффициент деления в регистрах UxBR1 и UxBR0.
Например, ошибки передачи при приведенных ниже условиях рассчитываются так:
baudrate = 2400
BRCLK = 32768 Гц (ACLK)
UxBR = 13, так как идеальный коэффициент деления равен 13.65
UxMCTL = 6Bh: m7=0, m6=1, m5=1, m4=0, m3=1, m2=0, m1=1 и m0=1.
Сначала используется младший бит UxMCTL.
Результаты показывают, что максимальная поразрядная ошибка была 5,08% за период BITCLK.
Синхронизация битов при приеме
Синхронизация приема состоит из двух источников ошибок. Первый – побитовая ошибка синхронизации. Второй – ошибка между появлением стартового фронта и стартовым фронтом, принятым USART. На рис.13-9 показаны асинхронные ошибки синхронизации между данными на выводе URXDx и внутренним тактированием скорости передачи.
Рис.13-9. Ошибка приема
Идеальное тактирование стартового бита tideal(0) есть половина тактирования скорости передачи tbaud rate, поскольку бит проверяется в середине этого периода. Идеальное тактирование скорости передачи tideal(i) для оставшихся битов символа есть тактирование скорости передачи tbaud rate. Ошибки каждого конкретного бита рассчитываются следующим образом:?±
где:
baudrate - желаемая скорость передачи в бодах;
BRCLK - входная частота, которую можно выбрать из UCLK, ACLK или SMCLK;
j - позиция бита – 0 для стартового бита, 1 для бита данных D0 и т.д.;
UxBR - коэффициент деления в регистрах UxBR1 и UxBR0.
Например, ошибки приема при приведенных ниже условиях рассчитываются так:
baudrate = 2400
BRCLK = 32768 Гц (ACLK)
UxBR = 13, так как идеальный коэффициент деления равен 13.65
UxMCTL = 6Bh: m7=0, m6=1, m5=1, m4=0, m3=1, m2=0, m1=1 и m0=1.
Сначала используется младший бит UxMCTL.
Результаты показывают, что максимальная поразрядная ошибка была 5,08% за период BITCLK.
Типовые скорости передачи и ошибки
Стандартные скорости передачи данных в бодах для UxBR и UxMCTL приведены в таблице 13-2 для часового кристалла (ACLK) на 32768 Гц и для типичного значения SMCLK 1048576 Гц.
Ошибка приема – это накопленное время в сравнении с идеальным временем загрузки сдвигового регистра в середине каждого бита. Ошибка передачи – накопленное время ошибки в сравнении с идеальным временем периода бита.
Таблица 13-2. Наиболее часто используемые величины скорости передачи, скорость передачи данных в бодах и ошибки.
Скорость | Деление на | A: BRCLK = 32768 Гц | |||||||
A: | B: | UxBR1 | UxBR0 | UxMCTL | Макс. ошибка | Макс. ошибка | Ошибка синхр. | ||
1200 | 27.31 | 873.81 | 0 | 1B | 03 | -4/3 | -4/3 | ±2 | |
2400 | 13.65 | 436.91 | 0 | 0D | 6B | -6/3 | -6/3 | ±4 | |
4800 | 6.83 | 218.45 | 0 | 06 | 6F | -9/11 | -9/11 | ±7 | |
9600 | 3.41 | 109.23 | 0 | 03 | 4A | -21/12 | -21/12 | ±15 | |
19200 |
| 54.61 |
|
|
|
|
|
| |
38400 |
| 27.31 |
|
|
|
|
|
| |
76800 |
| 13.65 |
|
|
|
|
|
| |
115200 |
| 9.1 |
|
|
|
|
|
| |
Скорость | Деление на | B: BRCLK = 1048576 Гц | |||||||
A: | B: | UxBR1 | UxBR0 | UxMCTL | Макс. ошибка | Макс. ошибка | |||
1200 | 27.31 | 873.81 | 03 | 69 | FF | 0/0.3 | ±2 | ||
2400 | 13.65 | 436.91 | 01 | B4 | FF | 0/0.3 | ±2 | ||
4800 | 6.83 | 218.45 | 0 | DA | 55 | 0/0.4 | ±2 | ||
9600 | 3.41 | 109.23 | 0 | 6D | 03 | -0.4/1 | ±2 | ||
19200 |
| 54.61 | 0 | 36 | 6B | -0.2/2 | ±2 | ||
38400 |
| 27.31 | 0 | 1B | 03 | -4/3 | ±2 | ||
76800 |
| 13.65 | 0 | 0D | 6B | -6/3 | ±4 | ||
115200 |
| 9.1 | 0 | 09 | 08 | -5/7 | ±7 |
13.2.7 Прерывания USART
USART имеет один вектор прерывания для передачи и один вектор прерывания для приема.
Функционирование прерывания USART при передаче
Флаг прерывания UTXIFGx устанавливается передатчиком для индикации готовности UxTXBUF к приему другого символа. Запрос прерывания генерируется, если установлены флаги UTXIEx и GIE. UTXIFGx автоматически сбрасывается, если запрос прерывания обслужен или если символ записан в UxTXBUF.
UTXIFGx устанавливается после PUC или когда SWRST=1. UTXIEx сбрасывается после PUC или когда SWRST=1. Это показано на рис.13-10.
Рис.13-10. Прерывание при передаче
Функционирование прерывания USART при приеме
Флаг прерывания URXIFGx устанавливается каждый раз при приеме символа и его загрузки в UxRXBUF. Запрос прерывания генерируется, если также установлены флаги URXIEx и GIE. URXIFGx и URXIEx сбрасываются сигналом системного сброса PUC или когда SWRST=1. URXIFGx сбрасывается автоматически, если запрос прерывания обработан (когда URXSE=0) или когда прочитан UxRXBUF. Это показано на рис.13-11.