Nun gut. Hier der gesamte Code, schon mit P2.2 statt 2.4: (Könnt ihr
euch ja umdenken.
1 | /* Port 2 Interrupt Enable Register */
|
2 | P2IE = BIT2 + BIT3; //Interrupts auf Pin 2.3 und 2.2 aktivieren -> RX0BUF und RX1BUF!
|
3 |
|
4 | /* Port 2 Interrupt Edge Select Register */
|
5 | P2IES = BIT2 + BIT3; //falling edge
|
6 |
|
7 | /* Port 2 Interrupt Flag Register */ //Interrupt Flags löschen
|
8 | P2IFG = 0;
|
9 | }
|
10 |
|
11 | #pragma vector=PORT2_VECTOR //ISR FOR PORT2
|
12 | __interrupt void PORT2(void)
|
13 | {
|
14 |
|
15 | [breakpoint]
|
16 | if(P2IFG & BIT2)
|
17 | {
|
18 | //CANINTFRX0IF -->erster Buffer voll
|
19 | uart_send_string("Buffer0 empfangen!\n");
|
20 | uart_send_string(can_receive_buffer0());
|
21 | P2IFG &= ~BIT2; //Interrupt-Flag zurücksetzen
|
22 | mcp2515_bit_modify_register(0x2c,0x01,0x00);
|
23 | }
|
24 |
|
25 | else if(P2IFG & BIT3)
|
26 | {
|
27 | //CANINTFRX1IF -->zweiter Buffer voll
|
28 | uart_send_string("Buffer1 empfangen!\n");
|
29 | uart_send_string(can_receive_buffer1());
|
30 | P2IFG &= ~BIT3;
|
31 | mcp2515_bit_modify_register(0x2c,0x02,0x00);
|
32 | }
|
33 | }
|
Wie ihr seht, nichts besonderes, Interrupthandler für den Port und dann
wird überprüft, welche Pins nun genau den Interrupt ausgelöst haben.
Der innere Code ist an sich auch total egal, da die ISR gar nicht erst
ausgelöst wird. (Stelle [breakpoint] wird gar nicht erst erreicht.)
Interruptpins sind active low, ein runterziehen von Hand bringt nur
etwas bei 2.2 und 2.3, 2.4 mag nicht.