Gast
#3548030
In den letzten Tagen beschäftige ich mich mit AVR-Mikrocontrollern. Um genau zu sein habe ich hier einen Atmega328p. Nun sagt dessen Datenblatt (in 8.5, I/O Memory, S.20), dass der Zugriff auf den gesamten I/O-Adressraum mit den Load- bzw. Store-Befehlen möglich ist. Zusätzlich kann eine Untermenge davon mit den I/O-spezifischen Befehlen IN und OUT angesprochen werden. Die Bit-Instruktionen lasse ich jetzt mal außen vor. Nun frage ich mich, wenn ich doch alles auch mit 'normalen' Load-/Store-Befehlen machen kann, warum den Befehlssatz mit 'special case' I/O-Befehlen verschandeln? Da ich mal davon ausgehe, dass die Atmel-Engineers schon einen Grund dafür gehabt haben, war mein erster Tipp, dass der I/O-Zugriff mittels Load/Store bei früheren/anderen AVR-Prozessoren vielleicht nicht möglich war und die In-/Out-Befehle daher im Befehlssatz vorhanden sind. In der Tat scheint das Instruction Set Manual das zu bestätigen: > For parts with SRAM, the data space consists of the Register File, I/O > memory and internal SRAM (and external SRAM if applicable). For parts > without SRAM, the data space consists of the Register File only. (aus der Befehlsbeschreibung für LD, S.87) Demnach nehme ich an, dass die I/O-Befehle auf AVR-Controllern ohne SRAM benötigt werden. Was mich jedoch verwundert, ist die Tatsache, dass diese Befehle auch vom Compiler (avr-gcc) generiert werden. Kein Compilerentwickler würde sich die Unterstützung der ausgiebigen Nutzung von irgendwelchen Spezialbefehlen antun, wenn diese keinen Vorteil brächten. Google ist leider nicht sonderlich hilfreich. Eine zufriedenstellende Antwort konnte ich so nicht finden, nur tonnenweise Tutorials und nutzlose Forenbeiträge. Vielleicht kann die Frage ja einer der AVR-erfahrenen Leute hier beantworten.