ATxmega Port einlesen und speichern

Gast #2122314
Lesenswert?
• ▲
▼
Hallo,
das hier ist für euch bestimmt einen ganz triviale Frage.

Ich möchte kontinuierlich 8Bit-Werte über einen Port des ATxmega 32MHz 
einlesen und im RAM speichern.
Kann mir jemand (grob) sagen wie viele Takte, bzw. welche Zeit für das 
Einlesen+Speichern in Anspruch genommen wird??

schon mal vielen Dank
#2122655
Lesenswert?
• ▲
▼
Was heißt kontinuierlich? Soll Beispielsweise in einer Interruptroutine 
100 8-Bit Werte vom Port in ein RAM-Array gespeichert werden?

Mehr Informationen wären da nicht schlecht um dir zu helfen.

Die einfachste Variante in ASM sieht so aus:
1
.equ    r15        = SAVE_SREG
2

3
.equ    READ_PORT    = PORTD_base
4
.equ    Anzahl_Bytes  = 100          ; Deklarierung der Anzahl zu lesender Bytes
5
.dseg
6
.org 2000
7
.equ    PORT_VALUE:    .BYTE(Anzahl_Bytes)    ; Deklarierung des Arrays (PORT_VALUE) im Datensegment(RAM)
8
.cseg
9

10
// -------------- Interrupt -----------------
11
Read_PORT_VAL:                  ; 5 Takte für Interrupt Aufruf
12
; *** Vorbereitung ***
13
  lds    SAVE_SREG, CPU_SREG          ; 2 Takte
14
  push  XL                  ; 1 Takt
15
  lds    XL, CPU_RAMPX            ; 2 Takte
16
  push  XL                  ; 1 Takt
17
  push  XH                  ; 1 Takt
18
  push  r0                  ; 1 Takt
19
  push  r24                  ; 1 Takt
20
  push  r25                  ; 1 Takt
21
  ldi    XL, Byte3(PORT_VALUE)        ; 1 Takt
22
  sts    CPU_RAMPX, XL            ; 2 Takte
23
  ldi    XH, Byte2(PORT_VALUE)        ; 1 Takt
24
  ldi    XL, Byte1(PORT_VALUE)        ; 1 Takt
25
  ldi    r24, Byte1(Anzahl_Bytes)      ; 1 Takt
26
  ldi    r25, Byte2(Anzahl_Bytes)      ; 1 Takt
27
read_loop:
28
  lds    r0, (READ_PORT + PORT_IN_offset)  ; 2 Takte
29
  st    X+, r0                ; 1 Takt
30
  sbiw  r25:r24, 1              ; 2 Takte
31
  brne  read_loop              ; 2 Takte -> read_loop | 1 Takt wenn fertig
32
  pop    r25                  ; 2 Takte
33
  pop    r24                  ; 2 Takte
34
  pop    r0                  ; 2 Takte
35
  pop    XH                  ; 2 Takte
36
  pop    XL                  ; 2 Takte
37
  sts    CPU_RAMPX, XL            ; 2 Takte
38
  pop    XL                  ; 2 Takte
39
  sts    CPU_SREG, SAVE_SREG          ; 2 Takte
40
  reti                    ; 4 Takte bis 128kb Program memory | 5 Takte bis 8Mb Program memory
41
// ------------ Interrupt Ende --------------

Antwort schreiben

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.

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.