Симуляция взаимодействия МК с внешними устройствами

Симуляция взаимодействия МК с внешними устройствами.

Работая с программным обеспечением KickStart в режиме «эмуляции», на контактные выводы (pin’ы) отладочной платы можно подавать напряжение от внешних источников. Это напряжение будет приложено к входам портов ввода/вывода или других периферийных модулей МК. Можно выполнять и обратную процедуру – снимать выходное напряжение из контактных выводов отладочной платы и подавать его на внешние устройства – светодиоды, ЖКИ и т.д.
Программное обеспечение KickStart позволяет симулировать взаимодействие микроконтроллера с внешними устройствами без подключения отладочной платы к компьютеру (в режиме «симуляции»). Для этого используются файлы, в которых хранятся значения напряжений на контактных выводах МК в различные моменты времени.

Файлы бывают двух типов:

  • Входные pin-файлы (с расширением .in). Используются для симуляции подачи сигналов на pin’ы МК от внешних источников. Эти файлы пользователь составляет самостоятельно.
  • Выходные pin-файлы (.out). В эти файлы отладчик IAR C-SPY записывает информацию о состоянии контактных выводов МК (напряжение на pin’ах в различные моменты времени).

В частном случае, входные файлы можно использовать для симуляции подачи данных на порты МК из внешней среды, а выходные файлы (.out) – для симулирования вывода данных из портов МК на вход внешних устройств. Имена pin-файлов для конкретных контактных выводов указываются в меню Advanced | I/O pin files отладчика C-SPY.

Структура pin-файлов.

Каждый pin-файл отображает состояние какого то одного контактного вывода МК на протяжении некоторого интервала времени. В файле содержится информация от том, какой уровень сигнала установлен на pin’е на конкретном такте машинного цикла МК. Зная длительность одного такта, вы можете построить график зависимости напряжения от времени.
Pin-файлы – это текстовые файлы, состоящие из нескольких строк. Первая строка представляет собой ключевое слово relative или absolute, которое уточняет формат файла. Absolute применяется для аналогового ввода/вывода, когда состояние pin’ов указывается в Вольтах, а Relative используется при цифровм вводе, когда сигналы представлены единицами и нулями. Нулю соответствует уровень сигнала ниже 0.5 В, а единице – выше 0.5 В. Далее следуют строки, содержащие 2 поля, разделенные пробелом. В первом поле указывается уровень сигнала, а во втором – номер машинного цикла на котором этот уровень сигнала будет установлен. В следующих двух таблицах показаны примеры pin-файлов.

relative

0
1
0
1
0
1
0
299
736
1173
1610
2047

табл.1

absolute

0
5
0
5
0
5
0
299
736
1173
1610
2047

табл.2

При анализе выходных файлов, которые создает отладчик, IAR C-SPY вы можете обнаружить идентификатор NA вместо значения сигнала. Этот идентификатор означает, что pin не сконфигурирован на вывод, и поэтому не доступен. Входные pin-файлы имеют расширенный синтаксис, который позволяет организовывать в файле подпрограммы, циклы поступления данных, вычислять значения тригонометрических и арифметических функций и т.д. Рассмотрение всех этих возможностей выходит за рамки данного учебного руководства.

Программа, симулирующая взаимодействие МК с внешними устройствами.

Для получения практических навыков работы с pin-файлами разработаем небольшую программу на ассемблере. Программа производит чтение порта P1, инвертирует полученный результат и выводит его в порт P2. Входной pin-файл P1_0.in (табл.1) используется для симуляции поступления данных на 0-вой вывод порта P1 от внешнего источника. Выходной файл P2_0.out будет создан отладчиком. Он содержит информацию о изменении сигнала на 0-вом выводе порта P2.
Создайте новый проект и добавьте в него файл с исходным текстом следующей программы:

#include «msp430x14x.h»

COMMON INTVEC ; Вектор прерываний
ORG RESET_VECTOR ; Адрес подпрограммы обработки прерывания для системного сброса -
DW Reset ; это метка Reset. Программа начнет выполнятся с этой метки после сброса.

RSEG CSTACK ; Системный стек
DS 0

RSEG CODE ; Дальнейшие инструкции размещаются в сегменте кода)
;————————————————————————-
Reset

mov #SFE(CSTACK),SP ;Инициализация указателя стека
mov #WDTPW+WDTHOLD,&WDTCTL ;Остановка сторожевого таймера

mov.b #00h,&P1DIR ; порт P1.0 конфигурируется на ввод
mov.b #01h,&P2DIR ; порт P2.0 конфигурируется на вывод

Mainloop ; главный цикл

mov.b &P1IN, R12 ; чтение порта P1.0 и запись результата в R12
inv.b R12 ; инверсия R12
mov.b R12, &P2OUT ; запись в порт P2.0 данных из R12

jmp Mainloop ; повторяем цикл
;————————————————————————–
END

После компиляции и загрузки проекта в отладчик необходимо указать имена pin-файлов ввода и вывода для конкретных контактов портов P1.0 и P1.1. Для этого выполните команду I/O Pin Files из меню Advanced. На экране появится диалоговое окно в котором укажите путь к pin-файлам, а также их имена для соответствующих контактных выводов (рис. 26). Расширения .in и .out для файлов указывать не надо. Укажите только имена: P1_0 – для входного файла и P2_0 – для выходного (отладчик сам разберется с расширениями и создаст в указанной папке файл P2_0.out с результатами симуляции вывода данных из порта P2.0). Нажмите OK и потом при появлении окна с вопросом хотите ли вы выполнить сброс программы, нажмите кнопку ДА.

Рис. 26

Запустите проект на выполнение командой Go и через некоторое время (3-4 сек.) приостановите выполнение программы. К этому времени симуляция ввода/вывода завершится, и данные будут готовы. Для записи результатов в выходной pin-файл выполните сброс программы (Reset). Помните, что сброс всегда надо выполнять для считывания новых данных из входных pin-файлов и для записи результатов симуляции в выходные файлы.
Результатом наших действий будет файл P2_0.out, находящийся в папке, которую вы указали в диалоговом окне I/O PinFile Names. Вот содержимое этого файла:

absolute

na
0
5
0
5
0
17
315
745
1185
1625
2055

Проанализируем этот файл.
На 17-том цикле порт P2.0 еще не доступен, поскольку не сконфигурирован на вывод. На 299-м цикле происходит изменение потенциала на входе порта P1.0 с нуля на единицу. Этот момент воспринимается и в порт P2.0 выводятся инвертированные данные (ноль). Между двумя операциями – чтением порта P1.0 и выводом данных в порт P2.0 существует некоторая временная задержка, длительность которой 315-299=16 циклов.
Было бы хорошо иметь возможность строить графики зависимости напряжения от времени (или машинных циклов). К сожалению, пакет ПО KickStart не позволяет представлять данные pin-файлов в виде графиков. Вы можете самостоятельно разработать программное обеспечение для анализа данных pin-файлов и построения графиков. Я для этой цели написал простенькую программу PinEditor на языке программирования Delphi, позволяющую редактировать pin-файлы и строить графики по данным этих файлов. На рис. 26 показано окно программы PinEditor с загруженным входным pin-файлом (P1_0.in), а на рис. 27 – график выходного файла (P2_0.out).

Рис. 26. Вход порта P1.0

Рис. 27. Выход порта P2.0

Программа также дает возможность увеличивать отдельные участки графиков для более детального анализа. Увеличение производится с помощью мыши. Но PinEditor не поддерживает расширенного синтаксиса pin-файлов (циклы, ветвления, функции).