Ich hoffe, daß mir jemand weiterhelfen kann.
Habe einen Pico mit Arduino IDE programmiert, Programm läßt sich laden, läuft fast einwandfrei, wenn nicht diese sporadischen Aussetzer bei gpio_get ( nDACK ) passieren würden.
Über eine Schleife sollen insgesamt 512 Bytes aus dem Pi gesendet werden. Dafür wird das nDACK Signal als Trigger verwendet.
Nachdem das nDACK Signal auf 0 geht sollten DRQ3 und L320 ebenfalls auf 0 gehen, was im Normallfall passiert, aber eben sporadisch nicht. Und der Aussetzer ist jedesmal zeitlich woanders.
Mit pulldown Widerstand probiert, alle irqs ausgeschaltet, Pin gewechselt, auch mit einem zweiten Pico passiert das Gleiche. Zeitlich sollte es auch kein Problem geben, für das Erkennen des Signals nDACK bis zum Setzen von DRQ3 braucht es ca. 0,3 µs, das nDACK Signal wechselt etwa alle 3 µs. Für die 512 Bytes Übertragung werden ca. 1800µs benötigt, der Fehler tritt dabei 1 x oder nicht auf. DMA und state machines sind nicht aktiviert.
Leider kommt es immer wieder vor, daß gpio_get () nicht richtig funktioniert, und somit einen Puls auslässt, und dann natürlich nicht mehr die 512 bytes gesendet werden.
Das Bild vom Osci zeigt die Signale 1: nDACK , 2 : DRQ3 und 3 : L320 und der fehlende pulse.
while (i < EndSect) { // Read 512 bytes of 1 sector
gpio_put_masked ( 0b1111111100000000000000 , (HDDTrack[i] << 14) ); // 8 bit Data output
gpio_put ( L320 , 1 ); // Set FlipFlop for Data Register
gpio_put ( DRQ3 , 1 ); // Set DRQ3
i++;
while (gpio_get ( nDACK )) ; // Wait until nDACK is set to LOW
gpio_put ( L320 , 0 ); // Reset FlipFlop for Data Register
gpio_put ( DRQ3 , 0 ); // Reset DRQ3
while (!gpio_get ( nDACK )) ; // Wait until nDACK is set to HIGH
}