Модуль 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 CommunicationMode (не используется).
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 ;выходиз прерывания
Автор: Николай Матюшов

