Meine Fragen beziehen sich auf die aktuelle Doku Rev.B - 03/2017.
1)
Der Takt Prescaler soll in 12 Stufen einstellbar sein:
1,2,4,8,16,32,64,6,10,12,24,48
Angegeben sind zur Konfiguration von MCLKCTRLB/PDIV aber auf Seite 67
nur die Einstellungen von 2-48. Wie lässt sich der Prescaler auf 1
stellen?
2)
Die Fuse-Konfiguration für PA0 in SYSCFG0/RSTPINCFG (Seite 30) sollte im
Auslieferungszustand eigentlich auf UPDI stehen. Angegeben ist aber
"RESET" ?
3)
Für die Default-Fuse Einstellung zum Setup des Boot- und App Bereichs
heisst es auf Seite 31: "When both FUSE.APPEND and FUSE.BOOTEND are
0x00, the entire Flash is BOOT section"
Genaugenommen sollte doch dann für die ebenso geltende Voreinstellung
"Interrupt vectors are placed at the start of the application section of
the Flash" (siehe Seite 91) gelten: Es gibt keine
Interrupt-Vektortabelle, weil es keine APP-Sektion gibt, hier wäre IVSEL
erst auf 1 für "Interrupt vectors are placed at the start of the boot
section of the Flash" umzuschalten !?
Mirja schrieb:> Für die Default-Fuse Einstellung zum Setup des Boot- und App Bereichs> heisst es auf Seite 31: "When both FUSE.APPEND and FUSE.BOOTEND are> 0x00, the entire Flash is BOOT section">> Genaugenommen sollte doch dann für die ebenso geltende Voreinstellung> "Interrupt vectors are placed at the start of the application section of> the Flash" (siehe Seite 91) gelten: Es gibt keine> Interrupt-Vektortabelle, weil es keine APP-Sektion gibt, hier wäre IVSEL> erst auf 1 für "Interrupt vectors are placed at the start of the boot> section of the Flash" umzuschalten !?
Unsinn. Du hast bloß nicht begriffen, was es mit Boot- und App-Sektion
wirklich auf sich hat. Kurzfassung: die Bootsektion ist als besonders
privilegierter Bereich gedacht, der sich durch eben diese zusätzlichen
Privilegien von der App-Sektion unterscheidet.
Was passiert also, wenn man dem ganzen Flash diese Privilegien
zuerkennt?
Dadurch verschwinden natürlich nicht die beiden Sektionen, sondern sie
werden nur identisch. D.h.: Bootsektion und Appsektion sind gleich gross
und liegen auf den gleichen Adressen, die Privilegien dieses
Speicherbereiches entsprechen der Schnittmenge beider Sektionen (sind
also identisch zu der Sektion mit den zusätzlichen Privilegien).
Was die Interrupttabellen betrifft: die sind natürlich dann ebenfalls
identisch, du kannst also zwischen den beiden umschalten, es ändert sich
dadurch effektiv aber rein garnix, weil auch die Basisadresse dieser
beiden Tabellen halt identisch ist...
Lothar schrieb:> Der bei einem brauchbaren uC am Ende vom Flash ist.
So, da spricht ja die geballte Kompetenz. Ich erschauere bis in's
Mark...
Deiner Meinung nach wäre also auch z.B. der Tiny2313 kein "brauchbarer"
µC?
Weil: der hat entweder überhaupt keine Bootloader-Sektion oder diese ist
halt mit der App-Sektion identisch. Umschalten kann man zwischen diesen
beiden Varianten mit einem einzigen Fuse-Bit, das nennt sich SELFPRGEN.
Dasselbe gilt für viele andere, seit langem existierende Tinys
ebenfalls.
Nunja, und nun gibt es halt auch noch ein paar, die nicht ganz Mega sind
(z.B. bezüglich des fehlenden RWW-Features), aber bezüglich des
BL-Bereiches halt Mega-Features bieten, und zwar sogar über die der
Megas hinaus, nämlich Identität zwischen App- und Boot-Sektion (was
wiederum bei den klassischen Megas nicht geht).
Also, ich würde das mal so ausdrücken: Du kannst einfach nix mit diesen
Features anfangen, NUR deswegen erscheinen sie DIR unbrauchbar.
Lothar schrieb:> c-hater schrieb:> die Bootsektion ist als besonders privilegierter Bereich gedacht>> Der bei einem brauchbaren uC am Ende vom Flash ist.EFM8 Threads sind halt Mangelware, da bietet es sich doch an auf der
übermächtigen Konkurrenz rumzuhacken. Stimmts, Lothar?
Bootsektion am Anfang klingt für mich jedenfalls logischer als am Ende
befindlich.
c-hater schrieb:> die Bootsektion ist als besonders> privilegierter Bereich gedacht, der sich durch eben diese zusätzlichen> Privilegien von der App-Sektion unterscheidet.
Ja Du hast natürlich Recht, aber das könnte schon etwas *besser
dokumentiert* sein. Wenn es ausdrücklich "Alles ist Boot-Sektion" heißt
dann bedeutet das für den Einsteiger sicher nicht zwingend, daß es
gleichzeitig App-Sektion ist und man den Interrupt-Tab Location Schalter
nicht umzulegen braucht. Zumal Bootend/Append= 0 ja eigentlich nahelegen
würde, daß nur noch eine Appdata-Sektion übrigbleibt...
Goofy schrieb:> Bootsektion am Anfang klingt für mich jedenfalls logischer als am Ende> befindlich
Praktisch jeder uC und auch alle Prozessoren haben die Bootsektion am
Ende des physikalischen Speichers und zwar aus ganz einfachen Gründen:
- User-Code beginnt immer bei 0 oder anderer fester Adresse egal ob
Bootloader genutzt oder nicht und wie gross
- User-Code muss nicht relocatable sein
- ermöglicht zwei fixe Interrupt-Vektortabellen: bei 0 und bei der
festen Bootloader-Adresse (die dann z.B. auch ein ROM/EEPROM sein kann)
- Echtzeitbetriebssysteme könnten sonst nicht laufen siehe z.B. hier
https://msdn.microsoft.com/en-us/library/bb331824.aspx> EFM8 Threads sind halt Mangelware, da bietet es sich doch an auf der> übermächtigen Konkurrenz rumzuhacken
Das ist nun wirklich nicht nötig: schau Dir einfach mal die Gewinne von
Silabs und Microchip im Vergleich an und die Letzten von Atmel bevor die
praktisch Pleite gingen und aufgekauft wurden :-)
Mirja schrieb:> 1)> Der Takt Prescaler soll in 12 Stufen einstellbar sein:> 1,2,4,8,16,32,64,6,10,12,24,48>> Angegeben sind zur Konfiguration von MCLKCTRLB/PDIV aber auf Seite 67> nur die Einstellungen von 2-48. Wie lässt sich der Prescaler auf 1> stellen?
Ohne jetzt die Doku gelesen zu haben: Indem man ihn ausschaltet???
llkjjklbdv
Lothar schrieb:
...
Du steigerst Dich von belanglos bis wirklich nicht mehr ernst zu nehmen!
llkjjklbdv schrieb:> Ohne jetzt die Doku gelesen zu haben: Indem man ihn ausschaltet???
Stimmt. Nicht umsonst gibts das Prescaler Enable Bit (ab Reset
eingschaltet).
Der aktuellen Doku fehlt eine Übersicht über das I/O Memory. Der
tn1614def.inc sind z.B. im interessanten Bereich von 0-63 nur die VPORTx
von 0-11, die GPIORx von 28-31, CCP auf 52 und SP+SREG von 61-63 zu
entnehmen... Wer weiß mehr?
Die Initialisierung des PIT erweist sich als heimtückisch. Hält man die
in der Doku beschriebene Prozedur ein ist das Ergebnis ein glatter
Fehlschlag: Erst und unnützerweise die Periode in RTC_PITCTRLA zu
schreiben stößt einen Synchronisationsprozeß mit der RTC-Clock Domain an
der dazu führt, daß ein drauffolgendes Einschalten des PIT im gleichen
Register folgenlos bleibt wenn nicht zuvor das zugehörige SYNCBUSY Flag
in RTC_PITSTATUS auf 0 getestet wird. Gestaltet man die Initialisierung
dagegen kurz und knapp mit Einschalten des Interrupts sowie dann
Periode/Enable zusammen klappt die Sache. Für den PIT- sowie den RTC
Interrupt sei noch darauf hingewiesen, daß die entsprechenden Int-Flags
am Ende jeweils manuell zurückzusetzen sind!