ADSP 2181 i problem z DAG1
Masz problem? Zapytaj na forum elektroda.pl
From: "Paweł Chrobak" <beefens_at_nospam_o2.pl>
Subject: ADSP 2181 i problem z DAG1
Date: Fri, 1 Oct 2004 16:10:19 +0200
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)
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: =?iso-8859-2?Q?Micha=B3_Lebik_?=<axior_at_nospam_poprostu_NIE_LUBI_SPAMU.net>
Subject: Re: ADSP 2181 i problem z DAG1
Date: Fri, 01 Oct 2004 18:39:10 +0200
Paweł Chrobak_at_nospam_pl.misc.elektronika napisał:
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 ]
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "Paweł Chrobak" <beefens_at_nospam_o2.pl>
Subject: Re: ADSP 2181 i problem z DAG1
Date: Sun, 3 Oct 2004 16:53:25 +0200
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;
> Pozdrowienia,
> , Mądry człowiek nie czeka na okazje - sam je stwarza.
> -- Francis Bacon ,.
> [ Chcesz wysłac do mnie meila? -> http://tiny.pl/gbh ]
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: Mariusz Dabrowski <mgd4_at_nospam_poczta.onet.pl>
Subject: Re: ADSP 2181 i problem z DAG1
Date: 1 Oct 2004 19:12:35 GMT
On 2004-10-01, Paweł Chrobak <beefens_at_nospam_o2.pl> wrote:
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
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "Paweł Chrobak" <beefens_at_nospam_o2.pl>
Subject: Re: ADSP 2181 i problem z DAG1
Date: Sun, 3 Oct 2004 16:11:40 +0200
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ąć.
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai