Hallo, ich bin ein klein wenig verwirrt. Beim STM32F103C8T6 mit dem Cortex M3 im Datenblatt des Cortex M3 steht das NVIC Register Mapping (siehe Bild). Wie sollen 21 IPRx Register in einen Speicherraum von 0x300 bis 0x320 passen? Jedes Register hat doch 4 Bitfelder á 8 Bit und ist somit ein 32 Bit Register, dass einen Adressraum von 0x0, 0x1, 0x2 und 0x3 einnimmt. Und bei 21 Registern á 32 Bit lande ich am Ende bei einer Adresse oberhalb von 0x320. Grüße
:
Bearbeitet durch User
Leopold N. schrieb: > Jedes Register hat doch 4 Bitfelder á 8 Bit und ist somit ein 32 Bit > Register, dass einen Adressraum von 0x0, 0x1, 0x2 und 0x3 einnimmt. Das ist korrekt aber jedes dieser Register ist für vier Interrupts à 8 Bit. Im Bild IP0, IP1, IP2 und IP3 in IPR0.
pegel schrieb: > Hex <> Dezimal ? Ich verstehe nicht ganz, was Du damit sagen möchtest. Christopher J. schrieb: > Leopold N. schrieb: >> Jedes Register hat doch 4 Bitfelder á 8 Bit und ist somit ein 32 Bit >> Register, dass einen Adressraum von 0x0, 0x1, 0x2 und 0x3 einnimmt. > > Das ist korrekt aber jedes dieser Register ist für vier Interrupts à 8 > Bit. Im Bild IP0, IP1, IP2 und IP3 in IPR0. Das habe ich schon gerafft. Aber mein Problem ist ein anderes. Im Datenblatt (siehe Bild) sind 21 Register angegeben (genauer IPR0....IPR20) Jetzt kommt die Adressierung: IPR_0: 0x300 IPR_1: 0x304 IPR_2: 0x308 IPR_3: 0x30C IPR_4: 0x310 IPR_5: 0x314 IPR_6: 0x318 IPR_7: 0x31C IPR_8: 0x320 IPR_9: 0x324 Jetzt bin ich schon über die Maximaladresse von 0x320 hinaus, darf aber laut Datenblatt nur bis 0x320 gehen. Wo ist mein Fehler?
:
Bearbeitet durch User
Die erste und die letzte Adresse sind angegeben. Wie kommst du jetzt darauf dass das immer um 4 weiter geht?
Nico W. schrieb: > Die erste und die letzte Adresse sind angegeben. Wie kommst du > jetzt > darauf dass das immer um 4 weiter geht? Weil die Register 32Bit = 4Byte breit sind und der Speicher meines Wissens nach byteweise adressiert wird.
So, hab jetzt alles zusammengesucht. Ist nen Haufen Arbeit. Wäre nett, wenn man das gleich als Info bekommt. Einmal das Programming Manual [1] woher dein Screenshot kommt. Auf Seite 129 findet man diesen Teil. Als nächstes habe ich dann einmal das Cortex M3 Reference Manual [2] rausgeholt. Wenn man jetzt hier nach dem gleichen Bereich sucht findet man die Übersicht der NVIC-Register. Auf der Seit 8-4 sieht man, dass der Cortex M3 bis zu 0xE000E4F0 geht. PS: Ist eh schon etwas seltsam im Nachhinein, wenn da eine Dezimale 20 bei 0x320 steht. 0x00 bis 0x20 sind schon 33. Demnach müsste da eigentlich IPR32 stehen. Wie auch immer. [1] https://www.st.com/content/ccc/resource/technical/document/programming_manual/5b/ca/8d/83/56/7f/40/08/CD00228163.pdf/files/CD00228163.pdf/jcr:content/translations/en.CD00228163.pdf [2] http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1p1_trm.pdf
:
Bearbeitet durch User
> Als nächstes habe ich dann einmal das Cortex M3 Reference Manual [2] > rausgeholt. Wenn man jetzt hier nach dem gleichen Bereich sucht findet > man die Übersicht der NVIC-Register. > > Auf der Seit 8-4 sieht man, dass der Cortex M3 bis zu 0xE000E4F0 geht. Und was soll das jetzt konkret für meine Frage bedeuten? Im Register Map vom NVIC steht aber als Ende für die IPRx Register der Offset 0x320
:
Bearbeitet durch User
Nico W. schrieb: > PS: Ist eh schon etwas seltsam im Nachhinein, wenn da eine Dezimale 20 > bei 0x320 steht. 0x00 bis 0x20 sind schon 33. Demnach müsste da > eigentlich IPR32 stehen. Wie auch immer. S.o.
Hier noch aus dem core_cm3.h vom CMSIS. Ich denke, dass da dann das Programming Manual einfach fehlerhaft ist.
1 | /**
|
2 | \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
|
3 | */
|
4 | typedef struct |
5 | {
|
6 | __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ |
7 | uint32_t RESERVED0[24U]; |
8 | __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ |
9 | uint32_t RSERVED1[24U]; |
10 | __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ |
11 | uint32_t RESERVED2[24U]; |
12 | __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ |
13 | uint32_t RESERVED3[24U]; |
14 | __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ |
15 | uint32_t RESERVED4[56U]; |
16 | __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ |
17 | uint32_t RESERVED5[644U]; |
18 | __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ |
19 | } NVIC_Type; |
Nico W. schrieb: > Nico W. schrieb: >> PS: Ist eh schon etwas seltsam im Nachhinein, wenn da eine Dezimale 20 >> bei 0x320 steht. 0x00 bis 0x20 sind schon 33. Demnach müsste da >> eigentlich IPR32 stehen. Wie auch immer. > > S.o. Nein! Die Register sind 4 Byte breit, belegen also pro Register 4 Byte. Register IPR0 belegt also den Speicher von 0x320 bis 0x324 und so weiter. Edit: Meinst du dass da einfach ein Fehler vorliegt, meine Adressierung stimmt und man am Ende an Adresse 0x350 rauskommt?
:
Bearbeitet durch User
Leopold N. schrieb: > Nein! > > Die Register sind 4 Byte breit, belegen also pro Register 4 Byte. > > Register IPR0 belegt also den Speicher von 0x320 bis 0x324 und so > weiter. Ich habe nur versucht deinen Screenshot zu interpretieren. Vielleicht auch falsch gedacht. Auf jeden Fall steht da bei Offset 0x320 ein NVIC_IPR20, was nicht richtig aussieht. Leopold N. schrieb: > Edit: Meinst du dass da einfach ein Fehler vorliegt, meine Adressierung > stimmt und man am Ende an Adresse 350 rauskommt? Siehe das Listing aus dem CMSIS. Ich denke, dass der Korrekt ist.
Nico W. schrieb: > Leopold N. schrieb: >> Nein! >> >> Die Register sind 4 Byte breit, belegen also pro Register 4 Byte. >> >> Register IPR0 belegt also den Speicher von 0x320 bis 0x324 und so >> weiter. > > Ich habe nur versucht deinen Screenshot zu interpretieren. Vielleicht > auch falsch gedacht. Auf jeden Fall steht da bei Offset 0x320 ein > NVIC_IPR20, was nicht richtig aussieht. > > Leopold N. schrieb: >> Edit: Meinst du dass da einfach ein Fehler vorliegt, meine Adressierung >> stimmt und man am Ende an Adresse 350 rauskommt? > > Siehe das Listing aus dem CMSIS. Ich denke, dass der Korrekt ist. Die im CMSIS haben ja keine absoluten Adressen drinstehen, sondern definieren das Ganze als aneinandergereihte Arrays/Vektoren. Aber rein rechnerisch müssten die ja auch über die Endadresse rauskommen.
Hier noch der Ausschnitt aus CMSIS core_cm3.h Hier definieren die ein Array mit 240 Elementen á 8Bit, das bei Offset 0x300 anfängt. Enden sollte das Array dann bei Offset 0x540 oder?
Leopold N. schrieb: > Enden sollte das Array dann bei Offset 0x540 oder? Nein. Warum muss man eigentlich einen Screenshot von Code machen? Was ist an deinem Screenshot anders als an dem Listing oben von mir? Anfangen tut der kram bei 0x300. 240 Byte später sind wir bei? 240 Dezimal -> 0xF0 Hex 0xE000E100 + 0x3F0. Bzw. 0xE000E4F0 (siehe oben Beitrag "Re: STM32 NVIC Mapping")
:
Bearbeitet durch User
Nico W. schrieb: > Anfangen tut der kram bei 0x300. > 240 Byte später sind wir bei? 240 Dezimal -> 0xF0 Hex Tschuldigung, hatte die 240 Byte als hex-zahl in meinen tr eingegeben... Ja so macht es dann Sinn. Ist also im Endeffekt dann ein Fehler im Cortex M3 Manual oder? Danke
:
Bearbeitet durch User
Leopold N. schrieb: > Ist also im Endeffekt dann ein Fehler im Cortex M3 Manual oder? Ich dachte es wäre aus dem Programming Manual für den STM32. Wie auch immer, die Abbildung ist definitiv so nicht richtig, da hast du recht.
Christopher J. schrieb: > Leopold N. schrieb: >> Ist also im Endeffekt dann ein Fehler im Cortex M3 Manual oder? > > Ich dachte es wäre aus dem Programming Manual für den STM32. Wie auch > immer, die Abbildung ist definitiv so nicht richtig, da hast du recht. Ja Programming Manual stimmt, danke für die Korrektur. Dann wäre das also geklärt, vielen Dank für Eure Hilfe. Grüße
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.