So nun noch mal, habe dies schon mal gepostet, aber unter einer anderen
nicht mit zutreffenden Überschrift. Ich möchte über einen Drehgeber
einen externen Interupt auslösen. Hier folgender Code:
1 | int zaehler = 0;
|
2 | #define VPBDIV_VAL 0x02 /*Setze Hardwaretimer[Pclk] auf 30 Mhz */
|
3 |
|
4 | __irq void eint0 (void) {
|
5 |
|
6 | IOCLR0 = 0x00000100; /* Turn LED On (P0.8 = 0) */
|
7 | ++zaehler;
|
8 | EXTINT = 0x00000003;
|
9 | VICVectAddr = 0x0000000; // Acknowledge Interrupt
|
10 | }
|
11 | void init_extern(void)
|
12 | {
|
13 | /*VPBDIV muss(!!) man auf 0 gesetz werden bevor man ein(!) Register
|
14 | beschreiben kann*/
|
15 | // Hardwaretimer auf Null setzen
|
16 | VPBDIV=0;
|
17 | //Register kontrolliert falls
|
18 | EXTMODE = (1<<3);
|
19 | // Hardwaretimer wird auf 30 Mhz gesetzt
|
20 | VPBDIV=VPBDIV_VAL;
|
21 | // Hardwaretimer auf Null setzen
|
22 | VPBDIV=0;
|
23 | // Register kontrolliert welcher Pin eine Flanke auslöst
|
24 | EXTPOLAR = ~(1<<3); //fallende Flanke
|
25 | // Hardwaretimer wird auf 30 Mhz gesetzt
|
26 | VPBDIV=VPBDIV_VAL;
|
27 | // ein Register per Interrupt
|
28 | VICVectCntl2 = (0x20 | 0x20000) ;
|
29 | //Vector wird Slot 2 zugewiesen
|
30 | VICVectAddr2 = (unsigned)eint0;
|
31 | //Aktiviert Interrupt Eingänge
|
32 | VICIntEnable = ( 0x20000 );
|
33 | }
|
34 | ******** Hauptprogramm **********/
|
35 | int main (void)
|
36 | {
|
37 | IODIR1 = 0x00FF0000;
|
38 | PINSEL1|=(1<<29); //P0.30 als EINT3
|
39 | PINSEL1&=~(1<<28);
|
40 | IODIR0 = 0x00000100;
|
41 |
|
42 | init_extern();
|
43 | /*Programm in einer Endlosschleife*/
|
44 | while (1)
|
45 | {
|
46 |
|
47 | }
|
So sieht meine Start-Code aus:
1 | I_Bit EQU 0x80 ; when I bit is set, IRQ is disabled
|
2 | F_Bit EQU 0x40 ; when F bit is set, FIQ is disabled
|
3 |
|
4 | UND_Stack_Size EQU 0x00000000
|
5 | SVC_Stack_Size EQU 0x00000020
|
6 | ABT_Stack_Size EQU 0x00000000
|
7 | FIQ_Stack_Size EQU 0x00000000
|
8 | IRQ_Stack_Size EQU 0x00000080
|
9 | USR_Stack_Size EQU 0x00000400
|
Ich weiß nicht mehr weiter es will nicht laufen. Benutze auch schon
einen Pull_Down Widerstand um wirklich auf low-Level zu sein!