Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
15.03.2016
Размер:
177.03 Кб
Скачать

6. ЭМУЛЯТОРЫ ПЗУ

6.1. ПРИНЦИПЫ РАБОТЫ ЭМУЛЯТОРОВ ПЗУ

Идея эмулятора ПЗУ очень проста. Коды управляющих программ контроллера, написанных и оттранслированных с помощью персонального компьютера, мы записываем в ОЗУ, которое затем включается в схему контроллера вместо ПЗУ. После этого проверяется работа контроллера в целом. В случае необходимости программы очень легко поменять и снова перезагрузить их в ОЗУ. Полностью отлаженные на реальной рабочей схеме контроллера программы записываются в ПЗУ. Таким образом, процесс отладки существенно упрощается. Часто при использовании эмулятора ПЗУ в состав загружаемой программы включают монитор-отладчик.

Итак, эмулятор ПЗУ - программно-аппаратное средство, позволяющее замещать ПЗУ на отлаживаемой плате и подставляющее вместо него ОЗУ, в которое может быть загружена программа с компьютера через один из стандартных каналов связи. Это устройство позволяет пользователю избежать многократных циклов перепрограммирования ПЗУ. Эмулятор ПЗУ имеет смысл только для микроконтроллеров, которые в состоянии обращаться к внешней памяти программ. Это устройство сравнимо по сложности и по стоимости с платами развития. Оно имеет одно большое достоинство: универсальность. Эмулятор ПЗУ может работать с любыми типами микроконтроллеров.

Ранние эмуляторы ПЗУ позволяли только загружать программу, запускать ее и останавливать, используя общий сброс. Затем появились усложненные модели с аппаратной выработкой сигналов трассировки по достижении определенного адреса на осциллограф. Эмулируемая память в таких изделиях была доступна для просмотра и модификации, но очень важный контроль за внутренними управляющими регистрами микроконтроллера был до недавнего времени невозможен.

Однако появились модели интеллектуальных эмуляторов ПЗУ, которые позволяют "заглядывать" внутрь микроконтроллера на плате пользователя и вообще, по управлению отладкой, стали похожими на внутрисхемный эмулятор. Фирма Cactus даже представляет свой фактически интеллектуальный эмулятор ПЗУ, как внутрисхемный эмулятор ряда микропроцессоров, настолько невозможно отличить работу с тем и другим. В действительности, процессор здесь не замещается, а используется тот, что стоит на плате пользователя.

Интеллектуальные эмуляторы ПЗУ представляют собой гибрид из обычного эмулятора ПЗУ, монитора отладки и схем быстрого переключения шины с одного на другой. Этим создается эффект, как если бы монитор отладки был установлен на плате пользователя и при этом он не занимает у микроконтроллера никаких аппаратных ресурсов, кроме небольшой зоны программных шагов, примерно 4К. Например, такое устройство разработала фирма "Фитон" для всех существующих и будущих микроконтроллеров, которые имеют ядро от 8051 но дополнительно насыщенны различными устройствами ввода - вывода. Это устройство поддерживает множество самых разных микроконтроллеров фирм Philips, Siemens, OKI.

Рассмотрим функциональную схему простого эмулятора ПЗУ (рис. 6.1). Структура эмулятора помимо собственно микросхемы ОЗУ объемом 32 К х 8 (типа 62256) содержит интерфейсную часть (ИЧ),15-разрядный регистр адреса (на двух МС КР1533ИР23), 16-разрядный двухканальный мультиплексор адреса и сигнала выбора ОЗУ (на четырех МС КР1533КП11) и два 8-разрядных буфера данных (на МС КР1533АП5). Схема работает в одном из двух возможных режимов (сигнал РЕЖИМ): записи информации из компьютера в ОЗУ и эмуляция ПЗУ.

Рис. 6.1. Структурная схема эмулятора ПЗУ

Интерфейсная часть служит для связи эмулятора с персональным компьютером. В режиме записи информации ОЗУ находится в состоянии записи, мультиплексор пропускает на свои выходы код адреса ОЗУ с регистра адреса, нижний (по схеме) буфер данных открыт и пропускает на входы данных ОЗУ данные с ИЧ, верхний (выходной) буфер данных закрыт. Для записи каждой ячейки ОЗУ сначала в регистр адреса по сигналам ЗА1 и ЗА2 записывается адрес этой ячейки, а затем в нее производится запись данных по сигналу ЗД.

В режиме эмуляции ОЗУ переводится в режим чтения, мультиплексор пропускает адрес и сигнал CS с отлаживаемого контроллера, нижний буфер данных закрыт, а верхний (выходной) передает данные из ОЗУ на отлаживаемый контроллер. То есть ОЗУ выступает в качестве ПЗУ.

