logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Problem z zapisem danych na magistrale proca , VisualDSP

Yoshi_80 12 Gru 2004 13:19 1845 0
REKLAMA
  • #1 1054242
    Yoshi_80
    Poziom 21  
    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.
  • REKLAMA
REKLAMA