Forum: Mikrocontroller und Digitale Elektronik ATMega32: SPI nutzen ohne CLI zu setzen


von Fred (Gast)


Lesenswert?

Hallo,

ich habe einen ATMega32 der über SPI ein Display ansteuert. Wenn ich vor 
der Übertragung ein CLI() und danach ein SEI() setze geht es auch gut. 
Wenn ich aber die interrupts aktiv lasse (Timer und Seriell) dann wird 
teilweise Unsinn versendet.
Der Nachteil von CLI() ist, dass wenn Bytes auf der Seriellen 
Schnittstelle (Rx) empfangen werden, überschreibt das zweite Byte das 
erste wenn beim Empfang des ersten Bytes gerade eine SPI Botschaft 
versendet wird.

Wieso stört der Sprung in die ISR überhaupt das versenden eines 
einzelnen Bytes das bereits im SPDR liegt??

von Gast (Gast)


Lesenswert?

Das Problem ist in Zeile 42 zu finden.

von Ahem (Gast)


Lesenswert?


von Michael U. (amiga)


Lesenswert?

Hallo,

Fred schrieb:
> Wenn ich aber die interrupts aktiv lasse (Timer und Seriell) dann wird
> teilweise Unsinn versendet.
Dann solltest Du Deinen Programmfehler suchen.

> Der Nachteil von CLI() ist, dass wenn Bytes auf der Seriellen
> Schnittstelle (Rx) empfangen werden, überschreibt das zweite Byte das
> erste wenn beim Empfang des ersten Bytes gerade eine SPI Botschaft
> versendet wird.
Naja, wenn Du auch mit 115,2kBaud UART machst und der SPI nur mit 1kHz 
läuft kann das schonmal passieren...

> Wieso stört der Sprung in die ISR überhaupt das versenden eines
> einzelnen Bytes das bereits im SPDR liegt??
Er stört definitiv nicht.

Rest wurde ja schon geschrieben...

Gruß aus Berlin
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.