FSL Control Abfrage

Gast #3570403
Lesenswert?

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?
Gast #3570574
Lesenswert?

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?

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