Hallo,
bitte helft mir, komme nicht weiter --- habe alles über USI hier im
Forum gelesen.
Ich schicke aller Sekunden von einem Master 8 Taktimpulse auf den Slave,
aber er will nichts ausgeben ...
Über Leds usw. habe ich herausbekommen, dass die SLK-Impulse ankommen
und die While-Schleife auch beendet wird, aber eben nur 1 mal. Aber auch
bei diesem einem mal bekomme ich keine Daten an DO. Hier muss ich was
vergessen haben ...
Eigentlich müsste der Slave an der while-Schleife warten, bis die
nächsten 8 Clocks kommen oder?
Der 4BitCounter läuft auch los ...
Danke ...
ATTiny25
1 | void InitSPI(void)
|
2 | {
|
3 |
|
4 | USICR |= (1<<USIWM0) | (1<<USICS1);
|
5 |
|
6 | // USIWM0 = Output wird jetzt vom
|
7 | //uC gesetzt und gelöscht und nicht mehr per Software
|
8 | // USICS1 = External Clock enabled, wird also von außen gesteuert
|
9 | }
|
10 |
|
11 |
|
12 | uint8_t SlaveSPITransfer (uint8_t a)
|
13 | {
|
14 | DDRB |= (1<<PB1);
|
15 |
|
16 | USIDR = a; // Daten übergeben
|
17 |
|
18 | USISR &= ~(1<<USIOIF); // Counter Overflow Flag wird gelöscht
|
19 |
|
20 | while (! (USISR & (1<<USIOIF)))
|
21 |
|
22 | DDRB &= ~(1<<PB1);
|
23 |
|
24 | return USIDR;
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 | // in der Main steht
|
30 |
|
31 | while(1)
|
32 | {
|
33 | // Test
|
34 | uint8_t a;
|
35 |
|
36 | a = SlaveSPITransfer(50);
|
37 | }
|