Вы находитесь на странице: 1из 8

Ministerul Educației, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică și Microelectronică
Catedra Microelectronică și Inginerie Biomedicală

Лараторная работа Nr.1

Тема: Программирование AVR на ассемблере.


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

Дисциплина: SMP

Chisinau-2023

1
Цель работы: Обучение средствам проектирования и
моделирования для программирования микроконтроллеров (AVR
Studio и Proteus). Изучить интерфейсы связи с портом ввода-вывода
внешней среды.

Задача: Разработать приложение, которое позволяло бы менять


состояние светодиода с текущего на реверсивное при нажатии
кнопки.

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

GPIO позволяет устанавливать или собирать логический уровень с вывода


микроконтроллера.
EEPROM обеспечивает долгосрочное хранение данных
АЦП позволяет преобразовывать аналоговые сигналы
UART обеспечивает последовательную связь
TIMER дает нам возможность генерировать временные интервалы,
измерять время между двумя событиями, генерировать цифровые сигналы
определенной формы.

В некоторой степени можно сказать, что периферийные устройства


представляют собой интерфейс микроконтроллера с внешним миром.

2
Взаимодействие микропроцессора (ЦП) с периферийными устройствами
происходит через периферийные регистры. В архитектуре AVR имеется 64
таких регистра, называемых периферийными регистрами или регистрами
ввода-вывода.
Каждый периферийный модуль зарезервировал набор регистров в
пространстве периферийных регистров. Например, каждый модуль GPIO
зарезервировал набор из трех регистров, называемых PORT, PIN и DDR,
посредством которых микропроцессор имеет возможность работать с
логическими уровнями на выводах. Классификацию периферийных
регистров в зависимости от их назначения можно было бы провести
следующим образом:
 Регистры состояния (Status Register) – позволяют просматривать текущее
состояние периферии (флаги). Как правило, доступные регистры состояния
доступны только для чтения.
Регистры управления (Control Register) – позволяют настраивать режим
периферии. Они доступны для записи и чтения.
 Регистры данных (Data Register) – позволяют осуществлять обмен
данными между периферийным модулем и ядром.
 Регистры выбора — позволяют выбирать некоторые
ресурсы/конфигурации внутри периферийного модуля.

Во многих случаях периферийные регистры не имеют четко определенного


назначения, то есть регистр может содержать набор битов состояния,
управления или выбора. Назначение периферийных регистров можно узнать
по их имени и часто имеющему окончание, например: _SR, _CR, _DR, _AR.
Но это не правило.
Микропроцессор (ЦП) не различает периферийные модули. Он «видит»
периферийные модули через призму периферийных регистров. а работа с
периферией происходит путем передачи данных с адресом из пространства
регистров периферии. Доступ к регистрам периферии будет осуществляться
печатью специализированного набора команд.

Заказы на перевод. эти команды предполагают 8-битную передачу:


в R, P — передача содержимого периферийного регистра в регистр общего
назначения.
out P, R — передать содержимое регистра общего назначения в
периферийный регистр.

3
Команды для установки/сброса отдельных битов в регистре периферийных
устройств. Эти команды будут влиять только на бит, указанный n, остальные
биты сохранят значение до выполнения операции:
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), так что
логическое значение можно назначить контактному терминалу или
прочитать с него, если контакт настроен на вход.

4
Контакты ввода/вывода сгруппированы в порты по восемь штук. Работа с
портом осуществляется как единое целое, соответственно, с одной операции
переноса на порт мы можем изменить конфигурацию сразу всех восьми
пинов. Таким образом, операции передачи в порт будут влиять на все
входящие в его состав выводы.
Поскольку модуль GPIO является периферийным модулем
микроконтроллера, соответственно, он зарезервировал набор регистров в
адресном пространстве периферийных регистров.

Каждый модуль GPIO микроконтроллера с архитектурой AVR будет иметь


три периферийных регистра PINx, DDRx и PORTx.

Чтобы объяснить, как работает модуль GPIO, представим следующий


рисунок:

PINx – служит для чтения логического значения с физического


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

5
Если ячейка DDRx будет содержать «1», соответствующий вывод будет
установлен на выход, и логическое значение из PORTx из той же ячейки
будет передано на физический терминал.
Если местоположение DDRx будет содержать «0», соответствующий
физический терминал будет установлен на вход. В этом случае значение в
регистре PORTx подключит подтягивающий резистор с логическим
значением «1», логическое значение «0» установит вывод в состояние
высокого импеданса — «HiZ». Рекомендуется избегать состояния HiZ на
терминале, которое возникает, когда терминал не подключен к источнику
сигнала, чтобы избежать появления шума внутри микросхемы
микроконтроллера, который в критических случаях может привести к выходу
из строя схемы.
Поэтому рекомендация для неиспользуемых выводов — установить их
конфигурацию как входную с включенным подтягивающим резистором, что
позволит избежать случайных коротких замыканий, когда он установлен на
выход, а для случая, когда он установлен на вход, избежать нежелательных
помех на входе.

 Блок-схема:

"

6
Cхема в Протеусе:

7
8

Вам также может понравиться