Сопряжение эмулятора с компьютером можно осуществлять различными способами: через ISA, через Centronics и даже через RS-232С (так как протокол обмена предельно прост, и скорость обмена с компьютером абсолютно некритична). Стоит отметить, что для отладки самой схемы эмулятора весьма полезной оказывается возможность проверки правильности информации, записанной в ОЗУ. Для реализации этого режима требуется использовать двунаправленный буфер данных для обмена с ИЧ. Но схема эмулятора при этом несколько усложнится, и протокол обмена с ней уже не будет настолько простым.

6.2. ОТЛАДКА ПРОГРАММЫ МИКРОКОНТРОЛЛЕРА СЕМЕЙСТВА MCS-51 С ПОМОЩЬЮ ЭМУЛЯТОРА ПЗУ

В настоящее время отладку программы МК проводят обычно кросс-средствами на базе управляющего компьютера. Это позволяет в минимальной степени отвлекать ресурсы МК и обеспечивает поддержку системы в процессе ее отладки. Отлаживаемое устройство соединяется с управляющим компьютером через эмулятор ПЗУ, загружае-

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

Хотя эмулятор ПЗУ является не единственным и не самым мощным отладочным средством, его популярность и "долголетие" обеспечиваются следующими достоинствами:

универсальность применения независимо от типа МК (необходима только возможность работы с внешней памятью программ);

работа в реальном масштабе времени;

невысокая цена и доступность широкому кругу профессиональных разработчиков и радиолюбителей.

Рассмотрим особенности отладки рабочей программы с помощью эмулятора ПЗУ на примере МК семейства 8051 (1816ВЕ31(51), 1830ВЕ31(51), 80(С)31(51) и т.п.). Для визуального контроля сигналов в отлаживаемом устройстве будем пользоваться осциллографом.

Приступая к отладке, необходимо проверить работоспособность аппаратной части системы и прежде всего самого МК. Для этого воспользуемся тестами "свободного счета", которые заключаются в переборе всех возможных кодовых комбинаций на линиях портов МК.

Прежде всего, убедитесь по схеме отлаживаемого устройства, что линии портов МК не нагружены на выходы других элементов и временно отсоедините такие нагрузки, если они есть. Это необходимо сделать потому, что в процессе тестирования линии портов МК будут устанавливаться в состояние вывода. Загрузите эмулятор ПЗУ кодами 00h в пределах адресного пространства программ МК. При выполнении такой тестовой программы МК последовательно перебирает все адреса программной памяти, выполняя на каждом шаге команду "нет операции". Запустив программу на выполнение, проконтролируйте осциллографом сигналы ALE, PME и портов P0, P2. Вид сигналов на линиях портов должен соответствовать временным диаграммам двоичного счетчика с учетом мультиплексирования младшего байта адреса и данных на порте P0.

Далее проверьте порты P1 и P3, загрузив эмулятор ПЗУ следующей тестовой программой:

MOV

P1, #0

; (P1):=0

MOV

P3, #0

; (P3):=0

MARK:

 

 

INC

P1

; (P1):=(P1)+1

INC

P3

; (P3):=(P3)+1

SJMP

MARK

; Переход на метку MARK

Эта программа выводит на линии указанных портов последовательность кодов от 00h до FFh, моделируя восьмиразрядный двоичный счетчик. Если временные диаграммы сигналов на линиях портов P1 и P3 соответствуют требуемым, восстановите отключенные нагрузки портов и переходите к отладке программы МК. Помните, что вы отлаживаете одновременно программную и аппаратную часть системы, и не забывайте периодически контролировать осциллографом ее сигналы в контрольных точках. Несоответствие вида сигналов вашим представлениям о них - повод для серьезных размышлений и дополнительных проверок.

При разработке и отладке рабочей программы МК следует придерживаться модульного принципа, то есть разделять ее на части по функциональному признаку. Это

позволяет легко перемещать отдельные программные модули и применять их в других проектах. Модуль, в который передается управление после включения питания или сброса МК, называется главным или основным.

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

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

START:

; Точка входа в программу

... ...

; Команды основного программного модуля

END:

 

... ...

; Команды обработчика ситуации выхода из программы

LJMP END

; Переход на метку end

Передачу управления на точку входа в программу следует проводить командой перехода, а не вызова подпрограммы, чтобы не засорять стек адресом возврата. В приведенном примере при выходе из программы произведено зацикливание, имея в виду что перезапуск системы сигналом "СБРОС" ("RESET") выведет ее из этого состояния.

В процессе отладки к основному модулю по мере готовности добавляются другие программные модули, причем порядок их отладки и подключения играет важную роль.

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

Если используемый вами эмулятор ПЗУ позволяет записывать и считывать информацию как управляющим компьютером, так и отлаживаемым устройством, то отладочную информацию можно выводить на дисплей управляющего компьютера, используя эмулятор ПЗУ в качестве внешней памяти данных МК. Для этого содержимое внутренней памяти данных МК копируется в свободную область памяти эмулятора ПЗУ, а затем считывается управляющим компьютером и выводится на его дисплей. Например, чтобы вывести содержимое внутреннего ОЗУ данных МК, подключите его выход сигнала записи во внешнюю память данных WR к входу сигнала записи эмулятора ПЗУ и используйте следующую подпрограмму.

