Модуль UART

 
Модуль UART предназначен для связи контроллеров друг с другом и связи контроллеров с компьютером. В отличии от других интерфейсов контроллеров, он не предназначен для подключения периферийного оборудования.
 
При необходимости обмена данными на дальних (десятки и сотни метров) расстояниях применяют преобразователи интерфейсов UARTRS232или UARTRS485. Все эти интерфейсы отличаются лишь аппаратно (уровнями напряжения, типом линии передачи,). Таким образом, программы написанные для одного интерфейса должны работать и на других.Также выпускаются специальные микросхемы – преобразователи, позволяющие получить из сигнала с уровнями ТТЛ сигнал с уровнями используемого интерфейса.
 
 
 
Входящий в  состав микроконтроллера Универсальный асинхронный приемо-передатчик (UART) предназначен для последовательной передачи данных и имеет следующие особенности:

-полнодуплексная работа (регистры приемника и передатчика разделены),

- работа в синхронном или асинхронном режимах,

- возможность синхронизации от мастера или подчиненного

- возможность задавать скорость передачи данных с высоким разрешением

- поддержка формата кадров с 5, 6, 7, 8, или 9 информационными битами и 1 или 2 Стоповых бита

- аппаратная проверка на четность и проверка «ошибка кадра»

- обнаружение превышения (потерь) данных

- обнаружение ошибки синхронизации кадра

- фильтрация шума, включающая обнаружение «неверного старта» и цифровой фильтр низких частот

- три источника прерываний:        

- по окончанию приема

- по окончанию передачи

- по опустошению регистра данных

- обмен данными в многопроцессорном режиме

- режим удвоения скорости при синхронной передаче.

 

Для настройки модуля необходимо установить некоторые биты в регистрах ввода – вывода.

Рассмотрим их подробнее:

USART Control and Status Register A – UCSRA.

 

Bit 7 – RXC: USART Receive Complete – этот флаг устанавливается по завершению приема. Он может быть источником прерывания (если разрешено прерывание по завершению приема и разрешены прерывания, будет сформировании запрос).

Bit 6 – TXC: USART Transmit Complete – этот флаг устанавливается по завершению передачи байта. Он также может быть источником прерывания (если разрешено прерывание по завершению передачи и разрешены прерывания, будет сформировании запрос).

Bit 5 – UDRE: USART Data Register Empty – флаг опустошения регистра данных(указывает, готовность к приему/передачи следующего байта), если бит установлен, передатчик/приемник готов.

• Bit 4 – FE: Frame Error – ошибка кадра. Флаг устанавливается если в посылке не обнаруживается (равен 0)стоп – бит.

• Bit 3 – DOR: Data OverRun – флаг потери кадра. Устанавливается при потере кадра (повторная запись в регистр данных).

• Bit 2 – PE: Parity Error  - флаг ошибки четности. Устанавливается если в принятом кадре обнаруживается ошибка четности.

Bit 1 – U2X: Double the USART Transmission Speed– удвоение скорости передачи USART(работает только в асинхронном режиме).

• Bit 0 – MPCM: Multi-processor Communication Mode (не используется).

 

USART Control and Status Register B – UCSRB 

 

Bit 7 – RXCIE: RX Complete Interrupt Enable – разрешение прерывания по завершению приема.

Bit 6 – TXCIE: TX Complete Interrupt Enable – разрешение прерывания по завершению передачи.

Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable– разрешение прерыванияпо опустошению регистра данных USART.

• Bit 4 – RXEN: Receiver Enable –разрешение работы приемника.

Bit 3 – TXEN: Transmitter Enable – разрешение работы передатчика.

• Bit 2 – UCSZ2: Character Size – размер символа

Bit 1 – RXB8: Receive Data Bit 8 - девятый информационный разряд полученного символа.

 

USART Control and Status Register C – UCSRC.  

 • Bit 7 – URSEL: Register Select – бит выбора регистра. Если установлен, запись производится в UCSRC, если сброшен, в UBRRH.

 

Bit 6 – UMSEL: USART Mode Select – бит выбора режима работы модуля (1- синхронный, 0- асинхронный)

