robo_wolf,
ich fürchte, in Deinem zweiten Posting hast Du Dich ein bisschen vergaloppiert
. Dein erstes Posting (Heute, 14.05. um 09:30) bezieht sich auf Zeile 122 Deines Moduls "FIFO8.asm"
Code:
...
FIFO8_CREATE:
...
; FIFOkapazität speichern
std z+FIFO8_CTRL_CAP,r16 ; Kapazität speichern
; WRADR und RDADR auf Anfang setzen; ANFADR und ENDADR in RAM schreiben
mov xl,zl
mov xh,zh
adiw xh:xl,FIFO8_CTRL_LNG ; FIFO-Steuerung ueberspringen - auf erstes FIFO-Byte zeigen
std z+FIFO8_CTRL_WRADR_LOW,xl
std z+FIFO8_CTRL_WRADR_HIGH,xh
std z+FIFO8_CTRL_RDADR_LOW,xl
std z+FIFO8_CTRL_RDADR_HIGH,xh
;
std z+FIFO8_CTRL_ANFADR_LOW,xl
std z+FIFO8_CTRL_ANFADR_HIGH,xh
; !!! ACHTUNG:
adiw xh:xl,FIFO8_CAP ; ENDADR berechnen
; Über diese Zeile beschwert sich der Assembler, wenn FIFO8_CAP
; grösser als 64 ist. Deshalb musst Du sie durch
ldi r16,FIFO8_CAP
add xl,r16
clr r16
adc xh,r16
; ersetzten. Dann klappt's auch mit Kapazitäten > 64.
...
Das Problem Deines zweiten Postings verstehe ich nicht. Natürlich darf FIFO_CAP grösser als 64 sein! Du musst nur zum Berechnen von ENDADR eine anderen Weg gehen (siehe oben)
!
Ciao,
mare_crisium
Lesezeichen