Контроллер параллельного ввода/вывода (Parallel Input/Output Controller, сокращенно PIO) микроконтроллера AT91SAM7 (ARM7 компании Atmel) управляет до 32 полностью программируемых портов ввода/вывода. Каждая такая программируемая ножка микроконтроллера может быть выделена как простой программируемый цифровой порт, работающий на вход или выход (GPIO), или назначена для выполнения функции встроенного в кристалл микроконтроллера периферийного устройства (SPI, CAN, UART и т. д.). Это гарантирует эффективную оптимизацию использования выводов кристалла микроконтроллера.
Каждая ножка ввода/вывода связана с номером бита во всех 32-битных регистрах, используемых в интерфейсе программирования (см. ниже раздел "Интерфейс программирования PIO").
Каждая ножка ввода/вывода (I/O) контроллера PIO предоставляет следующие функции:
• Детектирование изменения входного логического сигнала с возможностью генерации прерывания по этому событию. • Фильтр входных помех/иголок (glitch filter), вырезающий входные импульсы, которые по длительности меньше половины периода тактового сигнала микроконтроллера. • Мощная поддержка управления выходным сигналом порта, позволяющая предоставить двухтактный выходной буфер или буфер с открытым стоком. • Управление встроенным верхним нагрузочным резистором (pull-up) на каждой ножке I/O. • Информация о состоянии входов и управление выходами.
Контроллер PIO также предоставляет функцию синхронного вывода до 32 бит данных за одну операцию записи.
Рис. 27-1. Блок-диаграмма PIO.
Рис. 27-2. Принцип использования PIO в firmware микроконтроллера.
[Зависимости PIO от ресурсов микроконтроллера]
Мультиплексирование выводов. Каждый вывод микроконтроллера можно программно конфигурировать либо только для использования обычного сигнала ввода/вывода общего назначения (general-purpose I/O, GPIO) line only, или как линия сигнала, мультиплексируемая на одно или два устройства периферийного ввода/вывода (SPI, CAN, UART и т. д.). Поскольку мультиплексирование определено аппаратно, и следовательно зависит от модели микроконтроллера, то разработчик системы должен тщательно определить конфигурацию контроллеров PIO, которая может потребоваться для приложения firmware. Когда ножка порта используется только как вывод GPIO, например она не мультиплексируется с каким-либо встроенным в кристалл микроконтроллера периферийным устройством, программирование контроллера PIO в контексте назначения для периферийного устройства не дает никакого эффекта, и контроллер PIO может только управлять состоянием вывода (например, какой нужно выдавать лог. уровень на выходе) и его конфигурацией (например, подключен ли на нем pull-up резистор, и как настроен вывод - на вход или выход).
Внешние сигналы прерывания (External Interrupt Lines). Сигналы прерываний FIQ (быстрое прерывание) и IRQ0 .. IRQn обычно мультиплексируются с помощью контроллеров PIO. Однако нет необходимости назначать ножку I/O на функцию прерывания, поскольку контроллер PIO не оказывает влияния на входы и сигналы прерывания (FIQ или IRQ), которые используются как входы.
Управление питанием. Контроллер управления питанием (Power Management Controller, PMC [2]) управляет поступлением тактовых сигналов на контроллер PIO, чтобы можно было управлять энергопотреблением (когда тактовый сигнал отключен, то ток потребления микроконтроллера уменьшается). Запись в любой регистр интерфейса программирования PIO не требует разрешения тактовой частоты для PIO. Это означает, что конфигурировать сигналы I/O микроконтроллера не требует разрешения тактирования контроллера PIO.
Однако, когда такты отключены, доступны не все функциональные возможности PIO. Обратите внимание, что прерывание по изменению логического уровня входного сигнала (Input Change Interrupt) и чтение уровня сигнала на входе требуют разрешения подачи тактовой частоты.
После аппаратного сброса тактирование PIO по умолчанию запрещено.
Пользователь должен сконфигурировать PIO перед тем, как осуществлять доступ к информации любого входного сигнала.
Генерация прерываний. В контексте обработки прерывания контроллеры PIO считаются периферийными устройствами. Это означает, что сигналы прерывания контроллера PIO подключены среди источников прерывания 2 .. 31. Обратитесь к значению идентификатора периферии контроллера PIO в даташите на используемый микроконтроллер, чтобы определить источники прерывания, выделенные для контроллеров PIO.
Контроллер PIO может генерировать прерывание только в том случае, если для контроллера PIO разрешено тактирование (это осуществляется программированием PMC [2]).
[Функциональное описание PIO]
Один контроллер PIO (в микроконтроллере AT91SAM7 их несколько, PIOA, PIOB и т. д.) предоставляет до 32 полностью программируемых линии ввода/вывода. Основная логика управления показана на рис. 27-3. В этом описании отображен один такой сигнал, но всего их 32, каждый из которых соответствует возможному индексу 0..31.
Рис. 27-3. I/O Line Control Logic.
Управление верхним нагрузочным резистором (pull-up). Каждый сигнал I/O разработан со встроенным pull-up резистором. Этот резистор можно разрешить (подключить) или запретить (отключить) путем записи в разряды соответствующих регистров PIO_PUER (Pull-up Enable Register) и PIO_PUDR (Pull-up Disable Resistor). Запись в эти регистры отражается установкой или очисткой соответствующих бит в регистре PIO_PUSR (Pull-up Status Register). Прочитанная лог. 1 в разряде регистра PIO_PUSR означает, что pull-up на этой ножке запрещен, и прочитанный лог. 0 означает, что pull-up разрешен.
Управление pull-up резистором возможно в любом случае, независимо от конфигурации сигнала ввода вывода (т. е. независимо от того, как она настроена - или как вывод периферийного устройства, или как порт GPIO).
После сброса все резисторы pull-up по умолчанию разрешены, т. е. в регистр PIO_PUSR сбрасывается в значение 0x0.
Ножка GPIO или ножка для периферийного устройства. Когда вывод мультиплексирован с одним или двумя функциями встроенных в кристалл периферийных устройств, выбор управляется регистрами PIO_PER (PIO Enable Register) и PIO_PDR (PIO Disable Register). Регистр PIO_PSR (PIO Status Register) показывает результат записи в эти регистры, и показывают, управляется ли вывод соответствующим периферийным устройством или контроллером PIO. Значение 0 показывает, что вывод управляется соответствующим встроенным в кристалл периферийным устройством, выбранным регистром PIO_ABSR (AB Select Status Register). Значение 1 показывает, что вывод управляется контроллером PIO.
Если ножка используется как порт GPIO (т. е. она не мультиплексирована со встроенным в кристалл микроконтроллера периферийным устройством), регистры PIO_PER и PIO_PDR не оказывают никакого эффекта, и чтение PIO_PSR возвратит 1 для соответствующего бита.
После сброса обычно сигналы I/O по умолчанию управляются контроллером PIO, например PIO_PSR сбрасывается в 1. Однако для некоторых случаев важно управлять сигналами PIO со стороны периферийного устройства (как это необходимо для сигналов выборки микросхем памяти, которые должны быть неактивны после сброса или сигналов адреса, которые должны быть переведены в 0 для загрузки из внешней памяти). Таким образом, значение сброса для регистра PIO_PSR определяется маркой микроконтроллера, в зависимости от мультиплексирования функциональных возможностей выводов.
Выбор Peripheral A или B. Контроллер PIO предоставляет мультиплексирование до 2 периферийных функций на одном выводе порта. Выбор выполняется записью в регистр PIO_ASR (A Select Register) и PIO_BSR (Select B Register). PIO_ABSR (AB Select Status Register) показывает, какой сигнал периферийного устройства в настоящий момент выбран. Для каждого вывода соответствующий бит в состоянии лог. 0 показывает, что выбрана функция peripheral A, в то время как соответствующий бит в состоянии лог. 1 показывает, что выбрана функция peripheral B.
Обратите внимание, что мультиплексирование сигналов peripheral A и B влияет только на выходные сигналы. Периферийные входные сигналы всегда подключены к выводу входа.
После сброса PIO_ABSR находится в состоянии лог. 0, и это показывает, что все сигналы PIO сконфигурированы для функций peripheral A. Однако peripheral A обычно не управляют выводом, поскольку контроллер PIO сбрасывается в режим сигнала ввода/вывода (GPIO).
Запись в PIO_ASR и PIO_BSR управляет состоянием PIO_ABSR независимо от конфигурации вывода. Однако назначение для вывода функции периферийного устройства требует записи в соответствующий регистр выбора периферийного устройства (PIO_ASR или PIO_BSR) в дополнение к записи в PIO_PDR.
Управление выходом. Когда сигнал I/0 назначен под функцию периферийного устройства, например когда соответствующий бит в регистре PIO_PSR находится в состоянии лог. 0, управление сигналом I/O осуществляется встроенным периферийным устройством микроконтроллера. Peripheral A или B, в зависимости от значения в регистре PIO_ABSR, определяет, работает ли вывод как выход, или нет.
Когда сигнал I/O управляется контроллером PIO, вывод может быть сконфигурирован как выход. Это осуществляется записью в регистры PIO_OER (Output Enable Register) и PIO_ODR (Output Disable Register). Результат этих операций записи отображается в регистре PIO_OSR (Output Status Register). Когда бит в этом регистре читается как 0, то соответствующий сигнал I/O используется только как вход. Когда бит читается как 1, то соответствующий сигнал I/O работает как выход и управляется программированием контроллера PIO.
Уровень, который выставлен на выходе, определяется записью в регистры PIO_SODR (Set Output Data Register) и PIO_CODR (Clear Output Data Register). Результат этих операций записи отображается в регистре PIO_ODSR (Output Data Status Register), который показывает логические уровни на выходных линиях I/O. Запись в PIO_OER и PIO_ODR управляет состоянием PIO_OSR независимо от того, как управляется вывод - или от контроллера PIO, или от периферийного устройства. Эта позволяет конфигурировать сигнал I/O перед установкой его под управление контроллера PIO.
Подобным образом запись в регистры PIO_SODR и PIO_CODR влияет на содержимое регистра PIO_ODSR. Это важно, поскольку определяет первый уровень, который выдается на выходной сигнал I/O.
Синхронный вывод данных. Управление параллельными шинами с использованием нескольких контроллеров PIO требует двух последовательных операций записи в регистры PIO_SODR и PIO_CODR соответствующих контроллеров PIO. Это может привести к нежелательным переходным значениям на параллельной шине. Контроллер PIO предоставляет прямое управление выходами PIO за один доступ на запись в регистр PIO_ODSR (Output Data Status Register). Будут записаны только биты, демаскированные регистром PIO_OWSR (Output Write Status Register). Биты маски в регистре PIO_OWSR устанавливаются записью в регистр PIO_OWER (Output Write Enable Register), и очищаются записью в регистр PIO_OWDR (Output Write Disable Register).
После сброса синхронный вывод данных для всех сигналов I/O запрещен, поскольку состояние по умолчанию регистра PIO_OWSR сбрасывается в значение 0x0.
Совмещенное управление выходом (открытый сток). Каждая ножка I/O может быть запрограммирована независимо от других для работы как выход с открытым стоком (Open Drain), это так называемая функция совмещенного управления выходом (Multi Drive). Эта функция позволяет параллельно соединить друг с другом несколько выходов I/O, которые могут переводиться в состояние лог. 0 каждым из подключенных на этот сигнал устройств (так называемая монтажная функция ИЛИ-НЕ). Обычно для такого функционала требуется подключение внешнего верхнего нагрузочного резистора pull-up (или подключения внутреннего резистора pull-up) это обычно требуется для гарантии формирования на полученном сигнале уровня лог. 1.
Эта функция Multi Drive управляется регистрами PIO_MDER (Multi-driver Enable Register) и PIO_MDDR (Multi-driver Disable Register). Multi Drive может быть выбрано независимо от того, управляется ли сигнал I/O контроллером PIO, либо функцией периферийного устройства. Регистр PIO_MDSR (Multi-driver Status Register) показывает, как сконфигурирован вывод для поддержки внешних драйверов.
После сброса функция Multi Drive для всех выводов запрещена, т. е. PIO_MDSR сбрасывается в значение 0x0.
Параметры времени для изменения состояния выхода. На рис. 27-4 показано, как выходы управляются записью либо в регистр PIO_SODR, либо в регистр PIO_CODR, либо прямой записью в регистр PIO_ODSR. Этот последний случай разрешен только тогда, когда установлен соответствующий бит в регистре PIO_OWSR. Рис. 27-4 также показывает, когда доступна обратная связь в регистре PIO_PDSR.
Рис. 27-4. Диаграммы времени управления выходом.
Входы. Логический уровень на каждом из сигналов I/O может быть прочитан через регистр PIO_PDSR (Pin Data Status Register). Этот регистр показывает уровень на ножке I/O независимо от её конфигурации, т. е. независимо от того, работает ли ножка уникально как вход, либо управляется контроллером PIO, либо управляется встроенным периферийным устройством микроконтроллера.
Чтение уровней I/O требует наличия разрешенного тактирования контроллера PIO, иначе чтения PIO_PDSR будет возвращать уровни на сигналах I/O в тот момент времени, когда такты PIO были запрещены.
Фильтрация иголок на входе (Input Glitch Filtering). На каждом выводе порта I/O присутствует фильтр помех по входу, программируемый независимо от других выводов портов I/O, это так называемый glitch filter. Когда этот фильтр разрешен, импульсные выбросы на входе с длительностью меньше чем 1/2 периода главной тактовой частоты (Master Clock, MCK) будут автоматически отбрасываться, и не будут проходить в аппаратуру микроконтроллера, в то время импульсы с длительностью 1 такт MCK или более длинные будут восприняты. Импульсы с длительностями между 1/2 периода MCK и 1 периодом MCK могут случайным образом восприняты или нет, в зависимости от того, в какой момент времени эти импульсы появились. Таким образом, чтобы импульс был гарантированно воспринят, его длительность должна превышать 1 такт MCK, в то время как для гарантированной фильтрации входных помех требуется, чтобы их длительность была не больше 1/2 такта MCK. Этот фильтр, если он разрешен, вносит дополнительную задержку входного сигнала на 1 такт MCK, если изменение сигнала на входе произошло перед фронтом нарастания. Однако эта задержка не наблюдается, если изменение сигнала на входе произошло перед спадом уровня на входе. Это показано на рис. 27-5.
Рис. 27-5. Интервалы времени работы фильтра входных помех.
Фильтры помех управляются настройкой регистров PIO_IFER (Input Filter Enable Register), PIO_IFDR (Input Filter Disable Register), и состояние активности фильтра можно отследить в регистре PIO_IFSR (Input Filter Status Register). Запись в PIO_IFER и PIO_IFDR соответственно устанавливает и очищает биты в регистре PIO_IFSR. Состояние регистра PIO_IFSR определяет, разрешен или запрещен входной фильтр на каждом разряде порта I/O.
Когда фильтр помех разрешен, это не влияет на поведение входов периферийных устройств. Фильтр влияет только на значения, которые читаются в регистре PIO_PDSR, и также фильтр влияет на детектирование прерывания по изменению уровня входного сигнала. Фильтры помех требуют, чтобы было разрешено тактирование контроллера PIO.
Прерывание по изменению уровня на входе (Input Change Interrupt). Контроллер PIO может быть запрограммирован для генерации прерывания, когда обнаружено изменение входа сигнала I/O. Прерывание Input Change управляется записью в регистр PIO_IER (Interrupt Enable Register) и PIO_IDR (Interrupt Disable Register), которые соответственно разрешают и запрещают прерывание по изменению входа, что отражается в установке и очистке бит регистра PIO_IMR (Interrupt Mask Register). Детектирование изменения сигнала на входе возможно только путем сравнения двух следующих друг за другом по времени выборок входного уровня на входе, при этом должно быть разрешено тактирование контроллера PIO. Прерывание Input Change доступно независимо от конфигурации порта ввода вывода, т. е. он может быть сконфигурирован только как вход, управляться контроллером PIO как выход или назначен на управление функцией периферийного устройства микроконтроллера.
Когда было детектировано изменение уровня на ножке порта I/O, будет установлен соответствующий бит в регистре PIO_ISR (Interrupt Status Register). Если установлен соответствующий бит регистра PIO_IMR, то будет выставлено прерывание контроллера PIO. Сигналы прерывания от 32 каналов суммируются функцией ИЛИ друг с другом для генерации одного сигнала прерывания для контроллера прерываний AIC (Advanced Interrupt Controller).
Когда программа читает PIO_ISR, все прерывания автоматически очищаются. Это означает, что все ожидающие прерывания, которые обозначены состоянием регистра PIO_ISR, должны быть обработаны после единственной операции чтения регистра PIO_ISR.
Рис. 27-6. Интервалы времени прерывания по изменению входа (Input Change Interrupt).
[Пример программирования I/O]
Пример программирования, показанный в таблице 27-1, используется для определения следующей конфигурации:
• 4-разрядный выходной порт для сигналов I/O с номерами бит 0 .. 3 (это должно быть сконфигурировано одной операцией записи), с открытым стоком, с разрешенным внутренним pull-up резистором. • 4 выходных сигнала на портах с номерами разрядов 4 .. 7 (например, для управления светодиодами), которые можно переключать как в лог. 1, так и в лог. 0, использование внутреннего pull-up резистора отключено. • 4 входных сигнала на разрядах 8 .. 11 (чтобы можно было, к примеру, читать состояние кнопок), с разрешенными внутренними pull-up резисторами, включенными фильтрами помех и разрешенными прерываниями по изменению уровня на входе. • 4 входных сигнала с номерами разрядов 12 .. 15, чтобы с помощью опроса читать состояние внешнего устройства (т. е. прерывание по изменению уровне не используется), без использования подключения внутреннего pull-up резистора и без фильтра помех. • Сигналы I/O с номерами разрядов 16 .. 19, которым назначены функции peripheral A, с включенными pull-up резисторами. • Сигналы I/O с номерами разрядов 20 .. 23, которым назначены функции peripheral B, с выключенными pull-up резисторами. • Сигналы I/O с номерами разрядов 24 .. 27, которым назначены функции peripheral A, с включенным прерыванием по изменению входного сигнала (Input Change Interrupt) и включенными pull-up резисторами.
Таблица 27-1. Пример программирования ножек микроконтроллера.
__inlinevoidAT91F_PIO_CfgOutput(
AT91PS_PIO pPio, // указатель на контроллер PIOunsignedint pioEnable) // OR-маска вывода, который должен быть разрешен
{
pPio->PIO_PER = pioEnable; // переключение вывода в режим GPIO
pPio->PIO_OER = pioEnable; // конфигурирование порта как выхода
}
// Разрешение тактирования PIOB:
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_PIOB );
// Конфигурация вывода порта для светодиода в режиме выхода:
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, LED_PIN);
// Вывод лог. 0:
LED0();
// Вывод лог. 1:
LED0();
// Переключение в противоположное состояние:
LEDCHANGE();
Каждая ножка I/O управляется контроллером PIO Controller связанным с ней битом в каждом из регистров интерфейса программирования контроллера PIO. Каждый регистр размером в 32 бита. Если параллельный сигнал I/O не определен, то запись в соответствующий бит не даст никакого эффекта. Неопределенные биты будут прочитаны как 0. Если сигнал I/O не мультиплексируется с каким-либо периферийным устройством, то эта линия I/O управляется контроллером PIO, и бит в в регистре PIO_PSR систематически будет читаться как лог. 1.
В микроконтроллере ARM7 обычно имеется несколько контроллеров PIO, каждый из которых отвечает за определенную группу из 32 выводов, выведенных из корпуса микроконтроллера. Количество контроллеров PIO зависит от марки микроконтроллера, обратитесь за информацией к даташиту. Таблица 27-2 в первом столбце показывает смещения от начального базового адреса, который назначен контроллеру PIO (адрес указан в даташите на микроконтроллер). Например, у микроконтроллеров AT91SAM7X128, AT91SAM7X256, AT91SAM7X512 имеется 2 контроллера PIO: PIOA (базовый адрес 0xFFFFF400) и PIOB (базовый адрес 0xFFFFF600).
Таблица 27-2. Регистры PIO.
Смещение
Регистр
Имя
Доступ
Сброс
0x0000
PIO Enable Register (регистр разрешения)
PIO_PER
W
-
0x0004
PIO Disable Register (регистр запрещения)
PIO_PDR
W
-
0x0008
PIO Status Register (регистр состояния)
PIO_PSR
R
(1)
0x000C
Зарезервировано
-
-
-
0x0010
Output Enable Register (регистр разрешения выхода)
Interrupt Status Register(4) (регистр состояния прерываний)
PIO_ISR
R
0x00000000
0x0050
Multi-driver Enable Register (регистр разрешения выходов с открытым стоком)
PIO_MDER
W
-
0x0054
Multi-driver Disable Register (регистр запрещения выходов с открытым стоком)
PIO_MDDR
W
-
0x0058
Multi-driver Status Register (регистр состояния выходов с открытым стоком)
PIO_MDSR
R
0x00000000
0x005C
Зарезервировано
-
-
-
0x0060
Pull-up Disable Register (регистр запрещения внутренних верхних подтягивающих резисторов)
PIO_PUDR
W
-
0x0064
Pull-up Enable Register (регистр разрешения внутренних верхних подтягивающих резисторов)
PIO_PUER
W
-
0x0068
Pad Pull-up Status Register (регистр состояния внутренних верхних подтягивающих резисторов)
PIO_PUSR
R
0x00000000
0x006C
Зарезервировано
-
-
-
0x0070
Peripheral A Select Register(5) (регистр выбора периферийных устройств группы A)
PIO_ASR
W
-
0x0074
Peripheral B Select Register(5) (регистр выбора периферийных устройств группы B)
PIO_BSR
W
-
0x0078
AB Status Register(5) (регистр состояния выбора периферии группы A или B)
PIO_ABSR
R
0x00000000
0x007C...0x009C
Зарезервировано
-
-
-
0x00A0
Output Write Enable (регистр разрешения синхронной установки выходов)
PIO_OWER
W
-
0x00A4
Output Write Disable (регистр запрета синхронной установки выходов)
PIO_OWDR
W
-
0x00A8
Output Write Status Register (регистр состояния синхронной установки выходов)
PIO_OWSR
R
0x00000000
0x00AC
Зарезервировано
-
-
-
Примечания:
(1). Значение при сбросе PIO_PSR зависит от марки микроконтроллера. (2). PIO_ODSR работает только на запись (R) или на чтение-запись (R/W) в зависимости от настроек в регистре PIO_OWSR. (3). Значение при сбросе в регистре PIO_PDSR зависит от уровней на выводах портов. Чтение уровней на выводах требует разрешение тактирования контроллера PIO, иначе регистр PIO_PDSR будет читаться со значениями, которые были на выводах в момент запрета тактирования контроллера PIO. (4). Значения после сброса в регистре PIO_ISR равны 0x0. Однако первое чтение регистра может показать другие значения, поскольку могли произойти изменения сигналов на выводах. (5). Только этот набор регистров очищает свое состояние путем записи 1 в первый регистр, и устанавливает свое состояние путем записи 1 во второй регистр.
Регистр разрешения управления выводом со стороны контроллера PIO (PIO Controller PIO Enable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: PIO Enable, разрешение управления выводами контроллером PIO. 0 = не оказывает эффекта. 1 = разрешает PIO для управления соответствующего вывода (запрещает управление этим выводом со стороны периферийного устройства).
Регистр запрещения управления выводом со стороны контроллера PIO (PIO Controller PIO Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: PIO Disable, запрет управления выводами контроллером PIO. 0 = не оказывает эффекта. 1 = запрещает PIO для управления соответствующего вывода (разрешает управление этим выводом со стороны периферийного устройства).
Регистр состояния управления выводом со стороны контроллера PIO (PIO Controller PIO Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: PIO Status, состояние настройки управления выводом. 0 = управление выводом для PIO не активно (этим выводом управляет встроенное периферийное устройство). 1 = управление выводом для PIO активно (управление со стороны встроенного периферийного устройства не активно).
Регистр состояния входного фильтра (PIO Controller Input Filter Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Input Filer Status, состояние работы входного фильтра помех. 0 = на этом выводе запрещена работа входного фильтра. 1 = на этом выводе работает входной фильтр.
Регистр установки данных на выходе (PIO Controller Set Output Data Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Set Output Data, запись в эти биты позволяет установить на выводах выхода лог. 1. 0 = не оказывает никакого эффекта. 1 = на этом выводе порта на выходе будет установлена лог. 1.
Регистр сброса данных на выходе (PIO Controller Clear Output Data Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Clear Output Data, запись в эти биты позволяет установить на выводах выхода лог. 0. 0 = не оказывает никакого эффекта. 1 = на этом выводе порта на выходе будет установлен лог. 0.
Регистр состояния данных на выходе (PIO Controller Output Data Status Register). Работает либо только на чтение, либо на чтение и запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Output Data Status, показывает логический уровень, который выводится на выходы. 0 = на выходе установлен уровень лог. 0. 1 = на выходе установлен уровень лог. 1.
Регистр состояния данных на выводе порта (PIO Controller Pin Data Status Register). Работает либо только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Pad Data Status, показывает логический уровень, который установлен выводится на выводе порта. 0 = на выводе порта уровень лог. 0. 1 = на выводе порта уровень лог. 1.
Регистр разрешения прерывания по изменению уровня на выводе порта (PIO Controller Interrupt Enable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Input Change Interrupt Enable, разрешение прерывания по изменению уровня на этом выводе порта. 0 = не оказывает эффекта. 1 = разрешает прерывание по событию изменения уровня на этом выводе порта.
Регистр запрета прерывания по изменению уровня на выводе порта (PIO Controller Interrupt Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Input Change Interrupt Disable, разрешение прерывания по изменению уровня на этом выводе порта. 0 = не оказывает эффекта. 1 = запрещает прерывание по событию изменения уровня на этом выводе порта.
Регистр маски прерывания по изменению уровня на выводе порта (PIO Controller Interrupt Mask Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Input Change Interrupt Mask, состояние разрешения прерывания по изменению уровня на этом выводе порта. 0 = на этом выводе запрещено прерывание по событию изменения уровня. 1 = на этом выводе разрешено прерывание по событию изменения уровня.
Регистр состояния прерывания по изменению уровня на выводе порта (PIO Controller Interrupt Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Input Change Interrupt Status, состояние прерывания по изменению уровня на этом выводе порта. 0 = на этом выводе не было детектировано изменение уровня. 1 = на этом выводе было детектировано изменение уровня.
Регистр разрешения работы выводов в режиме выхода с открытым стоком (PIO Multi-driver Enable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Multi Drive Enable, разрешает работу выходного драйвера в режиме открытого стока. 0 = не оказывает никакого эффекта. 1 = на этом выводе будет разрешена работа выходного драйвера в режиме открытого стока.
Регистр запрета работы выводов в режиме выхода с открытым стоком (PIO Multi-driver Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Multi Drive Disable, запрещает работу выходного драйвера в режиме открытого стока. 0 = не оказывает никакого эффекта. 1 = на этом выводе будет запрещена работа выходного драйвера в режиме открытого стока.
Регистр состояния работы выводов в режиме выхода с открытым стоком (PIO Multi-driver Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Multi Drive Status, состояние работы выходного драйвера в режиме открытого стока. 0 = на этом выводе запрещена работа выходного драйвера в режиме открытого стока. 1 = на этом выводе разрешена работа выходного драйвера в режиме открытого стока.
Регистр запрета подключения внутренних верхних нагрузочных резисторов (PIO Pull Up Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Pull Up Disable, запрещает подключение внутренних верхних нагрузочных резисторов (pull-up). 0 = не оказывает никакого эффекта. 1 = на этом выводе будут отключены нагрузочные резисторы.
Регистр разрешения подключения внутренних верхних нагрузочных резисторов (PIO Pull Up Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Pull Up Enable, разрешает подключение внутренних верхних нагрузочных резисторов (pull-up). 0 = не оказывает никакого эффекта. 1 = на этом выводе будут подключены нагрузочные резисторы.
Регистр состояния подключения верхних внутренних нагрузочных резисторов (PIO Pull Up Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Pull Up Status, состояние подключения нагрузочных резисторов. 0 = на этом выводе подключены внутренние нагрузочные резисторы. 1 = на этом выводе отключены внутренние нагрузочные резисторы.
Регистр выбора периферийных устройств A (Peripheral A Select Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Peripheral A Select, выбор для вывода периферийных устройств группы A. 0 = не оказывает никакого эффекта. 1 = назначает на этом выводе функцию Peripheral A.
Регистр выбора периферийных устройств B (Peripheral B Select Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Peripheral B Select, выбор для вывода периферийных устройств группы B. 0 = не оказывает никакого эффекта. 1 = назначает на этом выводе функцию Peripheral B.
Регистр состояния выбора периферийных устройств A или B (PIO Peripheral A B Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Peripheral A B Status, показывает выбор периферийной функции на выводе порта. 0 = на этом выводе порта назначена функция Peripheral A. 1 = на этом выводе порта назначена функция Peripheral B.
Регистр разрешения синхронной записи в выходы портов (PIO Output Write Enable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Output Write Enable, разрешает запись в регистр PIO_ODSR для синхронного управления выходами. 0 = не оказывает никакого эффекта. 1 = разрешает запись в регистр PIO_ODSR для управления выходами.
Регистр запрета синхронной записи в выходы портов (PIO Output Write Disable Register). Работает только на запись.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Output Write Disable, запрещает запись в регистр PIO_ODSR для синхронного управления выходами. 0 = не оказывает никакого эффекта. 1 = запрещает запись в регистр PIO_ODSR для управления выходами.
Регистр состояния синхронной записи для управления выходами (PIO Output Write Status Register). Работает только на чтение.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
P31
P30
P29
P28
P27
P26
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
P0-P31: Output Write Status, состояние разрешения синхронного управления выходами. 0 = на этом выводе порта запись в регистр PIO_ODSR не влияет на изменение выходного уровня. 1 = на этом выводе порта запись в регистр PIO_ODSR вызывает изменение выходного уровня.