
- •1. Задание на проектирование
- •1.1. Задача 1. Реализация ких-фильтра на процессоре tms320c50
- •1.2. Задача 2. Синтез и реализация ких-фильтра на процессоре tms320c50
- •1.3. Задача 3. Реализация бих-фильтра на процессоре tms320c50
- •1.4. Задача 4. Синтез и реализация бих-фильтра на процессоре tms320c50
- •2. Методические указания по выполнению задач
- •2.1.Составление программы
- •2.1.1. Программа реализации ких фильтра
- •2.1.2. Программа реализации бих фильтра
- •2.2.Отладка программы
- •2.3.Получение импульсной характеристики фильтра
- •2.4.Определение максимально возможной частоты дискретизации
- •3. Примеры программ
- •3.1.Программа реализации нерекурсивного фильтра
- •Inport .Set 50h ; параллельный порт, используемый для ввода
- •In inad,inport ; приём отсчета через входной порт
- •3.2. Командный файл компоновки
- •3.3.Программа реализации рекурсивного фильтра
- •3.3.1. Прямая форма
- •In1 .Word 0 ; входной отсчет
- •In inad,inport ; прием отсчета через порт ввода
- •3.3.2. Каноническая форма
- •In1 .Word 0 ; входной отсчет первого звена
- •In inad,inport ; прием отсчета через порт ввода
- •3.3.3. Трансформированная форма
- •In1 .Word 0 ; входной отсчет
- •3.4.Командный файл программного имитатора
- •4. Расчет фильтра с помощью пакета программ fd
- •5. Литература
- •Содержание
2.2.Отладка программы
Отладка программы производится с помощью программного имитатора sim5x.exe . Имитатор работает под управлением командного файла siminit.cmd . В этом файле задаётся конфигурация памяти разрабатываемой системы, и записываются различные команды имитатора (например, загрузка исполняемой программы), которые в принципе могут вводится после запуска имитатора. Однако при отладке и тестировании программы приходится неоднократно запускать имитатор и запись некоторых команд в файл позволяет избежать рутинных операций по вводу некоторых команд. Следует обратить внимание на то, что конфигурация памяти, задаваемая для имитатора не должна противоречить конфигурации памяти, задаваемой в командном файле компоновки исполняемой программы. Как правило, память имитатора "шире". Пример командного файла имитатора приведен в разделе 4.4. Естественно, при работе с конкретными исполняемыми программами необходимо корректировать имя загружаемой программы в команде load и указывать используемые области памяти в командах mem.
При работе с имитатором отсчеты входного сигнала записываются в файл данных infile.dat, который подключается для чтения к порту ввода; выходные данные записываются в выходной файл outfilre.dat. Соответствующие команды для определения портов и подключения файлов с комментариями приведены в примере командного файла имитатора.
Подача сигнала на вход фильтра производится по прерываниям.
Период внешних прерываний задаётся в файле прерываний, который подключается к соответствующему входу процессора и имитирует поступление запросов на прерывания (в примере командного файла это вход INT1 и файл t_int.dat). Период прерываний можно записывать различным образом, в частности файл может иметь следующую запись:
100 (+1000) rpt 20
Это выражение означает, что первый запрос на прерывание возникнет через 100 тактов после запуска программы на выполнение и затем запрос на прерывание будет повторятся 20 раз с интервалом 1000 тактов.
При использовании прерываний по таймеру период прерываний задаётся регистром периода таймера. Для задания периода необходимо в секцию программы "Init_main" к командам задания режима добавить следующие команды
SPLK #1000,PRD
SPLK #1000,TIM
При этом прерывания будут повторятся с интервалом 1000 тактов. Под тактом понимается время командного цикла. Командный цикл процессора Tk (длительность такта) равен 2/f , где f – тактовая частота работы процессора.
В качестве входного тестового сигнала при проверке программы реализации фильтра используется единичный импульс. При этом выходным сигналом является импульсная характеристика. Совпадение полученной характеристики с теоретической (снятой в пакете FD) является критерием правильного выполнения программы. Для формирования единичного импульса файл входных отсчетов должен представлять собой следующую последовательность значений (одна 1 и последовательность нулей):
7FFF
0000
0000
0000
…..
…..
Количество записей в файле определяет количество рассчитываемых значений ИХ. Оно должно превышать порядок фильтра и количество запросов на прерывание, задаваемых в файле t_int.dat.
При отладке программы для выяснения состояния процессора и режима его работы необходимо знать и использовать значения разрядов регистра масок (запретов) прерываний IMR и регистра флагов (признаков наличия запросов) IFR. Распределение различных прерываний по разрядам регистров приведены в табл. 9.
Таблица 9
Разряд |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
IFR IMR |
XINT |
RINT |
TINT |
INT3 |
INT2 |
INT1 |
Признак запрета всех прерываний INTM – разряд D9 ST0. При значении INTM равном 1 все маскируемые прерывания запрещены.
При отладке программы можно использовать команды:
INTM - вызов на экран бита разрешения/запрета всех прерываний для контроля правильности установки режима,
WA CLK - вызов на экран счетчика машинных циклов,
TINT - вызов на экран бита разрешения/запрета прерывания таймера.
Процесс отладки и проверки программ носит творческий характер и может выполняться индивидуально. Тем не менее, можно рекомендовать следующий порядок действий по проверке правильности работы программы.
Отключить временно в командном файле имитатора команду для подключения файла t_int.dat, определяющего период прерываний. Команду можно временно убрать, поставив в первой позиции соответствующей строки точку с запятой.
Запустить имитатор и проверить загрузку текста программы, правильность загрузки коэффициентов и параметров фильтра (окна памяти mem), правильность подключения входного и выходного файлов данных (команды меню Memory, List).
Выполнить программу по шагам до реализации петли ожидания запросов на прерывания (метка Loop) и несколько шагов по петле.
Проверить наличие разрешения используемого прерывания, т.е. установку соответствующих значений в разрядах регистров ST0 и IMR.
Установить значение 1 в используемый по заданию разряд регистра IFR, соответствующий используемому типу прерываний; при этом будет имитироваться подача запроса на прерывание.
Выполнить далее программу по шагам. При правильном выполнении программы должен произойти переход на ветвь таблицы векторов прерывания и далее к выполнению подпрограммы прерывания. После выполнения команды ввода и считывания первого значения из входного файла данных в ячейке INAD должно появится первое значение сигнала 7FFF. Имеет смысл проверить выполнение подпрограммы обработки прерывания по шагам до конца и возврат после её окончания в основную программу.
Поставить точку останова на команду подпрограммы, которая стоит следующей после команды ввода сигнала. Последовательно вычислить выходные отсчеты фильтра, выполняя каждый раз следующее:
установить значение 1 в используемый разряд регистра IFR,
запустить команду RUN,
после остановки выполнения программы проверять правильность считывания очередного отсчета из файла входных данных в ячейке INAD, формирование выходного значения в ячейке OUTAD.
Для проверки влияния режимов работы запретите прерывания процессора, занеся при нахождении в основной программе в ST0 значение 0600; выполните после этого программу, обратив внимание на то , что прерывания не происходят. Восстановите содержимое ST0 и запретите используемые прерывания, занеся в IMR соответствующие значения; выполните после этого программу.
После считывания всех значений из файла отсчетов входного сигнала необходимо выйти из программы имитатора и проверить правильность формирования файла выходных данных и совпадение полученных значений ИХ с значениями, полученными в пакете FD. Соответствующие пояснения приведены в разделе 3.3.
Если полученная ИХ является правильной, можно переходить к дальнейшей проверке программы. Если же она не совпадает с расчетной, необходимо проверять правильность вычисления выходных отсчетов фильтра, т.е. правильность выполнения подпрограммы обработки прерывания.
После получения правильной ИХ необходимо подключить файл, задающий период прерываний и проверить правильность выполнения программы в автоматическом режиме. Для этого можно сделать следующее.
После запуска программы имитатора установить точку останова на используемую команду перехода (ветвь) таблицы векторов прерывания.
Проверить правильность подключения файла к входу запроса на прерывания – команды меню Pin, List.
Ввести команду CLK.
Последовательно выполнять команду RUN и после останова проверять полученное значение периода прерываний – значение CLK (или изменение значение счетчика таймера TIM) и изменения значений отсчетов сигнала в ячейках INAD и OUTAD.
Полученное значение периода прерываний (CLK) должно примерно совпадать с требуемым по заданию.
Отладка программы при использовании прерываний по таймеру не отличается от описанной выше. Файл t_int.dat, определяющий поступление запросов на внешние прерывания в командном файле имитатора необходимо отключить постоянно. На первом этапе проверки программы вместо отключения этого файла необходимо из программы убрать команды настройки таймера
SPLK #1000,PRD
SPLK #1000,TIM,
а затем при проверке правильности периода прерываний включить эти команды в программу. Полученный период прерываний можно проверить по значению CLK или регистра TIM.