Hallo Steffen
dein Code ist einer der wenigen zum Thema, der in ASM geschrieben ist.
Mir gehts hier um das SPI.
Habe dort eine Frage zur Unterfunktion out_4094:
;--------------------------------------------------
; Ausgabe über SPI
;--------------------------------------------------
out_4094:
push data_4094
cbi LCD_PORT,Strobe ; Strobe auf Low
out SPDR, data_4094
spil:
sbis SPSR, SPIF
rjmp spil ; jump wenn nicht fertig
sbi LCD_PORT,Strobe ; Strobe High
nop
cbi LCD_PORT,Strobe ; Strobe Low Daten OK
pop data_4094
ret ; return
dein Strobe ist wohl das /SS Pin.
Ich gehe mit bis nach der SPIF-Flag -Abfrage.
Danach setzt du das /SS Pin High (also SPI-Übertragung fertig).
Sollte davor nicht noch das SPDR ausgelesen werden, damit das SPIF-lag
wieder gelöscht wird?
Ich habe die SPI-Zugriffe immer so geschrieben:
cbi PortB, 4 ;/SS low
ldi temp, 0xF0 ; irgendwas zum senden
rcall spiout ; an SPI übergeben
sbi PortB, 4 ;/SS high
; ========================= SPI Transmit ==============
spiout:
out SPDR, temp
wait_spi:
sbis SPSR,SPIF ; Transmission complete?
rjmp wait_spi
; SPIF is set
in temp2, SPDR ; release SPIF by reading Register
ret ; back to programm..
Muss man denn das SPIF Flag nicht rücksetzen (indem man das SPDR
ausliesst) ?