2MHz SPI ist natuerlich schon arg lahm, da hat der Student beim "Zusammenklicken der Fremd-IP" wohl ueberall die gleichen Makrozellen genommen ;-) Alle Treiber schnell ist auch nicht der Hit. Umschaltbare Slew rate ist eigentlich das was man will, also schnell nur da wo es auch noetig ist.
Doch, das geht wenn man ein paar Tricks anwendet. Lege das Triggersignal auf einen Eingang, der einen Interrupt auslöst und gleichzeitig einen
100MHz Timer startet. In der Interrupt-Routine liest du als erstes den Zählerstand des Timers aus. In dieser Zahl ist die Information enthalten, wie lang die Reaktionszeit auf den Interrupt war. Verwende dann diese Zahl, um an der richtigen Stelle in ein NOP-Array reinzuspringen. Auf diese Weise wird eine variable Verzögerungszeit mit
10ns Auflösung generiert, wodurch die Interrupt-Reaktionszeit ausgeglichen werden kann. Das Ergebnis ist 10ns Jitter.
Jepp, das ist das übliche Verfahren, um variable Interruptlatenzen zu kompensieren. Prinzipiell ähnlich funktioniert es auch mit freilaufendem Zähler und Captureeinheit. Allerdings kostet das Verfahren selber einiges an Zeit und der Interrupt natürlich sowieso. D.h: Du bekommst eine nicht ganz unerhebliche Mindestlatenz.
Ja, der Cache scheint auch ziemlich gross zu sein.
Einen Pin toggeln geht in einem Takt, d.h. die minimale Pulsdauer von
10ns wie gefordert sollte moeglich sein (sofern die Pin-Treiber das ausgeben koennen). Allerdings kann man am Ende hoechstens an 20ns Jitter herankommen. Mehr ist aus der CPU nicht zu holen wenn ich das Datasheet richtig lese.
"nicht ganz unerheblich" wird noch untertrieben sein im Vergleich zu direkt abgefragt. Aber gut, vielleicht ist das hier ja akzeptabel bzw. kann sogar an der Triggerquelle kompensiert werden.
Du hast Recht. Ich dachte "Rn" duerfte auch ein SFR sein, das ist aber nicht so. Das Toggeln haette man sonst mit MOV oder XCH machen koennen (die restlichen Pins des Ports kann man reservieren, sind hier ja im Ueberfluss vorhanden). Aber diese Befehle brauchen dann auch alle 2 Cycles wenn ein SFR beteiligt ist.
Ein (D)J(N)Z-Sprung geht aber in 2 Cycles, d.h. damit koennte man die Schleife vom Interrupt unterbrechen lassen mit =20ns Pulsdauer und
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.