SAVEDATA:

 

 

ANL

PSW, #0E7H

; Выбор регистрового банка 0

MOV

DPTR, #8000H

; Занесение в DPTR начального адреса

 

 

; внешней памяти данных

MOV

A, R0

; Пересылка содержимого R0 в

MOVX

@DPTR, A

; эмулятор ПЗУ

INC

DPTR

; Увеличение адреса внешней памяти данных

MOV

A, R1

; Пересылка содержимого R1 в

MOVX

@DPTR, A

; эмулятор ПЗУ

MOV

R1, #7EH

; Загрузка счетчика цикла

MOV

R0, #1H

; Загрузка адреса внутреннего ОЗУ данных

LOOP:

 

 

INC

R0

; Увеличение адреса внутреннего ОЗУ данных

INC

DPTR

; Увеличение адреса внешней памяти данных

MOV

A, @R0

; Пересылка содержимого внутреннего

MOVX

@DPTR, A

; ОЗУ данных в эмулятор ПЗУ

DJNZ

R1, LOOP

; Проверка завершения цикла

RET

 

 

В подпрограмме предполагается, что объем памяти программ отлаживаемого устройства не превышает 32 Кбайт, поэтому свободная область памяти эмулятора ПЗУ, используемая для вывода отладочной информации начинается с адреса 8000h. Содержимое регистров R0 и R1 пересылается отдельно, так как в дальнейшем они используются в подпрограмме для организации цикла. После выполнения подпрограммы вывода отладочной информации делают останов и считывают управляющим компьютером содержимое 128 байт памяти эмулятора ПЗУ с начального адреса 8000h. Эта информация выводится на дисплей управляющего компьютера и анализируется. Аналогичным образом может быть выведено содержимое других программно доступных регистров МК.

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

Отлаженный модуль не следует удалять из программы, даже если он в данный момент не используется. Пользование общими ресурсами МК довольно часто приводит к тому, что полностью отлаженная подпрограмма перестает работать при добавлении другой подпрограммы. Поэтому после отладки очередного программного модуля убедитесь, что ранее отлаженные драйверы и подпрограммы работают правильно. При использовании прерываний не запрещайте их без крайней необходимости после отладки и подключения соответствующей подпрограммы.

При "зависании" отлаживаемой программы пригодится следующий метод локализации ошибки: введите в программу контрольные точки путем вывода на дисплей последовательного набора чисел. После выполнения ("зависания") такой программы на дисплее отобразится число, соответствующее последней успешно пройденной контрольной точке. Если несколько контрольных точек попали в бесконечный цикл, то на дисплее будет отображаться быстрая смена чисел. Для того чтобы определить какие именно контрольные точки попали в цикл, установите программную задержку при выводе каждого числа, например в виде холостого цикла. При отсутствии встроенного дисплея отладочную информацию можно вывести на дисплей управляющего компьютера через свободную область памяти эмулятора ПЗУ.

Отладив все драйверы устройств, приступайте к отладке прочих подпрограмм. Если подпрограмма реализует сложный алгоритм обработки или преобразования данных, то при отладке такого программного модуля могут возникнуть затруднения. Вы-

вод на дисплей одного или нескольких промежуточных значений переменных дает мало информации для анализа ошибок. Преодолеть трудности поможет запись отладочной информации необходимого объема в свободную область памяти эмулятора ПЗУ с последующим считыванием и выводом на дисплей управляющего компьютера.

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

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

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

С помощью эмулятора ПЗУ можно отладить программу МК, размещаемую и во внутренней памяти, если на этапе проектирования временно разместить ее во внешней памяти программ. При этом занимаются порты P0 и Р2 и, если оставшихся линий вво- да-вывода МК не достаточно, то на этапе отладки используются стандартные схемы расширения портов ввода-вывода, адресуемые как ячейки внешней памяти данных. В простейших случаях для увеличения линий вывода применяются регистры, а для увеличения линий ввода - элементы с третьим состоянием на выходе.

Отладив программу МК с помощью эмулятора, удалите из нее отладочные элементы, запрограммируйте ПЗУ (или МК с внутренней памятью программ) и проверьте работу устройства в окончательном виде.

Заключение

Достоинствами эмулятора ПЗУ является относительная простота, быстрота загрузки программы, возможность работы с любыми типами микропроцессоров и микроконтроллеров. Не требуется отвлекать дополнительные ресурсы МПС.

Ограничение эмулятора ПЗУ в том, что он не позволяет работать с микроконтроллерами, имеющими внутреннюю память программ.

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

1.Что такое эмулятор ПЗУ? Каковы его преимущества и ограничения?

2.Расскажите об эволюции эмуляторов ПЗУ. Каковы возможности новых моде-

лей?

3.Приведите структурную схему простого эмулятора ПЗУ. Поясните его работу.

4.Какова методика работы с эмулятором ПЗУ?