Модуль UART
![](/int/Files/Picture/uart/uart1.png)
-полнодуплексная работа (регистры приемника и передатчика разделены),
- работа в синхронном или асинхронном режимах,
- возможность синхронизации от мастера или подчиненного
- возможность задавать скорость передачи данных с высоким разрешением
- поддержка формата кадров с 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 ;выход из прерывания
Автор: Николай Матюшов