- •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. Литература
- •Содержание
3.2. Командный файл компоновки
/* Командный файл компоновки для КИХ фильтра */
-V0 /*версия нулевая*/
-e reset /* задание начального адреса счетчика программ
после загрузки */
-m nrf_in.map /* имя файла с таблицей компоновки */
-o nrf_in.out /* имя выходного файла */
nrf_in.obj /* имена компонуемых файлов */
/* Задание конфигурации памяти проектируемой системы*/
MEMORY
{
/* Определение блоков в памяти программ с заданием их начальных
адресов и длины, блоки не должны перекрываться */
PAGE 0 :
VECS : origin=0x00, length=0x0040
PROG : origin=0x0040, length=0x0300/**/
/* Определение блоков в памяти данных с заданием их начальных
адресов и длины, блоки не должны перекрываться */
PAGE 1 :
: /* предопределенный блок памяти
для размещения регистров процессора, отраженных на память */
REGS : origin=0x0000, length=0x0060
/* выделенные блоки в памяти данных для размещения секций данных
исходной программы */
BLOCK0: origin=0x0100, length=0x0100
BLOCK1: origin=0x0200, length=0x0100
BLOCK2: origin=0x0300, length=0x0100
}
/* указания по размещению секций программы в блоках
заданной выше памяти системы */
SECTIONS
{
/*размещение секции Vectors в блоке памяти
программ VECS начиная с начального адреса блока */
Vectors : {} > VECS PAGE 0
/* секции программы Init_main, Vvod, Filter, Vivod размещаются в блоке памяти программ PROG в друг за другом в указанном порядке начиная с начального адреса блока; они образуют чисто условный модуль Main в выходном файле */
Main: { * ( Init_main)
* ( Vvod)
* (Filter)
* (Vivod)
} > PROG PAGE 0
/* различные секции данных исходной программы размещаются в
выделенных блоках памяти данных */
.data : {} > BLOCK0 PAGE 1
BUFFER2 : {} > BLOCK1 PAGE 1
BUFFER1 : {} > BLOCK2 PAGE 1
}
3.3.Программа реализации рекурсивного фильтра
3.3.1. Прямая форма
Структурная схема звена второго порядка в прямой форме приведена на рис. 4.а. Обозначения переменных, используемые в программе, соответствуют обозначениям на этом рисунке.
; Программа реализации БИХ фильтра в прямой форме
.version 50
.global BUFFER2
.mmregs
* Задание значений символов, используемых в программе
OUTPORT .set 51h
INPORT .set 50h
.data
; данные для фильтра
INAD .word 0
OUTAD .word 0
MM1 .word 32768*74/100 ; масштабный множитель первого звена 0,74
.sect "KOF_VAR"
* Секция коэффициентов и переменных фильтра
; Коэффициенты фильтра, к-ты Ai записываются с противоположным знаком
; Первое звено
B01 .word 32768*2793/10000 ; B01 = 0,2793
B11 .word (32768*307/10000) ; B11 = 0,0307
B21 .word 32768*2793/10000 ; B21 = 0,2793
A11 .word 32768*5586/10000 ; A11 = 0,5586
A21 .word -(32768*8289/10000) ; A21 = -0,8289
; переменные фильтра
; Первое звено
In1 .Word 0 ; входной отсчет
S11 .word 0 ; задержанные входные отсчеты
S21 .word 0 ;
OUT1 .word 0 ; выходной отсчет
S31 .word 0 ; задержанные выходные отсчеты
S41 .word 0 ;
.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 #INAD
