Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КР2 / КР2 (Влада)

.pdf
Скачиваний:
23
Добавлен:
08.04.2022
Размер:
2.12 Mб
Скачать

штекер с 9 контактами, также известный как COM-порт (от слова

communication).

СОМ-ПОРТ

Неотъемлемая часть большинства компьютеров на протяжении последних 30 лет.

Хотя многие новые системы полностью отказались от стандарта RS-

232 в пользу USB интерфейса, он до сих пор используется в системах

промышленной автоматики, различных исследовательских и измерительных

приборах

Просты, надёжны, поддерживаются любой операционной системой,

аих функционал очень хорошо стандартизирован.

Последовательный порт не требует дополнительных драйверов или специализированного программного обеспечения

Пользователи могут легко взаимодействовать с COM-портом при помощи распространённых программ, таких как Матлаб и Labview.

Для организации последовательной передачи необходимо много настроек:

Скорость передачи (baudrate)

Количество бит в пакете (обычно 8 бит)

Проверка на четность (для обнаружения ошибок при передаче данных) – проверка на целостность, мы биты данных через побитовую операцию искл. ИЛИ проводим и смотрим количество единичек и в зависимости от режима четности, мы выставляем бит в 0 или 1 (на стороне приемника проверяем, если совпадает, то все нормально)

Стоп-биты отправляются в конце каждого пакета данных

Условное обозначение – данные/четность/стоп биты

Общая структура

Каждый микроконтроллер семейства Mega и некоторые из семейства

Tiny имеет в своем составе аппаратный блок универсального последовательного интерфейса – UART. По структуре это обычный

41

асинхронный последовательный протокол как и RS-232, т.е. передающая сторона по очереди выдает в линию нули и единицы, а принимающая отслеживает и запоминает их (нет линии тактовых импульсов – отвечает за скорость передачи данных). Синхронизация идет по времени – мы заранее задаем скорость передачи данных как на стороне передатчика информации,

так и на стороне приемника (именно поэтому передача асинхронная – отдельная линия для передачи тактовых синхронизирующих импульсов отсутствует). Это весьма важное замечание, так как расхождение в скоростях передачи может привести к ошибкам в распознавании информации, при этом ошибки будут накапливаться с увеличением скорости передачи данных.

На физическом уровне интерфейс UART крайне прост. Для его аппаратной реализации достаточно всего двух проводов, не считая общего провода, подключаемого обычно к напряжению земли (рис. 3). Эти линии имеют разное назначение – линия RXD используется для приема сообщений

(Receiver), а TXD – для передачи сообщений (Transmitter). UART является полнодуплексным интерфейсом. Это значит, что приемник и передатчик работают независимо друг от друга, позволяя одновременно как передавать,

так и принимать данные (так называемая полнодуплексная передача данных).

Рис. 3. Аппаратное обеспечение UART

В настоящее время физические интерфейсы на основе RS232

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

Виртуальный COM-порт

42

можно использовать без реального (аппаратного) порта (можно создать любое количество)

может быть назначено любое имя

работает как физический порт

эмулирует все функциональные возможности аппаратного последовательного порта (скорость передачи, биты данных, беты четности, стоповые биты и тп)

единственным ограничением являются доступные ресурсы, такие как

оперативная память и вычислительная мощность.

Протокол передачи данных

Передача (соответственно, и прием) сообщений осуществляется фиксированными пакетами битов, такой пакет называют кадром (рис. 1).

Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменять от 5 до 9), бита проверки четности

(проверка правильности передачи данных) и одного или двух стоп-битов

(обязательный сигнал окончания кадра).

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

является стоповым. Он сообщает принимающей стороне, что передача данных закончена.

В конце байта, перед стоповым битом, может находиться бит проверки четности. Так называют контрольный бит, служащий для проверки общей чётности двоичного числа (чётности количества единичных битов в числе).

Он формируется при выполнении операции «Исключающее-ИЛИ» со всеми передаваемыми битами. Стоповых битовых может быть два, для повышения

надежности передачи. Все эти параметры задаются строго перед началом

43

передачи данных и не могут быть изменены в процессе. Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1 стоповый бит, без проверки на четность.

Рис. 1. Пакет данных для передачи по интерфейсу UART

Тоже самое, но с мудла (пусть будет)

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

Все эти параметры задаются строго перед началом передачи данных и не могут быть изменены в процессе. Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1

стоповый бит, без проверки на четность. Передача и прием сообщений осуществляется фиксированными пакетами бит, такой пакет называют кадром (рис. 2). Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменяться от 5 до 9), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (обязательный сигнал окончания кадра).

Рис. 2. Пакеты данных

В конце байта, перед стоповым битом, может находиться бит проверки четности. Так называют контрольный бит, служащий для проверки общей

44

чётности двоичного числа (чётности количества единичных битов в числе).

Он формируется при выполнении операции «Исключающее-ИЛИ» со всеми передаваемыми битами.

Настройка и программирование интерфейса UART

Рассмотрим регистры, имеющие отношение к приемопередатчику.

Регистр UDRx (UART Data Registor) – на физическом уровне представляет собой два разных регистра, имеющих одинаковый адрес. (у

атмеги, с которой работаем, 8 битный)

При записи информация поступает в первый регистр (регистр передатчика TXB), а при чтении берется из другого (регистр приемника

RXB). И при чтении, и при записи данных используется один регистр, что облегчает процесс программирования.

О том, что байт полностью пришел в регистр UDR, нам указывает прерывание по завершении приема, которое вызывается сразу же после того,

как приемник обрабатывает все поступившие в него биты.

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

Все настройки приемопередатчика хранятся в регистрах конфигурации

UCSRA, UCSRB, UCSRC, скорость передачи данных задается регистровой

