реклама на сайте
подробности

 
 
> Нужна помощь разобраться с asm рутиной FIRа, Моя первая самостоятелсьная FIR рутина...
Саша Z
сообщение Jun 3 2007, 18:35
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



После долгих моих тугодумных мук родил FIR код в asm который будет част проэкта (вызывается из кода С). Почему-то после добавления ее в проэкт (данного файла asm) - проэкт не компилируется - падает ессно на этой рутине выдавая кучу ошибок. Первая из них весьма странная мне, не могу понять что его не устраивает. Может подскажете чего я не вижу:

Код
.mmregs
.global _p_buffer_in,_p_buffer_out,_dline,_fcoeff,_fir_ord,_p_buff_lenth
.global _fir_processing

_fir_processing:
; saving regs content into stack
    pshm ar0; used as delay line and coeff. cycling addressing increment
    pshm ar1; holds input data array start address
    pshm ar2   ; holds pointer to filter coeff. array addressing
    pshm ar3; holds pointer to delay line array addressing
    pshm ar4; holds output data array start address
    pshm ar5; holds output data array
    nop
    nop
    
; Initialization
    stm #1,ar0                   ;set increment step for cycling buffers
    mvdm *(_fir_ord),BK          ;set cyclic buffer size (for delay line and coeff buffer)
    stm #_p_buff_in,ar1             ;load data_in array start address
    stm #_fcoeff,ar2             ;load coeff. array start address
    stm #_dline,ar3                 ;load delay line array start address
    stm #_p_buffer_out,ar4         ;load output data buffer array address
    mvdm *(_p_buff_length)-1,brc ;load BRC with processing data block length (PROC_BUFFER_LENGTH)
    nop
    nop
    
; Filtration
    rptb fir_loop_end-1            ; repeat FIR routine for entire processing data buffer
    mvdd *ar1+,*ar3+%          ; load next input sample from input proc. array into delay line array
    
    rptz a,_fir_ord-1            ; FIR order less 1 iterations per each input data sample
    mac *ar2+0%,*ar3+0%,a             ; MAC operation on cyclic delay line and coeff. arrays
    
    rnd a                         ; round off value in acc. A to 16 bits
    sth a,*ar4+                      ; store output value into data output array
  fir_loop_end:
    
    popm ar5
    popm ar4
    popm ar3
    popm ar2
    popm ar1
    popm ar0


Первая ошибка которую выдает компилятор:
Цитата
> ERROR ! at line 29: [E0004] Expecting dual memory addressing
mvdd *ar1+, *ar3+%


Дальше еще есть кучу ошибок, подозреваю что некоторые завязаны на предыдущих, посему буду исправлять по одной от первой к последней с перекомпиляцией после каждой.

Итак, что ему не нравиться в mvdd ? Она-то вроде перекидывает из памяти в память, и вроде у меня так и есть в коде.... cranky.gif Что я в упор не вижу ?????

Кроме того, если видите у другие ошибки в коде алгоритма - буду благодарен за указание таковых...

P.S. Все переменные в данном asm определены в основном С коде.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BratherLU
сообщение Jun 5 2007, 14:07
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 16-05-06
Пользователь №: 17 126



Да незачта.В своем проекте дописал чуть-чуть
Код
*.c
...
const unsigned short fir_ord=150;
...
*.asm
    .ref _fir_ord
    .ref _IN_BUFF
    .ref _OUT_BUFF
    ...;Only for test in Simulator
    stm        #0x2000,ar4
    stm        #0x2100,ar3

    stm        #_IN_BUFF,ar2
    stm        #_OUT_BUFF,ar5

    stm        #151,bk
    stm        #1,ar0
    nop
;дальше Ваш код без изменений
Filtration
    rptb fir_loop_end-1       ; repeat FIR routine for entire processing data buffer
    mvdd *ar2+,*ar3+0%        ; load next input sample from input proc. array into delay line array
   ;ar3 указывает на самый старый отсчет все ОК
    ld #0, a                ; reset A
    rpt *(_fir_ord)                         ; FIR order (here equal to the number of FIR coefs)
                                 ;iterations per each input data sample
    mac *ar4+0%,*ar3+0%,a       ; MAC operation on cyclic delay line and coeff. arrays
;ar3 снова указывает на тот же самый старый отсчет все ОК
    add #1, 15, a           ; Это я бы убрал на время отладки
    sth a,*ar5+           ; store output value into data output array
fir_loop_end:

Все должно работать ничего в Вашем куске не менял, указатели меняются как положено

Сообщение отредактировал BratherLU - Jun 5 2007, 14:14
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 5 2007, 14:52
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Саша Z @ Jun 3 2007, 17:35) *
Кроме того, если видите у другие ошибки в коде алгоритма - буду благодарен за указание таковых...

Мне кажется, у вас имеется логическая ошибка в программе фильтрации. Данные вы кладёте в циклический буфер, это хорошо, но затем вы циклически крутите буфер коэффициентов, это плохо.

Должно быть так.

1) Вы записали новое данное в циклический буфер, указатель стал указывать на самую старую выборку.

2) Установили начало буфера коэффициентов.

3) Обработали 151 сампл, выдали результат, указатель опять указывает на самую старую выборку.

4) Перешли к пункту 1, пока не закончатся исходные данные.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 5 2007, 15:58
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(=GM= @ Jun 5 2007, 18:52) *
Мне кажется, у вас имеется логическая ошибка в программе фильтрации. Данные вы кладёте в циклический буфер, это хорошо, но затем вы циклически крутите буфер коэффициентов, это плохо.

Должно быть так.

