В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > ARM
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


28.5 Функциональное описание

Контроллер параллельного ввода-вывода (PIO) может работать с 32 полностью управляемыми линиями. Большая часть логики управления любой линии ввода-вывода представлена на рис. 28.3. Здесь каждый показанный сигнал представляет только один порядковый номер из 32.

Логика управления линий ввода-вывода
Рис. 28-3. Логика управления линий ввода-вывода

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-4. Временная диаграмма линий при работе на вывод

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. Временная диаграмма работы фильтра входных выбросов

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.6. Пример программирования линий ввода - вывода

Пример, указанный в таблице 28.1 приведен чтобы определить следующую конфигурацию:

  • 4 - битный выходной порт на линиях от 0 до 3 (вывод должен осуществляться в единой операции записи), конфигурация открытый сток, с подтягивающим резистором.
  • Четыре выходных сигнала на линиях с 4 по 7 (например, для управления СИД), подтягиваемые на высокий и низкий уровень, с подтягивающими резисторами.
  • Четыре входа на линиях с 8 по 11 (опрос кнопок), с подтягивающими резисторами и фильтрами входных выбросов и прерываниями по изменению состояния на входе.
  • Четыре входа на линиях с 12 по 15 для опроса состояния внешнего устройства (программный опрос, поэтому прерывание по изменению состояния на входе не используется), подтягивающий резистор и фильтр входных выбросов не используется.
  • Линии ввода - вывода с номерами от 16 до 19 привязаны к линиям периферийных устройств А, с подтягивающими резисторами.
  • Линии ввода - вывода с 20 по 23 привязаны к линиям периферийных устройств В, без подтягивающих резисторов.
  • Линии ввода - вывода с 24 по 27 привязаны к линиям периферийных устройств А с прерыванием по изменению состояния линии и подтягивающим резистором.

Табл. 28-1. Пример программирования

Регистр Записываемое значение
PIO_PER 0x0000 FFFF
PIO_PDR 0x0FFF 0000
PIO_OER 0x0000 00FF
PIO_ODR 0x0FFF FF00
PIO_IFER 0x0000 0F00
PIO_IFDR 0x0FFF F0FF
PIO_SODR 0x0000 0000
PIO_CODR 0x0FFF FFFF
PIO_IER 0x0F00 0F00
PIO_IDR 0x00FF F0FF
PIO_MDER 0x0000 000F
PIO_MDDR 0x0FFF FFF0
PIO_PUDR 0x00F0 00F0
PIO_PUER 0x0F0F FF0F
PIO_ASR 0x0F0F 0000
PIO_BSR 0x00F0 0000
PIO_OWER 0x0000 000F
PIO_OWDR 0x0FFF FFF0


<--Предыдущая страница Оглавление Следующая страница -->