Forum: Mikrocontroller und Digitale Elektronik PIC32MX Interrupt Handler


von Robert C. (anykey)


Lesenswert?

Hallo,
ich beginne mit MPLAB mich in die PIC32 einzuarbeiten.
Als erstes möchte ich die Interrupts INT0 und INT1 in unterschiedlichen 
Routinen behandeln.
Zur Testen verwende ich MPLAB SIM und mittels Stimulus simuliere ich die 
Eingänge.

Hier mein Code:
1
#include<plib.h>
2
3
#define sysFreq (80000000)
4
5
#define INT0 (int)INT_INT0
6
#define INT1 (int)INT_INT1
7
8
int main(void)
9
{
10
  unsigned int pbFreq=0;
11
//System Konfiguration
12
  pbFreq= SYSTEMConfig(sysFreq, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
13
  
14
//Konfigurieren des Interrupt 0  
15
  ConfigINT0(EXT_INT_PRI_1 | RISING_EDGE_INT | EXT_INT_ENABLE);
16
17
//Konfigurieren des Interrupt 1
18
  ConfigINT1(EXT_INT_PRI_2 | RISING_EDGE_INT | EXT_INT_ENABLE);
19
20
//Multi Interrupt einschalten
21
  INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
22
// enable interrupts
23
  INTEnableInterrupts();
24
}
25
26
/***********************************************************************************************************/
27
/* Interrupt Handler für INT0                                                                              */
28
/***********************************************************************************************************/
29
void __ISR(INT0,ipl1) Int0Handler(void)
30
{
31
  //Löschen des Flags  
32
  INTClearFlag(INT0);
33
}
34
35
/***********************************************************************************************************/
36
/* Interrupt Handler für INT1                                                                              */
37
/***********************************************************************************************************/
38
void __ISR(INT1,ipl2) Int1Handler(void)
39
{
40
  //Löschen des Flags  
41
  INTClearFlag(INT1);
42
}
Ich habe jeweiles einen Breakpoit in die Handler Routinen gesetzt.
Beim INT0 wird er Breakpoint angesprungen, es funktioniert.
Beim INT1 bekommen ich aber folgende Fehlermeldung und das Programm hält 
an.

(119510064)  SIM-N0001 Note: Asynchronous Stimulus Toggle INT1 fired.
CORE-W0018: Instruction at 0x9fc012e0 decoded as Reserved (NOP)
.
.
.
CORE-W0018: Instruction at 0x9fc01600 decoded as Reserved (NOP)
MAXIMUM number of warnings/errors exceeded 200, program execution 
halted.

Könnte mir Jemand auf die Sprünge helfen was am Code falsch ist?
Die Hilfe von MPLAB ist so umfangreich das ich den Überblick verloren 
habe.
Und was ich im Internet finde hilft mir bei dem Problem leider auch 
nicht weiter.

Gruß Robert

von Robert C. (anykey)


Lesenswert?

Vielen Dank an alle Leser, hier die Lösung des Problems:
1
#include<plib.h>
2
3
#define sysFreq (80000000)
4
5
int main(void)
6
{
7
  unsigned int pbFreq=0;
8
//System Konfiguration
9
  pbFreq= SYSTEMConfig(sysFreq, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
10
  
11
//Konfigurieren des Interrupt 0  
12
  ConfigINT0(EXT_INT_PRI_1 | RISING_EDGE_INT | EXT_INT_ENABLE);
13
14
//Konfigurieren des Interrupt 1
15
  ConfigINT1(EXT_INT_PRI_2 | RISING_EDGE_INT | EXT_INT_ENABLE);
16
17
//Multi Interrupt einschalten
18
  INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
19
// enable interrupts
20
  INTEnableInterrupts();
21
}
22
23
/***********************************************************************************************************/
24
/* Interrupt Handler für INT0                                                                              */
25
/***********************************************************************************************************/
26
void __ISR(_EXTERNAL_0_VECTOR,ipl1) Int0Handler(void)
27
{
28
  //Löschen des Flags  
29
  INTClearFlag(INT_INT0);
30
}
31
32
/***********************************************************************************************************/
33
/* Interrupt Handler für INT1                                                                              */
34
/***********************************************************************************************************/
35
void __ISR(_EXTERNAL_1_VECTOR,ipl2) Int1Handler(void)
36
{
37
  //Löschen des Flags  
38
  INTClearFlag(INT_INT1);
39
}

Gruß Robert

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.