Hallo liebe µC-Crew,
quäle mich nun seit geraumer Zeit mit dem Einrichten der USI für SPI an
einem ATtiny25. Habe schon mehrere Threads gelesen und irgendwie bin ich
wohl nen DAU. Aber mit Atmegas etc. habe ich das schon hinbekommen und
das läuft auch einwandfrei.
Ggf. hat ja jmd während des Eier-SChmauses Lust zu helfen?
Ich will doch einfach nur nen Master-USI-SPI generieren.
Folgendes:
Funktioniert:
1 | ISR (TIMER0_COMPA_vect)
|
2 | {
|
3 | USICR |= (1<<USITC);
|
4 | }
|
Einrichten:
1 | void init_SPI(void) // see 13/15 Use of ..pdf
|
2 | {
|
3 | DDRB = (1<<SS) | (1<<SCK)| (1<<MOSI);
|
4 | USICR |= (1<<USIOIE) |(1<<USIWM0)|(0<<USIWM1) | (1<<USICS0) | (0<<USICS1) |(1<<USICLK);
|
5 | //Toggeln des CLK via Timer / Counter 0 IRQ
|
6 | //The Counter Overflow (interrupt) Flag, or USIOIF, can therefore //be used to determine when a transfer is completed
|
7 | }
|
Frage: Welche IRQ-Routine-Vektor kann ich den für den USIOIE benutzen?
Bzw. (ich kann es auch falsch verstehen!) wird dieser IRQ für das
interne USI benutzt um den Counter zu setzen?
Senden:
1 | void sent_Byte_SPI(unsigned char Byte)
|
2 | {
|
3 | USIDR=Byte;
|
4 | USISR=(1<<USIOIF);
|
5 | while (!(USISR &(1<<USIOIF)));
|
PS: Mein Oszilloksop meldet: SCK Läuft, MOSI geht auf LOW und bleibt
auch LOW
Vielen Dank im Voraus