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!
Aus dem STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual: 4.4.4 Vector table offset register (SCB_VTOR) Bits 8:0 Reserved, must be kept cleared
Ist das nicht ein Cortex-M3? In dessen ARM Architekture Reference Manual geht VTOR bis Bit 7, d.h. es wäre ein Alignment auf 128 Byte nötig. Es könnte sein das ST da aus dem falschen oder veraltetem Dokument abgeschrieben hat. Ähnlichees habe ich in NXP Doku gefunden.
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
:
Bearbeitet durch User
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.
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.
Moin, Jim M. schrieb: > ... (die Faults zählen hier mit)... Im Refman sieht man, dass die ersten 13 Vectoren sind nicht numeriert sind und somit Int Nr 59 bereits an Offset 0x0000_012C steht. Also >0x100. Daraus folgt das Alignment von 0x200.
Oha, hab mich in der eile vertan, die ersten 16 Vectore sind nicht nummeriert. Daher liegt Int Nr. 0 bei Offset 0x40. und Int Nr 59 eben bei 0x12C.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.