dsPIC33F: Interrupt Change Notification wird nicht ausgelöst

Gast #1236602
Hallo!

Ich arbeite mit dem µC dsPIC33FJ256GP710 und dem Explorer 16 Board. Ich 
habe ein Problem mit dem Interrupt, der bei einem Pegelwechsel an einem 
digitalen I/O-Eingang, ausgelöst werden soll.

Mein Code sieht so aus:
1
#include "p33FJ256GP710.h"
2

3
_FOSCSEL(FNOSC_PRIPLL);
4
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT);
5
_FWDT(FWDTEN_OFF);
6

7
void configure_CN(void);
8
void __attribute__ ((__interrupt__)) _CNInterrupt(void);
9

10
int counter;
11

12
int main ( void )
13
{
14

15

16
 // Frequenz einstellen
17
 PLLFBD = 0x0026;
18
 CLKDIV = 0x0000;
19

20

21
 // RF5 als Digitaler Input
22
 TRISFbits.TRISF5 = 1; 
23

24
 // RD4 als Digitaler Input
25
 TRISDbits.TRISD4 = 1; 
26
  
27
 // RB3 als digitaler Output
28
 TRISBbits.TRISB3 = 0;
29

30
 // RB3 auf low-Pegel
31
 LATBbits.LATB3 =0 ;
32

33
 // Interrupts configurieren
34
 configure_CN();
35

36
 // Zähler auf Null
37
 counter = 0;
38
        
39
 while(1);
40
}
41

42
void configure_CN(void)
43
{
44
 CNEN2bits.CN18IE = 1; // Enable CN18 pin for interrupt detection
45
 CNEN1bits.CN13IE = 1; // Enable CN3 pin for interrupt detection
46

47
 IEC1bits.CNIE = 1; // Enable CN interrupts
48
 IFS1bits.CNIF = 0; // Reset CN interrupt
49
}
50

51
void __attribute__ ((interrupt, no_auto_psv)) _CNInterrupt(void)
52
{
53
  
54
 //  RB3 auf high-Pegel
55
 LATBbits.LATB3 = 1;
56
  
57
 // Clear CN interrupt
58
 IFS1bits.CNIF = 0; 
59

60
 counter++;
61

62
 //  RB3 auf low-Pegel
63
 LATBbits.LATB3 =0 ;
64
  
65
}

Das Programm soll bei einem Pegelwechsel an den Pins RF5 und RD4 einen 
Interrupt auslösen und die zugehörige Routine ausführen. In dieser wird 
dann ein Counter hochgezählt und der Pin RB3 auf high und dann wieder 
auf low gesetzt.

Leider wird der Interrupt nur bei einem Pegelwechsel an RF5 ausgeführt. 
Bei entsprechneden Signalen an RD4 passiert nichts. Ich habe auch schon 
andere Pins ausprobiert, aber ohne Erfolg.

Ich habe die Interrupt Detection für RF5 ausgeschaltet und nur RD4 
ausprobiert. Das zeigte auch keinen Erfolg. Ein Problem an der Hardware 
konnte ich nicht festellen. Es sei denn, alle getesteten Pins sind 
defekt bis auf RF5 :-)

Vielleich (hoffentlich) habe ich einen groben Denkfehler.
Vielen Dank schon mal für die Hilfe. Ich komme hier im Moment echt nicht 
weiter. Danke!
Gast
Danke für die schnelle Antwort. Es ist richtig, dass der µC Pins hat, 
die auf "digital" gestellt werden müssen. Ich habe allerdings nur Pins 
verwendet, die keine analoge Funktionalität haben. Diese Pins müssen 
nicht auf "digital" gestellt werden, wenn ich das richtig sehe.
So wie der Pin RF5. Mit diesem funktioniert ja mein Code.

Eine Frage habe ich noch zu meinem Code. Es ist doch prinzipiell 
richtig, dass ich für mehrere Pins gleichzeitig den Change Notification 
Interrupt aktivieren kann und diese dann die selbe ISR ausführen, oder?
Mit meinem aktuellen Problem hat das aber nichts zu tun, denke ich.
Matthias H. wrote:
> Eine Frage habe ich noch zu meinem Code. Es ist doch prinzipiell
> richtig, dass ich für mehrere Pins gleichzeitig den Change Notification
> Interrupt aktivieren kann und diese dann die selbe ISR ausführen, oder?
ja
> Mit meinem aktuellen Problem hat das aber nichts zu tun, denke ich.
denke ich auch

Schon mal versucht die Interrupt-Prio zu erhöhen?

Gruß
Christian
Gast
Das habe ich noch nicht versucht. Werde ich aussprobieren. Danke!

Ich würde mich aber wundern, wenn es daran läge, schließlich 
funktioniert es ja für den einen Pin.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.