Главная страница
Навигация по странице:

  • Контрольные вопросы

  • Практическая работа №77. Программные модели аппаратных средств микропроцессорных систем (алгебра логики). Цель работы

  • Общие сведения

  • Практическая часть

  • Практическая работа №78. Программные модели аппаратных средств микропроцессорных систем (минимизирование). Цель работы

  • Методические указания для практических занятий по дисциплине мдк. 02. 01


    Скачать 7.37 Mb.
    НазваниеМетодические указания для практических занятий по дисциплине мдк. 02. 01
    Дата09.09.2022
    Размер7.37 Mb.
    Формат файлаpdf
    Имя файлаMetod_Mikroprocessornye-sistemy_PZ_09.02.01_2020.pdf
    ТипМетодические указания
    #669073
    страница42 из 43
    1   ...   35   36   37   38   39   40   41   42   43
    Практическая часть.
    Перед началом выполнения практической части необходимо ознакомиться с лабораторной установкой на базе платы Freescale и программным обеспечением CodeWarrior. В практической части данной работы рассматривается программирование регистров модуля АЦП.
    Регистр ATDCTL2, расположенный в памяти МК по адресу 0x0062, управляет работой модуля аналого_цифрового преобразователя ATD. Бит 7 этого регистра разрешает (1) или запрещает (0) работу модуля. Этот бит, обозначенный в техническом описании как ATPU (ATD Powerup Bit), устанавливается в 0 в состоянии сброса МК. Для включения модуля ATD в работу необходимо программно установить этот бит в 1. На языке Ассемблера это действие может быть произведено следующим фрагментом программы:
    Первые две строки программы содержат директивы присвоения EQU языка Ассемблер, которые информируют программу о том, что вместо имени ATDCTL2 в кодах программы следует использовать значение $0062, а вместо ATD_INI – $80 или 10000000 в двоичном коде.
    Команда LDAA использует непосредственную адресацию, в результате ее выполнения число $80 загрузится в аккумулятор ACC. Команда STAA с прямой адресацией пересылает содержимое
    ACC в ячейку с адресом ATDCTL2. В результате, код в регистре управления ATDCTL2 будет

    340
    равен 10000000, т.е. установленный в 1 бит 7 вызовет включение модуля АЦП. На языке Си аналогичное действие выполняет следующий программный фрагмент:
    Сравнить преимущества написания программ на C и на Ассемблер.
    Контрольные вопросы
    1) Структура памяти микроконтроллеров.
    2) Память программ.
    3) Память данных.
    4) Энергозависимая память.
    5) Энергонезависимая память.
    6) Регистры специальных функций МК.
    7) Регистры управления модулем АЦП.
    8) Стековая память.
    9) Преимущества программирования на языке Си и Ассемблер.
    Практическая работа №77. Программные модели аппаратных средств
    микропроцессорных систем (алгебра логики).
    Цель работы: ознакомление с устройством ввода/вывода микроконтроллеров. Изучение спецификации портов на примере МК Motorola.
    Общие сведения
    Все МК семейства 68HC12 имеют некоторое количество линий ввода/вывода данных.
    Линии объединены в 8 разрядные параллельные порты данных: Port A, Port B, Port E, PORT AD и т.д. За редким исключением, все линии ввода/вывода двунаправленные. Направление передачи линий ввода/вывода настраивается программно путем записи управляющего слова в регистр направления передачи соответствующего порта. Возможно изменение направления передачи в ходе выполнения программы посредством перепрограммирования этих регистров. Сигнал сброса устанавливает все двунаправленные линии в режим ввода.
    Следует особо подчеркнуть, что направление передачи каждой линии может быть выбрано разработчиком произвольно, независимо от ругих линий, принадлежащих к одному и тому же порту ввода/вывода. Исключение составляют лишь линии однонаправленной передачи, которые изначально специализированы на ввод или на вывод. Часть линий ввода/вывода имеют так называемую альтернативную функцию, т.е. обеспечивают связь встроенных периферийных модулей МК с «внешним миром». Так линии порта PORT AD используются для подключения к встроенному АЦП измеряемых напряжений, линии порта PORT S служат входами и выходами контроллеров последовательного обмена. Если соответствующий периферийный модуль МК не используется, то его выводы можно задействовать как обычные линии ввода/вывода. Если линии порта двунаправленные, то для его обслуживания такого порта предусмотрены два типа регистров: PORTx – регистр данных порта x, где x – имя порта ввода/вывода; DDRx – регистр направления передачи порта x. Например, порт PORT A обслуживается регистрами PORTA и
    DDRA, а порт PORT B – регистрами PORTB и DDRB.
    Если порт имеет схемотехнику с программно подключаемым «подтягивающим» резистором (R pull_up), то для обслуживания такого порта предусмотрен дополнительный регистр входного сопротивления порта. Ниже приведен фрагмент текста программы, которая

    341
    конфигурирует PORT T для вывода данных, а затем записывает в порт число S62. Для того, чтобы все линии порта PORT T стали линиями вывода, необходимо записать в регистр направления передачи DDRT код $FF. Спецификация портов ввода/вывода Подсистема параллельного ввода/вывода МК B32 состоит из 8 портов, причем линии многих портов обладают альтернативной функцией. Мы рассмотрим эти порты в порядке их расположения на рисунке по часовой стрелке.
    1)PORT A. В однокристальном режиме работы – 8 разрядный порт ввода/вывода общего назначения. Направление передачи каждой линии порта определяется соответствующим битом регистра DDRA. В расширенном режиме работы на линиях порта формируются сигналы старшего байта мультиплексированной магистрали адрес/данные ADDR15_8/DATA15_8. В расширенном режиме с 8 разрядной шиной линии порта представляют собой мультиплексированную магистраль ADDR15_8/DATA7_0. 20 2) PORT B. В однокристальном режиме работы – 8 разрядный порт ввода/вывода общего назначения. Направление передачи каждой линии порта определяется соответствующим битом регистра DDRB. В расширенном режиме работы на линиях порта формируются сигналы младшего байта мультиплексированной магистрали адрес/данные ADDR7_0/DATA7_0. В расширенном режиме с 8 разрядной шиной линии порта представляют собой немультиплексированную магистраль ADDR7_0.
    3) PORT E. 8_разрядный порт ввода/вывода общего назначения. Две линии порта PE0 и
    PE1 – однонаправленные и работают только на ввод. Остальные линии порта – двунаправленные, направление передачи линий PE2 и PE7 определяется соответствующими битами регистра DDRE. Все линии порта имеют альтернативную функцию. Линии PE1 и PE0 могут использоваться как входы внешних прерываний IRQ и XIRQ. Остальные линии служат для задания режимов работы МК (MOD A и MOD B) и в качестве сигналов управления внешней шиной при работе МК в расширенно режиме.
    4) PORT AD. Однонаправленный 8_разрядный порт ввода. Все линии имеют альтернативную функцию. Если работа модуля аналого-цифрового преобразователя ATD разрешена, то линии порта используются для подключения измеряемых аналоговых сигналов.
    5) PORT T. Двунаправленный 8 разрядный порт ввода/вывода общего назначения.
    Направление передачи каждой линии порта определяется соответствующим битом регистра
    DDRT. Альтернативная функция линий порта PORT T – обслуживание модуля таймера. Если работа таймера разрешена, то линии используются в качестве входов входного захвата IC или выходов выходного сравнения OC.
    6) PORT S. Двунаправленный 8 разрядный порт ввода/вывода общего назначения.
    Направление передачи каждой линии порта определяется соответствующим битом регистра
    DDRS. Альтернативная функция линий порта PORT S – обслуживание модулей последовательного обмена SCI и SPI.
    7) PORT P. Двунаправленный 8 разрядный порт ввода/вывода общего назначения.
    Направление передачи каждой линии порта определяется соответствующим битом регистра
    DDRP. Четыре линии порта PORT P могут использоваться в качестве выходов модуля генератора
    ШИМ сигнала (модуль PWM), если работа последнего программно разрешена.
    8) PORT DLC. Двунаправленный 8_разрядный порт ввода/вывода общего назначения.
    Направление передачи каждой линии порта определяется соответствующим битом регистра
    DDRDLC. Альтернативная функция двух линий порта PORT DLC – обслуживание модуля последовательного обмена в стандарте BDLC.
    Регистры управления портами В МК семейства 68HC12/HCS12 каждый двунаправленный порт ввода/вывода общего назначения обслуживается двумя регистрами специальных функций.
    Это регистр данных порта и регистр направления передачи DDRx (вместо буквы «x» следует подставить буквенное обозначение порта). Если линии порта общего назначения настроены на ввод, то операция чтения регистра данных возвращает состояние выводов корпуса МК, с которыми связан порт. Если порт настроен на вывод, то операция записи в регистр данных устанавливает на выводах корпуса МК, связанных с портом, соответствующие логические уровни. Регистр DDRx определяет направления передачи каждой линии порта независимо от

    342
    других линий этого же порта. Если какой либо бит регистра DDRx равен 0, то соответствующая линия настраивается на ввод, если 1 – то на вывод. Возможны решения, при которых часть линий одного и того же порта настроена на ввод, а часть на вывод. Например, при значении
    DDRx=10110010 линии D6, D3, D2 и D0 развернуты на ввод, а21 линии D7, D5, D4 и D1 – на вывод. В состоянии сброса МК все биты регистров направления передачи DDRx сбрасываются, поэтому сразу после включения питания все линии портов МК конфигурированы как входы с высоким входным сопротивлением.
    Практическая часть
    Перед началом выполнения практической части необходимо ознакомиться с лабораторной установкой на базе платы Freescale и программным обеспечением CodeWarrior. В практической части мы рассмотрим работу порта PORTA. Для этого подключим группу зеленых и красных светодиодов к выводам этого порта. Схема подключения показана на рисунке ниже.
    Договоримся, что если на линии порта установлена 1, то будет гореть зеленый светодиод, если логический 0 – то красный светодиод. А если линия порта переведена в состояние ввода, т.е. она представляется для цепи светодиодов нагрузкой с высоким входным сопротивлением, то оба светодиода окажутся погашенными. Ниже приведена блок-схема алгоритма программы, которая зажигает на 30 мс зеленым цветом светодиоды с четными номерами и одновременно красным цветом светодиоды с нечетными номерами. Следующие 30 мс светодиоды «меняются цветами», далее этот процесс продолжается до бесконечности. Ниже приведен текст программы на языке Си, который реализует этот алгоритм.

    343
    Обратите внимание, что функция задержки на 30 мс использует вложенную функцию задержки на 100 мкс.
    В приведенном тексте программы для формирования задержки на 100 мкс используются
    50 циклов повторения операторов функции delay_100us. Выбор числа повторений производился из предположения, что данная программа будет исполняться микроконтроллером, частота внутренней шины которого составляет 8 МГц. По результатам рассмотрения файла в формате
    *.lst было установлено, что команды ассемблера, соответствующие одному повторению цикла функции delay_100us , реализуются за 16 машинных циклов. При частоте шины в 8 МГц для формирования временного интервала в 100 мкс потребуется 800 машинных циклов. Поэтому число повторений цикла функции delay_100us должно составлять 800/16 = 50. Если бы эта программа исполнялась бы микроконтроллером DP256, частота внутренней шины которого составляет 25 МГц, то число циклов функции delay_100us должно было бы быть увеличено до
    156.
    Контрольные вопросы
    1) Назначение устройств ввода/вывода информации.
    2) Типы портов и алгоритмы обмена информацией.

    344 3) Направление работы портов.
    4) Спецификация портов.
    5) Специальные регистры управления портами.
    6) Дополнительные регистры управления портами.
    7) Схема для реализации проверки состояния линий портов.
    8) Программирование портов ввода/вывода.
    9) Программная реализация временной задержки на языке Си и Ассемблер.
    Практическая работа №78. Программные модели аппаратных средств
    микропроцессорных систем (минимизирование).
    Цель работы: ознакомление с состояниями сброса и прерывания микроконтроллеров в процессе выполнения программы управления.
    Общие сведения
    В процессе исполнения прикладной программы МК реализует монотонную многократно повторяющуюся последовательность действий:
    • Выборку кода команды из памяти программ в регистр команды центрального процессора;
    • Дешифрацию кода команды;
    • Выборку из памяти следующих байтов команды;
    • Исполнение команды;
    • Сохранение в памяти результатов исполнения команды.
    Если исполняется линейная последовательность команд, то содержимое счетчика PC центрального процессора постоянно увеличивается на 1, обеспечивая выборку из памяти следующих команд прикладной программы. Линейная последовательность исполняемых команд может быть изменена под управлением самой программы, например инструкциями «jmp» или
    «branch». При этом в счетчик команд под управлением программы будет записано новое число, и начнется исполнение следующего линейного фрагмента программы из другого сегмента памяти программ.
    Несмотря на явные различия механизмов формирования следующего за исполнением текущей операции значения счетчика команд PC, в обоих рассмотренных случаях это следующее значение PC определяется ходом вычислительного процесса и предсказывается программистом в ходе написания прикладной программы. В противоположность только что рассмотренному полностью предсказуемому потоку событий, который формируется самой микропроцессорной системой, существует еще поток внешних событий, очередность и моменты возникновения которых не синхронизированы с исполнением центральным процессором тех или иных команд прикладной программы. Однако МК должен реагировать на эти события, для чего необходимо изменить последовательность исполнения операторов программы в произвольный, непредсказуемый с точки зрения устройства управления центральным процессором момент времени.
    Такое изменение реализуется принудительной записью нового значения в счетчик команд
    PC под управлением специальных аппаратных средств микроконтроллера, которые реагируют на внешние события. Включение в работу механизма принудительного изменения текущего значения счетчика команд нельзя считать аварийным состоянием микропроцессорной системы.
    Это лишь специальное состояние, которое позволяет организовать эффективное распределение ресурса одного центрального процессора для обслуживания нескольких устройств, генерирующих в реальном времени несвязанные между собой внешние события.
    По способу обработки микроконтроллером исключения подразделяются на прерывания и сброс. В русскоязычной литературе термин «исключение» обычно не используется, и говорят просто о состоянии прерывания или о состоянии сброса микроконтроллера.

    345
    Состояния сброса и прерывания в микроконтроллерах семейства Motorola МК семейства
    68HC12/HCS12 обладают мощной системой обработки исключений. По способу реакции микроконтроллера на возмущающие события исключения делятся на прерывание и на сброс.
    • МК реализует прерывание или МК находится в состоянии прерывания;
    • МК находится в состоянии сброса или в состоянии начального запуска.
    Прерывания в свою очередь делятся на маскируемые и немаскируемые. Состояние сброса микроконтроллера Микроконтроллер семейства 68HC12/HCS12 переходит в состояние сброса по внешнему сигналу или при наступлении определенных внутренних событий. В состоянии сброса программный счетчик и часть битов регистра состояния центрального процессора, а также определенные в техническом описании регистры специальных функций периферийных модулей устанавливаются в начальное состояние. Это состояние однозначно определяет аппаратную конфигурацию микроконтроллера, с которого он начнет работу после включения питания.
    Поэтому второе название состояния сброса – состояние начального запуска. Состояние сброса
    МК использует также для восстановления работоспособного состояния после обнаружения внутренней аварийной ситуации.
    Различают четыре источника событий, которые переводят МК в состояние сброса:
    1) Внешний сброс (External reset). Все МК семейства 68HC12/HCS12 имеют специальный вывод корпуса RESET для подачи сигнала внешнего сброса. Активный уровень сигнала – логический 0. Пока на входе RESET удерживается низкий уровень сигнала, МК будет находиться в состоянии сброса. После перевода линии RESET в состояние логической 1 МК перейдет в активный режим работы по истечении задержки, которая составляет 4096 периодов системной магистрали МК.
    2) Внутренний сброс по нарастанию напряжения питания (Power on reset – POR).
    Нарастание напряжения на входе VDD микроконтроллера вызывает состояние сброса. Таким образом реализуется начальный запуск МК с однозначно определенной аппаратной конфигурацией и с известным начальным адресом запускаемой на исполнение программы.
    3) Внутренний сброс по сторожевому таймеру (Computer Operating Properly reset – COP).
    Логика работы сторожевого таймера позволяет микроконтроллеру выявлять перемежающиеся ошибки в исполнении прикладной программы, которые могут возникнуть в результате электромагнитных помех или при колебаниях напряжения питания микропроцессорной системы.
    В процессе отладки работа сторожевого таймера запрещена. Работа модуля сторожевого таймера разрешается в конечном варианте прикладной программы, который используется при работе МК в системе. Сторожевой таймер – это счетчик, коэффициент счета которого настраивается пользователем при инициализации системы. Счетчик начинает счет внутренних тактовых импульсов в момент начала исполнения программы. Если счетчик переполнится, то
    МК перейдет в состояние сброса. Правильно исполняемая прикладная программа, в которой очередность исполнения операторов совпадает с предусмотренной программистом очередностью, должна постоянно сбрасывать сторожевой таймер. Тогда внутреннего сброса от него случаться не будет. Для сброса сторожевого таймера в МК семейства 68HC12/HCS12 необходимо в регистр COPRST записать сначала код $55, а затем код $AA.
    При создании конечного кода прикладной программы разработчик должен разместить операции записи приведенной последовательности кодов так, чтобы исполнение программы по любому26 возможному пути обеспечивало бы выполнение команд сброса через меньшие интервалы времени, чем период переполнения сторожевого таймера.
    4) Внутренний сброс по отклонению частоты тактовых импульсов МК (Clock Monitor reset). МК переводится в состояние сброса, когда модуль встроенного генератора тактирования обнаруживает выход частоты тактирования за заданные пределы или просто останов системы тактирования. Состояние прерывания микроконтроллера Немаскируемые прерывания. В соответствие со своим названием немаскируемые прерывания не могут быть отключены пользователем. Однако в предыдущем абзаце было упомянуто, что установка бита X в 1 запрещает немаскируемые прерывания. Значение бита X действительно равно 1 в состоянии сброса МК. Однако далее он может быть установлен в 0 под управлением программы инициализации, разрешая тем самым немаскируемые прерывания. Далее этот бит не может быть

    346
    изменен под управлением программы, и в этом его отличие от бита глобальной маски прерываний I.
    Три типа немаскируемых прерываний реализуются в МК 68HC12/HCS12:
    1) Прерывание по внешнему запросу XIRQ. Все МК 68HC12/HCS12 имеют вывод внешнего немаскируемого прерывания XIRQ. Активный уровень сигнала для генерации запроса на прерывание – логический 0.
    2) Прерывание по несуществующему коду команды. Каждая инструкция языка ассемблер
    МК имеет собственный код. В МК 68HC12/HCS12 коды операций могут быть однобайтовыми и двухбайтовыми. Но не все теоретически возможные коды использованы для кодирования реальных команд процессорного ядра CPU12. Если на этапе выборки кода команды из памяти произошло считывание несуществующего кода команды, то генерируется запрос на немаскируемое прерывание.
    3) Программное прерывание – инструкция SWI. Система команд МК 68HC12/HCS12 имеет инструкцию программного прерывания, которая позволяет перейти к исполнению подпрограммы прерывания из прикладной программы.
    Маскируемые прерывания.
    1) Прерывание по внешнему запросу IRQ. Все МК 68HC12/HCS12 имеют вывод внешнего маскируемого прерывания IRQ. Активный уровень сигнала для генерации запроса на прерывание – логический 0. В некоторых приложениях требуется принять запросы от нескольких внешних источников сигналов. Для таких случаев следует использовать дополнительный логический элемент, который объединяет запросы от всех источников по логике ИЛИ Если запрос на вход IRQ поступил, и МК перешел к выполнению подпрограммы прерывания, то в этой подпрограмме следует опросить линии порта для того, чтобы установить, какой из источников вызвал прерывание. Обработка нескольких объединенных по ИЛИ запросов с программным поиском установившего запрос источника называется поллингом.
    2) Прерывание по таймеру меток реального времени RTI. Таймер меток реального времени генерирует последовательность равноотстоящих во времени запросов на прерывание.
    Период повторения запросов настраивается программистом. Эти прерывания могут быть использованы для регулярного выполнения микроконтроллером некоторой задачи. Например, для измерения напряжения аккумуляторной батареи каждые три мин, чтобы сигнализировать о необходимости ее замены. Мы рассмотрим особенности прерываний RTI в главе 7 на примере управления скоростью вращения электрическим двигателем.
    3) Прерывание по событию канала захвата/сравнения (IC/OC) таймера. Восемь одинаковых блоков в составе модуля таймера, которые именуют «каналами», 27 предназначены для контроля за уровнем сигнала на входе канала или для изменения в строго определенный момент времени логического уровня на выходе канала. Заданное программистом изменение входного или выходного сигнала канала рассматривается как событие, которое генерирует запрос на прерывание. Например, если канал настроен на слежение за перепадом входного сигнала из 1 в 0, то когда такое изменение произойдет, будет выставлен запрос на прерывание.
    4) Прерывание по переполнению таймера. Основным блоком модуля таймера является
    16_разрядный счетчик временной базы. Этот счетчик невозможно остановить. Также невозможно изменить его коэффициент счета, который составляет 216 = 65536. Поэтому регулярно счетчик временной базы изменяет свой код с $FFFF на $0000. Такое изменение кода называют переполнением счетчика. В момент переполнения по желанию программиста может генерироваться запрос на прерывание, в то время как счетчик продолжает считать дальше. Такие прерывания особенно удобны при необходимости измерения очень больших временных интервалов. Для этого в микроконтроллере производят подсчет, сколько переполнений счетчика произошло за этот временной интервал, и, зная период счета счетчика, определяют длительность исследуемого временного интервала.
    5) Прерывание по переполнению счетчика внешних событий. Когда счетчик внешних событий переполняется, то может генерироваться запрос на прерывание точно так же, как и для счетчика временной базы.

    347 6) Прерывание по событию на входе счетчика внешних событий. Этот запрос на прерывание формируется, если сигнал на входе счетчика внешних событий изменил свое значение. Характер изменения, т.е. перепад из 0 в 1, или из 1 в 0, или любое изменение логического уровня, определяется программистом.
    7) Прерывание от модулей контроллеров последовательного ввода/вывода SCI и SPI.
    Каждый модуль последовательного ввода/вывода формирует целую группу запросов на прерывание: при завершении передачи слова, при приеме слова, при обнаружении различного рода нарушений в протоколе передачи информации.
    8) Прерывание от модуля АЦП. Модуль аналого-цифрового преобразователя формирует запрос на прерывание, когда процесс оцифровки очередного сигнала завершен, и двоичный код сигнала может быть считан в память МК.
    9) Прерывание при выходе МК из энергосберегающих режимов. Это прерывание позволяет вывести МК из состояния STOP или WAIT, в котором он находился с целью снижения потребляемой энергии. Такие прерывания очень полезны при объединении нескольких МК в информационную сеть.
    1   ...   35   36   37   38   39   40   41   42   43


    написать администратору сайта