Interrupts mit AT91SAM7x256 (Olimex Board SAM7-EX256)

Gast #1479865
Hallo zusammen,

ich habe das Olimex Board SAM7-EX256 aus dem Shop hier 
(http://shop.embedded-projects.net/product_info.php/info/p16_AT91SAM7X256---TFT--Ethernet--SAM7-EX256-.html). 
Als Mikrocontroller sitzt da ein AT91SAM7x256 drauf.


Ein kleines Beispielprojekt läuft auch schon. Nun möchte ich Interrupts 
verwenden und bin echt ratlos was ich falsch mache. Für den Anfang 
wollte ich mit SWI einen Software Interrupt auslösen und etwas in der 
Handler-Routine machen. Aber ich kann tun und lassen was ich will: Es 
funktioniert einfach nicht. Die SWI Anweisung scheint nicht 
zurückzukehren, aber der Sprungbefehl an Adresse 0x08 scheint auch nicht 
ausgeführt zu werden.


Den Code habe ich angehängt.


Hat jemand eine Idee?
Angehängte Dateien:
Gast
Ich habe das ganze mal auf folgendes Minimalbeispiel runtergebrochen.

Die SWI Anweisung scheint einfach "durchzulaufen", d.h. die 
Ausgangsleitung PB21 wird auf 0 gesetzt. Erwartet hätte man, dass PA30 
auf 0 gezogen wird. Ich bin echt ratlos, warum funktioniert das nicht ?


1
.section .vectors
2
.arm
3

4
reset:
5
      ldr  pc, .Lvector_reset
6
      b exit
7
      ldr  pc, .Lvector_swi
8
      b exit
9
      b exit
10
      nop
11
      b exit
12
      b exit
13

14
.Lvector_reset:     .word  .Lstartup
15
.Lvector_undef:     .word  0
16
.Lvector_swi:       .word  .Lswi_isr
17
.Lvector_pref_abt:  .word  0
18
.Lvector_data_abt:  .word  0
19
                    .word  0
20
.Lvector_fiq:       .word  0
21
                    .word  0
22

23

24
.section .text
25
.arm
26

27
.equ  PSR_MODE_SVC,  0x13  /* (10011) Supervisor Mode (SVC) */
28
.equ  PSR_I_BIT,     0x80  /* IRQ disable bit */
29
.equ  PSR_F_BIT,     0x40  /* FIQ disable bit */
30

31
.Lstartup:
32

33
  /* switch to SVC mode and setup stack */
34
  msr cpsr_c, #(PSR_MODE_SVC|PSR_I_BIT|PSR_F_BIT)
35

36
  /* strange behavior */
37
  swi 0x80
38

39
  /* PIOB_PIO_PER = (1 << 21) */
40
  ldr r0, =0xFFFFF600
41
  mov r1, #(1 << 21)
42
  str r1, [r0]
43
  /* PIOB_PIO_OER = (1 << 21) */
44
  ldr r0, =0xFFFFF610
45
  mov r1, #(1 << 21)
46
  str r1, [r0]
47
  /* PIOB_PIO_CODR = (1 << 21) */
48
  ldr r0, =0xFFFFF634
49
  mov r1, #(1 << 21)
50
  str r1, [r0]
51

52
  b .Lexit
53

54
.Lswi_isr:
55
  /* PIOA_PIO_PER = (1 << 30) */
56
  ldr r0, =0xFFFFF400
57
  mov r1, #(1 << 30)
58
  str r1, [r0]
59
  /* PIOA_PIO_OER = (1 << 30) */
60
  ldr r0, =0xFFFFF410
61
  mov r1, #(1 << 30)
62
  str r1, [r0]
63
  /* PIOA_PIO_CODR = (1 << 30) */
64
  ldr r0, =0xFFFFF434
65
  mov r1, #(1 << 30)
66
  str r1, [r0]
67

68
exit:
69
.Lexit:  b .Lexit

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.