Перейти к основному содержимому

ЛР №6 Прерывания

Ввод/вывод информации в процессорной системе, в том числе с использованием прерываний

Для кого этот документ

  • Студентам курса "Организация ЭВМ"
  • Необходимое ПО: Quartus II

Цель работы

Изучить возможные способы ввода/вывода информации в процессорной системе.

Объекты изучения

  • подсистема ввода вывода процессора «NIOS II»;
  • приложение Intel Monitor Program (IMP), по части работы с аппаратной составляющей процессорной системы.

Планируемые результаты обучения

После выполнения этой работы студенты должны уметь:

  • Использовать кнопочные и ползунковые переключатели для ввода информации в процессорную систему;
  • Выводить информацию из процессорной системы на красные, зеленые светодиоды, HEX индикаторы и LCD дисплей;
  • Использовать прерывания в своих проектах для взаимодействия периферийных устройств с процессорной системой;
  • Реализовывать в своих проектах порядок обработки прерываний, соответствующий требуемым приоритетам;
  • Использовать в своих проектах программные прерывания;
  • Эмулировать программно выполнение отдельных команд процессором.

Исходные файлы лабораторной работы

В приложении приводится исходный код процедуры hex_display (Листинг 8) с подробными комментариями. Процедура отображает содержимое регистра r4 в шестнадцатеричном формате на 7-сегментных индикаторах.

Кроме того там находится исходный файл тестовой программы interrupt_example.s (Листинг 9), демонстрирующей прерывания процессорной системы. В ней используются прерывания от таймера и кнопок.

Обработчик исключений, задачей которого является определение причины прерывания и вызов соответствующей процедуры, содержится в файле exception_handler.s (Листинг 10).

Обработчики прерываний от таймера и кнопок содержатся в файлах interval_timer.s (Листинг 11) и pushbutton_ISR.s (Листинг 12) соответственно.

Подготовка к лабораторной работе

Для выполнения лабораторной работы необходимо изучить по материалам лекций и предложенной литературе:

  1. Способы обмена информацией ЭВМ с периферийными устройствами.
  2. Реализацию прерываний в процессорной системе NIOSII. Используемые для этого регистры процессора и портов ввода – вывода.
  3. Назначение и принцип работы параллельных портов ввода вывода (PIO), используемых для подключения некоторых периферийных устройств к процессорной системе. Включите в отчет их краткое описание.
  4. Уясните пример программы, приведенной в приложении, в которой используются прерывания, и уясните как реализован обработчик прерываний из описания процессорной системы «DE2-115 Media Computer» [6,7,3]. Вставьте в отчет его листинг программы.
  5. Уясните пункты задания, выполняемого в текущей лабораторной работе, и напишите программные заготовки для их выполнения.
  6. Уясните назначение команды trap. Вставьте в отчет ее формат и краткое описание. Напишите программную заготовку для выполнения пункта 5.1
  7. Уясните как выполняется команда mul. Вставьте в отчет ее формат и краткое описание. Напишите программу, которая будет эмулировать команду умножения.

В лабораторной работе в качестве устройств ввода будут использоваться переключатели SWITCH и кнопки KEY3, KEY2, KEY1. В качестве устройств вывода – зеленые светодиоды LEDG 7..0, красные светодиоды LEDR 17..0, индикаторы шестнадцатеричной цифры HEX 7..0. Для связи с каждым устройством используются параллельные порты ввода/вывода (PIO). Адреса портов и принцип их работы приведены в описании процессорной системы [6,7,3].

В лабораторной работе решается задача последовательного сложения 8-разрядных чисел со знаком, которые задаются переключателями SWITCH 7..0. Набранное на переключателях число отображается на зеленых светодиодах. Вычисленная сумма сохраняется в одном из регистров, младшая часть которого отображается на красных светодиодах.

Вопросы для самоконтроля

  1. Для каких целей применяются прерывания в вычислительных машинах?
  2. Что называют системой прерывания в вычислительной машине?
  3. Относится ли система прерываний процессорной системы NIOS II к векторному типу?
  4. Какие аппаратные средства в используемой в лабораторных работах процессорной системе относятся к системе прерываний?
  5. Как можно запретить или разрешить прерывания текущей программы?
  6. Как можно выборочно запретить прерывания от отдельных устройств процессорной системы?
  7. Можно ли разрешить выборочно прерывания от отдельных кнопок в процессорной системе? Как это сделать?
  8. Какие прерывания относятся к аппаратным?
  9. Будет ли завершено выполнение текущей команды в момент прихода сигнала запроса прерывания от периферийного устройства?
  10. Как обеспечить корректное выполнение прерванной команды?
  11. Что называют исключениями (exception) в процессорной системе?
  12. Каким образом выполняется возврат из прерывания в процессорной системе?
  13. Какая команда вызывает программное прерывание?
  14. Что такое невыполнимая команда? Что произойдет, если в выполняемой программе окажется такая команда?

Порядок выполнения лабораторной работы

Часть 1. Программно управляемый ввод с переключателей и вывод на светодиоды

Используйте 8 правых переключателей SW 7..0 для задания вводимого числа и 8 зеленых светодиодов LEDG 7..0 для его отображения. Используйте 18 красных светодиодов LEDR 17..0 для отображения младших разрядов вычисленной суммы. Все эти устройства подключаются через параллельные порты к мультимедийной процессорной системе.

1.1. Напишите программу на языке ассемблер, которая вначале обнуляет сумму, затем читает 8-разрядное значение (число со знаком в дополнительном коде), задаваемое переключателями SW 7..0, отображает прочитанное значение на зеленых светодиодах, выполняет сложение введенного числа с накопленной суммой, выводит сумму на красные светодиоды. Осуществляет переход на ввод очередного числа, выполняя бесконечный цикл.

1.2. Создайте новую папку lab7_part и поместите в неё подготовленную программу.

1.3. Используйте приложение IMP для создания нового проекта part1 в этой папке. Добавьте в проект Вашу программу и загрузите процессорную систему в кристалл ПЛИС. Выберите подходящую память для размещения Вашей программы. Разместите сегменты кода и данных, начиная с адреса 0х1000. Область в начале оперативной памяти понадобится в последующем для размещения обработчиков сброса и прерываний процессорной системы. Скомпилируйте и загрузите Вашу программу.

1.4. Выполните программу по шагам, задавая различные значения вводимых чисел.

1.5. Поставьте контрольную точку по адресу безусловного перехода на ввод очередного числа. Выполните рестарт программы. Убедитесь в ее работоспособности, каждый раз задавая новое число и нажимая кнопку продолжить. Запишите в отчет вводимые числа и наблюдаемые результаты.

1.6. Удалите контрольную точку и вновь запустите программу. Наблюдайте поведение программы и поместите в отчет ваши объяснения.

Часть 2. Ввод информации с переключателей с опросом готовности

2.1. Остановите выполнение программы. Наблюдайте состояние регистра данных и регистра захвата фронтов (edge-capture) PIO, соединенного с кнопками на стенде. Для этого используйте вкладку Memory приложения IMP. Включите опцию Query all devices, используя соответствующее окно. Сначала нажмите и удерживайте некоторые из кнопок (KEY3-KEY1), затем наблюдайте состояние регистров в окне Memory, затем нажмите кнопку Refresh в окне AMP и снова наблюдайте состояние регистров. Отпустите кнопки, наблюдайте состояние регистров, нажмите Refresh и снова наблюдайте. Уясните назначение регистров PIO и принцип их работы. Добавьте в отчет.

2.2. Модифицируйте программу из предыдущей части таким образом, чтобы ввод очередного числа осуществлялся только после отпускания кнопки KEY3 на стенде. Используйте соответствующий разряд регистра edge-capture соответствующего PIO как сигнал готовности. Программа опрашивает его непрерывно до тех пор, пока он не установится. После ввода числа не забудьте снять сигнал готовности, записав нулевое значение в регистр edge-capture.

2.3. Добавьте в проект файл с процедурой hex_display из приложения, используя команду Program Setting из меню Settings программы IMP. Процедура отображает содержимое 32-разрядного регистра процессора на 7-сегментных индикаторах HEX7-HEX0 в виде шестнадцатеричного числа.

2.4. Модифицируйте программу из предыдущей части таким образом, чтобы накопленная сумма дополнительно отображалась на индикаторах HEX7-HEX0.

Часть 3. Ввод информации с переключателей в режиме прерывания

3.1. Выполните задачу из предыдущей части. Используйте вместо опроса готовности устройства ввода формирование прерывания, которое инициируется нажатием кнопки KEY3 на стенде. Основная программа устанавливает все регистры, необходимые для формирования прерывания и выполняет бесконечный цикл. Программа обслуживания прерывания вводит число, вычисляет сумму и отображает ее на светодиодах и индикаторах.

3.2. Проверьте экспериментально действия программы, выполняемые после формирования прерывания. Для этого поставьте контрольную точку по адресу обработчика прерываний (0x20). После достижения контрольной точки выполните программу по шагам. Фиксируйте в отчете Ваши наблюдения.

3.3. Чтобы визуализировать работу основной программы, реализуйте в ней вывод на LCD дисплей Вашей фамилии, имени и отчества в режиме бегущей строки. Заготовку программы возьмите из 5 лабораторной работы. Рекомендуется оформить её в виде процедуры, которой в качестве параметра передается адрес в ОП выводимой текстовой строки через один из регистров процессора.

Часть 4. Реализация приоритетных прерываний

4.1. Модифицируйте программу из предыдущей части таким образом, чтобы по кнопке KEY3 осуществлялось сложение нового числа с суммой, по кнопке KEY2 - вычитание нового числа из суммы, по кнопке KEY1 - обнуление суммы. Причем реализуйте приоритетность прерываний в соответствии с указанной последовательностью.

4.2. Экспериментально определите действия программы при выполнении сброса процессорной системы. Для этого поставьте по нулевому адресу в ОП контрольную точку. Затем запустите программу и нажмите кнопку KEY0. Далее выполните программу по шагам. Фиксируйте в отчете Ваши наблюдения.

4.3. Запрещайте прерывания от отдельных кнопок, изменяя содержимое регистра маски, соответствующего PIO.

4.4. Разрешайте или запрещайте прерывания от кнопок, изменяя содержимое регистра ienable процессора. Для этого используйте прием из предыдущего пункта.

4.5. Разрешайте или запрещайте прерывания от кнопок, изменяя содержимое бита pie регистра status процессора. Для этого используйте прием из пункта 4.3.

Часть 5. Программное прерывание trap и невыполнимые команды

5.1. Вставьте в текст программы команду trap. Во вкладке disassembly посмотрите код этой команды и отразите в отчете. Экспериментально определите поведение программы при выполнении этой команды. Опишите в отчете. Модифицируйте обработчик прерываний таким образом, чтобы в случае обнаружения команды trap, он передал управление процедуре, которая выведет строку «trap» на экран LCD. Используйте для этого ранее выявленный код команды trap.

5.2. Экспериментально определите как выполняется команда mul r12,r10,r11. Перед выполнением команды в регистровом окне АМР задавайте различные значения сомножителей с использованием их знакового представления и наблюдайте результат в регистре r12.

5.3. Для выполнения оставшихся пунктов задания следует использовать другую процессорную систему «DE 2-115 Basic Computer». В ней используется экономная версия (е) процессора NIOS II, в которой не поддерживается аппаратное выполнение команд умножения и деления. Выполните команду Settings > System settings. В появившемся окне следует указать используемую процессорную систему. Для этого в поле Select a system щелкните мышью по значку раскрытия списка. В появившемся списке выберите строку «DE2-70 Basic Computer» или «DE2-115 Basic Computer».

5.4. Выполните загрузку выбранной процессорной системы в кристалл ПЛИС на стенде, используя команду Download System из меню Actions.

5.5. Вставьте в текст программы рассмотренную в пункте 5.2 команду умножения. Экспериментально определите поведение программы при выполнении этой команды. Отразите в отчете. Следует напомнить, что во вновь установленной процессорной системе не поддерживается аппаратное умножение.

5.6. Модифицируйте обработчик исключений таким образом, чтобы он передал управление процедуре, которая эмулирует выполнение команды mul. Для этого понадобится написать соответствующую процедуру.

Отчетные материалы

Отчетные материалы должны содержать:

  1. Цель лабораторной работы.
  2. Материалы, связанные с подготовкой к работе, включая теоретическую часть и заготовку программы. Обязательно включите в отчет описание регистров, влияющих на прерывания процессора.
  3. Информацию по выполнению каждого пункта задания. Причем в отчете должны содержаться выполняемые Вами действия, наблюдаемые результаты и Ваши объяснения.
  4. Написанные Вами фрагменты программ.
  5. Краткое заключение.

Защита лабораторной работы

На защите студенты должны продемонстрировать умение использовать кнопки для прерывания текущей программы и выполнения ввода и вывода информации в процессорную систему.

Например, по кнопке Key 3 выполнить вывод младшего байта, задаваемого ползунковыми переключателями, на HEX0, по кнопке Key 2 выполнить вывод старшего байта, задаваемого ползунковыми переключателями, на HEX1, по кнопке Key 1 погасить индикаторы HEX1 и HEX0.

Приложения

Приложение – А

Рис. 6.1 – Регистры управления Nios II

Рис. 6.2 – Регистры общего назначения процессора Nios II

Исключения и прерывания в процессорной системе

Адрес сброса процессора Nios II в процессорной системе «DE2-70 Media Computer» установлен 0x00000000. Адрес, используемый для всех общих исключений и аппаратных прерываний – 0x00000020. Так как процессор Nios II использует один и тот же адрес для общих исключений и аппаратных прерываний, обработчик исключений должен определить источник исключения, анализируя соответствующий регистр состояния процессора. Таблица 6.1 содержит номера запросов прерываний IRQ для каждого устройства ввода/вывода в процессорной системе.

Таблица 6.1 Номера запросов прерываний от устройств ввода/вывода процессорной системы

Устройство ввода/вывода№ прерывания(IRQ)
Интервальный таймер0
Параллельный порт кнопок1
Аудиопорт6
PS/2 (для клавиатуры)7
PS/2 (для мыши)17
JTAG8
Последовательный порт10
Параллельный порт расширения JP111
Параллельный порт расширения JP212

Рис. 6.3 – Регистры параллельного порта ввода/вывода

Рис. 6.4 – Регистры параллельного порта ввода с кнопок

Причины прерываний:

  • Аппаратное прерывание
  • Программная ловушка (команда trap): Команды trap и eret аналогичны командам call и ret, но используются для вызова/возврата из обработчика исключений.
  • Невыполнимая команда

Команда mul:

mul (multiply registers) – умножение R типа (операнды в регистрах).

Приложение – Б

Листинг 8

Исходный файл программы hex_display.s

Примечание: Код листинга 8 будет добавлен вручную.

Листинг 9

Исходный файл программы interrupt_example.s

Примечание: Код листинга 9 будет добавлен вручную.

Листинг 10

Исходный файл программы exception_handler.s

Примечание: Код листинга 10 будет добавлен вручную.

Листинг 11

Исходный файл программы interval_timer.s

Примечание: Код листинга 11 будет добавлен вручную.

Листинг 12

Исходный файл программы pushbutton_ISR.s

Примечание: Код листинга 12 будет добавлен вручную.

Чеклист выполнения

  • Работа выполнена
  • Отчет подготовлен