Hallo zusammen,
ich bin Arm-Neuling und verwende Crossworks 1.7 mit einen LPC2478-Board
Ich möchte mich in die Materie einarbeiten, bisher habe ich mich in die
I/O Geschichte eingelesen. Und nun möchte ich die Interrupt-Geschichte
verstehen lernen. Ich habe schon Stunden gesucht, habe natürlich viele
Beispiele gefunden, doch es klappt nicht so richtig. Viele Beispiele
sind für den LPC2148 und da wird das Register VICVectCntl0 geproggt. Das
gibt es wohl nicht beim LPC2478??
Teilerfolge:
Es wird ein Interrupt ausgelöst, doch der Sprung in die ISR endet im
Nirgendwo. Ich habe Probleme, die ISR richtig zu programmieren.
So habe ich bisher rumgedoktert:
1 | #include <targets/LPC2478.h>
|
2 |
|
3 | void fiq_handler(void) __attribute__((naked));
|
4 |
|
5 |
|
6 | // LED (yellow pin 66 P1[18]
|
7 | //
|
8 | // button with BUT1 pin 67 P2[19]
|
9 |
|
10 |
|
11 | #define LED (1<<18) // Port 1
|
12 | #define Taste (1<<19) // Port 2
|
13 | #define GPIOM 0 // Diese Bit schaltet im Register SCS die FIOPORTs frei
|
14 | #define EINT3 (1<<17)
|
15 |
|
16 | int main (void)
|
17 | {
|
18 | SCS = (1<<GPIOM);
|
19 | FIO1DIR= LED;
|
20 |
|
21 | IO2IntEnF = Taste;
|
22 |
|
23 | VICIntEnable = EINT3;
|
24 | VICVectAddr1 = (unsigned long) fiq_handler;
|
25 | VICVectPriority1 = 5;
|
26 |
|
27 | __ARMLIB_enableIRQ();
|
28 |
|
29 | for(;;)
|
30 | {
|
31 | FIO1SET= LED;
|
32 | FIO1CLR= LED;
|
33 | }
|
34 | }
|
35 |
|
36 | void fiq_handler(void)
|
37 | {
|
38 | double counter;
|
39 | ++counter;
|
40 | }
|
Wäre nett, wenn mir da jemand helfen könnte, oder ein Beispiel für
Crossworks und LPC2478 hat.
Vielen Dank im Voraus!