www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik NVIC Zugriff -> Hard Fault


Autor: C. D. (schnack)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich möchte (illustriert auch durch andere Threads) CAN auf dem STM32 zum 
Laufen bringen.
Aktuell nimmt mir der STM32F103RE aber jeden Zugriff auf die Register 
des NVIC sehr übel, wenn der zugehörige Interrupt aktiviert werden soll.
Genauer: Es geht um die Anweisungen:
   NVIC->IPR[4] |= 0x10000000;
   NVIC->ISER[0] |= (1 << (USB_HP_CAN_TX_IRQChannel  & 0x1F));

Beim Ausführen der ersten Zeile springt er in den Hard Fault. Wenn ich 
die Zeile spaßeshalber auskommentierte, passiert das gleiche beim 
nachfolgenden Statement (geprüft in Keil uvision).
Beim Assembler-Code kann auch sehen, daß erst der Lesezugriff auf das 
NVIC-Register das Problem auslöst. Das Attachment zeigt die Situation 
vor dem Auftreten des Hard Faults,  d.h. der Zugriff
0x08001C72 F8D00310  LDR      r0,[r0,#0x310]
löst den Fehler aus.

Was fehlt hier? Muß ich den NVIC (siehe 2. Attachment) vorher noch in 
anderer Form "vorbereiten"?
Grüße
schnack

Autor: Torfkopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geraten: Möglicherweise ist die CPU nicht in einem Privilege Mode, der
den Zugriff auf den NVIC erlaubt...

Autor: C. D. (schnack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hm. Das könnte sein - bis eben war mir (peinlich) nicht bewußt, daß es 
hier überhaupt 2 Modi gibt.
Ich habe jetzt nachgelesen, daß es dafür ein eigenes Control-Register 
gibt (Bit 0 auf 0 setzen -> privileged mode).
Wie kann ich das Register lesen oder schreiben (Assembler-Anweisung 
notwendig)?
Grüße
schnack

Autor: Torfkopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

www.arm.com: Cortex™-M3 Technical Reference Manual, ARM-V7 arch ref 
manuals
www.st.com:  RM0008 Reference manual.
Zusammen mehr als 2000 Seiten.

Vorlesen werd´ ich Dir´s aber nicht...


Für Registerzugriffe ist kein Assembler notwendig. ARM behauptet
sogar, dass man bei Cortex komplett auf ASM verzichten könne.
Die (Nicht-CPU) Register haben sämtlich eine Adresse, so dass
sie wie eine Speicherzelle zugreifbar sind.


Hdh,

Torfkopp

Autor: C. D. (schnack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
und danke!

Ergebnis:
x = __get_CONTROL(); // Read the current value of CONTROL
__set_CONTROL(x); // Set the CONTROL value to x
.. wobei das auch nur geht, wenn man im privileged mode bereits ist...
Grüße
schnack

Autor: Torfkopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ausserdem gibts von ST die STM32 Std Peripherals Lib
und von ARM die CMSIS Lib, die u.a Register-Adressen und
Zugriffsfunktionen definieren.

>.. wobei das auch nur geht, wenn man im privileged mode bereits ist...

Das gilt aber sicher nicht für alle Peripherieregister.

Was lässt Du da überhaupt für Software laufen?
Direkt nach dem Reset ist die CPU nämlich im priv Mode (heisst bei
Cortex WIMRE Handler-Mode)
und wird erst durch die SW in den nicht-privilegierten (Thread-) Mode
geschaltet, wobei das nicht zwingend notwendig ist.
In den Handler-Mode kommt man dann durch einen Interrupt (entweder HW 
oder
SW-Interrupt.

Aber lies´ erstmal die 2000 Seiten. Dann hast Du sowieso keine Fragen 
mehr ;-).

Hdh,

Torfkopp

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.