Witam , mam dosyć dziwny problem z moim programem w VisualDSP.
Mianowicie: mam podłaczony do ADSP21061 przetwornik ADC i układ FPGA. Przetwornik wywołuje przerwanie z prędkością 12kHz i prosesor odczytuje w tym czasie z niego dane. Odczyt przeprowadzam komendą GetIOP (aderes). W przerwaniu dokonuje prostych obliczeń na wyniku. No i do tego memomentu jest cacy. Ale jak dopiszę SetIOP(adres,wartosc) aby proc wysłał obliczone dane do FPGA to mi się program rozkłada. Tylko przez tą jedną linijke. Nie wie ktoś co jest grane ?
Komunikacja i zapis daneych z FPGA działa np. na prostym programie tj. ,że wciskam przycisk i wtedy następuje zapis danych do układu.
Widać ,że program z początku dobrze działa przez kilkadziesiąt cykli bo fpga dostaje dane ale to trwa ułamek sekundy i program sie wysypuje :/ .
dla jasności dodam procedure obsługi przerwania :
void pom()
{
ad1=GetIOP(ad2_addres);
odczytfloat(ad_float,ad1); // moja wlasna procedura
ad_float=ad_float+8192;
ad_float=ad_float/4;
ad_int[licznik]=(int) (ad_float);
przesun(ad_int[licznik], ad_int[licznik]); // moja wlasna procedura
licznikA=licznik-kat;
if (licznikA<0) {
licznikA=licznikA+244;
}
if (licznikA>243) {
licznikA=licznikA-244;
}
fazaA_int=ad_int[licznikA];
SetIOP(fazaA_ad,fazaA_int);
licznikB=licznik-81-kat;
if (licznikB<0) {
licznikB=licznikB+244;
}
if (licznikB>243) {
licznikB=licznikB-244;
}
fazaB_int=ad_int[licznikB];
SetIOP(fazaB_ad,fazaB_int);
licznikC=licznik-162-kat;
if (licznikC<0) {
licznikC=licznikC+244;
}
if (licznikC>243) {
licznikC=licznikC-244;
}
fazaC_int=ad_int[licznikC];
SetIOP(fazaC_ad,fazaC_int);
++licznik;
if (licznik==244)
{
licznik=0;
}
}
Dodano po 3 [godziny] 19 [minuty]:
Ok rozwiązałem problem. Przerobiłem program i jest troche bez sensu ale o dziwo dobrze działa.
Prosze modelratora o zablokowanie lub usunicie tematu bo pewnie nikomu sie on nie przyda.
Pozdrawiam.
Mianowicie: mam podłaczony do ADSP21061 przetwornik ADC i układ FPGA. Przetwornik wywołuje przerwanie z prędkością 12kHz i prosesor odczytuje w tym czasie z niego dane. Odczyt przeprowadzam komendą GetIOP (aderes). W przerwaniu dokonuje prostych obliczeń na wyniku. No i do tego memomentu jest cacy. Ale jak dopiszę SetIOP(adres,wartosc) aby proc wysłał obliczone dane do FPGA to mi się program rozkłada. Tylko przez tą jedną linijke. Nie wie ktoś co jest grane ?
Komunikacja i zapis daneych z FPGA działa np. na prostym programie tj. ,że wciskam przycisk i wtedy następuje zapis danych do układu.
Widać ,że program z początku dobrze działa przez kilkadziesiąt cykli bo fpga dostaje dane ale to trwa ułamek sekundy i program sie wysypuje :/ .
dla jasności dodam procedure obsługi przerwania :
void pom()
{
ad1=GetIOP(ad2_addres);
odczytfloat(ad_float,ad1); // moja wlasna procedura
ad_float=ad_float+8192;
ad_float=ad_float/4;
ad_int[licznik]=(int) (ad_float);
przesun(ad_int[licznik], ad_int[licznik]); // moja wlasna procedura
licznikA=licznik-kat;
if (licznikA<0) {
licznikA=licznikA+244;
}
if (licznikA>243) {
licznikA=licznikA-244;
}
fazaA_int=ad_int[licznikA];
SetIOP(fazaA_ad,fazaA_int);
licznikB=licznik-81-kat;
if (licznikB<0) {
licznikB=licznikB+244;
}
if (licznikB>243) {
licznikB=licznikB-244;
}
fazaB_int=ad_int[licznikB];
SetIOP(fazaB_ad,fazaB_int);
licznikC=licznik-162-kat;
if (licznikC<0) {
licznikC=licznikC+244;
}
if (licznikC>243) {
licznikC=licznikC-244;
}
fazaC_int=ad_int[licznikC];
SetIOP(fazaC_ad,fazaC_int);
++licznik;
if (licznik==244)
{
licznik=0;
}
}
Dodano po 3 [godziny] 19 [minuty]:
Ok rozwiązałem problem. Przerobiłem program i jest troche bez sensu ale o dziwo dobrze działa.
Prosze modelratora o zablokowanie lub usunicie tematu bo pewnie nikomu sie on nie przyda.
Pozdrawiam.