Hallo alle AVR-Spezialisten.
Ich baue einen LED-Globus und sende meine Bilddaten dafür byteweise an
den PortD. Zuerst speichere ich 8 Bytes in 8 Registern, dann rufe ich
eine Funktion auf, welche die Daten nacheinander an den PortD schiebt.
1 | ldi r16, 0b11100000
|
2 | ldi r17, 0b11100000
|
3 | ldi r18, 0b11100000
|
4 | ldi r19, 0b11100000
|
5 | ldi r20, 0b01100000
|
6 | ldi r21, 0b01100000
|
7 | ldi r22, 0b11000000
|
8 | ldi r23, 0b11000000
|
9 | rcall Schiebe8byte
|
10 | ldi r16, 0b11000000
|
11 | ldi r17, 0b11000000
|
12 | ldi r18, 0b11000000
|
13 | ldi r19, 0b11000000
|
14 | ldi r20, 0b11000000
|
15 | ldi r21, 0b11000100
|
16 | ldi r22, 0b11000100
|
17 | ldi r23, 0b11000100
|
18 | rcall Schiebe8byte
|
Das Problem ist, nach ca 1000 Zeile Code, funktionieren die Spünge nicht
mehr. Jedenfalls sagt der Linker "undifinerte Sprungadresse". Ich werde
noch bestimmt 4000 Bytes ausgeben und muss einen Weg finden, in die
Funktion "Schiebe8byte" und wieder zurück zu springen.
Kann mir jemand helfen?
Hier noch die Schiebefunktion:
Schiebe8byte:
1 | out PORTD, r16
|
2 | sbi PORTB, 1
|
3 | cbi PORTB, 1
|
4 | out PORTD, r17
|
5 | sbi PORTB, 1
|
6 | cbi PORTB, 1
|
7 | out PORTD, r18
|
8 | ;...
|
9 | out PORTD, r23
|
10 | sbi PORTB, 1
|
11 | cbi PORTB, 1
|
12 | ret
|
Vielen Dank für jede Hilfe,
Christoph