www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAR EWARM - FIQ funktioniert nicht


Autor: Rooney Bob (rooney)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen!

Ich stehe derzeit vor einem mir unlösbaren Problem.

Ich verwende in meiner Firma IAR Embedded Workbench EWARM v4.40A. Ich 
habe einen Bootloader geschrieben, der den ersten Sektor des 
AT91SAM7S256 belegt.

Nun will ich eine Applikation kompilieren, die folglich erst mit 
0x104000 beginnen darf.
Hierzu habe ich das .xcl Linkerscript angepasst (siehe Anhang).
Sehe ich mir die resultierende HEX Datei an, beginnt die Applikation wie 
erwartet bei 0x104000.

Flashe ich die Applikation über meinen Bootloader in den Controller 
funktioniert alles einwandfrei.
Nun habe ich versucht das Flash zu löschen und die Applikation 
(Startadresse = 0x104000) mittels meines Debuggers zu flashen und nicht 
über den Bootloader. Von Adresse 0x000000 bis 0x103FFF steht nun also 
0xFF und ab 0x104000 eben die Applikation.
Seltsamerweise startet der Controller korrekt, gibt mir noch ein paar 
serielle Ausgaben zurück, aber dann scheint er zu stehen.
Zu stehen deswegen, weil er auf einen FIQ wartet.

Nun  meine Fragen...
1.) Warum geht das nicht? Springt er bei einem Fast Interrupt auf eine 
Adresse die es gar nicht gibt (im Bereich 0x000000 bis 0x103FFF)? 
Funktionierts deswegen mit dem Bootloader, weil in diesem Adressbereich 
INTVEC für den Bootloader definiert ist?

2.) Reicht es nur das Linkersript anzupassen, oder muss auch eine andere 
Datei angepasst werden? Nochmals der Hinweis: Verwende IAR EWARM v4.40A.

3.) Kann meine Vermutung stimmen, dass dieses Problem nur beim FIQ 
auftritt? Alle anderen Interrupts scheinen zu funktionieren.


Wie folgt wird der FIQ in meiner Applikation konfiguriert.
void interrupt_init ( void )
{

    AT91PS_AIC     pAic;
    pAic = AT91C_BASE_AIC;

    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,SW1_MASK,0);
    AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_FIQ, FIQ_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE,pio_c_irq_handler );
    AT91F_AIC_EnableIt (pAic, AT91C_ID_FIQ);
}


Vielen Dank für eure Unterstützung!!!

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.