Avr для початківців

UART мікроконтролерів AVR.

Одним з найбільш поширених протоколів взаємодії мікроконтролера із зовнішніми пристроями є UART (Universal Asynchronous Receiver-Transmitte r) - Універсальний асинхронний приймач. Даний протокол апаратно реалізований в більшості мікроконтролерів AVR. що дозволяє розробнику не вдаватися в особливості реалізації даного інтерфейсу. Для його використання досить налаштувати всього декілька регістрів!

Avr для початківців

Розглянемо коротко принцип роботи UART.

Даний протокол є послідовним, тобто дані йдуть строго один за одним, що в деякій мірі обмежує швидкість роботи. Так як протокол є асинхронним, приймач і передавач повинні працювати строго на одній частоті, яку необхідно налаштувати ще до початку роботи.

При передачі байта передавач спочатку виставляє логічний 0 на виведення TX (Transmitter). Це так званий старт-біт, що означає початок передачі. Після цього передавач виставляє біти переданого байта через певні проміжки часу, задані частотою. Далі може бути переданий біт парності, який служить для перевірки якості передачі. Коли передані всі біти, виставляється стоп-біт, тобто логічна 1 на лінії передачі. Число стоп-бітів може бути різним: 1; 1. 5; 2.

Avr для початківців

Величезним плюсом даного інтерфейсу є можливість його використання для настройки зв'язку з ПК. Для цього необхідно виготовити UART - RS 232 або UART - USB перехідники, засновані на мікросхемах MAX 232 і FT 232 RL відповідно.

За роботу з UART (насправді USART. Про днако, для нас це зараз не важливо) відповідають такі регістри:

UDR- Регістр даннихUART. При передачі в нього записуються дані, які необхідно відправити, а при читанні - прийняті дані. Все просто.

UCSRA- Регістр контролю і статусаUART. Розглянемо біти даного регістра докладніше:

  • RXC (ReceiveComplete) - прапор закінчення прийому даних. Встановлюється в 1 при наявності нелічених даних і скидається в 0 після закінчення прийому даних.
  • TXC (TransmitComplete) - прапор закінчення передачі даних. Скидається в 0 після закінчення передачі даних і встановлюється в 1 при наявності ненадісланих даних.
  • UDRE (DataRegisterEmpty) - прапор, що означає готовність регістра UDR отримувати нові дані. Коли UDRE дорівнює 1, регістр UDR порожній і готовий до прийому нових даних.
  • FE (Frame Error) - прапор помилки фрейма.
  • DOR (DataOverRun) - прапор переповнення регістра даних.
  • PE (Parity Error) - прапор помилки парності
  • U2X - біт, що дозволяє збільшити швидкість передачі вдвічі. При записи 1 в даний біт переддільник тактової частоти модуля UART зменшується вдвічі, що дозволяє вдвічі збільшити швидкість передачі даних.
  • MPCM - мультипроцесорний режим комунікації.
  • RXCIE (RXCompleteInterruptEnable) - Біт, що дозволяє або забороняє генерацію переривання після закінчення прийому. При записи 1 в даний біт переривання після закінчення прийому дозволено, при записі 0 - заборонено.
  • TXCIE (TXCompleteInterruptEnable) - При записи 1 в даний біт переривання після закінчення передачі даних дозволено, при записі 0 - заборонено.
  • UDRIE (DataregisteremptyInterruptEnable) - Біт, що дозволяє або забороняє виникнення переривання по прапору UDRE.
  • RXEN (RecieverEnable) - Запис 1 в даний біт включає приймач UART модуля, запис 0 - вимикає.
  • TXEN (TransmitterEnable) - Запис 1 в даний біт включає передавач UART модуля, запис 0 - вимикає.
  • UCSZ2 (CharacterSize) - У парі з битами UCSZ 1 і UCSZ 0 задає число переданих біт.То Тобто ми можемо передавати не тільки побайтно, а й по 5,6,7,8,9 біт.
  • RXB8 (ReceiveDataBit8) - 9 біт даних, що приймаються при передачі по 9 біт. Повинен бути лічений перед операціями з регістром UDR.
  • TXB8 (TransmitDataBit8) - 9 біт відсилаються даних при передачі по 9 біт. Повинен бути записаний перед записом інших біт в UDR.
  • URSEL (RegisterSelect) - біт вибору між регістрами UCSRC і UBRRH. Злегка дивний біт, проте, досить запам'ятати, що під час запису в нього 1, робота відбувається з регістром UCSRC. а при записі 0 - з регістром UBRRH. Тобто наступні біти будуть записані до відповідного регістру.
  • UMSEL (ModeSelect) - при записі 1 в даний біт відбувається синхронна передача даних, а при записі 0 - асинхронна.
  • UPM0, UPM1 (ParityMode) - Дані біти дозволяють налаштувати контроль парності переданих даних.
  • USBS (StopBitSelect) - Даний біт дозволяє вибрати число стоп-бітів. При записи 1 в даний біт число стоп-бітів стане одно 2, а при записі 0 - 1.
  • UCSZ1, UCSZ0 (CharacterSize) - У сукупності з бітом UCSZ2 регістра UCSRB дані біти дозволяють вибрати число переданих біт.

Читайте також COM порт Windows. SerialPort. C # .Продолженіе.

Avr для початківців

  • UCPOL- Даний біт дозволяє налаштувати, з якого фронту буде відбуватися обмін даними при синхронному режимі передачі. При роботі в асинхронному режимі передачі необхідно встановити даний біт в 0.

Регістри UBRRL і UBRRH відповідають за налаштування швидкості роботи приймача. Слід пам'ятати, що при роботі з регістром UBRRH біт URSEL має дорівнювати 0.

Для отримання необхідної швидкості роботи UART значення UBRR (Пари регістрів UBRRH і UBRRL) розраховується за такою формулою:

F osc - частота роботи мікроконтролера (Гц).

B - необхідна швидкість роботи UART (Біт / сек).

Наприклад, необхідно налаштувати швидкість передачі 9600 біт / сек при роботі мікроконтролера на частоті 8 МГц (8000000 Гц).

UBRR = (8000000 / (9600 * 16)) - 1 = 51.083333

Округляем до цілого числа, тобто до 51.І уже дане число записуємо в регістри UBRRL: UBRRH.

Урок вийшов досить об'ємним, тому практичну реалізацію протоколу UART на мікроконтролерах AVR розглянемо в наступному уроці.

Дякую за увагу!

Навігація по публікаціям

Схожі статті