- •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. Литература
- •Содержание
Inport .Set 50h ; параллельный порт, используемый для ввода
; отсчетов сигнала
.data
; данные для фильтра
INAD .word 0
OUTAD .word 0 ; выходной отсчет
MM .word 32768*900/1000 ; масштабный множитель на входе 0,9
.sect "Vectors"
* Таблица векторов прерываний
B START
B BEGIN ; INT1 внешние прерывания
B BEGIN ; INT2
B BEGIN ; INT3
B BEGIN ; TINT прерывание по таймеру
.sect "Init_main"
* Инициализация процессора и основная программа
START:
* установка режимов работы
SETC INTM ; запрет прерываний на время установки режимов работы
CLRC OVM ; режим переполнения
SPM 1 ; режим сдвига значений при передаче (PREG) -> АЛУ
SETC SXM ; режим расширения знака
LDP #0 ; установка разрешения необходимых прерываний
SPLK #0Fh,IMR
CLRC INTM ; разрешение прерываний
LOOP:
NOP ; основная программа – бесконечная петля ожидания
; прихода запроса на прерывание
B LOOP
* подпрограмма прерывания, которая состоит из трёх основных частей
.sect "Vvod"
* прием очередного отсчета
BEGIN:
LDP #0
SPLK #(N-2),BRCR ; установка к-ва повторений блока команд
LDP #INAD
In inad,inport ; приём отсчета через входной порт
* умножение отсчета на масштабный множитель
LT INAD
MPY MM
LDP #BUFFER2 ;
SPH BUFFER2 ; запись отсчета в буфер
*при значении множителя ММ=1 необходимо убрать умножение на него;
* для этого вместо последних 4-х команд вставить команды
* LACC INAD
* LDP #BUFFER2
* SACL BUFFER2
.sect "Filter"
* программа реализации фильтра
LAR AR2,#(BUFFER2+N-1) ; загрузка начального (для вычислений)
; адреса отсчетов в регистр AR2
LAR AR1,#(BUFFER1+N-1) ; загрузка начального адреса
; коэффициентов в AR1
MAR *,AR1 ; установка текущего ARn
ZAP ; (PREG) = (ACC) = 0
RPTB B_END-1 ; задание блока команд для повторения
LT *-,AR2 ; к- т B -> регистр T, начиная с B(n-1)
MPYA *- ; B*X -> PREG, предыдущее (PREG) добавляется к (ACC)
DMOV *,AR1 ; сдвиг отсчета Х в буфере, необходимый для
; вычисления следующего выходного значения фильтра Y
B_END:
* перемножение и добавление в ACC последнего
* произведения B*X без сдвига X
LT *,AR2
MPYA *
APAC
LDP #OUTAD
SACH OUTAD ; сохранение полученного выходного отсчета
.sect "Vivod"
; Вывод выходного отсчета фильтра
OUT OUTAD,OUTPORT
CLRC INTM ; разрешение прерывания для приема следующего
; отсчета
RET
* резервирование памяти для хранения входных отсчетов
.sect "BUFFER2"
BUFFER2 .space N*16
* секция данных с к-тами фильтра, начиная с B0
.sect "BUFFER1"
BUFFER1
.word -(32768*439/10000) ; В0 = - 0,0439
.word -(32768*359/10000) ; B1 = - 0,0359
.word (32768*506/10000) ; B2 = 0,0506
.word 32768*304/10000 ; B3 = 0,0304
.word -(32768*363/10000) ; B4 = - 0,0363
.word -(32768*965/10000) ; B5 = - 0,0965
.word 32768*528/10000 ; B6 = 0,0528
.word (32768*3092/10000) ; B7 = 0,3092
.word 32768*4535/10000 ; B8 = 0,4535
.word 32768*3092/10000
.word 32768*528/10000
.word -(32768*965/10000)
.word -(32768*363/10000)
.word 32768*304/10000
.word 32768*506/10000
.word -(32768*359/10000)
.word -(32768*439/10000)
.end
