Використання інтерфейсу USART мікроконтролерів AVR - Мікроконтролери та Технології

інтерфейсу
МікроконтролериAVR мають у своєму складі модуль повнодуплексного універсального асинхронного приймачаUART (у сімействі Mega універсальний синхронний/асинхронний приймачUSART ). Через нього здійснюється прийом та передача інформації, представленої послідовним кодом, тому модульUART часто називають також послідовним портом. За допомогою цього модуля мікроконтролер може обмінюватись даними з різними зовнішніми пристроями.

Потік даних, що передаються каналомUART, являє собою сукупність посилок або кадрів. Кожен кадр містить стартовий біт, вісім чи дев'ять бітів даних та стоповий біт. Стартовий біт має рівень логічного 0, стоповий - рівень логічної 1. Швидкість передачі може варіюватися в широких межах, причому високі швидкості передачі можуть бути досягнуті навіть при відносно низькій тактовій частоті мікроконтролера.

Обмін даними за послідовним інтерфейсом

Висновки мікроконтролера, які використовуються модулемUART, є лініями порту PD. Як вход приймача (RXD) використовують висновок РD0, а як вихід передавача (TXD) - висновок PD1.

Дані (вісім розрядів), що приймаються і передаються, зберігаються в регістріUDR. Фізично регістрUDR складається з двох окремих регістрів, один з яких використовується для передачі даних, інший - для прийому. Під час читання регіструUDR виконується звернення до регістру приймача, під час запису - до регістру передавача.

Регістри управління модулями USART на прикладі мікроконтролера ATmega8

Для управління модулямиUSART використовуються три регістри:UCSRA, UCSRB і UCSRC.

Опис розрядів регіструUCSRA.

РозрядНазваОпис
7RXC

Прапор завершення передачі. Прапор встановлюється в «1» після передачі всіх розрядів посилки зі зсувного регістра передавача, за умови, що в регістр даних UDR не було завантажено нового значення. Якщо розряд TXCIE регістру UCSRB (UCSRnB) встановлений, при установці прапора генерується переривання «передача завершена». Прапор скидається апаратно під час виконання підпрограми обробки переривання чи програмно, записом до нього лог. 1

Прапор спустошення регістру даних. Даний прапор встановлюється в «1» при порожньому буфері передавача (після пересилання байта з регістру даних UDR в регістр зсуву передавача). Встановлений прапор означає, що в регістр даних можна завантажувати нове значення. Якщо розряд UDRIE регістру UCR (UCSRB) встановлений, генерується запит на переривання «реєстр даних порожній». Прапор скидається апаратно при записі в регістр даних

Прапор помилки кадрування. Прапор встановлюється в «1» при виявленні помилки кадрування, тобто якщо перший стопбіт прийнятої посилки дорівнює «0». Прапор скидається при прийомі стопбіта, що дорівнює «1»

Прапор переповнення. У USART прапор встановлюється в «1», якщо в момент виявлення нового стартбіта в зсувному реєстрі приймача знаходиться останнє прийняте слово, а буфер приймача повний (два значення). У UART прапор встановлюється в «1», якщо новий кадр буде поміщений в регістр зсуву приймача до того, як з регістру даних буде зчитане попереднє слово. Прапор скидається при пересиланні прийнятих даних із зсувного регістру приймача в буфер

Прапор помилки контролю парності. Прапор встановлюєтьсяв «1», якщо в даних, що знаходяться в буфері приймача, виявлено помилку контролю парності. При відключеному контролі парності цей розряд постійно скинутий у «0»

Подвоєння швидкості обміну. Якщо цей розряд встановлений «1», коефіцієнт поділу предделителя контролера швидкості передачі зменшується з 16 до 8, подвоюючи тим самим швидкість асинхронного обміну по послідовному каналу. У USART розряд U2X використовується лише при асинхронному режимі роботи. У синхронному режимі він має бути скинутий

Опис розрядів регіструUCSRB.

