controller mit >= 100 MHz clock

Aug 10, 2010 28 Replies

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

Hallo Michael,

Man kann die CPU aber so konfigurieren dass bestimmte Code-Bereiche immer im Cache gehalten werden.

Gruss Michael

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

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

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.

Micha

"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

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

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