Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MSP430_НВВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

3.9.1.4 Обнаружение стартового бита при приеме

В том случае, если необходимо вести прием данных при выключенном, с целью снижения потребления, тактировании UART, имеется механизм, позволяющий получить прерывание при поступлении стартового бита на вход приемника. Для этого используется бит URXSE (Start Edge), расположенный, как это не странно, в регистре управления передатчика. В том случае, если URXSE=1, разрешено прерывание по приему и на линию URXD приходит фронт стартового бита, берется прерывание с адресом готовности приемника. Подпрограмма обработки прерывания может определить причину возникновения прерывания по состоянию бита URXIFG. Если этот бит равен нулю, следовательно, обнаружен фронт старт бита, в противном случае, был принят очередной символ приемником UART. Определение фронта старт-бита дает возможность подпрограмме обработки прерывания активизировать тактировании UART для нормального приема всего кадра.

3.9.1.5 Скорость передачи

Генератор скорости приема/передачи способен создавать стандартные скорости при нестандартных частотах тактирования UART. Максимальная скорость приема/передачи составляет одну треть от частоты источника тактирования.

Генерация нужной частоты проводится в две стадии. На первой стадии используется 16-ти разрядный делитель частоты тактирования UBR, состоящий из двух регистров UBR0 (младший байт) и UBR1 (старший байт). На второй стадии задействуется 8-ми разрядный модулятор UMCL.

В первом приближении скорость передачи в бодах определяется по формуле

Baud=BRCLK/N

где

BRCLK – частота тактирования UART в герцах;

N – содержимое регистра UBR.

Программистам, однако, гораздо чаще приходится сталкиваться с обратной задачей - для заданной частоты тактирования и желаемой скорости приема/передачи необходимо определить содержимое UBR. Очевидно, что

N=BRCLK/Baud.

Однако, возможна ситуация, когда вычисленная величина N не является целочисленным значением. Например, если требуется стандартная скорость Baud=115.2 kb/s при BRCLK=1 Mhz, получим

N=1000/115.2=8.68

Для загрузки данных в UBR полученное значение придется округлить до 9. В этом случае действительная скорость приема/передачи составит 111.1 kb/s, в то время как внешнее устройство, подключенное к UART, будет работать на скорости 115.2 kb/s. Отсюда возникает вопрос, насколько точно нужно согласовывать скорости передатчика на одной стороне и приемника на другой, чтобы данные принимались без ошибок. В первом приближении можно сказать, что скорости приемника и передатчика должны быть согласованы с точностью δ не хуже

δ ≤50%/n, где n – длина кадра.

Т.е. если используется 10-ти битный кадр (8 бит данных, старт и стоп биты), погрешность не должна превосходить 5%. Другими словами, погрешность округления полученного коэффициента деления не должна, в данном случае, быть больше 5%.

В нашем примере погрешность округления составит δ = 100% *(9-8.68)/8.68 ≈ 3.7 %, следовательно, приемник будет правильно воспринимать данные, посланные передатчиком.

Отдельный интерес представляет случай, когда необходимо, чтобы микроконтроллер работал на низкой частоте (типовой случай – тактирование частотой 32768 Hz) и, в тоже время, передавал/принимал данные на стандартной скорости, например 9600 b/s. Для этого случая получим N=32768/9600 = 3.41 и погрешность округления

δ = 100%*(3.41-3)/3.41=12.1 %

Действительная скорость передачи составит B = 32768/3 = 10922 b/s. Понятно, что полученные значения является неприемлемыми.

Для того чтобы получить высокую заданную скорость передачи данных при низких частотах тактирования используется 8-ми битный модулятор. Работа модулятора управляется данными, записанными в него. По мере передачи/приема битов сдвиговым регистром, содержимое модулятора также просматривается бит за битом, начиная с младшего. В том случае, если текущий бит модулятора равен 0, используется коэффициент деления UBR, в противном случае используется коэффициент деления, равный UBR+1. Таким образом, происходит подстройка длительности каждого бита в кадре. Если количество битов в кадре больше 8, как чаще всего и бывает, просмотр содержимого UMCL опять начинается с младшего бита.

Для того, чтобы определить требуемые значения в UBR и UMCL коэффициент деления N представляется формулой

N=UBR+(1/n)*Σmi

где

UBR – содержимое регистра UBR:

n – длина кадра;

mi – состояние (0 или 1) i-го бита, записанного в модулятор UMCL.

Другими словами, содержимое UBR и сумма всех единиц в UMCL, отнесенных на длину кадра, должна как можно точнее соответствовать желаемому коэффициенту деления.

Упрощенная методика определения содержимого UBR и UMCL заключается в следующем. В рассчитанном значении N=BRCLK/Baud отбрасывается дробная часть и определяется количество 1, содержащееся в модуляторе. После этого для получения кода UMCL эти единицы более или менее равномерно расставляются в 8-ми битном поле содержимого UMCL. Следует помнить, что для 10-ти битного кадра 2 младших бита UMCL будут использованы дважды.

Приведем пример расчета содержимого UBR и UMCL для вышеприведенного случая.

N=32768/9600 = 3.4133

Значение делителя составит UBR0=3, UBR1=0.

Σmi =n*(N-UBR)=10*(3.4133-3)=4.133 ≈ 4

Расставляем единицы модулятора на длине 10-ти битного поля

№ бита кадра

0

1

2

3

4

5

6

7

8

9

№ бита UMCL

0

1

2

3

4

5

6

7

0

1

Значение

1

0

0

1

0

0

1

0

1

0

Из приведенных данных видно, что на длине кадра располагаются 4 единицы, хотя при таком раскладе, UMCL будет содержать только три единицы. Читая код UMCL справа налево, получим значение 01001001b =49h.

Таким образом, получен дробный коэффициент деления M=3+4/10=3.4, при этом ошибка скорости составит δ = 100% * (3.4133 – 3.4)/3.4133 = 0.39%, а фактическая скорость B=32768/3.4=9638 b/s.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]