ПОСЛЕДОВАТЕЛЬНЫЙ ОБМЕН ДАННЫМИ ПО КАНАЛУ UART на МК AVR

March 7, 2011 by admin Комментировать »

Цель работы – изучение приема и передачи информации по последовательному каналу UART (Universal Asynchronous Receiver-Transmitter) и программирование ввода;вывода.

Микроконтроллеры AVR имеют в своем составе модуль полнодуплексного универсального асинхронного приемопередатчика UART (в семействе Mega универсальный синхронный;асинхронный приемопередатчик US ART). Через него осуществляется прием и передача информации, представленной последовательным кодом, поэтому модуль UART часто называют также последовательным портом. С помощью этого модуля микроконтроллер может обмениваться данными с различными внешними устройствами.

Поток данных, передаваемых по каналу UART, представляет собой совокупность посылок или кадров. Каждый кадр содержит стартовый бит, восемь или девять битов данных и стоповый бит. Стартовый бит имеет уровень логического О, стоповый – уровень логической 1.

Скорость передачи данных может варьироваться в широких пределах, причем высокие скорости передачи могут быть достигнуты даже при относительно низкой тактовой частоте микроконтроллера.

Известно, что при передаче данных могут произойти различные сбои. Модуль UART, реализованный в микроконтроллерах, способен при приеме обнаруживать ошибку формата и переполнение.

Для взаимодействия с программой в модуле предусмотрены прерывания при наступлении следующих событий: прием завершен с адресом вектора $009 в таблице векторов прерываний, регистр данных передатчика пуст с адресом вектора $00А, передача завершена с адресом вектора $00В.

Выводы микроконтроллера, используемые модулем UART, являются линиями порта PD. В качестве входа приемника (RXD) используют вывод PDO, а в качестве выхода передатчика (TXD) – вывод PD1.

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

Управление работой UART

Управление работой приемопередатчика осуществляется с помощью регистра управления UCR. Текзшдее состояние приемопередатчика определяется с помощью регистра состояния USR. Формат этих регистров приведен в табл. 5.1 и 5.2.

Назначение управляющих битов:

RXCIE – разрешение прерывания по завершении приема, если RXCIE= 1;

TXCIE – разрешение прерывания по завершении передачи, если ТХС1Е=1;

UDRIE – разрешение прерывания при опустошении регистра данных UART, если UDRJE = 1;

RXEN – разрешение приема при RXEN = 1;

TXEN – разрешение передачи при TXEN = 1;

CHR9 – формат посылок (кадров). Если CHR9 = 1, производится передача и прием 9-разрядных данных. При передаче значение старшего (8-го) разряда берется из разряда ТХВ8 регистра, а при приеме записывается в разряд RXB8;

RXB8 – 8-й разряд принимаемых данных. Если флаг CHR9 = 1, разряд RXB8 содержит значение старшего разряда принятого слова;

ТХВ8 – 8-й разряд передаваемых данных. Если флаг CHR9 = 1, значение ТХВ8 передается как старший разряд слова.

Значения битов (флагов) регистра состояния:

RXC – флаг завершения приема. Данный флаг устанавливается в 1 при пересылке принятого слова из сдвигового регистра приемника в регистр данных UDR. Сбрасывается флаг аппаратно при чтении регистра UDR;

ТХС – флаг завершения передачи. Данный флаг устанавливается в 1 после передачи всех разрядов слова, включая стоп-бит, из сдвигового регистра передатчика, при условии, что в регистр данных UDR не было загружено новое значение. Этот флаг наиболее полезен при полудуплексной связи, когда передающее устройство должно освободить линию и перейти в режим приема сразу же после окончания передачи. Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно при записи 1 (!) в этот разряд;

UDRE – регистр данных пуст. Данный флаг устанавливается в 1 после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика. Установка этого флага означает, что передатчик готов к получению нового значения для передачи. Сбрасывается флаг аппаратно при записи в регистр UDR;

