[i] Схемотехника портов GPIO
GPIO (General Purpose Input/Output, вход/выход общего назначения) - тип выводов, которые не имеют конкретной фиксированной функции. Функция вывода GPIO может быть настроена и контролироваться программным обеспечением.
Содержание
1. Схемотехника портов МК К1901ВЦ1QI, К1986ВК214, К1986ВК234, МК семейств К1986ВЕ9x и К1986ВЕ1x
В общем виде схемотехника вывода порта GPIO данных микроконтроллеров представлена на рисунке 1.
Рисунок 1 - Порт ввода-вывода МК К1901ВЦ1QI, К1986ВК214, К1986ВК234, МК семейства К1986ВЕ9x и К1986ВЕ1xНа каждый порт (A, B, C, D и т.д.) выделен свой набор регистров. Биты в этих регистрах задают настройки для каждого вывода порта. Например, порты имеют по 16 выводов (пинов), и для включения выводов в цифровой режим используются 16 бит регистра ANALOG. Оставшиеся биты 32-битного регистра ANALOG не используются. В регистрах FUNC и PWR настройки для выводов задаются двумя битами, поэтому используются все 32 бита регистра.
Большинство регистров предназначены для настройки цифрового режима работы выводов. В аналоговом режиме поля этих регистров не имеют значения.
Если вывод используется какого-либо периферийным блоком (биты пина в регистре FUNC не равны 0), то направление работы вывода (вход или выход) настраивает сам периферийный блок (значение регистра OE при этом не меняется, и также не оказывает влияния). Он же выводит цифровые сигналы наружу или считывает внешние сигналы. Для ручного управления пином необходимо использовать режим PORT (биты пина в регистре FUNC равны 0). Тогда при записи в регистр RXTX данные будут выводиться наружу, а при чтении - считываться с пина.
1.1. Диодная защита
На внешнем выводе (I/O Pin) стоит защита от разряда статического электричества (ESD). При превышении напряжения на выводе откроется верхний диод и сбросит избыточное напряжение на линию питания. При возникновении на выводе отрицательного напряжения откроется нижний диод и погасит всплеск на землю. Данная защита рассчитана на незначительные скачки напряжения.
Диодная защита всегда активна и программно не настраивается.
В микроконтроллерах есть выводы, которые обозначены как "входы, толерантные к TTL-уровням". В спецификации указано, что на эти входы может подаваться внешнее напряжение до 5.25 В. Дело в том, что в схемотехнике данных выводов отсутствует верхний диод к питанию. Таким образом, при приложении внешнего напряжения, превышающего напряжение питания МК, ток через вывод не течет (верхнего диода нет), и вывод может работать только как вход. Часть Output Driver (см. рисунок 2) в данном случае должна быть отключена.
1.2. Аналоговый вход/выход
Выводы GPIO микросхем после сброса (по умолчанию) работают в аналоговом режиме. Аналоговый тракт всегда активен вне зависимости от настроек регистров, то есть сигналы с выводов подключены к соответствующим аналоговым блокам (АЦП, ЦАП и т.д.). Поэтому одновременная работа аналоговой функции и цифрового выхода может привести к выходу микросхемы из строя (например, формирование с помощью ЦАП на выходе 3.3 В при одновременной работе этого же вывода GPIO в цифровом режиме с выдачей 0 В приведет к короткому замыканию).
В аналоговом режиме работы биты RXTX (отражающие считанный с выводов логический уровень) всегда читается как "1".
1.3. Программируемые резисторы подтяжки
Во всех режимах работы доступна настройка внутренних программируемых (через регистр PULL) резисторов подтяжки: Pull Up (к питанию) и Pull Down (к нулю). Подтяжки включаются/выключаются индивидуально; по умолчанию оба резистора отключены от линии. Номинал резисторов составляет примерно 50 кОм. Если, например, вход находится в третьем состоянии (Hi-Z), включение подтяжки к питанию или нулю подавит наводки.
С целью снижения энергопотребления и повышения надежности рекомендуется для всех неиспользованных пинов включить в режим Pull Up. В таком случае их состояние не будет изменяться помехами, а в случае КЗ линия не перегорит.
1.4. Упрощенная схема цифрового ввода-вывода
В упрощенном варианте принцип работы портов в цифровых режимах записи и чтения удобно рассмотреть на схеме, приведенной на рисунке 2. Для включения цифрового тракта пина нужно установить цифровой режим работы в соответствующем бите регистра ANALOG. Аналоговый тракт при этом остается активен.
Рисунок 2 - Структурная схема порта ввода-вывода1.4.1. Цифровой выход
Настройка выходного тракта осуществляется включением ключа "Output Enable" (OE) на рисунке 2.
Как было описано ранее, периферийные блоки (при работе вывода в функции, отличной от функции PORT (2'b00)) настраивают направление работы цифрового вывода аппаратно. Например, контроллер I2C обеспечивает тип вывода "открытый сток" за счет управления "Output Enable".
При работе на выход возможна работа в одном из режимом, который настраивается в регистре PD:
- Режим драйвера (push-pull). Транзисторы, переключаясь попарно, передают "0" или "1" на выход.
- Режим открытого стока (open drain). Верхний транзистор отвязан от выходной линии и выход не может сформировать "1". Нижний транзистор работает как обычно и сбрасывает состояние выхода в "0" при открытии. Этот режим подходит для линий или шин, где есть внешняя подтяжка к линии питания. В таком случае после закрытия нижнего транзистора на линии установится "1" за счет этой общей подтяжки к питанию.
Также для работы выходного тракта нужно задать скорость нарастания фронта в регистре PWR. По умолчанию передатчик выключен.
Если требуется считать текущий уровень на выводе (регистр RXTX), собственный выходной тракт ("Output Enable") следует отключить.
Задание выходного уровня осуществляется записью требуемого значения в регистр RXTX. В микросхемах серии К1986ВЕ9x присутствует только регистр RXTX, особенностью которого является то, что запись в него задает состояние на выводе, а чтение возвращает текущее значение на выводе, которое зависит от внешних сигналов. В микросхемах К1901ВЦ1QI, К1986ВК214, К1986ВК234 и серии К1986ВЕ1x, помимо регистра RXTX, выходным значением можно управлять через регистры индивидуальной установки/сброса SETTX/CLRTX, а также считывать заданное (записанное) выходное значение из регистра RDTX/RD (см. рисунок 3 - названия регистров могут отличаться между микросхемами).
Рисунок 3 - Логика работы регистров RXTX, SETTX, CLRTX, RDTX при работе на выход1.4.2. Цифровой вход
При работе только в качестве цифрового входа, когда резисторы подтяжки Pull Up и Pull Down отключены, и отключен выходной тракт (Output Enabled), внешний вывод переходит в состояние высокого импеданса. Это состояние называется высокоомным, третьим или состоянием Hi-Z. Такой режим может применяться, например, для чтения сигнала на шине - поскольку сопротивление входа очень велико, его присутствие не влияет на работу шины. В тоже время, будучи не подключенным, такой вход подвержен всевозможные помехам и наводкам. Для борьбы с ними используются подтягивающие резисторы.
Во входном тракте может быть включен триггер Шмитта (настраивается в регистре PD). Этот триггер имеет гистерезис и при некотором отклонении напряжения dU от заданного логического уровня на входе сохраняет текущее логическое значение на своем выходе. Например, если пин настроен на вход и напряжение на нем равно напряжению питания, микроконтроллер трактует это как наличие логической "1" на входе. Если на линии появится помехаиз-за которой напряжение на входе просядет меньше, чем на dU, микроконтроллер по-прежнему будет трактовать это как логическую "1". С логическим нулем ситуация аналогичная. Гистерезис триггера Шмитта порядка 400 мВ, гистерезис входа без использования триггера Шмитта - порядка 200 мВ.
Помимо этого, для цифровых входов предусмотрена возможность включения фильтра сигнала в регистра GFEN, который фильтрует импульсы длительностью меньше примерно 10 нс.
2. Схемотехника портов МК К1986ВЕ8Т, К1986ВК01GI
Логика работы портов в микросхемах К1986ВЕ8Т, К1986ВК01GI аналогична портам микроконтроллеров К1901ВЦ1QI, К1986ВК214, К1986ВК234, МК семейства К1986ВЕ9x и К1986ВЕ1x, однако есть ряд существенных отличий:
- Регистры порта по умолчанию защищены от записи. Для разблокировки записи нужно записать ключевое значение в регистр KEY.
- Отсутствует программируемый фильтр помех и триггер Шмитта.
- Для регистров есть разделение на регистр установки (S) и регистр сброса (C) значения, что позволяет исключить использование операций чтения-модификации-записи.
- У каждого вывода может быть более 4 функций, связанных с периферийными блоками, поэтому существует несколько регистров FUNC для покрытия всех функций.
- Каждый вывод порта может служить источником прерываний по уровню от портов (в микросхемах К1901ВЦ1QI, К1986ВК214, К1986ВК234, МК семейства К1986ВЕ9x и К1986ВЕ1x это была отдельная функция вывода). При этом возможны программная установка и сброс уровня прерывания, а также выбор активного уровня для формирования прерывания (см. рисунок 4).
- Реализована защита от "перегрузки" выводов. Если вывод выдает логическую «1», но на линии уровень сигнала соответствует логическому "0", вырабатывается флаг защиты от перегрузки HCUR. При выдаче логического "0" механизм защиты аналогичен. При возникновении флага защиты может быть сгенерировано прерывание от порта.
- Из регистра RXTX всегда читаются текущие значения уровней на выводе, вне зависимости от режима работы (аналоговый или цифровой).
Рисунок 4 - Схема формирования запроса прерывания портов микросхем К1986ВЕ8Т, К1986ВК01GI
3. Схемотехника портов МК К1986ВК025, MDR1206(A)FI, MDR1215LGI
Логика работы портов аналогична портам микросхем МК К1901ВЦ1QI, К1986ВК214, К1986ВК234, МК семейства К1986ВЕ9x и К1986ВЕ1x. Отличия и особенности:
- Как и в микросхемах К1901ВЦ1QI, К1986ВК214, К1986ВК234 и серии К1986ВЕ1x, есть отдельные регистры для управления выходным значением порта.
- Отсутствует программируемый фильтр помех, триггер Шмитта, а также выбор режима открытого стока (доступен только режим Push-pull).
- Вместо скорости нарастания фронта настраивается мощность выходного драйвера.
- В микросхемах К1986ВК025 до ревизии 2 отсутствует программируемый резистор подтяжки к питанию (Pull Up).
- Из регистра RXTX в аналоговом режиме работы читаются не "1", а "0".
- Для работы вывода в аналоговой функции необходимо установить соответствующие поля регистров в значения: MODEx[1:0] = 00, ANALOG_EN[x] = 0, OE[x] = 0. Для работы вывода в цифровой функции порта IO необходимо задать режим работы приемника в регистре PORT_ANALOG, режим работы передатчика – в регистре PORT_OE. Для работы вывода в цифровой функции, кроме порта IO, необходимо задать режим работы приемника в регистре PORT_ANALOG, режим работы передатчика задается автоматически в соответствии с заданной функцией.
Сохранить статью в PDF