парой UBRRH:UBRRL.

45

Регистр UCSRxA (USART (s – потому что еще и синхронным может

быть)

Control

and

Status

Register)

RXCn (Receive Complete) и TXCn (Transmit Complete) – флаги прерывания по приему и передачи данных, соответственно. UDERn (USART Data Register Empty) – по опустошению данных (сигнализирует что регистр

UDR пуст и в него можно записывать байт), сбрасывается он аппаратно после записи новой порции данных в UDR, при этом генерируется соответствующее прерывание.

RXCn устанавливается в единицу, когда принимаемый байт запишется в регистр UDR для последующего чтения, а TXCn – после прохождения последнего стоп-бита и отсутствия новых данных в регистре UDR, т.е. после окончания передачи всех битов. Также одновременно с этими влагами вызывается прерывание (если оно было разрешено). Сбрасываются эти флаги на аппаратном уровне – принимающий после чтения данных из регистра

UDR, передающие при переходе на соответствующее прерывание, либо программным образом (запись логической единицы).

Следующие три бита – всякие проверки (мы их не используем). (Bit 4 -

FE: Ошибка кадра. Данный бит устанавливается в состояние 1 при обнаружении условий ошибочного приема кадра, т.е. когда стоповый бит входящего символа в состоянии 0. Бит FE очищается при приеме стопового бита с логическим уровнем 1. Bit 3 - DOR: Переполнение данных. Бит DOR

устанавливается в состояние 1 при обнаружении условий переполнения, т.е.

когда байт уже находящийся в регистре UDR, не считан перед пересылкой нового байта из сдвигового регистра приема. Бит DOR буферирован, что

46

означает, что он будет оставаться установленным, пока не будут считаны правильные данные из UDR. Бит DOR очищается (сбрасывается в 0) когда данные приняты и пересланы в UDR. Bits 2 - РЕ: Ошибка контроля четности. Бит РЕ устанавливается в 1, если данных, находящихся в буфере приемника, выявлена ошибка контроля четности. При отключенном контроле четности бит постоянно равен 0.)

Бит U2Xn (Double the USART Transmission Empty) – бит удвоения скорости передачи данных при работе в асинхронном режиме. Его надо учитывать при расчете значения в регистровой паре UBRRH:UBRRL.

MPCM: Режим мультипроцессорного обмена. Если флаг равен 1, то ведомый МК ожидает приема кадра, содержащего адрес. Кадры, не содержащие адреса устройства, игнорируются.

Регистр UCSRxB

Основную роль играют биты RXEN (Receiver Enable) и TXEN

(Transmitter Enable) – при записи в них логической единицы осуществляется разрешение приема и передачи, соответственно. (лучше сразу все разрешить).

RXCIEn (RX Complete Interrupt Enable) – осуществляет разрешение прерывания по завершению приема данных.

TXCIE (TX Complete Interrupt Enable) – осуществляется разрешение прерывания по завершению передачи данных.

UDRIEn (UART DATA Register Empty Interrupt Enable) –

осуществляется разрешение прерывания по опустошению регистра передачи данных UDR.

Следующий бит (UCSZn2,1,0) – один в регистре В, два других в С. Эти три бита определяют количество бит данных, которые мы передаем в нашем пакете (надо выставить так, чтобы передавали 8 бит). Оставшиеся биты если

47

надо передать больше. (Bit 1 - RXB8: Прием 8-разрядных

данных. Используется в 9 разрядных данных. Является девятым битом данных принятого символа. Этот разряд должен быть прочитан до прочтения данных UDR. Bit 0 - TXB8: Передача 8-разрядных данных. При использовании 9 разрядных посылок данных содержимое этого разряда является старшим разрядом передаваемого слова. Значение должно быть занесено в этот разряд до загрузки байта данных в регистр UDR.)

Регистр UCSRxC

В этом регистре мы выбираем необходимый протокол передачи

данных.

UMSELn (UART Mode Select) – задаем формат передачи – синхронный

или асинхронный (00 – асинхронный, 01 – синхронный, 11 – SPI).

UPMn1:0 (UART Parity Mode) – установка проверки на четность, по умолчанию в оба бита записаны логические нули, передача данных ведется

без проверки на четность. (10 – четный, 11 – нечетные)

USBSn (UART Stop Bit Select) – определяет количество стоповых битов

(0 – 1 стоповый бит, 1 – 2 стоповых бита).

UCSZn1:0 (UART Character Size) – уже упоминался выше. Определяет

количество передаваемых битов данных – от 5 до 9.

UCSZn0

UCSZn1

UCSZn2

Количество бит

 

 

 

 

0

0

0

5

 

 

 

 

0

0

1

6

 

 

 

 

0

1

0

7

 

 

 

 

0

1

1

8

 

 

 

 

1

1

0

зарезервировано

 

 

 

 

 

 

48

 

1

1

 

1

 

9

 

 

 

 

 

 

 

 

UCPOLn

полярность

нашего тактового

сигнала (для синхронной

передачи). Определяет момент выдачи и считывания данных на выводах модуля USART.

Скорость передачи данных

Регистровая пара UBRRH:UBRRL. Старший (H) использует всего 4

бита. Число разбиваем на две части и записываем в регистры.

Вычисляется по следующей формуле:

Нижняя для удвоенной скорости.

fOSC – тактовая частота, на которой работает наш мк (без предделителя и всего такого).

BAUD – требуемая скорость.

Скорость выбираем по следующей табличке. Указана в битах в секунду. Чем выше скорость, тем больше ошибка рассинхронизации, поэтому

49

на высоких скоростях целесообразно использовать специализированные

кварцы (с неравными значениями).

50

Соседние файлы в папке КР2