|
Симуляция взаимодействия МК с внешними устройствами.
Работая с программным обеспечением 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-файлов (циклы, ветвления, функции).
|