mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts mit AT91SAM7x256 (Olimex Board SAM7-EX256)


Autor: klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe das Olimex Board SAM7-EX256 aus dem Shop hier 
(http://shop.embedded-projects.net/product_info.php...). 
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?

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... oder wenigstens ein funktionierendes Beispiel ?

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?


.section .vectors
.arm

reset:
      ldr  pc, .Lvector_reset
      b exit
      ldr  pc, .Lvector_swi
      b exit
      b exit
      nop
      b exit
      b exit

.Lvector_reset:     .word  .Lstartup
.Lvector_undef:     .word  0
.Lvector_swi:       .word  .Lswi_isr
.Lvector_pref_abt:  .word  0
.Lvector_data_abt:  .word  0
                    .word  0
.Lvector_fiq:       .word  0
                    .word  0


.section .text
.arm

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

.Lstartup:

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

  /* strange behavior */
  swi 0x80

  /* PIOB_PIO_PER = (1 << 21) */
  ldr r0, =0xFFFFF600
  mov r1, #(1 << 21)
  str r1, [r0]
  /* PIOB_PIO_OER = (1 << 21) */
  ldr r0, =0xFFFFF610
  mov r1, #(1 << 21)
  str r1, [r0]
  /* PIOB_PIO_CODR = (1 << 21) */
  ldr r0, =0xFFFFF634
  mov r1, #(1 << 21)
  str r1, [r0]

  b .Lexit

.Lswi_isr:
  /* PIOA_PIO_PER = (1 << 30) */
  ldr r0, =0xFFFFF400
  mov r1, #(1 << 30)
  str r1, [r0]
  /* PIOA_PIO_OER = (1 << 30) */
  ldr r0, =0xFFFFF410
  mov r1, #(1 << 30)
  str r1, [r0]
  /* PIOA_PIO_CODR = (1 << 30) */
  ldr r0, =0xFFFFF434
  mov r1, #(1 << 30)
  str r1, [r0]

exit:
.Lexit:  b .Lexit

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo klaus,
ich würde mir mal die beispiele von atmel ansehen:
http://www.atmel.com/dyn/products/tools_card.asp?t...

gruss
gerhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.