1) Вы записали новое данное в циклический буфер, указатель стал указывать на самую старую выборку.

2) Установили начало буфера коэффициентов.

3) Обработали 151 сампл, выдали результат, указатель опять указывает на самую старую выборку.

4) Перешли к пункту 1, пока не закончатся исходные данные.


Да но буфер коефф. тоже можно крутить циклически таким образом избегая его переадресации в начале каждого цикла (каждого нового sample), т.е. таким образом экономим пункт 2).
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 5 2007, 18:13
Сообщение #5


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Саша Z @ Jun 5 2007, 15:58) *
Да но буфер коефф. тоже можно крутить циклически таким образом избегая его переадресации в начале каждого цикла (каждого нового sample), т.е. таким образом экономим пункт 2).

Вот что должно получиться по классике (х1 - самая старая выборка)

Код
x1 x2 x3 x4 x5 x6 x6 x8 x9 - буфер входных выборок
k1 k2 k3 k4 k5                   - буфер коэффициентов

На первом этапе j=0 вычисляем сумму y(j) = Σx(i+j)•k(i), i=0,1,…,5. То есть

y(0)=x(1)•k(1)+x(2)•k(2)+x(3)•k(3)+x(4)•k(4)+x(5)•k(5)

На втором этапе j=1 самая старая выборка х(1) уйдёт в небытие, получим

x2 x3 x4 x5 х6 х7 х8 х9 - буфер входных выборок
k1 k2 k3 k4 k5               - буфер коэффициентов

y(1)=x(2)•k(1)+x(3)•k(2)+x(4)•k(3)+x(5)•k(4)+x(6)•k(5)

На третьем этапе j=2 самая старая выборка х(2) уйдёт в небытие, получим

x3 x4 x5 х6 х7 х8 х9 - буфер входных выборок
k1 k2 k3 k4 k5          - буфер коэффициентов

y(2)=x(3)•k(1)+x(4)•k(2)+x(5)•k(3)+x(6)•k(7)+x(8)•k(5)

Ну и так далее.

А что у вас? Указатель передвигается на х(2) и одновременно другой указатель на k(2). Вроде бы не получается. По крайней мере, у меня с ходу не получилось.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Саша Z   Нужна помощь разобраться с asm рутиной FIRа   Jun 3 2007, 18:35
- - BratherLU   1 - В mvdd можно использовать только регистры ar...   Jun 4 2007, 05:16
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 09:16) 1 -...   Jun 4 2007, 05:59
- - BratherLU   В Conventions описано как праввильно делать вызов ...   Jun 4 2007, 08:54
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 12:54) В C...   Jun 4 2007, 10:14
- - BratherLU   mvdk *(_p_buff_length-1),brc сорри Вас запутал и...   Jun 4 2007, 11:06
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 15:06) mvd...   Jun 4 2007, 11:27
- - BratherLU   ld #0x00,a rpt *(_fir_ord) rptz действительно не ...   Jun 4 2007, 11:58
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 15:46) ld ...   Jun 4 2007, 12:03
- - BratherLU   Коэффициенты тоже должны быть выровнены по соответ...   Jun 4 2007, 12:07
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 16:07) Коэ...   Jun 4 2007, 12:28
- - BratherLU   Еще смотрите - что у вас в BK и в ar0 если все ок ...   Jun 4 2007, 12:43
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 16:43) Еще...   Jun 4 2007, 13:07
- - BratherLU   В Данной реализации длина линии задержки==число ко...   Jun 4 2007, 14:13
|- - Саша Z   Цитата(BratherLU @ Jun 4 2007, 18:13) В Д...   Jun 4 2007, 18:18
|- - BratherLU   Цитата(Саша Z @ Jun 4 2007, 22:18) ..., т...   Jun 5 2007, 08:49
|- - Саша Z   Цитата(BratherLU @ Jun 5 2007, 12:49) Пос...   Jun 5 2007, 11:48
- - BratherLU   Еще раз в данной реализации -> длина линии заде...   Jun 5 2007, 12:03
|- - Саша Z   Цитата(BratherLU @ Jun 5 2007, 16:03) Еще...   Jun 5 2007, 12:25
- - BratherLU   Давйте кусочек кода начиная с внешнего цикла (там ...   Jun 5 2007, 12:45
|- - Саша Z   Цитата(BratherLU @ Jun 5 2007, 16:45) Дав...   Jun 5 2007, 13:02
|- - Саша Z   Цитата(=GM= @ Jun 5 2007, 22:13) Вот что ...   Jun 6 2007, 06:57
|- - -=ВН=-   Цитата(Саша Z @ Jun 6 2007, 10:57) ... Кс...   Jun 6 2007, 07:28
||- - Саша Z   Цитата(-=ВН=- @ Jun 6 2007, 11...   Jun 6 2007, 08:04
||- - -=ВН=-   Цитата(Саша Z @ Jun 6 2007, 12:04) Да нет...   Jun 6 2007, 08:52
|- - =GM=   Цитата(Саша Z @ Jun 6 2007, 05:57) Ну дав...   Jun 6 2007, 09:10
|- - Саша Z   Цитата(=GM= @ Jun 6 2007, 13:10) Бестолко...   Jun 6 2007, 09:33
|- - =GM=   Цитата(Саша Z @ Jun 6 2007, 08:33) ... не...   Jun 6 2007, 10:01
|- - Саша Z   Цитата(=GM= @ Jun 6 2007, 14:01) 1) Не за...   Jun 6 2007, 10:36
- - Саша Z   Цитата(BratherLU @ Jun 5 2007, 18:07) Да ...   Jun 5 2007, 14:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016