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


von Rooney B. (rooney)


Angehängte Dateien:

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.
1
void interrupt_init ( void )
2
{
3
4
    AT91PS_AIC     pAic;
5
    pAic = AT91C_BASE_AIC;
6
7
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
8
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,SW1_MASK,0);
9
    AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_FIQ, FIQ_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE,pio_c_irq_handler );
10
    AT91F_AIC_EnableIt (pAic, AT91C_ID_FIQ);
11
}


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

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
Noch kein Account? Hier anmelden.