FE – флаг ошибки формата. Данный флаг устанавливается в 1, если стоп-бит принятого слова равен 0. Флаг сбрасывается при приеме стоп-бита, равного 1;

OR – флаг переполнения. Данный флаг устанавливается в 1, если в сдвиговом регистре приемника находится новое принятое слово, а старое содержимое регистра UDR не прочитано. Флаг остается установленным до тех пор, пока не будет прочитано содержимое регистра UDR. Флаг сбрасывается при пересылке принятых данных из сдвигового регистра приемника в регистр UDR.

В микроконтроллерах ATmega8515 функции регистров UCR, USR выполняют соответственно регистры UCSRB, UCSRA. Заметим, что в регистре UCSRA имеется дополнительный разряд МРСМ, присутствие которого позволяет организовать простейшую локальную мультипроцессорную систему. При значении МРСМ = 1 приемник принимает кадры, у которых 9-й бит равен 1 и игнорирует кадры с 9-м битом, равным 0. При значении МРСМ = = О приемник принимает кадры с любым значением 9-го бита. В микроконтроллерной сети один контроллер имеет статус ведущего, остальные – ведомых. У всех ведомых контроллеров перед началом работы бит МРСМ = 1. Ведущий контроллер посылает байт, содержащий адрес ведомого контроллера, с 9-м битом, равным 1. Все контроллеры принимают его, проверяют поступивший адрес, сравнивая с собственным адресом, присвоенным при инициализации сети. Тот контроллер, который опознал поступивший адрес как собственный, переключает бит МРСМ в состояние 0. Данные, пересылаемые вед5шдим контроллерам, содержат 9-й бит, равный 0. Эти данные могут быть приняты только тем контроллером, бит которого МРСМ = 0. Если от ведущего контроллера поступит новый адрес в кадре с 9-м битом, равным 1, принимающий изменит значение МРСМ на 1 и вернется в исходное состояние.

Передача данных

Структурная схема передатчика модуля UART приведена на рис. 5.1.

Работа передатчика разрешается установкой в 1 разряда TXEN регистра UCR. Если этот разряд сброшен (передатчик выключен), вывод PD1 (TxD) может использоваться как линия ввода;вывода порта PD. При установке разряда TXEN этот вывод подключается к передатчику UART и начинает функционировать как выход независимо от состояния 1-го разряда регистра DDRD порта PD.

Передача инициируется записью передаваемых данных в регистр данных UDR. После этого данные пересылаются из регистра UDR в сдвиговый регистр передатчика. При этом возможны два варианта:

1) новое значение записывается в регистр UDR после того как был передан стоп-бит предыдущего слова. В этом случае данные пересылаются в сдвиговый регистр сразу же после записи в регистр UDR;

Рис. 5.1. Структурная схема передатчика UART

2) новое значение записывается в регистр UDR во время передачи. В этом случае данные пересылаются в сдвиговый регистр после передачи стоп-бита текущего слова.

После пересылки содержимого регистра UDR в сдвиговый регистр флаг UDRE регистра USR устанавливается в 1, что означает готовность передатчика к получению нового значения. В этом состоянии флаг остается до новой записи в регистр UDR. Одновременно с пересылкой формируется служебная информация: 0-й разряд сдвигового регистра сбрасывается в О (старт-бит), а 9-й (или 10-й) разряд устанавливается в 1 (стоп-бит). Если включен режим передачи 9-разрядных данных (разряд CHR9 регистра UCR установлен в 1), то значение разряда ТХВ8 регистра UCR копируется в 9-й разряд сдвигового регистра.

После загрузки сдвигового регистра его содержимое начинает сдвигаться вправо и поступает на вывод TXD в следующем порядке: стартовый бит, данные (начиная с младшего разряда), столовый бит. Сдвиг осуществляется по тактовому сигналу, вырабатываемому контроллером скорости передачи. Если во время передачи в регистр UDR было записано новое значение, то после передачи стоп-бита оно пересылается в сдвиговый регистр. Если же к моменту окончания передачи стоп-бита новой записи выполнено не было, в регистре USR устанавливается флаг завершения передачи ТХС.