РозрядНазваОпис
7RXCIEДозвіл переривання після завершення прийому. Якщо цей розряд встановлений у «1», то при встановленні прапора RXC регістру UCSRA генерується переривання «прийом завершений» (якщо прапор I регістру SREG встановлено в «1»)
6TXCIEДозвіл переривання після завершення передачі. Якщо цей розряд встановлений у «1», то при встановленні прапора TXC регістру UCSRA генерується переривання «передача завершена» (якщо прапор I регістру SREG встановлений у «1»)
5UDRIEДозвіл переривання при очищенні регістру даних UART. Якщо даний розряд встановлений в «1», то при встановленні прапора UDRE у регістрі UCSRA генерується переривання «регістр даних порожній» (якщо прапор I регістру SREG встановлено в «1»)
4RXENДозвіл прийому. При встановленні цього розряду «1» дозволяється робота приймача USART/UART і перевизначається функціонування виведення RXD (RXDn). При скиданні розряду RXEN робота приймача забороняється, яке буфер скидається. Значення прапорів TXC, DOR/OR та FE при цьому стають недійсними
3TXENДозвіл передачі. При встановленні цього розряду «1» дозволяється робота передавача UART і перевизначається функціонування виведення TXD. Якщо розряд скидається в «0» під час передачі, вимкнення передавача відбудеться лише після завершення передачі даних, що знаходяться у зсувному регістрі та буфері передавача
2UCSZ2Формат посилок. Цей розряд використовується для завдання розміру слів даних, що передаються послідовним каналом. У модулях USART він використовується разом із розрядами UCSZ1:0 регістру UCSRC. У модулях UART, якщо розряд CHR9 встановлений у «1», здійснюється передача та прийом 9 розрядних даних, якщо скинутий — 8 розрядних
1RXB88-й розряд даних, що приймаються. При використанні 9-розрядних слів даних цей розряд містить значення старшого розряду прийнятого слова. У випадку USART вміст цього розряду має бути рахований до прочитання регістру даних UDR
0TXB88-й розряд даних, що передаються. При використанні 9 розрядних слів даних вміст цього розряду є старшим розрядом переданого слова. Необхідне значення має бути занесено до цього розряду до завантаження байта даних у регістр UDR

Опис розрядів регіструUCSRC.

РозрядНазваОпис
7URSELВибір регістру. Цей розряд визначає, в якому з регістрів модуля проводиться запис. Якщо розряд встановлений у «1», зворот здійснюється до регістру UCSRC. Якщо ж розряд скинутий в «0», звернення проводиться до регістру UBRRH.
6UMSELРежим роботи USART. Якщо розряд скинутий у «0», модуль USARTпрацює в асинхронному режимі. Якщо розряд встановлений у «1», то модуль USART працює у синхронному режимі
5UPM1Режим роботи схеми контролю та формування парності. Ці розряди визначають функціонування схем контролю та формування парності
4UPM0
3USBSКількість стопбітів. Цей розряд визначає кількість стопбітів, що посилаються передавачем. Якщо розряд скинутий у «0», передавач посилає 1 стопбіт, якщо встановлено «1», то 2 стопбіта. Для приймача вміст цього розряду байдуже
2UCSZ1Формат посилок. Спільно з розрядом UCSZ2 ці розряди визначають кількість розрядів даних у посилках (розмір слова)
1UCSZ0
0UCPOLПолярність тактового сигналу Значення цього розряду визначає момент видачі та зчитування даних на висновках модуля. Розряд використовується лише під час роботи в синхронному режимі. При роботі в асинхронному режимі він має бути скинутий у «0»

Швидкість прийому/передачі USART

В асинхронному режимі, а також в синхронному режимі при роботі в якості ведучого, швидкість прийому і передачі даних задається контролером швидкості передачі, що функціонує як дільник тактового системного сигналу з програмованим коефіцієнтом поділу. Коефіцієнт визначається вмістом регістру контролераUBRR. У блок приймача сформований сигнал надходить відразу, а блок передавача — через додатковий дільник, коефіцієнт поділу якого (2, 8 або 16 ) залежить від режиму роботи модуляUSART/UART. РегістрUBRR є 12 розрядним і фізично розміщується у двох регістрах вводу/виводуUBRRH таUBRRL.

При роботі в асинхронному режимі швидкість обміну визначається не лише вмістом регіструUBRR, але й станом розрядуU2X регістраUCSRA. Якщо цей розряд встановлений в «1», коефіцієнт розподілу предделителя зменшується вдвічі, а швидкість обміну відповідно подвоюється. Під час роботи в синхронному режимі цей розряд має бути скинутий.

Швидкість обміну визначається такими формулами, де

BAUD — швидкість передачі в бодах,fCK — тактова частота мікроконтролера,UBRR — вміст регістру контролера швидкості передачі (0…4095):

асинхронний режим (звичайний, U2Xn = "0")BAUD = fCK/16 (UBRR + 1) ;

асинхронний режим (прискорений, U2Xn = "1")BAUD = fCK / 8 (UBRR + 1) ;

синхронний режим ведучогоBAUD = fCK/2(UBRR + 1).

Нижче наведено приклад тестової програми вивчення протоколу USART, де мікроконтролер Atmega8 обмінюється інформацією з терміналом, для наочності до контролера підключений LCD 16X02 дисплей. При натисканні на кнопки 1-3 у терміналі висвічуються відповідні рядки, також якщо виводити в термінал символи "a" або "b", загорятиметься або гасне світлодіод, підключений до порту PB0 контролера. Будь-які символи, що виводяться в термінал, будуть також висвічуватися на LCD дисплеї. Для тестування в "залізі" мікроконтролер підключається до комп'ютера через мікросхему перетворювача рівнів MAX232, для обміну даними використовується стандартна програма Hyper Terminal від Microsoft.