Taktanzahl für Sprung

Gast #1510888
Lesenswert?

Hallo Leute,
ich würde gerne wissen wieviele Takte der ATMega8 braucht um einen 
Sprung auszuführen.

Ich habe in C eine Funktion geschrieben, die Bits senden soll. Das 
Listing sieht folgendermasen aus:
1
00000146 <senden>:
2

3
  while(1){
4

5
//    zaehler1DauerPattern=4;
6

7
    asm volatile (
8
 146:  50 91 3f 01   lds  r21, 0x013F
9
 14a:  40 91 40 01   lds  r20, 0x0140
10
 14e:  30 91 3d 01   lds  r19, 0x013D
11
 152:  20 91 3e 01   lds  r18, 0x013E
12
 156:  80 91 41 01   lds  r24, 0x0141
13
 15a:  90 91 42 01   lds  r25, 0x0142
14
 15e:  32 bb         out  0x12, r19  ; 18
15
 160:  42 bb         out  0x12, r20  ; 18
16
 162:  42 bb         out  0x12, r20  ; 18
17
 164:  32 bb         out  0x12, r19  ; 18
18
 166:  80 93 41 01   sts  0x0141, r24
19
 16a:  90 93 42 01   sts  0x0142, r25
20

21

22
      :[zaehler1DauerPattern] "+r" (zaehler1DauerPattern),[zaehler2DauerPattern] "+r" (zaehler2DauerPattern): [txen_l_txd_h] "r" (txen_l_txd_h), [txen_l_txd_l] "r" (txen_l_txd_l),[txen_h_txd_h] "r" (txen_h_txd_h), [txen_h_txd_l] "r" (txen_h_txd_l), [addrPORTD] "I" (_SFR_IO_ADDR (PORTD))
23
    ); 
24

25
    wdt_reset();
26
 16e:  a8 95         wdr
27
 170:  ea cf         rjmp  .-44       ; 0x146 <senden>

Er sendet kontinuirlich 4 Bits. Zwischen den Packeten sind immer Pausen, 
weil er Zeit für den Rücksprung braucht. Allerdings messe ich zwischen 
den Bitpacketen viel mehr als 10 Takte. Woran liegt das?


Danke und Gruß
Yamamoto
Gast #1510918
Lesenswert?

> Allerdings messe ich zwischen den Bitpacketen viel mehr als 10 Takte.

Wieviel mehr? ..wenn mans mal rein nach Datenblatt abzählt, dann müssten 
das sein..:
- 6x lds - 12 Takte
- 2x sts - 4 Takte
- vermutlich ein rjmp - 2 Takte

Macht also 18 Takte Pause auf vier Takte Bitbanging. Weicht Dein 
Messergebnis erheblich davon ab?

Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren