Hallo, ich habe an meinen ATMEGA128 1MByte externes sRAM angeschlossen und steuer den Speicher über den Adress-/Date - Bus bzw. weitere Adressleitungen an. Nun meine Frage. Kann ich den A/D - Bus über die Headerdatei mem.h vom CodeVision programmieren oder wie programmier ich den Bus sonst am besten? Danke Mario
Hi, zu deinem Problem kann ich leider nichts sagen, mich würde aber interessieren, wie du den Bereich > 64kByte ansprichst. Gruß Thorsten
Hallo, den ATMEGA stellt mir ja 16 Adressleitungen zu Verfügung und die restlichen 4 Adressleitungen bilde ich mir einfach selber aus einem der anderen Ports. Kann mir jemand helfen in Bezug auf die Programmierung des AD-Busses?
Hallo, also ich bin dabei mir ein Interface zu bauen. Ich habe dabei ein 512KB SRam an nen Mega162 gebastelt. Ich habe das mit ASM gemacht und so kann ich dir nur ein paar meiner Probleme schildern. Wenn du alle Leitungen nutzt, gehen dir leider 4KB Ram "verloren". Dies ist der interne Addressraum. Ich habe per Register 32Kb externen RAM eingestellt. Die restlichen 4 Leitungen habe ich auch an nen extra Port angesteckt. Ich wähle dann immer eine von 16 Speicherbänken aus und kann dann reinschreiben. So kann ich auch die gesamten 4Mbit nutzen. seb
so isses, die unteren 4k jeder 64k-Speicherbank sind futsch, sprich auf den internen Adressraum gespiegelt. Ansonsten brauchst du nichts weiter, als die entsprechenden Einstellungen in MCUCR und XMCRA.
Ist das immer so? Oder nur bei CodeVision? Bin gerade zu faul zum Suchen, wüsste jetzt auch nicht, wo ich suchen müsste,ausserdem ist es derzeit nur interessehalber. Gruß Rahul
Also hast du statt 64kB nur einen Speicherbereich von 32kB eingestellt? Dann spricht ja der AD-Bus die höchste Adressleitung nicht an bzw. berücksichtigt diese nicht. Dann müsste man die ja ebenfalls extern ansteuern oder? Hat noch keiner Erfahrungen mit dem Programmieren des AD-Busses in C (CodeVision)? Gibt es entsprechende AVR-Libray's dafür?
Habe gerade im Datenblatt des ATMEGA128 eine Vorschlag gefunden, wie man den kompletten 64k Adressraum anspricht. Verstehe nur noch nicht ganz, wie das Funktion. jemand ne Ahnung?
Hab mir grad mal das Datenblatt angeschaut aber ich habe keine Ahnung was du meinst. Falls du dich auf Seite 25 beziehst, da steht was ganz anderes. Im Codevision Handbuch steht auf Seite 82 oben, man kann für mega128 maximal 64K für Variablen verwenden. Problem des ganzen ist einfach, das die Befehle (LDS,STS,...)der Megas nur 64K Addressieren können. Also von 0x0000 bis 0xFFFF. 0x10FF hast du die I/O Ports und den Internen SRAM. Wenn du also an eine Adresse zwischen 0x1100 und 0xFFFF schreibst ist das der Externe SRAM. Wenn du nun alle externen Adressleitungen belegst, werden 64k angesprochen aber du verlierst 4K. Du müsstest also das 1MB in Fenster a 64kb zerlegen. Das macht dann 1024kb/64kb=16 Fenster. Damit verliert man aber 16*4kb(64kb). Ich habe das Fenster kleiner gewählt, denn die 32kb passen problemlos hinter die 4kb intern. Wenn du nun in den Ram schreibst, musst du also erst eins von den 16 Fenstern auswählen(die oberen 4 Addressleitungen), dann kannst du deine Daten im Ram ablegen. Ist das Fenster voll, nimm das nächste und schreib einfach wieder ab 0x1100 rein.
@Sebastian: Danke erstmals für deine Erklärung, hat mir einige Sachen gut zu verstehen gegeben. Habe im Datenblatt nachgesehen, auf Seite 33 ist ne Erklärung wie man die vollen 64k ansprechen kann. Man setzt dabei die XMMn Bits im XMCRB-Register so, dass der Bus die oberen Adressleitunge nicht verwendet und setzt sie dann selbst. Warum man dann aber mehr als 64k adressieren kann, ist mir nicht klar? Man würde ja über den internen RAM bzw. I/O-Bereich schreiben....
So wie ich das verstanden habe, macht der dasselbe. Nur das hier von 0x00 bis 0xff also 256kb ansprechbar sind. Die oberen Adressbit muss man auch hier selber setzten und man muss ständig XMMn Bits verändern.
Eigentlich sehr aufwendig. Bei meiner Anwendung kann ich damit leben, ein paar kB einzubüßen. Werde das also mitn AD-Bus und den 4 externen Adressleitunge versuchen. Wenn ich was Neues erfahre oder es funktioniert, poste ich es hier!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.