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.