Hallo,
habe ein Problem, IR´s zu aktivieren, die an einer größeren Position als
31 stehen. Bis zur Position 31 mache ich das so.
#define NVIC_ISER 0xE000E100
Für Timer 2 z.B
NVIC_ISER |= 0x10000000;
Geht auch, aber wie läuft das jetzt für einen IR, der an einer größeren
Position als 31 steht?
Thomas schrieb:> Geht auch, aber wie läuft das jetzt für einen IR, der an einer größeren> Position als 31 steht?
Nimmste halt die anderen Adressen, also NVIC_SER1 oder NVIC_SER2. Dann
natürlich den Offset abziehen, also Nummer 32 (Zählung beginnt bei 0)
wäre dann 0x1 in NVIC_SER1.
Nop schrieb:> Thomas schrieb:>>> Geht auch, aber wie läuft das jetzt für einen IR, der an einer größeren>> Position als 31 steht?>> Nimmste halt die anderen Adressen, also NVIC_SER1 oder NVIC_SER2. Dann> natürlich den Offset abziehen, also Nummer 32 (Zählung beginnt bei 0)> wäre dann 0x1 in NVIC_SER1.
Sry, aber das versehe ich nicht. Es steht nirgendwo, wo NVIC_SER1
anfängt.
Steht doch da: Reset value 0x00000000, also 32Bit pro Register.
Nach 32Bit / 4 Byte kommt dann das nächste Register mit wieder 32
Enablebits.
#define NVIC_ISER0 0xE000E100
#define NVIC_ISER1 0xE000E104
usw
Thomas schrieb:> Sry, aber das versehe ich nicht. Es steht nirgendwo, wo NVIC_SER1> anfängt.
Dein erster Screenshot, das rot markierte. Mit Verweis auf Seite 209.
Das ist das "PM0214 Programming Manual" von ST. Auf diese Manual wird im
Reference unter den Kapitel NVIC verwiesen.
Ist aber nicht das erste mal, dass das Reference Dinge verschweigt.
Thomas schrieb:> Das ist das "PM0214 Programming Manual" von ST.
Bei Cortex-M/ARM-spezifischen Dingen sollte man sich immer direkt an die
Doku vom ARM halten. Die ist i.A. sehr gut, vollständig und viel besser
als die von ST, aber unübersichtlicher, weil sie alle
Prozessorkerne/Varianten abdeckt. Warum ST mein das (schlecht)
duplizieren zu müssen weiß man nicht.
Die STM32Fxx Reference Manuals von ST sind nur für die Peripherie. Der
NVIC gehört zum Kern von ARM und ist daher bei ARM dokumentiert.
Es verschweigt nichts, diese Register existieren in deinem STM32 auch
nicht.
Die 16 Register brauchts nur wenn auch wirklich alle 256 IRQs im
Silizium vorhanden sind.
Hat dieser STM32 hier aber nicht, also reichen derer 4 Register.
Denn er hat nur 101 IRQ Quellen.
Nen Fehler scheints aber zu geben im Manual.
Erstmal kann ein 4 Byte aligned Register nicht an 0x0B Anfangen und es
wären nur 3 Register.
Geh einfach von aus, dass dort 4 Register hintereinander rumfliegen.
Nenn doch einfach mal welcher STM32 das ist.
Mw E. schrieb:> Es verschweigt nichts, diese Register existieren in deinem STM32> auch> nicht.> Die 16 Register brauchts nur wenn auch wirklich alle 256 IRQs im> Silizium vorhanden sind.> Hat dieser STM32 hier aber nicht, also reichen derer 4 Register.> Denn er hat nur 101 IRQ Quellen.>> Nen Fehler scheints aber zu geben im Manual.> Erstmal kann ein 4 Byte aligned Register nicht an 0x0B Anfangen und es> wären nur 3 Register.>> Geh einfach von aus, dass dort 4 Register hintereinander rumfliegen.>> Nenn doch einfach mal welcher STM32 das ist.
Das ist der STM32F413VG
Thomas schrieb:> aber was ist jetzt mit den IR´s ab 95 ?
Die F4-Familie hat keine so hohen Positionen, siehe Screenshot. Im
selben Dokument (Reference Manual) findet sich im Kapitel 12.2 die
Tabellen 61 und 62, die das bestätigen.
Mw E. schrieb:> Erstmal kann ein 4 Byte aligned Register nicht an 0x0B Anfangen
Tut's auch nicht, es endet dort.
> und es wären nur 3 Register.
Korrekt, 0 bis 2, das sind drei Register.
NUnja, mal wieder die Db Qualität von ST.
"52 maskable interrupt channels (not including the 16 interrupt lines of
Cortex®-M4 with FPU)"
Aber in der Tabelle sins 101 IRQ Quellen.
Die 52 Quellen passen natürlich in 2 Register, daher stehen auch nur 2
Register in dem anderen Paper.
Beim Refman vom F205 steht zB was von:
"81 maskable interrupt channels (not including the 16 interrupt lines of
Cortex®-M3)"
Die IRQ Quellen gehen dann auch bis Position 80.