Блок ввода/вывода цифровой информации GPIO (general-purpose input/output)

Каждый вывод процессора общего назначения (general-purpose) может быть сконфигурирован как вход, так и выход. Когда вывод сконфигурирован как выход, в него можно записывать логические “0” или “1”. Когда вывод сконфигурирован как вход, то процессор может определить какой уровень присутствует на нем. Конфигурирование GPIO производится в регистрах IODIR1 и IODIR2 (GPIO direction registers).Кроме этого GPIO может быть источником прерывания по перепаду уровней для процессора. Всего в процессоре 26 выводов могут выполнять функции GPIO (GPIO[31:27], GPIO[20:0]). Эти выводы мультиплексируются с другими функциями. Т.е. один вывод может быть отнесён к интерфейсу I2S, SPI, UART, GPIO и т.д. Конфигурирование функционала выводов определяет регистр EBSR (External Bus Selection Register по адресу 0x1C00h). Этот регистр может быть сконфигурирован только после перезагрузки процессора и не может быть изменён в процессе работы.

Все выводы GPIO могут быть “подтянуты” через резистор (pull-down) к нулевому проводу в регистре Pull-down Inhibit Register.

После общего сброса процессора по умолчанию GPIO выводы конфигурируются как входы.

Прерывания от GPIO могут происходить по спадающему или по нарастающему фронту сигнала на выводе. Разрешение прерывания устанавливается в регистрах IOINTEN1, IOINTEN2 (GPIO interrupt enable registers), а фронт срабатывания в регистрах IOINTEDG1, IOINTEDG2 (interrupt edge trigger enable registers). Флаги прерываний фиксируются в регистрах IOINTFLG1, IOINTFLG2.

Блок последовательного интерфейса UART

UART (universal asynchronous receiver and transmitter) это асинхронный последовательный интерфейс для приёма и передачи данных. Асинхронность означает отсутствие синхронизирующих импульсов при обмене данными. Совместимость приёмника и передатчика достигается тем, что они работают на одних частотах (эти частоты фиксированы и стандартизированы), измеряемых количеством битов передаваемых за секунду.

При приёме данных происходит преобразование из последовательной формы в параллельную, а при передаче преобразование параллельной формы в последовательную. Можно выделить следующие особенности UART:

-возможность программирования частоты приёма и передачи

-длина одной посылки 5,6,7 или 8 бит

-генерация и определение бита чётности

-наличие 16-ти байтного буфера FIFO (First In, First Out -«первым пришёл - первым ушёл»)

-поддержка контроллера DMA при приёме и передаче

-выделенный вектор прерывания на приём и передачу

-возможность работы через прерывания и через опрос битов регистров

-возможность диагностики за счёт создания внутренней обратной цепи и т.д.

Для асинхронных интерфейсов очень важна точность установки частоты обмена. На блок UART подаётся частота внутреннего тактового генератора процессора и для получения необходимой частоты используется два 8-ми битных регистра делителя (DLH и DLL). Диапазон деления частоты: от 1 до (216-1). Кроме этого при вычислении коэффициента деления необходимо учитывать, что на каждый передаваемый и принимаемый бит, вырабатывается 16 BCLK сигналов. Итоговая формула для вычисления значения, записываемого в делитель:

Divisor = (UART input clock frequency)/(Desired baud rate)/16

Как правило, полученная частота обмена данными точно не совпадает с частотой из набора разрешённых частот, но к этому надо стремиться.

Передающая секция UART содержит регистр передаваемых данных (THR), которые получены с шины данных процессора, и сдвиговый регистр (TSR). Когда UART работает в режиме FIFO, то в качестве THR выступает 16-ти байтное FIFO. Данные передаются через вывод процессора TX.

Принимающая секция содержит приёмный сдвиговый регистр (RSR) и приёмный буферный регистр (RBR). В RSR данные поступают с RX вывода процессора. При работе с FIFO в качестве RBR выступает 16-ти байтное FIFO.

Последовательность сигналов при приёме и передаче:1)Start бит, 2)5,6,7, или 8 бит данных, 3)бит паритета (PARITY) 4)Stop биты.

Блоки FIFO выделены отдельно для приёма и передачи. Механизм FIFO упрощает программирование UART, т.к. отпадает необходимость следить за приёмом и передачей каждого байта. Прерывание по FIFO при передаче происходит только при опустошении буфера, а при приёме при его заполнении.

Блок RTC (Real Time Clock)

Это так называемый блок реального времени, который может применяться как часы. Как уже отмечалось в пункте 2.3. к процессору подключается кварцевый резонатор с частотой 32768Гц. Это так называемый “часовой” кварц, т.к. после деления этой частоты на величину 215 получаются стабильные импульсы частотой 1Гц т.е. 1-н импульс в секунду. Подсчёт этих импульсов и определяет реальное время.

Большим преимуществом такой конструкции является то, что RTC может работать вне зависимости от процессора. Т.е. процессор может быть остановлен.

Основные особенности блока RTC:

-календарь на 100 лет (позволяет объём регистров)

-наличие отдельных счётчиков миллисекунд, секунд, минут, часов (в формате 24 часа) и даты (с отдельным отображением даты, месяца, года с учётом високосных)

-данные представляются в т.н. двоично-десятичном формате (BCD binary-coded-decimal)

-встроенный будильник (учитывающий год, месяц, день, час, минуту секунду и миллисекунду), имеющий прерывание

-возможность периодических прерываний каждую миллисекунду, секунду, минуту, час или день

Представление данных в двоично-десятичном формате заключается в том, что в 4-х битах помещаются числа от 0 до 9. Если бы в этих битах помещались числа от 0 до 15, то необходим бы был дополнительный пересчёт в десятичное число для отображения времени на индикаторах.

В таблице векторов прерывания выделен только один 18-й вектор. Поэтому причину, по которой произошло прерывание в RTC можно определить в регистре Interrupt Flag Register (RTCINTFL).

Наши рекомендации