Hi,
Ich hab mich in ein wenig zur Verwendung der SPI umgesehen (zum Füllen
von shift-registern)
Da AVR-Assembler nicht so ganz meine Welt ist, hab ich bei roboternetz
ein Tut in C gefunden:
http://www.rn-wissen.de/index.php/Portexpander_am_AVR
dort wird nach dem SPI Schreibzugriff das Datenregister einmal sinnlos
ausgelesen um das Interuptflag zu löschen.
1 | do
|
2 | {
|
3 | unsigned char data = *--serp;
|
4 |
|
5 | // SPDR schreiben startet Uebertragung
|
6 | SPDR = data;
|
7 |
|
8 | // warten auf Ende der Uebertragung für dieses Byte
|
9 | while (!(SPSR & (1 << SPIF)));
|
10 |
|
11 | // clear SPIF durch Lesen von SPDR
|
12 | SPDR;
|
13 | }
|
Ist das notwendig?
Macht in meinen Augen nicht viel Sinn
Im Datenblatt steht:
> the SPIF bit is cleared by first reading
> the SPI Status Register with SPIF set,
> then accessing the SPI Data Register (SPDR).
Unter accessing würde ich auch einen Schreibzugriff verstehen - sprich
beim nächsten setzen des Datenregister sollte das Flag ohnehin gelöscht
werden, oder muss dies direkt im nächsten Takt geschehen?
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Ansteuerung_per_SPI-Modul
hab ich ein derartiges Lesen nicht gefunden, weiß aber nicht, ob das an
den mangelnden ASM-Kenntnissen liegt.
Danke bereits im Voraus