Всем привет!) Продолжаем изучать армы от атмел и сегодня поговорим про uart. UART (Universal Asynchronous Receiver-Transmitter — Универсальный асинхронный приёмопередатчик) работает аналогично RS-232, только на TTL уровне.

Как организовать работа с этим интерфейсом на sam3n4c, для начала необходимо:
1. Разрешить PMC для clock pmc_enable_periph_clk(ID_UART0) или PMC->PMC_PCER0 = 1 << ID_UART0, UART0 имеет следующий адрес (0x400E0600U), информацию по регистрам uart-а можно найти в заголовочном файле сomponet_uart.h
2. Настроим PIO регистры (пины соответствия GPIO — UART0) PIO_IDR, PIO_PUDR, PIO_PDR, PIO_ABCDSR.
3. Необходимо проинициализировать UART0 115200 8n1.

После того как сформирована инициализация UART, можно приступать к работе и к выводу сообщения.


Карта регистров в Atmel Studio 6


Наш UART на product mapping-е


В таблице приведены пины микроконтроллера необходимые для организации канала передачи данных


Блок схема функционирования работы UART


Расчет скорости передачи данных ведется относительно MCK, берётся системная частота APB, она рассчитывается относительно ФАПЧ умноженный на частоту кварца.


Карта регистров UART

US_CR — регистр команд UART,
US_MR — регистр режима UART,
US_IER — регистр разрешения прерываний UART,
US_IER — регистр запрещения прерываний UART,
US_IMR — регистр маски прерываний UART,
US_SR — регистр состояния канала UART,
US_RHR — регистр временного хранения информации приема UART,
US_THR — регистр временного хранения информации передачи UART,
US_ВRGR — регистр генератор скорости обмена через UART.

и в главной функции добавляем следующие строки


Hello world! в стиле mcu.by, относительно низкого уровня работы с UART-ом пока хватит. Сейчас перейдем к высоко уровневым функция работы с UART-ом, для этого необходимо создать ASF проект. В ASF проекте выбрать wizard и подключить ниже следующие библиотеки.


Настраиваем UART с использованием ASF

Вот небольшой пример с иполизованием UART0:

Думаю, на сегодня все, всем пока!)