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!