Von früheren Projekten für den STM32F405 ist mir bekannt, dass die Funktion MX_NVIC_Init() als letzte Anweisung immer ein __enable_irq enthiehlt (damals erstellt mit dem Atollic TrueStudio). Mir ist nun aufgefallen, dass ein vor einigen Monaten mit der STMcubeIDE für den STM32G$/$ erstelltes Programm, welches den Timer4-Interrupt verwendet funktioniert hat, obwohl ich in den Sourcen nirgends ein __enable_irq oder etwas ähnliches finden konnte. Gleiches, wenn ich mir Sourcen aus dem Internet, z.B. https://github.com/VojislavM/STM32_UART_IRQ anschaue - nie finde ich die Stelle, an der der Interrupteingang der CPU aktiviert wird. Übersehe ich den, oder ist bei den ARMs dieser Eingang per defaul aktiviert und das __enable_irq in den alten Sourcen überflüssig?
Gast
#6845860
Uli N. schrieb: > Gleiches, wenn ich mir Sourcen aus dem Internet, z.B. > https://github.com/VojislavM/STM32_UART_IRQ > anschaue - nie finde ich die Stelle, an der der Interrupteingang der CPU > aktiviert wird. So so, alle "Sourcen aus dem Internet", stellvertretend dafür die obige Quelle? Ganz sicherlich nicht. Verwende CubeMX, erstelle ein Projekt mit Verwendung des NVIC, dann wirst du ganz einfach sehen wie dort Interrupts aktiviert werden. Wenn du dazu zu faul bist suchst du dir eben ein geeignetes Projekt wo du nachlesen kannst, aber nicht das oben genannte. Und nein, es ist nicht ein einzelnes globales "__enable_irq" sondern ein differenziertes Vorgehen da es viele Interrupt- Quellen und viele Interrupt-Levels gibt.
inkontinent schrieb: > So so, alle "Sourcen aus dem Internet", .. Mir ist schleierhaft, wie Du auf "alle" kommst! > Verwende CubeMX, ... Natürlich habe ich auch CubeMX verwendet (u.a. wurde das erwähnte Projekt für den STM32G474 - nicht "STM32G$/$" - damit erstellt) um der Sache nachzugehen - und eben mit dem Ergebnis, dass CubeMX kein __enable_irq einfügt! > Und nein, es ist nicht ein einzelnes globales "__enable_irq" > sondern ein differenziertes Vorgehen da es viele Interrupt- > Quellen und viele Interrupt-Levels gibt. Natürlich ist mir nicht entgangen, dass für jede Interrupt-Quelle erst einmal der NVIC configuriert werden muss - aber darauf bezog sich meine Frage nicht! Es geht allein um jenes Bit, welches mittels der Funktionen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
in cmsis_gcc.h manipuliert werden kann! ???Nichts besseres zu tun, als mich hier anzustänkern, wenn Du offenbar keinen Bock hast zu helfen??? In der Sache bin ich weitergekommen. Im Programming Manual hab' ich die Spalte "Reset value" in "Table 3." unter "2.1.3 Core registers" übersehen (vermutlich weil ich auf eine Registerbeschreibung a la Referece Manual eingestellt war). Aus der geht hervor, dass PRIMASK tatsächlich den Reset Value 0x00000000 hat und damit zu meiner Überraschung der "globale" Interrupt-Eingang der CPU nach dem Reseet aktiv ist, mithin damals das abschließende __enable_irq in MX_NVIC_Init() überflüssig war.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.