Прием данных

Структурная схема приемника модуля UART приведена на рис. 5.2. После обнаружения старт-бита начинается обработка поступающих разрядов слова данных. Решение о значении принятого разряда принимается по результатам трех выборок входного сигнала в середине битового периода. Состоянием разряда считается логическое значение, которое было получено по меньшей мере в двух из трех выборок. По мере распознавания разрядов принимаемой последовательности они поступают, сдвигаясь вправо, в сдвиговый регистр приемника.

Распознавание стоп-бита производится также по трем выборкам входного сигнала. Стоп-бит считается принятым, если значения хотя бы двух из трех выборок входного сигнала равны 1. В противном случае фиксируется ошибка кадра и флаг FE регистра USR устанавливается в 1. Перед чтением регистра данных UDR следует всегда проверять состояние этого флага.

Независимо от того, был или не был обнаружен стоп-бит в конце принимаемой посылки, принятое слово пересылается в регистр данных UDR и устанавливается флаг RXC регистра USR. В случае обмена 9-разрядными данными при пересылке содержимого сдвигового регистра приемника в регистр данных 9-й разряд принятого слова загружается в разряд ^В8 регистра UCR.

Если новое слово поступит до того как из регистра UDR будут считаны предыдущие данные, возникает переполнение. Об этом сигнализирует флаг OR регистра USR, который в этом случае устанавливается в 1. Установка этого флага означает, что принятые данные не могут быть переданы из сдвигового регистра в регистр данных и оказываются потерянными. Сбрасывается указанный флаг только после обращения к регистру данных, поэтому при высоких скоростях передачи либо большой загрузке процессора программа должна проверять состояние флага OR в регистре USR для обнаружения возможного переполнения.

Рис. 5.2. Структурная схема приемника UART

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

Управление скоростью приема;передачи данных осуществляется контроллером скорости передачи, который является обыкновенным делителем частоты. Скорость передачи зависит от содержимого регистра контроллера. В AT90S8515 – это регистр ввода;вывода UBRR, в ATmega8515 – регистры UBRIlHiUBRRL. Скорость передачи определяется следующим выражением:

Рис. 5.4. Схемы алгоритмов передачи из ми1фоконтроллера 1 (а) и приема в микроконтроллер 2 (б)

цикла приема включаются все светодиоды линейки индикации. Далее при последовательном нажатии на кнопку SW5 (Просмотр) осуществляется вывод принятых байтов данных на светодиоды. Ниже приведены тексты программ для передающего и принимающего микроконтроллеров.

Программа 5.1

г

;Программа 5.1 для МК АТх8515: демонстрация работы UART. ;При нажатии на SW4 (START) происходит последовательная ;передача по каналу UART трех байтов сообщения,считываемых ;из ячеек Flash-памяти. При частоте генератора 3,69 МГц, ;UBRR=11 скорость передачи 19219 бод.

;Соединения: PD4-SW4, GND STK500-1 с GND STK500-2

.include "8515def.inc"       ;файл определений AT90S8515

;.include "m8515def.inc"     ;файл определений ATmega8515

.def temp = rl6              ;временный регистр

.def count = rl7             ;счетчик

.equ START = 4               ;4-й вывод порта PD

.org $000

rjmp init ;***Инициализация МК

INIT: Idi ZL,low(text*2) ;загрузка адреса текста Idi ZH,high(text*2) ; сообщения в регистр Z Idi count,3       ;установка счетчика байтов

clr temp               ;настройка

out DDRD,temp          ; вывода

Idi temp,0x10          ; порта PD4

out PORTD,temp         ; на ввод

;***Настройка UART на передачу данных ;;;; для ATmega8515 регистр UCSRB вместо UCR Idi temp,0x08     ;разрешение

out UCR,temp           ; передачи по каналу UART

Idi temp,11            ;скорость передачи

out UBRR,temp          ; 19219 бод

WAIT_START: sbic PIND,START ;ожидание нажатия

rjmp WAIT_START           ; кнопки START

OUTPUT: 1pm            ;считывание байта из flash-памяти в rO

out UDR, rO     ;вывод байта в передатчик

;;;; для ATmega8515 регистр UCSRA вместо USR

sbi USR,TXC ;сброс флага ТХС WAIT: sbic USR,ТХС   ;ожидание

rjmp next                 ; завершения

rjmp WAIT                 ; передачи

next: adiw zl,l                  ;увеличение адреса на 1

dec count                 ;уменьшение счетчика на 1

brne OUTPUT               ;продолжение вывода

fin: rjmp fin                    ;передача завершена

text: .db ‘A’,’V’,’R’            ;текст сообщения

; (ASCII – коды $41, $56, $52)

Программа 5.2

;Программа 5.2 для МК АТх8515: демонстрация работы канала ;UART в режиме приема трех байтов. При частоте тактового

;генератора 3,69 МГц, UBRR=11 скорость обмена 19219 бод. ;Соединения: шлейфом порты PB-LED, PD5-SW5, GND STK500-1 с ;GND STK500-2

г

.include "8515def.inc" ;файл определений AT90S8515

;.include "m8515def.inc" ;файл определений ATmega8515

.def temp = rl6           ;временный регистр

.def count = rl7          ;счетчик

.equ SHOW = 5             ;5-й вывод порта PD

.org $000

rjmp init ;***Инициализация MK

INIT: Idi temp,low(RAMEND) ;установка

out SPL,temp                  ; указателя стека

Idi temp,high(RAMEND) ; на последнюю out SPH,temp     ; ячейку ОЗУ

Idi YL,0x80            ;в регистре Y – адрес, по которому

Idi YH,0x01            ; происходит запись принятых данных

Idi count,3            ;установка счетчика байтов

ser temp               ;настройка

out DDRB,temp          ; порта РВ на вывод

out PORTB,temp         ; и выключение светодиодов

clr temp

out DDRD,temp          ;настройка

Idi temp,0x20          ; вывода PD5

out PORTD,temp         ; на ввод

;***Настройка UART на прием данных

;;;; для ATmega8515 регистр UCSRB вместо UCR, UBRRL Idi temp,0x10      ;разрешение приема

out UCR,temp           ; по каналу UART

Idi temp,11            ;скорость приема;передачи

out UBRR,temp          ; 19219 бод

;;;; для ATmega8515 регистр UCSRA вместо USR WAIT_RXC: sbic USR,RXC ;ожидание

rjmp INPUT                ; завершения

rjmp WAIT_RXC             ; приема

INPUT: in temp,UDR        ;ввод байта из приемника

St Y+,temp                ; и сохранение в памяти

dec count                 ;уменьшение счетчика на 1

brne WAIT_RXC             ;продолжение приема

clr temp                  ;сигнализация –

out PORTB,temp            ; прием завершен

Idi YL,0x80               ;установка начального адреса

Idi count,3               ;установка счетчика байтов

WAIT_SHOW: sbic PIND,SHOW ;ожидание нажатия rjmp WAIT_SHOW      ; кнопки SW5

Id temp, Y+               ;считывание байта из памяти

com temp                  ;инвертирование

out PORTB,temp            ;вывод на светодиоды

rcall DELAY               ;задержка

dec count                 ;если показаны не все данные,

brne WAIT_SHOW            ; продолжение при нажатии SW5

ser temp                  ;вывод окончен

out PORTB,temp            ;светодиоды погашены

Idi count,3

Idi YL,0x80

rjmp WAIT_SHOW ;повторение вывода Задержка *** DELAY:Idi rl9,10 Idi r20,255 Idi r21,255 dd:dec r21 brne dd dec r20 brne dd dec rl9 brne dd ret

