ATmega128, atmega128L 8-разрядный avr-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт

Вид материалаДокументы
Форматы посылки
Вычисление бита паритета
Инициализация УСАПП
Ucsrb = (1
Подобный материал:
1   ...   24   25   26   27   28   29   30   31   ...   46

Форматы посылки


Последовательная посылка состоит из бит данных, бит синхронизации (старт и стоп-биты), а также опционального бита паритета для поиска ошибок. УСАПП поддерживает все 30 комбинаций следующих форматов посылок:
  • 1 старт-бит
  • 5, 6, 7, 8 или 9 бит данных
  • без паритета, с битом четности, с битом нечетности
  • 1 или 2 стоп-бита

Посылка начинается со старт-бита, а за ним следует передача бит данных, начиная с самого младшего разряда. Затем следует передача остальных бит данных (макс. число бит данных 9), которая заканчивается передачей старшего разряда данных. Если разрешена функция контроля паритета, то сразу после бит данных передается бит паритета, а затем стоп-биты. После завершения передачи посылки имеется возможность либо передавать следующую посылку либо перевести линию связи в состояние ожидания (высокий уровень). Рисунок 82 иллюстрирует возможность сочетания форматов посылки. Наличие прямоугольной скобки указывает на опциональность данного формата посылки.


Рисунок 82. Форматы посылки


· St - Старт-бит имеет всегда низкий уровень.

· 0…8 - Номер бита данных.

· P - бит паритета: четность или нечетность.

· Sp1,Sp2 - Стоп-бит имеет всегда высокий уровень.

· IDLE - состояние ожидания, в котором приостановлена передача на RxD или TxD. В состоянии ожидания на линии должен быть высокий уровень.

Формат посылки, который используется УСАПП, задается битами UCSZ2:0, UPM1:0 и USBS в регистрах UCSRB и UCSRC. Приемник и передатчик используют одни и те же установки форматов. Обратите внимание, что изменение установок любого из этих бит может привести к повреждению текущего сеанса связи, как для приемника, так и для передатчика.

Биты выбора длины передаваемых данных (UCSZ2:0) определяют из скольки бит данных состоит посылка. Биты режима паритета УСАПП (UPM1:0) разрешают передачу/контроля бита паритета и устанавливают тип паритета: четность, нечетность. Выбрать один или два стоп-бита позволяет бит выбора стоп-бита УСАПП (USBS). Приемник игнорирует второй стоп-бит. Флаг ошибки посылки FE позволяет выявить ситуацию, когда первый стоп-бит равен 0.

Вычисление бита паритета

Бит паритета вычисляется путем выполнения логической операции исключающего ИЛИ над всеми битами данных. Если используется нечетность, то результат этой операции инвертируется. Сказанное отражено в следующих выражениях:



где

PЧЕТН - бит четного паритета;

PНЕЧЕТН - бит нечетного паритета;

dn - n-ый бит данных в посылке.

После разрешения, бит паритета передается между последним битом данных и первым стоп-битом.

Инициализация УСАПП


Перед началом сеанса связи необходимо выполнить инициализацию УСАПП. Процесс инициализации обычно состоит из установки скорости связи, задания формата посылки и разрешения работы передатчика и приемника. Если используется управление связью по прерываниям, то во время инициализации необходимо, чтобы был сброшен флаг общего разрешения прерываний (т.е. необходимо запретить все прерывания).

Если необходимо выполнить повторную инициализацию УСАПП, например, для изменения скорости связи или формата посылки, то необходимо убедиться, чтобы во время инициализации передача была приостановлена. Флаг TXC может использоваться для проверки завершения работы передатчика, а флаг RXC - для проверки отсутствия в приемном буфере несчитанных данных. Обратите внимание, что при использовании флага TXC он должен сбрасываться программно перед началом каждой передачи (перед записью в UDR).

В следующих примерах показаны функции для простой инициализации УСАПП на Ассемблере и Си. В примерах предполагается, что используются управление связью по опросу флагов состояния (не по прерываниям) и фиксированный формат посылки. Скорость связи выступает как параметр функции. Для примера на ассемблере предполагается, что параметр скорости связи записан перед вызовом функции в регистры r17:r16.

Пример кода на Ассемблере (1)

USART_Init:

; Установка скорости связи

out UBRRH, r17

out UBRRL, r16

; Разрешение работы приемника и передатчика

ldi r16, (1<
out UCSRB,r16

; Установка формата посылки: 8 бит данных, 2стоп-бита

ldi r16, (1<
out UCSRC,r16

ret

Пример кода на Си (1)

void USART_Init( unsigned int baud )

{

/* Установка скорости связи */

UBRRH = (unsigned char)(baud>>8);

UBRRL = (unsigned char)baud;

/* Разрешение работы передатчика и приемника */

UCSRB = (1<
/* Установка формата посылки: 8 бит данных, 2 стоп-бита */

UCSRC = (1<
}

Прим. 1: В примере предполагается, что подключен файл специфических заголовков. Для регистров ввода-вывода, которые расположены в области памяти расширенного ввода-вывода необходимо заменить инструкции "IN", "OUT", "SBIS", "SBIC", "CBI" и "SBI" на инструкции, осуществляющие доступ к расширенной памяти ввода-вывода. Обычно это инструкции "LDS" и "STS" в сочетании с "SBRS", "SBRC", "SBR" и "CBR".

Более совершенные процедуры инициализации могут использовать расширенный интерфейс функции, где в качестве параметров выступают, например, формат посылки, отключение прерываний и т.д. Однако, в большинстве приложений используется фиксированные установки скорости связи и управляющих регистров, поэтому, для них представленные примеры могут быть непосредственно включены в основную программу или к процедурам инициализации других модулей ввода-вывода.