|
Нужна помощь разобраться с asm рутиной FIRа, Моя первая самостоятелсьная FIR рутина... |
|
|
|
Jun 3 2007, 18:35
|
Знающий
   
Группа: Свой
Сообщений: 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 ? Она-то вроде перекидывает из памяти в память, и вроде у меня так и есть в коде....  Что я в упор не вижу ????? Кроме того, если видите у другие ошибки в коде алгоритма - буду благодарен за указание таковых... P.S. Все переменные в данном asm определены в основном С коде.
|
|
|
|
|
 |
Ответов
|
Jun 4 2007, 11:06
|
Частый гость
 
Группа: Свой
Сообщений: 103
Регистрация: 16-05-06
Пользователь №: 17 126

|
mvdk *(_p_buff_length-1),brc сорри Вас запутал и сам заплутал mvdk *(_p_buff_length-1),brc - такая штука загрузит в брс значение из ячейки с абсолютным адресом (_p_buff_length-1).
Поэтому - по адресу _p_buff_length должно лежать сразу нужное значение (на единицу меньше), если хотите использовать mvdk *(_p_buff_length),brc
По поводу циркулярной адрессации и rptz грабли таки rptz a,_fir_ord-1 , если _fir_ord - адрес внешней константы (в сях), то компилер реально считает, что число повторений следующей инструкции лежит по адресу _fir_ord-1 и выполняет инструкцию это число раз +1 - ничего общего с Вашей задумкой я думаю => два способа вызова rptz (Mnemonic insruction Set) 1 rptz a,#_fir_ord-1 повторит след инструкция _fir_ord раз, где _fir_ord - константа объявленная в этом же асме или еще где во внешнем асме чере .set 2 rptz a,*(_fir_ord) в этом случае повторит след инструкция число раз +1 лежащих по адрес _fir_ord .
|
|
|
|
|
Jun 4 2007, 11:27
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(BratherLU @ Jun 4 2007, 15:06)  mvdk *(_p_buff_length-1),brc сорри Вас запутал и сам заплутал mvdk *(_p_buff_length-1),brc - такая штука загрузит в брс значение из ячейки с абсолютным адресом (_p_buff_length-1).
Поэтому - по адресу _p_buff_length должно лежать сразу нужное значение (на единицу меньше), если хотите использовать mvdk *(_p_buff_length),brc
По поводу циркулярной адрессации и rptz грабли таки rptz a,_fir_ord-1 , если _fir_ord - адрес внешней константы (в сях), то компилер реально считает, что число повторений следующей инструкции лежит по адресу _fir_ord-1 и выполняет инструкцию это число раз +1 - ничего общего с Вашей задумкой я думаю => два способа вызова rptz (Mnemonic insruction Set) 1 rptz a,#_fir_ord-1 повторит след инструкция _fir_ord раз, где _fir_ord - константа объявленная в этом же асме или еще где во внешнем асме чере .set 2 rptz a,*(_fir_ord) в этом случае повторит след инструкция число раз +1 лежащих по адрес _fir_ord . Спасибо, понял. Пробую: rptz a, *(_fir_ord) не проходит компиляцию - компайлер выдает ошибку утверждая что rptz не принимает indirect addressing. У меня, все глобальные констатнты и определения (включая -fir_ord) определены через главный С файл, посему действительно как вы и говорите нужно indirectt addressing, но засада видимо в том что комманда rptz не принимает indirect. Неужели нет выхода и нужно в asm коде определять временную переменную и в нее кидать значение _fir_ord данное извне ?
|
|
|
|
Сообщений в этой теме
Саша 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 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 BratherLU Да незачта.В своем проекте дописал чуть-чуть
Код*.... Jun 5 2007, 14:07 =GM= Цитата(Саша Z @ Jun 3 2007, 17:35) Кроме ... Jun 5 2007, 14:52  Саша Z Цитата(=GM= @ Jun 5 2007, 18:52) Мне каже... Jun 5 2007, 15:58   =GM= Цитата(Саша Z @ Jun 5 2007, 15:58) Да но ... Jun 5 2007, 18:13    Саша 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|