USART

USART – это универсальный синхронный последовательный интерфейс, UART же является его облегчённым вариантом – универсальным асинхронным последовательным интерфейсом. Разница состоит в том, что USART, в отличии от UART, использует, помимо линий данных, так же линию тактового сигнала, с которыми синхронизируются данные. USART микроконтроллера AVR позволяет использовать одновременную двухстороннюю связь, от 5- до 9-битные информационные слова (в случае с 8 битами слово = байт), 1 или 2 стоп-бита, три режима чётности и широкий выбор скоростей передачи данных в бодах. В микроконтроллерах AVR обычно до двух USART интерфейсов, но у некоторых AVR USART отсутствует. Передача данных происходит по одному слову за раз, т.е. AVR переводит переданное пользователем слово в биты на уровне аппаратного обеспечения и передаёт его самостоятельно и наоборот. Пользователь руководит работой USART, записывая и считывая регистры данных, конфигурации и состояния.

Каждый параметр конфигурации имеет соответствующий регистр, который легко настроить с помощью спецификации. Немного сложнее настроить скорость передачи в бодах. Тактовый сигнал для передачи данных генерируется из рабочего такта, и пользователь может выбрать коэффициент от 1 до 4096, на который будет поделен рабочий такт. Полученный сигнал дополнительно делится на 2, 8 или 16, в зависимости от режима. Проблема состоит в том, что все тактовые частоты нельзя поделить так, чтобы получилась стандартная скорость передачи в бодах. Скорость передачи в бодах некоторых тактовых частот микроконтроллера отличается от стандартной на 10%. В спецификациях AVR приведены таблицы, в которых указаны тактовые частоты, стандартные скорости передачи данных в бодах и делитель, необходимый для их получения, а так же возможные ошибки.

Так как передача данных происходит в независимости от процессора и значительно медленнее, следует перед передачей убедиться, что интерфейс готов к передаче нового слова. Для этого следует следить за битом готовности буфера передач, который показывает готовность буфера принять новое слово. При запуске микроконтроллера, бит готовности включен по умолчанию. Как только слово отправлено, и в буфер не записано новое, бит готовности устанавливается высоким.

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

Буферы передачи и приёма в физическом смысле разные регистры, но имеют один адрес блока памяти и имя. При записи в совместно используемый регистр данных, данные сохраняются в буфере передачи, а при чтении из него, данные считываются из буфера приёма.

 

Пример

Настроить интерфейс USART0 ATmega128, работающий на тактовой частоте 8 MHz, с бодовой скоростью 9600 bps, асинхронно передавать 8-битные слова, 1 стоп-бит и ни одного бита чётности. Отправить знак „X“.

#include <avr/io.h>
 
int main()
{
	// Установление скорости передачи в бодах на 9600 bps. Формула:
	//   Делитель = тактовая частота / 16 / скорость в бодах - 1
	//   UBRR = 8000000 / 16 / 9600 - 1 = ~51
	UBRR0H = 0;
	UBRR0L = 51;
 
	// Разрешение передачи
	UCSR0B = (1 << TXEN0);
 
	// Настройка асинхронного режима, длина слова 8 бит
	// 1 стоп-бит, запретить бит чётности.
	UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
 
	// Ожидание опустошения буфера данных, 
	// т.е. предыдущее слово отправлено
        // В данном примере ожидание не требуется, 
	// так как отправляется первый знак, но 
        //следует выполнять это при передаче большего количества знаков.
	while (!(UCSR0A & (1 << UDRE))) continue;
 
	// Записывание знака в буфер, откуда он и будет отправлен
	UDR0 = 'X';
 
	// Бесконечный цикл
	while (1) continue;
}
ru/avr/usart.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0