• Bit 5:4 – UPM1:0: Parity Mode –эти биты разрешают и определяют режим проверки четности принятого сообщения.

 

UPM1

UPMO

Parity Mode

0

0

Disabled

0

1

Reserved

1

0

Enabled. Even Parity

1

2

Enabled. Odd Parity

 

 

• Bit 3 – USBS: Stop Bit Select –бит выбора количества стоп - битов («0» - 1 бит, «1» - 2 бита)

Bit 2:1 – UCSZ1:0: Character Size – биты определяют размер принимаемого символа

 

UCSZ2

UCSZ1

UCSZ0

Character Size

0

0

0

5-blt

0

0

1

6-blt

0

1

0

7-blt

0

1

1

8-blt

1

1

1

9-blt

 

Bit 0 – UCPOL: Clock Polarity – бит выбора полярности сигнала синхронизации. При работе в асинхронном режиме бит необходимо сбросить. В синхронном режиме определяет соотношение между изменением данных и выборкой данных.

 

Программы для обмена данными.

В технической документации рекомендуется следующий порядок инициализации модуля UART:

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

-настройка формата посылки (размер кадра, количество стоп-битов, бит четности)

-разрешение работы приемника (передатчика) и соответствующих прерываний

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

 

Программа для передатчика:

.include"m8def.inc"

.org $000

rjmp RESET; Reset Handler

.org $00d

rjmpUSART_TXC ; USART TX Complete Handler

 

RESET:

ldir16,high(RAMEND); Main program start

out SPH,r16; Set Stack Pointer to top of RAM

ldir16,low(RAMEND)

out SPL,r16

 

ldi r16,255                   ;подключаем резисторы

out portb,r1     ;подтяжки к выводам порта В

 

 

ldi r16,(1<<pd1);вывод pd1 (TXD) настраиваем на вывод

out ddrd,R16

ldi r16,103                   ;заносим число в регистр скорости передачи данных

out ubrrl,r16     ;скороти передачи данных (см. стр. 160 даташита)

 

ldi r16,(1<<txcie)+(1<<txen);разрешается работа передатчика

out ucsrb,r16   ;прерывания по завершению передачи

ldir16,(1<<ucsz1)+(1<<ucsz0)+(1<<ursel);определяется

out ucsrc,r16    ;длина принимаемого символа (8 бит)

 

sei ; Enable interrupts

 

in r16,pinb                   ;чтение состояния порта с кнопками

out udr,r16                  ;и запись в регистр передачи данных

 

MAIN:                        ;основной цикл

RJMP MAIN

 

USART_TXC:            ;прерывание по завершению передачи UART

in r16,pinb                   ;чтение состояния порта с кнопками

out udr,r16                  ;и запись в регистр передачи данных

reti                               ;выход из прерывания

программа для приемника:

.include "m8def.inc"

.org $000

rjmp RESET; Reset Handler

.org $00b

rjmpUSART_RXC ; USART RX Complete Handler

 

RESET:

ldir16,high(RAMEND); Main program start

out SPH,r16; Set Stack Pointer to top of RAM

ldir16,low(RAMEND)

out SPL,r16

 

ldi r16,255

out ddrb,r16    ;настройка порта В на выход

;ldi r16,(1<<pd0);вывод pd1 (TXD) настраиваем на ввод

;out ddrd,R16

ldi r16,103                   ;заносим число в регистр скорости передачи данных

out ubrrl,r16     ;скороти передачи данных (см. стр. 160 даташита)

ldi r16,(1<<rxcie)+(1<<rxen);разрешается работа приемника

out ucsrb,r16   ;прерывания по завершению приема

ldir16,(1<<ucsz1)+(1<<ucsz0)+(1<<ursel)

out ucsrc,r16    ;указывается длина принимаемого символа (8 бит)

sei                               ;разрешение прерываний

 

MAIN:                        ;основной цикл

RJMP MAIN

 

USART_RXC:

in r16,udr                     ;чтение принятого символа

out portb,r16   ;передачав порт В

reti                               ;выход из прерывания 

 

Автор:  Николай Матюшов