Hallo,
ich habe schon viele Projekte erfolgreich auf dem PIC16 und PIC18 hinter
mir. Sowohl in Assembler, als auch in C (XC8) bin ich gut damit klar
gekommen.
Nun möchte ich auf PIC32 umsteigen und gehe mein erstes Projekt mir
einem PIC32MX130F256B an (XC32 V1.42)
Jetzt verzweifel ich an einer im Grunde primitiven Sache, wo ich schon
seit vielen Stunden am Suchen und Forschen bin und einfach nicht mehr
weiter weiss:
Timer1 läuft und soll beim Erreichen eines bestimmten Wertes einen
Interrupt auslösen. In der ISR soll dann eine LED getoggelt werden.
Das mit dem Timer funktioniert auch, aber er will einfach nicht die ISR
aufrufen.
Das ist sowohl im Simulator, als auch auf der Zielhardware so.
Auffällig ist, dass, wenn ich in die Datei list.lst auch zu sehen ist,
dass die ISR nicht compiliert wurde also in Assembler-Code umgesetzt
wurde.
Hier mein Source-Code:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <xc.h>
#include "config32MX130F256B.h"
#include "PIC32MX130_Test_V101.h"
#include <sys/attribs.h>
void __ISR_AT_VECTOR(_TIMER_1_VECTOR, IPL7AUTO) Timer1Handler(void);
void main(void)
{
// init PIC
init();
LED=0;
TMR1 = 0;
PR1 = 0x0008;
T1CONbits.TCKPS = 1; // Prescaler auf 1:64
T1CONbits.ON = 1; // Timer1 ON
INTCON = 0;
INTCONbits.MVEC = 1; //Multivector mode: 1 = multi, 0 = single
vector
IFS0bits.T1IF = 0; //Flag auf 0 setzen
IPC1bits.T1IP = 7; //Priority setzen
IPC1bits.T1IS = 0; //Subpriority auf 0
IEC0bits.T1IE = 1; // enable timer 1 IRQ
__builtin_enable_interrupts();
while(1)
{
////////// Timer Test
//////// if ( IFS0bits.T1IF==1)
//////// {
//////// LED = !LED;
//////// IFS0bits.T1IF=0;
//////// }
}
void __ISR_AT_VECTOR(_TIMER_1_VECTOR, IPL7AUTO) Timer1Handler(void)
CoreTimerHandler(void)
{
LED = !LED; //LED in ISR toggeln
IFS0bits.T1IF = 0;
}
}
Es kann doch nicht so schwer sein.
Irgendeiner eine Idee was ich da falsch mache?
Mir wäre auch schon geholfen, wenn mir jemand mal seine Sources eines
funktionierenden Iinterupts schickt, was ich mir im Simulator anschauen
kann.