Поиск по сайту: |
|
По базе: |
|
Главная страница > Обзоры по типам > Микроконтроллеры > ARM |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
28.5 Функциональное описаниеКонтроллер параллельного ввода-вывода (PIO) может работать с 32 полностью управляемыми линиями. Большая часть логики управления любой линии ввода-вывода представлена на рис. 28.3. Здесь каждый показанный сигнал представляет только один порядковый номер из 32.
28.5.1 Управление подтягивающими резисторами Каждая линия ввода-вывода имеет встроенный подтягивающий резистор. Его номинал составляет порядка 10 КОм, более точно параметры приведены в разделе "Электрические характеристики". Резистор может быть разрешен или запрещен записью 1 в соответствующие биты PIO_PUER (разрешение подтягивающего резистора) или PIO_PUDR (запрещение подтягивающего резистора). Записью в эти регистры производится запись 1 или 0 в соответствующие биты регистра состояния PIO_PUSR. Чтение 1 означает, что соответствующий подтягивающий резистор разрешен, а 0 - запрещен. Управление подтягивающим резистором возможно независимо от конфигурации прочих настроек линии. После перезагрузки все подтягивающие резисторы разрешены, то есть PIO_PUSR после перезагрузки имеет содержимое 0х0. 28.5.2 Выбор работы линии: под управлением контролера параллельного ввода-вывода или периферийного устройства В случае если линия ввода-вывода объединена с одной или двумя периферийными линиями ввода-вывода периферийного устройства, выбор режима работы управляется с помощью регистров PIO_PER (PIO Enable Register - регистр разрешения периферийного ввода-вывода) и PIO_PDR (PIO Disable Register - регистр запрещения периферийного ввода-вывода). Результат записи в данные регистры отражается в содержимом регистра состояния контроллера параллельного ввода-вывода, который показывает, периферийными устройствами или контроллером контролируется данная линия. Установленное в соответствующем бите значение 0 обозначает, что линия ввода-вывода управляется соответствующим встроенным периферийным устройством, устанавливаемом в регистре PIO_ABSR (AB Select Status Register - регистр состояния выбора АВ). Значение 1 обозначает, что соответствующая линия находится под управлением периферийного контроллера. Если вывод используется как универсальная линия ввода-вывода (не мультиплексирована со встроенными периферийными устройствами), изменение значений PIO_PER и PIO_PDR не оказывают влияния на ее работу, а обращение к соответствующему биту регистра состояния PIO_PSR всегда возвращает значение 1. После перезагрузки большая часть линий ввода - вывода управляются периферийным контроллером, то есть значение PIO_PSR при перезагрузке устанавливается в 1. Однако в некоторых случаях очень важно, чтобы линия по умолчанию после перезагрузки управлялись периферийным устройством (например, в случае, если это линии выбора корпусов микросхем памяти, которые должны оставаться неактивными после перезагрузки, или линии шины адреса, на которых должен поддерживаться низкий уровень для загрузки с внешней памяти). Поэтому значение после перезагрузки по умолчанию для PIO_PSR определяется на уровне конкретного изделия, в зависимости от типа внешних устройств, для работы с которыми предназначены линии ввода - вывода. 28.5.3. Выбор периферийного устройства А или В Контроллер параллельного ввода - вывода обеспечивает мультиплексирование линии ввода - вывода с функциональными линиями периферийных устройств в количестве до 2. Выбор осуществляется записью соответствующего значения в регистр PIO_ASR (регистр выбора А) или PIO_BSR (регистр выбора В). Регистр состояния выбора периферийного устройства PIO_ABSR (AB Select Status Register) показывает, какая периферийная линия выбрана в настоящий момент. Для каждого из выводов установленный в соответствующем разряде 0 означает выбор периферийного устройства В, и 1 - выбор периферийного устройства А. Важно отметить, что выбранное в качестве управляющего линией периферийное устройство изменяет только состояние линии вывода. Линия ввода периферийного устройства всегда подключена к соответствующему выводу корпуса устройства. После перезагрузки значение регистра PIO_ABSR по умолчанию устанавливается в 0, таким образом, все линии ввода-вывода назначены как функциональные периферийному устройству А. Тем не менее, в большинстве случаев независимо от состояния регистра периферийное устройство А не будет управлять назначенными ему выводами, так как линии контроллера параллельного ввода - вывода после перезагрузки работают в качестве универсальных. Запись в регистры PIO_ASR и PIO_BSR изменяет состояние PIO_ABSR независимо от конфигурации выводов (то есть будет вывод использоваться в качестве линии контролера или как функциональная линия периферийного устройства). Тем не менее, назначение линии в качестве вывода периферийного устройства требует как записи соответствующего бита в регистры выбора периферийных устройств А или В (PIO_ASR и PIO_BSR), так и записи в регистр запрещения контроллера периферийной шины PIO_PDR. 28.5.4 Управление состоянием вывода В случае, если линия назначена как функциональная периферийного устройства, то есть соответствующий бит в PIO_PSR установлен в 0, управление линией передается периферийному устройству. Периферийное устройство А или В, в зависимости от значения в PIO_ABSR, управляет текущим уровнем на соответствующем выводе. В случае, если линия управляется контроллером параллельного ввода - вывода (PIO), она может быть сконфигурирована как выход или как вход. Настройка осуществляется изменением значения регистров PIO_OER (регистр разрешения вывода) и PIO_ODR (регистр запрещения вывода). Результат операций записи в эти регистры отражается в регистре PIO_OSR (регистр состояния вывода). Если соответствующий бит в этом регистре установлен в 0, линия используется только для ввода. Если бит установлен в 1, состояние линии управляется контроллером шины периферийных устройств. Уровень, выдаваемый на линию, задается записью в регистр PIO_SODR (регистр записи выводимых данных) и PIO_CODR (регистр сброса выводимых данных). Эти операции соответственно записывают и стирают биты данных в регистре PIO_ODSR (регистр состояния выводимых данных), который хранит выводимые через порт данные. Изменение значений в регистрах PIO_OER и PIO_ODR в любом случае изменяет соответствующие биты PIO_OSR, независимо от того, назначена ли линия для параллельного ввода - вывода или как функциональная периферийного устройства. Это дает возможность конфигурировать состояние линии до того, как будет назначено управляющее ее состоянием периферийное устройство. Аналогичным образом, запись в PIO_SODR и PIO_CODR изменяет состояние регистра PIO_ODSR. Это очень важно, так как определяет уровень, который будет первым выведен на линии ввода - вывода. 28.5.5 Синхронный вывод данных Для осуществления параллельного ввода - вывода, то есть вывода по нескольким линиям одновременно, необходимо провести две операции записи в регистры PIO_SODR и PIO_CODR. Результатом могут быть неожиданные паразитные переходные процессы на линиях. Контроллер периферийной шины дает возможность непосредственно осуществлять прямое управление состоянием выводов путем единственной операции записи значений в регистр PIO_ODSR (Output data status register - регистр состояния выводимых данных). Могут быть записаны только те биты, которые не маскированы в регистре PIO_OSWSR (Output write status register - регистр состояния записи выходных данных). Установка маски записи, размещенной в регистре PIO_OSWSR, производится записью в регистры PIO_OWER(output write enable register - регистр разрешения записи выходных данных) и PIO_OWDR (output write disable register - регистр запрещения записи выходных данных). После перезагрузки параллельный вывод данных запрещается на всех линиях ввода- вывода, так как значение регистра PIO_OWSR сбрасывается в 0х0. 28.5.6 Работа линий ввода - вывода, аналогичная схеме открытым стоком Для каждой из линий ввода - вывода может быть независимо включена функция Multidrive, с которой линия работает аналогично схемам с открытым стоком. Эта особенность работы позволяет подключить без буферизации несколько управляющих устройств (драйверов) на одну линию ввода-вывода, с низким активным уровнем линии, который может установить любое из устройств. Чтобы гарантированно обеспечить высокий уровень на линии, необходим внешний подтягивающий резистор или разрешение работы внутреннего. Функция работы с несколькими драйверами контролируется регистром PIO_MDER (Multi driver enable register - регистр разрешения работы с несколькими драйверами), и PIO_MDDR (multi driver disable register - регистр запрещения работы с несколькими драйверами). Функция работы с несколькими драйверами может быть включена независимо от того, управляется ли линия - периферийным контроллером ввода - вывода или назначена для работы с каким - то периферийным устройством. Регистр PIO_MDSR (Multi driver status register - регистр состояния работы с несколькими драйверами) показывает выводы, конфигурированные для работы с внешними драйверами. После перезагрузки функция управления внешними драйверами запрещена на всех выводах, то есть содержимое регистра PIO_MDSR после перезагрузки сбросится в 0х0. 28.5.7. Временные диаграммы линий вывода Рис. 28-4 показывает как выводы управляются записью в PIO_SODR и PIO_CODR, или напрямую в PIO_ODSR. Последний случай возможен только при установке соответствующих бит в регистре PIO_OWSR. Так же диаграмма показывает обратную связь через PIO_PDSR, там, где это возможно.
28.5.8 Входы Уровень на каждой линии ввода - вывода может быть прочитан через регистр PIO_PDSR (Pin Data status register - регистр состояния выводов). Этот регистр показывает состояние выводов микросхемы независимо от их конфигурации, назначены ли они как вход или управляются контроллером параллельного ввода - вывода, или периферийным устройством. Для чтения состояния линий необходимо разрешить синхронизацию периферийного контроллера ввода- вывода, в противном случае PIO_PDSR будет показывать значение на выводах в момент прекращения тактирования. 28.5.9 Фильтрация входных выбросов Возможно независимое программирование дополнительных входных фильтров выбросов на каждой из линий ввода - вывода. Когда работа фильтра разрешена, выброс длительностью менее ? периода импульса главной синхронизации будет автоматически отфильтрован, тогда как импульс длительностью 1 периода импульса или более будет принят. Для импульса длительностью от ? до 1 периода главной синхронизации возможен любой из вариантов, что зависит от времени его появления. Таким образом, для того, чтобы импульс был гарантированно принят, его длительность должна составлять более 1 периода импульса главной синхронизации, и для того, чтобы выброс помехи был отфильтрован, его длительность должна составлять менее ? периода импульса главной синхронизации. Фильтр вызовет задержку распространения сигнала относительно входа на значение 1 периода импульса главной синхронизации, если изменение уровня на входе произошло перед его фронтом импульса главной синхронизации. И наоборот, этой задержки не возникает, если изменение входного уровня произойдет перед срезом импульса главной синхронизации. Фильтры входных выбросов контролируются следующим набором регистров: PIO_IFER (Input filter enable register - регистр разрешения работы входных фильтров), PIO_IFDR (регистр запрещения работы входных фильтров), PIO_IFSR (Input Filter status register - регистр состояния входных фильтров). Запись бит в регистры PIO_IFER и PIO_IFDR соответственно устанавливает и сбрасывает биты в PIO_IFSR, который и управляет работой входных фильтров на линиях ввода - вывода. В том случае, если работа фильтра выбросов разрешена, она никаким образом изменяет поведения входов периферийных устройств. Работа фильтра входных выбросов влияет только на значение, читаемое в PIO_PDSR, и на определение прерывания по изменению состояния на входе. Для работы входных фильтров необходимо разрешение тактирование котроллера шины периферийного ввода - вывода.
28.5.10 Прерывание по изменению состояния на входе Контроллер шины параллельного ввода - вывода может быть сконфигурирован таким образом, чтобы вырабатывать прерывание в случае изменения состояния линии. Прерывание по изменению состояния на входе управляется записью в регистр PIO_IER (interrupt enable register - регистр разрешения прерываний) и регистр PIO_PDR (interrupt disable register - регистр запрещения прерываний), запись в соответствующие биты которых устанавливает значения в регистре PIO_IMR (Interrupt mask Register - регистр маски прерываний), разрешая или запрещая прерывания по изменению состояния на входе. Так достоверное определение изменения состояния на входе возможно только при получении двух достоверных состояний линии, и их сравнении, то необходимо разрешение синхронизации контроллера параллельного ввода - вывода. Работа с прерыванием по изменению состояния линии возможна в том случае, если линия сконфигурирована для работы на вход, и управляется контроллером периферийной шины ввода-вывода или другим периферийным устройством. При определении изменения уровня на линии устанавливается соответствующий бит регистра PIO_ISR (Interrupt Status register - регистр состояния прерываний). Если соответствующий бит в PIO_IMR также установлен, занимается линия прерывания контроллера PIO. Сигналы прерываний со всех 32 каналов объединены друг с другом, образовывая единое прерывание для Расширенного контроллера прерываний (AIC). Во время чтения программой регистра PIO_ISR флаги всех заявленные прерывания автоматически сбрасываются. Это означает, что все заявленные на момент чтения PIO_ISR прерывания должны быть обязательно обработаны, иначе необработанные прерывания будут пропущены.
28.6. Пример программирования линий ввода - вывода Пример, указанный в таблице 28.1 приведен чтобы определить следующую конфигурацию:
Табл. 28-1. Пример программирования
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|