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.
Micha
Didn't find your answer? Ask the community — no account required.
M
Michael Koch
Hallo Michael,
Man kann die CPU aber so konfigurieren dass bestimmte Code-Bereiche immer im Cache gehalten werden.
Gruss Michael
M
Michael Koch
Hallo Mark,
Zwei Zyklen für "SETB bit" und zwei Zyklen für "CLR bit". Die Pulsdauer kannst du mit NOPs verlängern, die brauchen einen Zyklus.
Gruss Michael
M
Michael Koch
Hallo Michael,
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.
Gruss Michael
H
Heiko Nocon
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.
M
Michael Baeuerle
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.
Micha
M
Michael Baeuerle
"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.
Micha
M
Michael Koch
Hallo Michael,
Mit welchem Befehl soll das gehen? Ich meine die schnellste Möglichkeit ist ein "SETB bit", aber der braucht 2 Taktzyklen.
Gruss Michael
M
Michael Baeuerle
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
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.