Hallo, ich kämpfe gerade mit dem externen Interrupt bei einem
PIC32MX470. Mein Programm sieht wie folgt aus:
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <plib.h>
|
4 |
|
5 | #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_4, FPLLODIV = DIV_2, FWDTEN = OFF
|
6 | #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2
|
7 | #define SYS_FREQ (50000000L)
|
8 |
|
9 | int main(int argc, char** argv) {
|
10 |
|
11 | TRISGbits.TRISG8 = 1; //INT3-Pin als Eingang
|
12 | TRISDbits.TRISD0 = 0;
|
13 |
|
14 | //Externes Interrupt
|
15 | INTCONbits.INT3EP = 1; //auf steigende Flanke reagieren
|
16 | INT3Rbits.INT3R = 0b0001; //RPG8 als Int Pin
|
17 | IFS0bits.INT3IF = 0; //Flag löschen
|
18 | IPC3bits.INT3IP = 3; //Priorität festlegen
|
19 | IEC0bits.INT3IE = 1; //Interrupt aktivieren
|
20 |
|
21 | INTEnableSystemMultiVectoredInt(); //Interrupts global zulassen
|
22 |
|
23 | while(1){
|
24 | }
|
25 |
|
26 | return (EXIT_SUCCESS);
|
27 | }
|
28 |
|
29 | void __ISR(_EXTERNAL_3_VECTOR, ipl3) External3Handler(void){
|
30 |
|
31 | LATDbits.LATD0 = 1;
|
32 |
|
33 | IFS0bits.INT3IF = 0; //Flag löschen
|
34 | }
|
Mir ist momentan nicht klar, was ich vergesse. Ich definiere den Pin als
Eingang, setze die entsprechenden Bits für das Interrupt, habe daran
gedacht die Interrupts global zuzulassen und habe auch den
Routinen-Aufruf meiner Meinung nach richtig implementiert. Trotzdem wird
der Test-Pin nicht auf high geschaltet, wenn ich den Interrupt-Pin mit
der Versorgungsspannung "berühre". Sieht vielleicht jemand das was ich
nicht sehe? Habe auch die Pins getestet.. wenn ich sie als Output
definiere und auf 1 setze, kann ich die 3,3V messen.
Schonmal vielen Dank für die Unterstützung!