Hallo, ich habe ein System mit zwei Microblazes realisiert. Diese kommunizieren über einen FSL Kanal. Die Daten möchte ich mit dem Controlbit aus dem FSL Bus kennzeichnen. Ich schicke z. B. drei mal mit putfslx(data,0,FSL_DEFAULT) und einmal mit putfslx(data,0,FSL_CONTROL) Daten zum anderen Microblaze. Dieser liest (egal ob das control bit gesetzt ist oder nicht) die Daten mit getfslx(read, 0, FSL_Default) aus. Wenn ich das richtig verstanden habe, kann ich mit fsl_iserror() überprüfen ob das Controlbit gesetzt war oder nicht. Sobald ich aber einmal ein gesetztes Controlbit detektiert habe, gibt mir fsl_iserror() dauerhaft aus, dass es gesetzt ist. Muss ich das Controlbit aktiv wieder auf Low setzen, damit ich es nicht mehr detektiere?
Also wenn ich das richtig verstehe, macht der Prozessor folgendes beim Lesen der Daten: Pseudocode aus Reference Guide für die Funktion get: if MSR[UM] == 1 then ESR[EC]←00111 else (rD)←FSLx if (n = 1) then MSR[Carry]←not (FSLx Exists bit) if (FSLx Control bit≠c) then MSR[FSL_Error]←1 if (e = 1) then ESR[EC]←00000 ESR[ESS]←instruction bits [28:31] EDR←FSLx Wenn ich das richtig verstehe, wird, wenn das control bit gesetzt ist, bei einem Leseaufruf mit getfsl() MSR[FSL_Error] gesetzt. Der Wert scheint dann nicht mehr rückgängig gemacht zu werden... und daher wird mit fsl_iserror() immer ein gesetztes controlbit erkannt. Das kann doch nicht sein oder? Kann ich nicht das Register selber wieder auf den vorherigen Wert setzen?
ah habe es gefunden. Mit mtmsr(0); kann ich den Wert aus dem Register löschen und beim nächsten Auslesen der Datei, kann ich auch das Controlbit wieder lesen.
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.