Blackfin DSP (PLL)

Gast #390772
Lesenswert?

Hallo zusammen,
vorweg ich bin ein Einsteiger in den DSP-Bereich und habe so meine
Anfangsprobleme.
Ich habe mir das ADSP-BF535 EZ-KIT gekauft. Programmiert wird das ganze
mit VisualDSP. Nun ist dort ein Beispiel enthalten für das setzen und
zurückstetzten eines Portpins (PFx).
Auf dem KIT ist ein 20MHz Quarz angebracht, nun meine frage wie muss
ich die PLL's konfigurieren damit ich ein möglichst schnelles
"Pin-Toggeling" hinbekomme. Über einen C- Quellcode wäre ich sehr
erfreut da mir da total der durchblick fehlt und mir die Online-Hilfe
nicht weiterhelfen konnte.

Vielen Dank

Marek Swierzy
Gast #390775
Lesenswert?

Ich arbeite mit dem ADSP-21992, da dürfte kein Riesenunterschied
bestehen. Wo genau ist das Problem?

Mir ist die Frage einfach zu allgemein formuliert, um jemanden mit
fertigem Code zu füttern. Ist z.B. klar, wie man in C auf die Register
des DSP zugreifen kann, funktioniert das Ganze auch prinzipiell
(Debugger)?

Auf dem ADSP-21992 klinkt man die PLL einfach in einen Bypass-Mode,
stellt Multiplier und Divider ein und schaltet die PLL dann wieder ein
- das wars.

Wenn Initiative erkennbar wird schaue ich vielleicht auch mal in das
Datenblatt deines Blackfin.

Alex
Gast #390776
Lesenswert?

He Alex, vielen Dank für dein Anwort. Du bist der erste der mir evt.
helfen könnte.
Ich möchte schnellstmöglich einen Pin setzen und zurück setzen.


#include <sys/exception.h>
#include <sys/excause.h>
#include "defBF535.h"

/*global variables*/
volatile unsigned short * fio_dir_reg;
volatile unsigned short * fio_set_reg;
volatile unsigned short * fio_clr_reg;

/*void main()*/
void main()
{

    fio_dir_reg = (unsigned short *)FIO_DIR;
        fio_set_reg = (unsigned short *)FIO_FLAG_S;
        fio_clr_reg = (unsigned short *)FIO_FLAG_C;

        /* set PF0 - PF3 as output */
        *fio_dir_reg = (unsigned short)0x000F;

        asm("ssync;");
        int a,b,c;

        for(;;)
    {
                /* clear all the LED */
                *fio_set_reg = (unsigned short)0x000F;
                /* set LED to 0xA pattern */
                *fio_clr_reg = (unsigned short)0x000F;
        }

}


vielen dank
Gast #390777
Lesenswert?

Na ok,

auch wenn da von PLL weit und breit noch nichts zu sehen ist. Also
schlag als erstes mal die Hardware-Reference auf (auf Seite 364 gehts
los).

PLL_CTL: Bypass Mode aktivieren und PLL abschalten

PLL_CTL: MSEL-Bits auf entsprechenden Faktor einstellen und PLL
aktivieren

PLL_STAT: Bit 5 (PLL_LOCKED) pollen bis es gesetzt ist
(while-Schleife)

PLL_CTL: Bypass Mode deaktivieren.

Das wars, freue mich auf eine programmtechnische Umsetzung.

Alex
Gast #390779
Lesenswert?

So Alex....... ich bekomme es nicht hin...
was mache ich falsch.... hier mal die unterfunktion welche ich for der
entlosschleife abarbeite.

void Init_PLL(void)
{
*pPLL_CTL=0x0102;  // Bypass u. Disable Power to PLL
*pPLL_CTL=0x2F00;  // MSEL adjust and Bypass on
while((*pPLL_STAT&0x0020)==0)
{
    printf("wait");
}
*pPLL_CTL=0x2E00;  // MSEL adjust and Bypass off

}

Aber aus irgendeinen grund scheint er die funktion nicht zu machen.

Vielen Dank


Marek
Gast #390780
Lesenswert?

Hallo Marek,

deine Angaben sind leider ein wenig fuzzy ...

Du hast ein EZ-Kit, kannst also eigentlich ständig alle Register
kontrollieren. Nutze diese Möglichkeit.

Wird das Bit korrekt gesetzt nachdem du die PLL umgestellt hast?

Schau alternativ einmal in das Programmverzeichnis vom VisualDSP++,
dort finden sich oft Programmbeispiele. Bei meiner 3.5er Version ist
z.B. der Code für eine PLL-Initialisierung dabei (für den ADSP-BF561).


Alex
Gast #390785
Lesenswert?

mal eine Frage neben bei wie schell kann ich die PFx überhaupt setzen un
clearen was ist da die Maximale Geschindigkeit?


Gruß

Marek

P.s: @admin/mod ich suche nach einem Link um mir mein Passwort zukommen
zu lassen :)....
Gast #390786
Lesenswert?

Als Ausgang geschaltet eine Zustandsänderung pro SCLK. Der maximale Takt
eines Ausgangssignales ist demnach SCLK/2. Wenn Du einen Portpin toggeln
lassen möchtest, warum nimmst Du dann nicht einfach das Toggle
Register?

Ich habe leider völlig vergessen, dass ich hier meine Hilfe angeboten
habe. Woran hängt es bei der PLL Initialisierung? Möchtest Du sie in C
oder ASM initialisieren? Ich kenne zwar nicht den BF535 sondern nur
BF561 und BF534/6/7 aber die PLL sollte identisch sein. Ich kann Dir
den Code wahrscheinlich liefern müsste ihn nur etwas anpassen.
Gast #390788
Lesenswert?

Im Datenblatt sthet du muss bestimmt sequenzen einhalten oder im
Bootprozess verändern.
Ich Hb auch ein PLL Problem und zwar ich verstehe das Datenblatt nicht
die geben zwar einige Beispiel aber wo wird VCO bestimmt (im Datenblatt
sthet im Register PLL_CTL MSEL[5:0] so weit is ok) aber wie kommt man
denn auf vco=600.. usw. das ist mir irgendwie unklar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren