среда, 13 марта 2013 г.

Последовательный интерфейс USART0

Интерфейс USART предназначен для коммуникации с периферией, такой как ПК. Передача и прием данных может осуществляться на разных скоростях в синхронном и асинхронном режиме, а также с контролем четности, различной длиной блока данных и др. В общем в нем есть все необходимое для обеспечения безошибочной коммуникации между устройствами.

Характеристики USART0:
  • Полный дуплекс (независимые прием и передача)
  • Асинхронный и синхронный режим
  • Внешняя/внутренняя синхронизация
  • Высокое разрешение генератора скорости передачи
  • Выбор длинны блока данных (5 - 9 бит) и длинны стоп бита (1 - 2)
  • Проверка четности
  • Проверка переполнения данных 
  • Проверка на ошибки 
  • Фильтрация паразитных шумов
  • Прерывания
  • Мультипроцессорный режим работы
  • Двойная скорость в асинхронном режиме
Регистры USART0:
  • UDR0 - входной/выходной регистр данных
  • UCSR0AUCSR0BUCSR0C - регистры управления
  • UBRR0HUBRR0L - регистры управления скоростью передачи
Регистр UCSR0A:
7
6
5
4
3
2
1
0
RXC0
TXC0
UDRE0
FE0
DOR0
UPEN0
U2X
MPCM0

Бит RXC0 (7) регистра UCSR0A - это флаг завершения приема (1 - если в регистре UDR0 есть непрочитанные данные / 0 - после того, как регистр UDR0 опустошен).
Бит TXC0 (6) регистра UCSR0A - флаг завершения передачи (1 - после завершения передачи из сдвигового регистра, и если в UDR0 не было загружено нового значения. флаг сбрасывается записью в него 1).
Бит UDRE0 (5) регистра UCSR0A - флаг опустошения регистра данных UDR0 (устанавливается в 1 после пересылки данных из UDR0 в сдвиговый регистр передатчика и означает что в регистр данных можно загружать новое значение. сбрасывается при записи в UDR0 новых данных).
Бит FE0 (4) регистра UCSR0A - флаг ошибки кадрирования (при обнаружении ошибки кадрирования (первый стоп-бит равен 0) устанавливается в 1, сбрасывается при приеме стоп-бита равного 1).
Бит DOR0 (3) регистра UCSR0A - флаг переполнения (устанавливается в 1 если в момент обнаружения нового старт-бита в сдвиговом регистре находится последнее принятое слово, а буфер приемника полон (2 значения)).
Бит UPEN0 (2) регистра UCSR0A - флаг ошибки контроля четности (устанавливается в 1 при ошибке четности).
Бит U2X0 (1) регистра UCSR0A - удвоение скорости обмена, если установить в 1 (только в асинхронном режиме. в синхронном следует установить этот бит в 0).
Бит MPCM0 (0) регистра UCSR0A - режим микропроцессорного обмена (если установлен в 1, режим включен).

Регистр UCSR0B:
7
6
5
4
3
2
1
0
RXCIE0
TXCIE0
UDRIE0
RXEN0
TXEN0
UCSZ02
RXB80
TXB80

Бит RXCIE0 (7) регистра UCSR0B - разрешение прерывания при завершении приема если установлен в 1.
Бит TXCIE0 (6) регистра UCSR0B - разрешение прерывания при завершении передачи если установлен в 1.
Бит UDRIE0 (5) регистра UCSR0B - разрешение прерывания при очистке регистра данных если установлен в 1.
Бит RXEN0 (4) регистра UCSR0B - разрешение приема если установлен в 1.
Бит TXEN0 (3) регистра UCSR0B - разрешение передачи если установлен в 1.
Бит UCSZ02 (2) регистра UCSR0B - формат посылки данных (используется совместно с битами UCSZ01 и UCSZ00 регистра UCSR0C).
Бит RXB80 (1) регистра UCSR0B - 8-й разряд принимаемых данных при использовании 9-разрядных слов.
Бит TXB80 (0) регистра UCSR0B - 8-й разряд передаваемых данных при использовании 9-разрядных слов.

Регистр UCSR0C:
7
6
5
4
3
2
1
0
UMSEL01
UMSEL00
UPM01
UPM00
USBS0
UCSZ01
UCSZ00
UCPOL0

Биты UMSEL01 и UMSEL00 (7, 6) регистра UCSR0C отвечают за режим работы USART0:
  • 00 - Асинхронный режим
  • 01 - Синхронный режим
  • 10 - Резерв
  • 11 - Ведущий SPI
Биты UPM01 и UPM00 (5, 4) регистра UCSR0C отвечают за режим работы системы контроля и формирования четности USART0:
  • 00 - Выключен
  • 01 - Резерв
  • 10 - Проверка четности
  • 11 - Проверка нечетности
Бит USBS0 (3) регистра UCSR0C устанавливает количество стоп битов (1 стоп-бит если сброшен в 0 / 2 стоп-бита если установлен в 1).
Бит UCSZ02 (2) регистра UCSR0B и биты UCSZ01 и UCSZ00 (2, 1) регистра UCSR0C - устанавливают длину передаваемых посылок:
  • 000 - 5 бит
  • 001 - 6 бит
  • 010 - 7 бит
  • 011 - 8 бит
  • 100 - 110 - Резерв
  • 111 - 9 бит
Бит UCPOL0 (0) регистра UCSR0C устанавливает полярность тактовых сигналов:
  • 0 - передача по спаду, прием по нарастанию
  • 1 - передача по нарастанию, прием по спаду
В регистр UBRR0 записывается определенное значение в зависимости от тактовой частоты и скорости передачи. Значение вычисляется по формуле UBRR0 = CLK/(16*Скорость)-1