[an error occurred while processing this directive]
Уважаемые DSP-шники, помогите начинающему по FIR на АСМе на BF532 (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Валерий_П 07 октября 2005 г. 13:43

Прошу сильно не ругать, если что не так, вот написал функцию фильтра, все вроде перепроверил, а включаю - ерунда какая-то получается.
Может у кого-нить есть подобное - посэмпловая обработка ?
Привожу код функции, может я что ни так делаю ?

Вх. параметры:
R0.H -> входное значение с кодека;
P0 -> указатель на структуру фильтра;

Структура фильтра:
Fir_XX_InVector Базовый адрес вх. вектора
Fir_XX_InTaps<<1 Длина вх. вектора x2 ( x2 удобнее, чтобы потом не умножать, не тратить время )
Fir_XX_InVector Указатель на текущее вх. значение ( абсолютный )
Fir_XX_OutVector Базовый адрес вых. вектора
Fir_XX_OutTaps Длина вых. вектора
Fir_XX_OutVector Указатель на текущее вых. значение ( абсолютный )
Fir_XX_Coeffs Указатель на вектор коэффициентов
// Структура фильтра Fir_02

.align 4;
.byte4 pFir_02[7] =
{
Fir_02_InVector,
Fir_02_InTaps<<1,
Fir_02_InVector,
Fir_02_OutVector,
Fir_02_OutTaps,
Fir_02_OutVector,
Fir_02_Coeffs
};


.section L1_code;
_fir:
P1 = [P0++]; //Читаем указатель на Fir_XX_InVector
B0 = P1;

P2 = [P0++]; //Читаем длину вх.вектора Fir_XX_InTaps, умноженную на 2

L0 = P2;
L2 = P2;

P1 = [P0++]; //Читаем указатель на текущее вх.значение
I0 = P1;
W[I0]=R0.H; //..и запишем его во вх.вектор

P1 = [P0++]; //Читаем указатель на Fir_XX_OutVector
B1 = P1;

P1 = [P0++]; //Читаем длину вых.вектора Fir_XX_OutTaps
P1 = P1+P1;
L1 = P1;

P1 = [P0++]; //Читаем указатель на текущее вых.значение
I1 = P1;

P1 = [P0--]; //Читаем указатель на вектор коэффициентов и...
I2 = P1; //..подготавливаем P0 к указателю на текущее вых.значение


A1=A0=0 || R0.H = W[I0++] || R2.L=W[I2++];

LSETUP(fir_loop, fir_loop) LC1=P2>>1;

fir_loop: R3.L=(A0+=R0.H*R2.L) || R2.L=W[I2++] || R0.H=W[I0++];

W[I1++]=R3.L; //Записываем результат в вых.вектор

R0 = I1; //Сохраняем указатель на текущее вых.значение
[P0] = R0;

R0 = I0; //Сохраняем указатель на текущее вх.значение
[P0-12] = R0;

R0 = PACK(R3.L, R1.L); //Результат в R0.H, R0.L=0, ( R1.L=0 до вызова ф-ции )

_fir.End:
rts;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru