Hallo NG,
jetzt hab ich nochmal ne Frage:
ich habe gelernt, dass ich Pins über eine bestimmte Adresse (FFFFF434)
auf High setzen kann. Und über eine andere Adresse (FFFFF430) wieder auf
Low setze. Wie löst man dann eine Parallele Datenübertragung (z.B. das
Setzen einer Adresse auf einem externen Chip).
nehmen wir an, an den Adressleitungen sollen nacheinander die folgenden
Werte "angelegt" werden:
1.) 11110001b
2.) 00001001b
Muss ich dann vor dem Setzen des zweiten Wertes erst mal alle Pins auf
Low setzen? Wohl eher nicht, sonst würde ja als zwischenschritt
00000000b anliegen, oder?
So wie ich das sehe, brauche ich doch dann immer 2 Schritte, um den
Zustand zu wechseln...
Wie macht man das? Vielen Dank für jeden Hinweis!
MfG
Peter
Lass gut sein, er hat u.U. recht. Es gibt Controller auf ARM7-Basis, die
aus dem beschriebenen Grund tatsächlich nicht in der Lage sind, ein
beliebiges Pattern in einem Rutsch auf die Pins zu bringen. Er hat nur
freundlicherweise unterlassen, den Typ zu nennen, so dass ihn weiter
nicht zu helfen ist.
> Nix für ungut, aber besorg Dir erstmal ein einführendes Buch über> Mikroprozessortechnik. Dir fehlen ja die elementarsten Grundlagen.
Naja, ich habe schon in verschiedenen anderen Themen geschrieben, dass
es ein Hobby von mir ist, mit dem ich gerade anfange. Wenn ich dann hier
und da mal eine unqualifizierende Frage von Stapel lasse, bitte ich
recht herzlich um Entschuldigung. Ich mache das nicht beruflich. Habe
aber Spaß an der Freude.
Mir ist es einfach nicht klar, wie ich die Pins in einem Rutsch so
schalten kann, wie ich es brauch...
> Lass gut sein, er hat u.U. recht. Es gibt Controller auf ARM7-Basis, die> aus dem beschriebenen Grund tatsächlich nicht in der Lage sind, ein> beliebiges Pattern in einem Rutsch auf die Pins zu bringen. Er hat nur> freundlicherweise unterlassen, den Typ zu nennen, so dass ihn weiter> nicht zu helfen ist.
Sorry, hab hier schon so viele Fragen gestellt, dass vergessen habe, den
Typ anzugeben. Es ist ein
Atmel AT91SAM7S256
Wenn es sich bei den beschriebenen Pins um die Adressleitungen des
externen Speicherinterfaces handelt, dann kannst Du die im Grunde
genommen gar nicht auf irgendwelche definierten Bitmuster schalten,
sondern diese nur kurzzeitig im Rahmen eines Zugriffes auf externen
Speicher ausgeben lassen.
Dazu solltest Du Dir mal die Timingdiagramme des externen
Speicherinterfaces näher ansehen, die im Datenblatt/User's Manual des
µCs zu finden sind.
In einem festgelegten zeitlichen Raster geschieht in etwa folgendes:
Der µC legt das gewünschte Adressmuster an die Adressleitungen an.
Bei Schreibzugriffen legt der µC das gewünschte Datenmuster an die
Datenleitungen an.
Der µC aktiviert diverse Steuerleitungen, anhand derer externe
Peripherie erkennen kann, daß das Adressmuster gültig ist
Bei einem Lesezugriff wird nun der Zustand der Datenleitungen
eingelesen.
Der µC deaktiviert die Steuerleitungen wieder und ist nun bereit, einen
weiteren Speicherzugriff durchzuführen.
Zu den Steuerleitungen gehören unter anderem Signale, die die Richtung
des Datenzugriffes definieren, also ob es sich um einen Lese- oder
Schreibzugriff handelt.
Programmiertechnisch ist so ein Speicherzugriff nicht von einem
Speicherzugriff auf internen Speicher zu unterscheiden, bis auf die
verwendeten Adressen.
Diese Vorgehensweise ist bei allen µCs mit externem Speicherinterface
gleich; manche µCs (wie die AVRs) verwenden einen gemultiplexten Adress-
und Datenbus und verwenden die gleichen Leitungen sowohl für die Ausgabe
von Adressen als auch die Ausgabe und das Einlesen von Daten. Die
Umschaltung zwischen diesen beiden Varianten erfolgt mit einem vom µC
erzeugtem Steuersignal, mit dem i.d.R. ein Latch angesteuert wird, das
Adress- und Datenbus so demultiplext.
Das erfordert einen zusätzlichen Schritt im weiter vorne beschrieben
Ablauf.
Näheres hierzu ist dem im AVR-Datenblatt/User's Guide zu findenden
Timingdiagramm zu entnehmen.
=> Manual not read error. 15.4.5, da steht ausdrücklich drin wie es geht
(ODSR).
Nicht möglich ist es beispielsweise mit einigen älteren LPC2000
Modellen.
Solange du den Code so unlesbar gestaltest, wie mit Assembler grad noch
möglich, ist eher unwahrscheinlich dass sich jemand der Binär/Hex-Origie
anschliesst und eifrig Nullen zählt.
Tip: Symbole für Steuerregister und -bits benutzen, nicht direkt in Hex
und Binärformat reinschreiben.