Hallo, uC: LPC2468 Compiler: GNUARM Wenn ich zwei Interrupts(IRQ) installiere, funktioniert nur einen von den beiden, und zwar der mit der höheren Priorität. Woran kann das denn liegen?
.. es wird einen Interrupt vom Timer generiert und einen vom CAN, wenn eine Nachricht eintrifft.Das komische ist: wenn ich dem Timer-Interrupt eine höhere Priorität gebe als CAN funktioniert nur der Timer und wenn umgekehrt funktionieren die beiden nicht, ich komme nicht weiter und habe alles versucht, kann mir jemand vielleicht helfen?
Code? Kann es sein, dass du am Ende der ISR den VIC nicht freigibst?
Gast
#793391
Haben Sie es so gemacht?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Hallo, ich habe den Cade angehängt, hoffentlich findet ihr was. Danke
Kann es sein, dass man im CAN Controller (nicht nur im VIC) den Interrupt ausdrücklich quittieren muss, damit das Interrupt Flag gelöscht wird?
Gast
#793433
Ich vermisse hier
1 | |
das Attribut __irq wie oben von MmVisual geschrieben.
laut die Beispiele von NXP, muss man den Receive-Puffer velassen und VIC freischalten; CAN1CMR = 0x04; // release receive buffer VICVectAddr = 0; /* Acknowledge Interrupt */
@ARM-Fan ich kompiliere mit dem GNUARM, deswegen habe ich die ISR in can.h so definiert: extern void CAN_Handler (void) _attribute_ ((interrupt));
Gast
#793444
1 | |
2 | |
Kann, ich bestätigen. Mehr mache ich hier auch nicht. Allerdings KEIL auf LPC2368. Deswegen weiß ich auch nicht ob das Attribut __irq beim GNU auch so in der Form notwendig ist.
Etwas mehr könnte man helfen, wenn der komplette Code gezeigt wird, inkl. Linker-Script, Startup-Code und makefile bzw. Compiler-, Assembler-, Linkeroptionen.
Was ist "install_irq"?
@Martin Thomas du hast recht, deswegen habe ich auch alles was du erwähnt hast angehängt.
es geht noch weiter..
can.h
linkerscript
startup-code sorry, geschikter machen können..
@Andreas Kaiser: irq_install ist eine Funktion, die in irq.c (von NXP-Beispiele) implementiert ist.
Dann fehlt irq.c in der Liste.
OK!
Was fange ich mit ".7z" an?
sorry
irq.h
es ist euch also nichts aufgefallen..Schade :-(
Macht das vielleicht was aus, dass der Timer ,bevor die Interrupts freigeschaltet sind (im Startup-Code), initialisiert ist, und CAN 1 danach?
Gast
#794266
Wie kompillieren Sie mit dem GNUARM? ARM oder Thumb Mode?
ich weiss ehrlich gesagt nicht, wo ist das denn zu finden?
..ich glaube aber in ARM Mode, da unter "Setup Stack" im Startup-code der Thumb-Bit nicht gesetzt wird, bin aber nicht sicher..
Gast
#794336
Es gibt in der Regel eine Datei, die heisst "makefile", in der wird der Compiler aufgerufen. Wenn dort der Parameter "-mthumb" oder "-mthumb-interwork" mit drin steht, dann wird der ARM im Thumb Mode compilliert. Am einfachsten ist es die Console Ausgabe durchzuforsten und nach dem GCC Aufruf zu schauen, ob dort einer der vielen Parameter so heißt. Die "makefile" Datei enthält meistens diesen Parameter, man muss aber genau analysieren ob der auch aktiv ist. Denn meistens sind diese Dateien mit Parametern versehen.
Die CPU-Anweisungen im Makefile : CC =arm-elf-gcc OBJCOPY =arm-elf-objcopy # # CFLAGS # WARNINGS =-Wall -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wunused CPU_TYPE = -mlittle-endian -mcpu=arm7tdmi -marm -fpack-struct -DUART1_LPRINTF DEBUGFLAGS = -gdwarf-2 -MD -O
Gast
#794594
Jetzt brauche ich noch die Zeile aus der Datei in der "CC" auch aufgerufen wird, den darin stehen alle Parameter, auch die CFLAGS.
Gast
#794768
Die Startup.s sieht bei mir anders aus...
es tut mir Leid Leute, es hatte nichts mit dem Interrupt zu tun, es lag CAN-Bitrate.. Danke für Eure Bemühungen, einen besonderen Dank an mmvisual.
Gast
#795901
Vielen Dank. ... Ich brauch ja auch noch ein bischen Hilfe, wo ich was weis helf ich gerne. Meine S*.s Datei brauchen Sie nur dann, wenn Sie den Prozessor im Thumb Mode betreiben wollen, dann funktionieren Ihre Interrupts "__attribute__((interrupt))" nicht mehr, weil der GNU die dann nicht mehr compillieren kann. (Siehe Code ab "IRQ_Handler:".)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.