p_mork
22.04.2007, 14:10
Hallo,
ich bin gerade dabei, ein eigenes TV-Telminal zu schreiben. Leider funktioniert bei mir SPI aus irgendeinem Grund nciht so, wie es sollte:
ldi r16,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out spcr,r16 ;SPI einschalten mit 1/16 F_CPU
ldi r16,0b01010101
out spdr,r16 ;0b01010101 über SPI senden
wait1:
sbis spsr,spif ;warten, bis das Byte gesendet wurde
rjmp wait1
out spcr, zero ;SPI deaktivieren, damit PB5 als
;normaler I/O benutzt werden kann
Laut Datenblatt sollte es funktionieren. Das Register 'zero' beinhaltet immer eine 0.
Kann jemand meinen Fehler erkennen?
MfG Mark
EDIT: Sry, hab vergessen zu erwähnen was genau nicht funktioniert. Der Controller hängt sich in der Schleife 'wait1' immer auf.
ich bin gerade dabei, ein eigenes TV-Telminal zu schreiben. Leider funktioniert bei mir SPI aus irgendeinem Grund nciht so, wie es sollte:
ldi r16,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out spcr,r16 ;SPI einschalten mit 1/16 F_CPU
ldi r16,0b01010101
out spdr,r16 ;0b01010101 über SPI senden
wait1:
sbis spsr,spif ;warten, bis das Byte gesendet wurde
rjmp wait1
out spcr, zero ;SPI deaktivieren, damit PB5 als
;normaler I/O benutzt werden kann
Laut Datenblatt sollte es funktionieren. Das Register 'zero' beinhaltet immer eine 0.
Kann jemand meinen Fehler erkennen?
MfG Mark
EDIT: Sry, hab vergessen zu erwähnen was genau nicht funktioniert. Der Controller hängt sich in der Schleife 'wait1' immer auf.