PIC32MX Interrupt Handler

OP #2149166
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
OP #2149344
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.