Проверка работы канала UART с помощью программы Hyper Terminal.

А. Создать в AVR Studio 4 проект для передачи данных с помощью программы 5.1. Проверить работу программы в режиме симуляции, наблюдая состояния регистров и битов состояния канала UART. Отлаженную программу запрограммировать в память микроконтроллера на плате STK500. Закрыть программу AVR Studio 4.

Проверить работу канала передачи UART, соединив при выключенном напряжении питания плату STK500 с компьютером. Для этого используем интерфейс RS-232 для передачи;приема данных из микроконтроллера по каналу UART. Соединение можно осуществить кабелем связи через 9-контактный разъем интерфейса RS-232, обозначенный на плате RS232 SPARE, Подключение микроконтроллера к интерфейсу RS-232 выполняется двухпроводным шнуром путем соединения выводов порта PDO, PD1 с контактами RXD, TXD двухконтактного разъема RS232 ^PyiRE. После соединения подать напряжение питания на плату. Запустить программу

Hyper Terminal из Windows, выбрав одноименную строку в меню Программы! Стандартные! Связь, и настроить канал связи, установив СОМ-порт, скорость обмена 19200 бод, 8-битньш формат. Нажать кнопку Вызов. На плате замкнуть кнопку SW4 (Старт) для запуска передачи сообщения. Просмотреть в окне программы Hyper Terminal компьютера принятое сообщение. Повторить передачу, изменив скорость передачи данных. Проверив работу канала, закрыть программу Hyper Terminal.

Б. Создать в AVR Studio 4 проект для приема данных с помощью программы 5.2. Проверить работу программы в режиме симуляции, вручную устанавливая флаг приема RXC и данные в регистре UDR и контролируя вывод данных в выходhoii порт РВ.

Отлаженную программу запрограммировать в память микроконтроллера на плате STK500. Закрыть программу AVR Studio 4.

Подготовить текстовьш фтя короткого сообщения (из трех символов) с помощью стандартно!! программы Блокнот. Выполнить соединения, как описано выше. Включить напряжение питания на плате. Снова запустить программу Hyper Terminal и настроить канал связи (скорость – 19200 бит;с, биты данных – 8, четность – нет, стоповые биты – 1, управление потоком – Xon;Xoff). Выполнить команду меню Передача;Отправить текстовый файл. После включения светодиодов на плате вывести на индикаторы ASCII-коды принятых символов, трижды нажимая кнопку SW5. Выполнив сброс микроконтроллера, повторить передачу потока цифровых данных непосредственно с клавиатуры.

Проверка работы канала UART при передаче данных между микроконтроллерами.

Для проверки работы канала UART при передаче сообщения из микроконтроллера МК1 в микроконтроллер МК2 необходимо соединить напрямую вывод PDl(TXD) первого STK500 с выводом PDO второго, а также соединив выводы GND обеих плат. При необходимости платы STK500 после программирования отсоединить от кабеле!! RS-232. При нажатии кнопок RESET оба микроконтроллера переводятся в режим ожидания. Передача сообщения начинается после нажатия кнопки SW4 (Старт) на плате первого STK500. После приема сообщения загораются все светодиоды второго STK500, показывая, что прием данных завершен. Полученные данные можно вывести на индикаторы, нажимая последовательно кнопку SW5.

Задание 2. Написать программу для передачи сообщения hello, хранимого в памяти программ микроконтроллера STK500-1, в память данных микроконтроллера STK500-2. Процедуру передачи и процедуру приема каждого символа сообщения запрограммировать, используя запросы прерываний от передатчика и приемника.

Задание 3. Изменить программу, осуществив передачу данных из памяти SRAM по каналу UART. Загрузку данных (констант) в ячейки SRAM осуществить непосредственно командами программы. Для приема данных по входу RXD использовать тот же микроконтроллер, соединив выход TXD с входом RXD.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты