Часть 1. Исследование работы интервального таймера (запуск, считывание текущего состояния и останов)

1. Напишите фрагмент программы, в котором вначале задается максимальное значение счетчика для интервального таймера. Следующая команда выполняет запуск таймера, а следующая – фиксирует его текущее значение. Для этого необходимо выполнить запись в соответствующий регистр таймера (snapshot). Затем выполняется загрузка из регистра snapshot в регистр процессора с использованием операций полусловного чтения и считывание регистра состояния таймера. Следующая команда выполняет безусловный переход сама на себя.

2. Выполните программу из предыдущего пункта по шагам. Запишите в отчет считанные значения со счетчика таймера и состояния битов RUN и TO регистра состояния таймера.

3. Повторите выполнение предыдущего пункта, выдержав паузу перед выполнением команды записи в регистр snapshot таймера.

4. Поставьте контрольную точку на последней команде (команда br) и запустите программу. Запишите в отчет наблюдаемые результаты. Объясните наблюдаемое значение бита ТО.

5. Напишите фрагмент кода, в котором выполняется задание интервала для таймера, старт таймера и его останов с последующим считыванием текущего значения счетчика таймера в регистр процессора по аналогии с пунктом 1. первой части.

6. Выполните программу из предыдущего пункта по шагам. Запишите в отчет считанные значения со счетчика таймера и состояния битов RUN и TO регистра состояния таймера.

7. Повторите выполнение предыдущего пункта, выдержав паузу перед выполнением команды записи в регистр snapshot таймера.

8. Повторите выполнение предыдущих пунктов, вставив после выполнения останова таймера команду записи в регистр snapshot таймера.

9. Поставьте контрольную точку на последней команде (команда br) и запустите программу. Запишите в отчет наблюдаемые результаты. Объясните наблюдаемое значение бита ТО.

10. Оцените длительность выполнения команд процессора ldw, stw, ldwio, stwio и некоторых других, вставив их в фрагмент программы из пункта 4 между командами запуска таймера и считыванием его текущего значения. Попробуйте обратиться к памяти, реализованной на кристалле, к статической и динамической памяти. Отразите в отчете наблюдаемые значения.

11. Вставьте в программу из пункта 4 после команды запуска таймера команду вычитания единицы из регистра, например R3, процессора. Повторите выполнение 4 пункта задания. Определите длительность выполнения команды subi.

12. Подтвердите Ваши выводы, вставив в программу подряд несколько команд subi.

13. Добавьте в программу из пункта 6 команду перехода на повтор команды subi, если текущее значение R3 не равно 0. Экспериментально оцените длительность выполнения команды bne в случаях, когда переход на повтор команды вычитания subi не выполняется и когда выполняется. Подтвердите Ваши выводы, задавая разные значения R3.

14. Рассчитайте длительность выполнения цикла уменьшения R3 для случая, когда R3 равняется n, и экспериментально проверьте Ваши расчеты, задавая разные значения n. Рекомендуется эксперимент проводить следующим образом. Первую контрольную точку следует установить перед командой записи начального значения в счетчик таймера. Вторая контрольная точка устанавливается в конце программы.

15. Рассчитайте начальное значение R3 таким образом, чтобы программный цикл выполнялся ровно 1 минуту (90 секунд). Проверьте рассчитанное значение экспериментально, сверяя время выполнения фрагмента программы с наручными часами. Покажите выполнение этого пункта преподавателю. Чтобы более точно обнаружить время завершения, в конце программы используйте включение светодиодов.

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

17. Реализуйте в Вашей программе программный счетчик секунд и выведите его состояние на светодиоды. Проверьте правильность его работы, сверяя с наручными часами.

Часть 2. Использование интервального таймера в приложениях пользователя

1. Рассчитайте начальное значение счетчика таймера таким образом, чтобы он подсчитывал интервал длительностью 30 секунд и по окончанию формировал сигнал прерывания. Основная программа разрешает прерывания от таймера, задает длительность интервала для таймера и запускает его. Затем она выводит Ваши фамилию, имя и отчество на экран LCD в режиме бегущей строки. Обработчик прерывания зажигает светодиоды и выполняет возврат в основную программу. Экспериментально проверьте работу программы, сопоставив интервал с Вашими часами. Запишите в отчет значение регистра состояния таймера.

2. Рассчитайте длительность максимального интервала, формируемого таймером, с учетом того, что его тактовая частота равна 50 МГц (для стендов DiLab и miniDilab частота равна 25МГц). Проверьте экспериментально, сопоставив с Вашими часами.

3. Модифицируйте программу из первого пункта таким образом, чтобы прерывания от таймера формировались каждую секунду. Обработчик прерывания реализует счетчик секунд и выводит его значение на светодиоды и HEX-индикаторы в шестнадцатеричном виде. Используйте для этого процедуру из 3 лабораторной работы. Проверьте правильность работы программы, визуально наблюдая отображаемые значения и сопоставляя их с показаниями Ваших часов.

4. Модифицируйте процедуру из 2 лабораторной работы, в которой осуществляется вывод на дисплей LCD текстовой информации в режиме бегущей строки. Используйте для этого прерывания от таймера, формируемые через каждые 200 мс.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: