Адрес |
Команда |
Комментарий |
100 |
IN 10, 0 |
[10]¬(Порт 0) |
101 |
LARK AR0,8 |
AR0¬8 |
102 |
LARK AR1,18 |
AR1¬18 |
103 |
ZAC |
АСС¬0 |
104 |
LARP 1 |
ARP¬1 |
105 |
LT *-,0 |
T¬[( AR1)]; AR1¬(AR1) – 1; ARP¬0 |
106 |
MPY *,1 |
P¬(T)´[( AR0)]; ARP¬1 |
107 |
LTD *,-0 |
T¬[( AR1)]; [(AR1)+1]¬[(AR1)]; |
ACC¬(ACC)+(P); AR1¬(AR1) – 1; |
||
ARP¬0 |
||
108 |
Если (AR0)¹0, то AR0¬(AR0) – 1 и |
|
109 |
РС¬106, иначе РС¬(Р)+1 |
|
10A |
[20]¬(ACC)´21 (старшие разряды) |
|
10B |
Порт 2¬[20] |
|
10C |
PC¬100 |
|
10D |
Р6.147. Нерекурсивный цифровой фильтр можно реализовать циклическим повторением фрагмента программы (см. Р6.146):
MET: MPY *,1
LTD *,-,0
BANZ
MET
Время повторения этого фрагмента – 4 такта по 200 нс, т.е. 800 нс. Для реализации заданного фильтра 40-го порядка требуется выполнить приведенный фрагмент в цикле 40 раз, при этом время выполнения 32 мкс. При частоте дискретизации 48 кГц каждый отсчет поступает на вход цифрового фильтра через 20,8 мкс, следовательно, данное решение неприемлемо по быстродействию. Это объясняется тем, что половина времени уходит на выполнение команды условного перехода BANZ MET. Поэтому в данном случае целесообразно отказаться от циклического построения программы и построить линейную программу, состоящую из многократного повторяющихся команд MPY и LTD. Это позволяет исключить команду условного перехода и улучшить быстродействие, но требует увеличения программы и объема программной памяти. Для составления программы необходимо распределить ячейки внутренней памяти данных TMS 32010. Коэффициенты фильтра а0…а9 будут храниться в ячейках памяти с адресами 0…27 (в шестнадцатеричной системе счисления), отсчеты x(n)…x(n – 39) в ячейках 30…57. Программа работы фильтра записывается в ПЗУ программ с адреса 0А, так как в начальных адресах записывается программа инициализации работы устройства (см. ниже). Программа работы фильтра может иметь следующий вид:
Адрес |
Команда |
Комментарий |
0A |
IN 30, 0 |
[30]¬(Порт 0) (ввод отсчета входного сигнала x(n)) |
0B |
LARK AR0,27 |
AR0¬27 (адрес а39) |
0C |
LARK AR1,57 |
AR1¬57 (адрес x(n– 39)) |
0D |
ZAC |
ACC¬0 |
0E |
LAR P1 |
ARP¬1 |
0F |
LT *-,0 |
T¬[(AR)]; AR1¬(AR1) – 1; ARP¬0 |
10 |
MPY *-,1 |
P¬(T)´[(AR0)]; AR0¬(AR0) – 1 ARP¬1 |
11 |
LTD *-,0 |
T¬[(AR1)]; [(AR1)+1]¬[(AR1)]; |
ACC¬(ACC)+P; AR1¬(AR1) – 1; ARP¬0 |
||
Адреса с 12 по 5D занимают повторяющиеся команды MPY *-,1 и LTD *-,0 |
||
5E |
MPY *,1 |
P¬(T)´[(AR0)]; ARP¬1 |
5F |
APAC |
ACC¬(ACC)+P |
60 |
SACH 7F,1 |
[7F]¬(ACC)´21 (старшие разряды) |
61 |
OUT 7F,1 |
(Порт 1)¬[7F] (вывод y(n)) |
62 |
NOP |
|
63 |
BIOZ |
Если , то РС¬62 (ожидание нового отсчета x(n)), иначе РС¬65 |
64 |
62 |
|
65 |
В |
РС¬0А (безусловный переход к адресу 0А) |
66 |
0А |
Коэффициенты фильтра ai могут также храниться в ПЗУ по адресам 67…8Е и в начале работ устройства (после включения питания) переписываться во внутренне ОЗУ данных процессора TMS 32010. Для этой цели служит следующая программа:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.