duminică, 17 noiembrie 2013

Периферийные модули. Периферийный модуль GPIO - Порты ввода / вывода.

    

     Периферийные модули

    МК представляет из себя структуру из MCU с различными периферийными модулями. Разные МК имеют разные периферийные модули. Периферийный модуль-специальная схема , которая выполняет определённую функцию.Например:

  • GPIO-позволяет устанавливать логическое значение на пинах МК.
  • EEPROM-позволяет долговременно хранить данные.
  • ADC-преобразование аналоговых сигналов.
  • UART-последовательное соединение.
  • TIMER-генерирование разных промежутков времени, измерение времени между 2 событиями,генерация цифровых сигналов определённой формы.


    В определенной степени, я бы сказал, что  периферийный интерфейс соединяет микроконтроллер с внешним миром. Взаимодействие микропроцессор (ЦП) с периферией происходит РВВ(регистр ввода - вывода).Архитектура AVR предоставляет 64 регистра, называемых регистры периферии или регистры ввода / вывода. Каждый модуль GPIO зарезервировал набор из трех регистров :PORT, PIN и DDR,используя которые,МК может менять логические уровни на пинах.
    Мы могли бы классифицировать периферийные регистры в зависимости от назначения следующим образом:

  • Регистр состояния (Status Register) - для просмотра состояния текущего устройства (флагов).Как правило, регистр состояния доступен только для чтения. 
  • Регистр управления (Control Register) - позволяет настроить периферийное устройство. Доступен для записи и чтения.
  • Регистр данных (Data Register) - обмен данными между периферией и MCU.
  • Регистры выбора - позволяют выбор ресурсов / конфигураций посредством периферии.
    Во многих случаях, периферийные регистры не имеют четко определенную цель, т.е. регистр может содержать коллекцию битов состояния, контроля или выделения.Назначения периферийных регистров можно узнать по их имени и часто заканчиваются они на: _SR, _CR, _DR, _AR.Но это не правило. Микропроцессор (CPU) не делает различия между периферийными модулями.Он "видит" периферийные модули через периферийные регистры.Доступ к периферийным регистрам будет выполняться при помощи специального набора команд.
Команды передачи. Эти команды предполагают, 8-битные переводы: 

  in  R, P - передача значения РВВ через РОН.
    out P, R  - передача значения РОН,через РВВ.

Команды установки / сброса  битов посредством периферийного регистра:

  cbi P, n  - присвоение "0", сброс, бит n порта P   n = 0 .. 7 
    sbi P, n  - присвоение "1", установка, бит n порта P   n = 0 .. 7 

Команды проверки/тестирования состояния битов одного РВВ:

  sbic P, n - игнорирование последующей команды,в случае,когда бит n порта P-"0", сброшен.
    sbis P, n - игнорирование последующей команды,в случае,когда бит n порта P - "1", установлен.

Прежде чем начать работу с периферией , сначало надо сконфигурировать эти регистры.Рекомендуется , чтобы каждый периферийный модуль инициализировался на всём множестве битов конфигурации.Как сконфигурировать определённый модуль,можно прочитать в даташите.В заключение скажем, что периферийные модули -электрические устройства, подключенные к процессору посредством РВВ.  Для того, чтобы лучше понять, что представляет из себя периферия, мы бы могли себе представить сложную панель,внутри судна.То что мы видим на этой доске-это много огней, переключателей, индикаторов и т.д.Каждый светодиод - это бит состояния,переключатель-бит конфигурации,индикатор чисел-выходные данные.Периферийные модули могут генерировать прерывания с появлением особых событий, обнаруженных периферией, такие как изменение логического уровня на выводе, завершение передачи данных, завершение преобразования и т.д., но мы будем говорить о прерываниях позже.

    Периферийный модуль GPIO  -  Порты ввода / вывода.

    Любой МК имеет набор пинов,большинство из которых может быть настроено на вход или на выход(GPIO),также может генерировать логический уровень,если пин сконфигурирован на выход или наоборот читать лог.уровень из вне,только в том случае,если пин сконфигурирован,как вход.Пины входа и выхода сгрупированы в порт по 8 штук.  Работа с портом работает как единое целое, то есть, одна операция может изменить настройку порта на всех восьми пинах сразу. Поскольку модуль GPIO является периферийным модулем микроконтроллера, он имеет набор регистров в адресном пространстве РВВ.


Каждый модуль GPIO МК с архитектурой AVR оснащён 3-мя регистрами  ввода вывода PINx,PORTx,DDRx.


Pinx - используется для чтения логического значения физического терминала, этот регистр доступен только для чтения. Операции записи в этот регистр не влияют на  физическую величину  физического терминала. 
PORTx - регистр установки значения, если порт установлен на выход,если на вход,тогда включаем подтягивающий резистор.
DDRx-установка порта на вход или на выход.

Если  DDRx содержит "1",тогда через PORTx мы сможем генерировать логические уровни.Если DDRx -"0",тогда порт настроен на вход и мы можем только читать логические значения с порта,который в свою очередь подтянуть резистором к питанию(pull-up).Если в данном случае не подтянуть резистор и PORTx = "0",то порт войдёт в HiZ состояние высокого импеданса,которое лучше всего избегать и не допускать.