Ich bin langsam echt am verzweifeln. Der STM32F4 schafft mich noch ins Irrenhaus. Seit Wochen suche ich einen Fehler den ich einfach nicht fixen kann:
Die virtuelle 1541 alleine liest Daten vom IEC Bus sauber.
Ich habe ein zweites IEC Gerät (Emu-Device) implementiert an Geräteadresse 9. Es funktioniert soweit auch, aber eben nicht immer. Der Fehler liegt an der Funktion die ein byte vom IEC Bus liest. Manchmal liest das Emu-Device das erste Bit falsch, und zwar liest es dann 0 statt 1. Es passiert selten, aber es lässt sich immer nachstellen.
-----------
Die virtuelle 1541 läuft in einem schnellen Timer Interrupt.
Das Emu Device läuft in der main loop. Aber die IecGetc() Funktion, die ein Byte vom IEC Bus liest, läuft größtenteils als PinChange Interrupt. Immer wenn DATA oder CLK sich ändern lauft der Interrupt tadellos, es geht kein Event verloren. Der PC Interrupt läuft auf sehr hoher Priorität (ATN höchste, dann CLK, dann DATA, dann alles andere).
Sobald die 8 Bits übertragen werden, ist die Funktion im richtigen Zustand. Wenn Clk wechselt, löst der PC Interrupt aus. Der erste Befehl im PC Interrupt liest das GPIO und damit den Zustand des DATA Pin. Dieser Zustand wird in die Variable geschoben.
----
Das DATA Bit wird ja erst gesetzt und dann erst das CLK. Daher kann es nicht "zu früh" sein.
Wenn der CLK Interrupt zu spät käme, also wenn Data bereits wieder high ist, dann wäre klar warum ich 0 bekomme. Aber er müsste unglaublich spät kommen, ziemlich unvorstellbar.
Wenn die CLK Flanke die falsche wäre (Störimpuls), dann wären die restlichen Bits im Datenbyte nicht ok.
Und warum immer das erste Bit??!!
Hat irgendwer eine Idee für mich? Ich bin sicher Betriebsblind inzwischen ...