Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem Interrupts.


von Dirk H. (xplod)


Lesenswert?

Hallo zusammen.

Ich hab ein Problem mit den PIO-Interrupts eines AT91SAM7S256:
Ich habe alles soweit konfiguriert, dass beim Betätigen einer der Taste 
sich das entsprechende Register AIC_IPR verändert. ( Wert z.B. 
0x40000005)

Der Code für den Interrupteinsprung entstammt eines Beispielprojekts ( 
crt.s von /* Author:  James P Lynch      May 12, 2007  ) und wurde von 
mir ein wenig angepasst:
1
AT91F_Irq_Handler:
2
        sub      lr, lr, #4
3
        stmfd    sp!, {lr}
4
/* Hole Addresse des Counters */
5
        ldr         r10,=INTERRUPTCNT
6
/* Hole Wert */
7
        ldr      r11,[r10]
8
/* Addiere 1 */
9
        add     r11,r11,#1
10
/ Speichere neuen Wert */
11
        str      r11,[r10]
12
/* Sollte in C INTERRUPTCNT = INTERRUPTCNT + 1 representieren */        
13
        mrs      r14, SPSR 
14
        stmfd    sp!, {r0,r14}
15
        ldr      r14, =AT91C_BASE_AIC
16
        ldr      r0 , [r14, #AIC_IVR]
17
        str      r14, [r14, #AIC_IVR]
18
        msr      CPSR_c, #ARM_MODE_SVC
19
        stmfd    sp!, { r1-r3, r12, r14}
20
        mov      r14, pc
21
        bx      r0
22
        ldmia    sp!, { r1-r3, r12, r14}
23
        msr      CPSR_c, #I_BIT | ARM_MODE_IRQ
24
        ldr      r14, =AT91C_BASE_AIC
25
        str      r14, [r14, #AIC_EOICR]
26
        ldmia    sp!, {r0,r14}
27
        msr      SPSR_cxsf, r14
28
        ldmia    sp!, {pc}^

Der Interruptcounter bleibt aber immer auf 0. Wird die Funktion 
AT91F_Irq_Handler somit garnicht angesprungen? Oder habe ich einen 
Fehler gemacht?

Ich habe die kompletten Dateien unter:
http://www.xplod.de/media/archive1/crt.s
http://www.xplod.de/media/archive1/lowlevelinit.c
http://www.xplod.de/media/archive1/main.c
http://www.xplod.de/media/archive1/makefile
abgelegt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.