Forum: Mikrocontroller und Digitale Elektronik ATMega2561: 256KB flash mit 8Bit -Architektur. trick?


von rufto (Gast)


Lesenswert?

hallo,  schreibe gerade  ein bericht über ein praktikum .

mein betreuer wies mich daraufhin, in meinem Bericht zu erklären wie es 
möglich ist 256KByte flash mit dieser 8Bit-Architektur zu adressieren .

hab jetzt nochmal in datenblatt nachgesehen ..   also dort steht nur das 
es halt einen 17Bit breiten Programmcouter gibt. Instruktionen sind min 
16 Bit breit.

d.h. 2^17 =~ 128K * 2Byte pro Instruktion = ~ 256 KByte .

ist das alles.

also ich mein  die 17Bit müssen ja auch gehandled werden vom prozessor - 
wie funktioniert das ?

das ich das noch ein bissl vertiefe in meinem bericht.

von Matthias L. (Gast)


Lesenswert?

Du hast dir die ANtwort doch schon selbst gegeben:

>>einen 17Bit breiten Programmcouter

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Es gibt auch spezielle Instruktionen SFRs zur Handhabung. Nur ein 17-Bit 
(bzw. 3-Byte-PC) genügt nicht; man muss ja auch Strünge ausführen 
können, d.h. dem PC neue Werte zuweisen. Weil ein (Doppel)Register nur 
16 Bit halten kann, gibt's den EICALL Befehl, der mit EIND verwurstet 
wird, um bestimmte Sprünge/Calls machen zu können.

Johann

von Sven P. (Gast)


Lesenswert?

Genau, der Programmzähler hat mit der linearen Ausführung ja nix am Hut: 
relative Sprünge funktionieren wie gehabt, genauso wie Rechnerei und 
'Überspringbefehle'. Interessant wirds erst bei absoluten Sprüngen, aus 
der Verktortabelle raus zum Bleistift, oder bei indirekten. Dazu gibts 
dann entweder spezielle Sprungbefehle (rjmp -> jmp -> ejmp), die 
funktionieren auch wie gehabt, werden aber im Programmspeicher 
entsprechend länger, um alle Adressbits unterbringen zu können.
Bei der indirekten Springerei reicht der Z-Zeiger auch nicht mehr aus, 
deshalb muss es irgendwo ein weiteres Adressregister geben, und wenns 
nur aus einem 'E'-Bit besteht.

von spess53 (Gast)


Lesenswert?

Hi

Der Befehlcode von Calls und Jumps kann eine 24Bit-Adresse aufnehmen. 
Bei AVRs mit >128 KByte Flash werden 3 Byte auf den Stack gelegt.

>gibt's den EICALL Befehl, der mit EIND verwurstet
>wird, um bestimmte Sprünge/Calls machen zu können.

EICALL und EIJMP verwenden für die unteren 16 Bit Z und für die oberen 
das Register EIND.

MfG Spess

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
Noch kein Account? Hier anmelden.