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
Ich bin auch einsteiger ich kann dir nicht helelfen aber falls du irgend wie eine Lösung findest kannst du ihn ja uns Posten so würde einiges zu Thema Blackfin zusammen kommen.
Hmmm irgendwie finde ich im internet keine Informationen darüber. Arbeitet den jemand mit einem anderen Blackfin und kann mir etwas zum thema PLL sagen?
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
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
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
Danke für den Tip, ich versuche es umzusetzten. Ich gebe schnellst möglich ein Feedback. Danke
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
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
Sorry, da ich auf dem ADSP-21992 in Assembler arbeite (was in meinen Augen soundso besser als C auf einem DSP von AD ist), kann ich das nur schwer beurteilen.
Hallo Marek, funktioniert es oder benötigst Du noch ein paar Tips? Wenn Du das PLL_CTL Register änderst mußt Du auf jeden Fall den Idle Befehl ausführen.
Hallo Timo, ich habe immer noch meine Probleme ;). Hast du evt. eine Email adresse oder eine ICQ nummer für mich, damit dieser Post hier nicht ins unentliche geht ? Gruß Marek
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 :)....
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.
Das wäre echt super von dir.... hast du evt. icq oder eine email-adresse für mich... falls ich weiter fragen habe ???
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.