Vector Table Offset setzen: Nur multiple of 0x200 ?

Gast #5539340
Lesenswert?

Hallo,

ich habe ein kleines Projekt (STMF103CB..) mit ST HAL Treibern via 
STM32CubeMX erstellt. Wenn ich den Vector Table Offset setzen möchte, 
finde ich dazu in der Datei system_stm32f1xx.c:

#define VECT_TAB_OFFSET  0x4100 /*!< Vector Table base offset field.
                                  This value must be a multiple of 
0x200. */

Warum sind hier nur multiple of 0x200 vorgesehen? Ich habe den Grund 
noch nicht gefunden. Es scheint auch mit multiple of 0x100 zu gehen. 
Zumindest habe ich noch keine Einschränkung festgestellt. So habe ich es 
bisher in der ARM Doku gefunden. :-\

Kann mir bitte jemand den richtigen Hinweis geben?

Danke im Voraus!
(Firma: fritzler-avr.de) #5539472
Lesenswert?

Hehe, und ich hab gelesen, dass das auchnoch/zusätzlich von der Länge 
der IVT abhängig ist.
Um die Länge der IVT zur nächsten 2er Potenz muss aligned werden.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/Ciheijba.html

(Der Begleittext unter der Tabelle)

Bit 6..0 sind reserved, bei JEDEM M3.
Wenn eine Implementierung mehr Einträge hat als 128Byte (also 32 
Einträge), dann wird der Offset noch größer.

Son STM32 mit M3 Kern hat ja schonmal gut und gerne 100 IRQ Quellen und 
somit Einträge.

0x200 = 512/4 = 128 Einträge oder weniger
Gast #5539477
Lesenswert?

Moin,

naja, aber ARM erstellt die IP, während ST das Silizium bäckt.
Wenn ST ein anderes VT Alignment braucht oder haben will, dann machen
sie das halt einfach.
Kann aber auch ein Fehler sein.
Aber darauf sollte man sich nicht verlassen.

Von Armv7-M Architecture:
The offset address is 32-word aligned. Where more than 16
external interrupts are used, the offset word alignment must be
increased to accommodate vectors for all the exceptions and
interrupts supported and keep the required table size naturally
aligned.

Die Vector Tabelle hat ja etwas mehr als nur 16 Einträge.
#5540159
Lesenswert?

Jim M. schrieb:
> In dessen ARM Architekture Reference Manual geht VTOR bis Bit 7, d.h. es
> wäre  ein Alignment auf 128 Byte nötig.

Gnarf. Im Kapitel B1.5.3 "The vector table" steht das mit dem Alignment 
genauer drin, und für "lange" Vector Tabellen muss das die nächst 
größere 2-er Potenz sein - 128 Byte ist nur das Minimum.

Praktisch jeder Cortex-M3 hat mehr als 32 Interrupts (die Faults zählen 
hier mit), und viele mehr als 64. Daraus erklärt sich die Anforderung 
auf 0x200 Alignment.

Der STM32F103CB scheint aber nur 59 Interrupts zu haben, was ein 
Alignment auf 0x100 ermöglichen würde. Hier hat ST möglichwerweise bei 
der Doku von einem "dickeren" Cortex-M3 abgeschrieben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren