ADSP 2181 i problem z DAG1

Oct 01, 2004 4 Replies

Hej Mój problem wygd±da tak ,jakbym adresowa³ i0 w DAG1 on sobie co¶ innego Tu fragment kodu, ni¿ej opis problemu:


SCRAMBLER: /***** Pierwsza czê¶æ *******/ i4 = Input_Real; i0 = FFT_IO_Real; m4 = 1; m0 = Mod_Value; // Mod_Value = 2 ^ 14-log2 (N) l4 = 0; l0 = 0;



CNTR = N; ENA BIT_REV; DO SR_Loop UNTIL CE; ay1 = DM(i4,m4); // Reversing Real part SR_Loop: DM(i0,m0) = ay1; DIS BIT_REV;



/***** druga czê¶æ *******/ i4 = Input_Image; i0 = FFT_IO_Image; m4 = 1; m0 = Mod_Value; l4 = 0; l0 = 0;



CNTR = N; ENA BIT_REV; DO SI_Loop UNTIL CE; ay1 = DM(i4,m4); //Reersing image part SI_Loop: DM(i0,m0) = ay1; DIS BIT_REV; rts;



To jest funkcja haszuj±ca przed moim FFT,



I , problem w tym ,¿e pierwsza czê¶æ kodu jest wykonywana poprawnie, dane z tablicy "Input_Real" s± poprawnie transferowane do "FFT_IO_Real" Za¶ w drugiej czêsci on przerzuca dane do "Input_Real" zamiast do "FFT_IO_Image" haszuje je poprawnie, ale czemu nie tam gdzie trzeba ???, przecie¿ w³a¶ciwie obie czê¶ci s± takie same. Co trzeba wiêcej zrobiæ ¿eby wska¼nik i0 adresowa³ siê poprawnie ???



Deklaracja tablic wygl±da nastêpuj±co:



.SECTION/DM sound_data;



.VAR/CIRC Input_Real[N]; .VAR/CIRC Input_Image[N];



.VAR/CIRC FFT_IO_Real[N]; .VAR/CIRC FFT_IO_Image[N];



gdzie N=64;



I za cholere nie mogê doj¶æ co jest nie tak.



Je¶li kto¶ by mia³ chwilê ¿eby rzuciæ na to okiem bêdê bardzo wdziêczny. mogê wys³aæ ca³y kod niezbêdny do zobacznie b³êdu ( Jest naprawde bardzo krótki i jest na VisualDSP, i sesja 2181 simulation)


Paweł snipped-for-privacy@pl.misc.elektronika napisał:

A czy DAG w procesorze 2181 zawiera rejestry bazowe Bx ? nie wiem czy to coś pomoże, jednak z SHARC-ach nie ładuje się wartości początkowej do Ix tylko do Bx, Ix jest przy pierwszym dostepie automatycznie ładowany zawartością początkową Bx, i później modyfikowany przy transferach DM(Ix,Mx), jeśli nie inicjalizujesz Bx, wtedy DAG nie działa..

Moze w serii DSP stałoprzecinkowych jest podobnie - być może to jest przyczyną..

Ostatni program na ADSP21xx napisałem już dość dawno, ale pamiętam że przy nadawaniu wartośći rejestrom I pisałem tak:

.var/circ Input_Real[n];

i4 = ^Input_Real;

Nie pamiętam już czemu służył ten operator "^", ale pewnie był do czegoś potrzebny, a u Ciebie go nie widzę. Sprawdź to.

Tak , tak by³o w starych kompilatorach, a w VisualDSP, on sobie sam to wie, nawet próbowa³em tak napisaæ jak poda³e¶, to kompilator powiedzia³, ¿e tu jest b³±d, i ¿e to kod ze starszej wersji, i ¿eby ten znak usun±æ.

niestety 2181 nie ma rejestrów BX, jeszce to w³a¶nie wnikliwie sprawdza³em przed chwil±. Tu jest tak, ¿e Ix jest od razu jejestrem bazowym, i potem on jest modyfikawany przez Mx. A inicjuje siê go w³a¶nie : np. i4 = Input_Real;

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required