Ist es auf dem 8-Bit-Atmel AVR MCUS (insbesondere Mega- und Xmega-Serie) möglich, mehrere Ports gleichzeitig in einem einzigen Befehlszyklus zu ändern?
Zum Beispiel habe ich einen 512-kB-RAM-Chip, der 19 Adressleitungen benötigt. Dies erfordert mehrere 8-Bit-Ports, um angemessen adressiert zu werden. Ist es möglich, in einem einzigen Befehlszyklus alle 19 Bits auf eine bestimmte Adresse zu setzen? Ich verstehe, dass ich die High-Bits, dann die Middle-Bits, dann die Low-Bits setzen und den Low-End-Port inkrementieren kann, um durch den RAM zu gehen, aber die Zuordnung ist möglicherweise nicht sequentiell. Kann ich, um wieder ein zufälliges Beispiel zu nehmen, das RAM das 1. Byte, dann das 510. Byte und dann das 294. Byte in drei aufeinanderfolgenden CPU-Taktzyklen auf den Datenbus legen lassen?
Danke!
NEIN.
Der AVR hat einen 8-Bit-Datenbus und das bedeutet, dass er jeweils nur in ein 8-Bit-Register schreiben kann. Es gibt keine Möglichkeit, drei Bytes gleichzeitig zu programmieren.
Wenn Sie auf so viel Speicher zugreifen, würde ich vorschlagen, dass Sie sich für eine 32-Bit-MCU entscheiden. Es ist möglich , 32-Bit-AVR-Prozessoren zu erhalten , wenn Sie eine ähnliche CPU wünschen. Alternativ gibt es viele relativ einfache/günstige 32-Bit-ARM-Prozessoren von vielen Herstellern. Treffen Sie Ihre Wahl.
Ein Speicherchip kümmert sich im Allgemeinen nicht darum, ob alle Adressdrähte gleichzeitig schalten. Das Höchste, was normalerweise erforderlich wäre, wäre, dass alle Adressdrähte auf ihre richtigen Pegel eingestellt werden, bevor ein Zugriff initiiert wird, und dass sie für eine gewisse Zeitdauer auf ihren richtigen Pegeln bleiben, nachdem der Zugriff abgeschlossen ist. In vielen Fällen sind die Anforderungen für Lesezugriffe sogar noch lockerer: Ändert sich die Adresse auf dem Bus während eines Lesevorgangs, initiieren viele Geräte praktisch automatisch einen Zugriff mit der neuen Adresse und verhindern gültige Daten innerhalb eines bestimmten Zeitraums letzte Änderung am Adressbus.
Da die Verwendung eines I/O-Pins für jede Adressleitung eine Menge I/O verschlingen würde, kann es hilfreich sein, einen oder mehrere Latches oder Register hinzuzufügen. Beispielsweise könnte man bis zu 16 MB Speicher adressieren, während neun Pins für die Adressierung verwendet werden. Verbinden Sie acht davon mit den Adressbits 0-7 sowie den Eingängen eines 74HC373 und eines 74HC374. Führen Sie den verbleibenden Pin den Ladefreigabe- und Taktsignalen dieser Chips zu. Verbinden Sie die Ausgänge des 74HC373 mit den Adressbits 8-15 und die des 74HC374 mit den Adressbits 16-23.
Um auf ein bestimmtes Byte zuzugreifen, beginnen Sie mit "Clock/LE" niedrig und gehen Sie wie folgt vor:
Zusätzliche Zugriffe innerhalb eines 256-Byte-Bereichs können durch Wiederholen der Schritte 5–6 (wobei die Schritte 1–4 weggelassen werden) durchgeführt werden.
Abhängig von den Geschwindigkeitsanforderungen und der Anzahl der verfügbaren I/O-Pins sind verschiedene Anordnungen möglich.
Der AVR XMEGA verfügt über eine externe Busschnittstelle, die bis zu 16 MB adressiert. Auf den externen Speicher kann mit einem einzigen CPU-Befehl zugegriffen werden. Ein Lesevorgang dauert 2 CPU-Taktzyklen (Schreibvorgänge dauern nur 1 Zyklus), aber der XMEGA kann mit 32 MHz getaktet werden, was einem einzelnen Zyklus auf einem 16-MHz-AVR entspricht.
XMEGA externe Busschnittstelle
Da der externe Speicher jedoch in den 64k-Datenspeicherplatz abgebildet wird, kann nur auf 48-55,5kB (je nachdem, wie viel Datenspeicherplatz für interne IO/EEPROM/RAM verwendet wird) wahlfrei zugegriffen werden, ohne die Bank zu wechseln. Die unteren 8,5-16k sind normalerweise nicht verfügbar. Um auf die gesamten 512 KB zuzugreifen, müssten Sie die Adressleitung A15 manuell steuern, wodurch die Bankgröße 32 KB beträgt (abgebildet in den oberen 32 KB des Datenspeicherplatzes).
Einige ältere AVRs wie der ATMega128 verfügen ebenfalls über eine externe Busschnittstelle, jedoch mit eingeschränkteren Adressierungsmöglichkeiten. Diese können langsamer sein, da sie mehr obere Adressleitungen manuell steuern müssen und auch, weil sie eine niedrigere Taktgeschwindigkeit haben. Aber wenn die Geschwindigkeit so kritisch ist, sollten Sie sowieso keinen 8-Bit-AVR verwenden!
Chris Stratton