RTV forum PL | NewsGroups PL

Jak poprawnie adresować i0 w DAG1 na ADSP 2181 przy funkcji FFT?

ADSP 2181 i problem z DAG1

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie adresować i0 w DAG1 na ADSP 2181 przy funkcji FFT?

Paweł Chrobak
Guest

Fri Oct 01, 2004 1:10 pm   



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)

Michał Lebik
Guest

Fri Oct 01, 2004 3:39 pm   



Paweł Chrobak@pl.misc.elektronika napisał:

Quote:
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 ???



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ą..

--
Pozdrowienia,
, Mądry człowiek nie czeka na okazje - sam je stwarza.
-- Francis Bacon ,.
[ Chcesz wysłac do mnie meila? -> http://tiny.pl/gbh ]

Mariusz Dabrowski
Guest

Fri Oct 01, 2004 6:12 pm   



On 2004-10-01, Paweł Chrobak <beefens@o2.pl> wrote:
Quote:
Mój problem wygdąda tak ,jakbym adresował i0 w DAG1 on sobie coś innego

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.

--
Pozdrawiam,
Mariusz

Paweł Chrobak
Guest

Sun Oct 03, 2004 1:11 pm   



Quote:

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ąć.

Paweł Chrobak
Guest

Sun Oct 03, 2004 1:53 pm   



Quote:
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 ???



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ą..

--
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;



Quote:
Pozdrowienia,
, Mądry człowiek nie czeka na okazje - sam je stwarza.
-- Francis Bacon ,.
[ Chcesz wysłac do mnie meila? -> http://tiny.pl/gbh ]


elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie adresować i0 w DAG1 na ADSP 2181 przy funkcji FFT?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map