- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: haben bei ATMEL ALLE Register Adressen?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2006
    Ort
    Augsburg
    Alter
    44
    Beiträge
    7

    haben bei ATMEL ALLE Register Adressen?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi alle,

    ich hatte bis jetz nur mit dem Prozessor 68k von Motorola (sehr begrenzte) Erfahrung. Bei diesem Teil haben die internen Register wie z.B. Datenregister, Statusregister etc. KEINE Adresse. Diese können so auch nicht in C-Code direkt beschrieben werden.

    Im Datenblatt von dem ATMEL MEGA32 hab ich jezt gelesen dass die Register R0 - R31 die Adressen $00 - $1F (Doku S.9), die übrigen Register $20 - $5F (Doku S.299) gehen.

    Also haben hier wirklich ALLE Register (auch GeneralPurpose/Statur-Regiseter) Adressen?

    Zusatzfrage:
    Da der Atmel beim Neustart den Befehl der in $00 steht ausführt, heisst das das der Befehl in R0 steht?? Wenn dieser vom Programm überschrieben wird, und dann ein Reset gemacht wird, geht dann noch was?


    Irgendwie ist das ein Wurm drinne in meiner Denkweise.


    Danke schon mal,

    Gruss Markus

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Schau mal da.
    https://www.roboternetz.de/wissen/in...ressen_Mapping

    Beim AVR ist es tatächlich so, daß die Register 0-31, alle Special Register und der SRAM einen geschlossenen Adressraum bilden
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Disclaimer: none. Sue me.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    *grmpff*
    Auf die Frage, ob der Storch die Kinder bringt, kann man
    "NEIN"
    sagen, man kann ihm aber auch den "Ursprung der Arten" und alle weiterführenden Werke sicherheitshalber mal gleich vorlesen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2006
    Ort
    Augsburg
    Alter
    44
    Beiträge
    7
    Danke für eure Antworten.

    Leider hab ich das noch nicht so ganz verstanden. Mein Quellcode sah bisher so aus:

    Code:
              .org 0x00
         rjump main
    
              .org 0x60
    main: .....
    heistt das dass in R0 jetz der "rjump main" , da dieser Adresse 0x00 hat, steht, und main:.... dann ab 0x60?

    Was geschieht wenn ich sowas wie ldi D0,0x00 in main stehen habe, wird dann der "rjump main" gelöscht, bzw was würde passieren wenn die Anweisung: .org 0x60 fehlen würde, wäre dann mein Main-Programm in den Registern?

    Gibts da vielleicht ne Seite die das LEICHTVERSTÄNDLICH erklärt?

    @SprinterSB: Du meinse mit Deiner (plötzlich verschwundenen) Antwort das es vom Befehl abhängt wo im Speicher zugegriffen wird?

    Gruss

    Markus

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das hatt' ich befürchtet, jetzt hab' ich ihn verhärmt.

    Also: (vergiß einmal die "0x0060")

    Die AVR (und alle sogenannten "Harvard"-Fuzzys) unterscheiden strikt zwischen Programm- und Datenspeicher.

    Dort, wo du dein Programm hinstellst, ist (logo) der Programmspeicher. der geht nun aber wirklich von 0 - 32767 (Atmega32) also 32k.
    Vorne hat er seine Interrupt-Vektoren, der erste ist für "INIT"
    https://www.roboternetz.de/wissen/in...inenprogrammes

    Schau dir auch mal das Muster an, wie das in einem Programm aussieht.
    https://www.roboternetz.de/wissen/in...ce-Code_Muster

    Bis dahin ist alles wie von anderen Prozessoren gewohnt, register sind einfach register. Und jeder z.b. "JMP label" bezieht sich immer auf einen Label im Programm, auch wie gewohnt.

    Erst dann, wenn du die 2k RAM-Speicher zum speichern (log) verwenden willst, geht's um die obgenannten 0060. das ist ganz einfach die niederste RAM-adresse, von dort weg hast du deine 2k RAM und eine Reihe Befehle, die sich darauf beziehen können. Auch ganz normal.

    Nur in dem Adress-Bereich von 0000-0060 gibt es dieses "Mapping". Du kannst dieses Feature auch erstmal einfach ignorieren
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2006
    Ort
    Augsburg
    Alter
    44
    Beiträge
    7
    Viel Dank, =D>

    Du hast mir mit deiner ausführlichen Antwort sehr weitergeholfen

    Gruss

    Markus

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Der AVR hat drei völlig getrennte Adressbereiche:
    Codebereich (Flash),
    Arbeitsspeicher (RAM) darin sind auch die Register untergebracht,
    und EEPROM.

    Es gibt also z.B eine Adresse 4 im Codebereich (Programm Memory),
    und eine Adresse 4 im RAM.
    Die haben nix miteinander zu tun.
    Es existieren Befehle die sich explizit auf das RAM beziehen
    (z.B. LD = Laden aus RAM),
    und eigene Befehle, die sich nur auf den Codespeicher beziehen
    (z.B LPM = Laden aus Program-Memory).
    In die unteren Adressen des Rams sind die Register "eingeblendet".
    Diese Adressen können wahlweise als Register oder als RAM
    angesprochen werden.

    Als zusätzliche Komplikation kommt noch dazu,
    das der Codebereich mit 16-Bit Worten arbeitet,
    d.h. unter der Adresse 4 sind 16 Bits = 2 Bytes zu finden.
    Und das RAM arbeitet mit 8-Bit Worten, dort steht
    unter Adresse 4 nur ein Byte.

    Vieleicht wird es dir damit etwas klarer.
    Ich musste mich auch erst daran gewöhnen,
    ich komme von der Z-80 und 68000 Schiene....

    Gruß Jan

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    ..musste mich auch erst daran gewöhnen, ich komme von der Z-80 und 68000 Schiene
    Dann sei bloß froh, daß du nicht auf PIC gewechselt hast
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2006
    Ort
    Augsburg
    Alter
    44
    Beiträge
    7
    Danke Jan,

    langsam aber sicher kommt Licht ins Dunkel.

    Ich werd mich wohl noch n bissl damit spielen müssen, aber des wird schon werden.

    Gruss

    Markus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad