Hallo zusammen.
Ich möchte SPI vom ATTiny2313 initialisieren und verwenden.
Der ATTiny 2313 soll dabei als Master und der MFRC531 als Slaver
arbeiten.
Im Datenblatt hab ich gefunden dass das über USI geht. Darin steht, dass
man als ersters einen Takt generiern muss.
Kleiner Auszug aus dem Datenblatt:
1 | The clock is generated by the Master
|
2 | device software by toggling the USCK pin via the PORT Register or by writing a one to
|
3 | the USITC bit in USICR.
|
Klingt ja recht einfach, dürfte aber noch nicht alles gewesen sein.
Weiters hab ich ein schönes Beispiel im Datenblatt gefunden, wie man den
ATTiny als Master initialisiert.
1 | SPITransfer:
|
2 | out USIDR,r16
|
3 | ldi r16,(1<<USIOIF)
|
4 | out USISR,r16
|
5 | ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
|
6 | SPITransfer_loop:
|
7 | out USICR,r16
|
8 | sbis USISR,USIOIF
|
9 | rjmp SPITransfer_loop
|
10 | in r16,USIDR
|
11 | ret
|
Ich prog aber in c und hab folgendes draus gemacht:
1 | void init_master()
|
2 | {
|
3 | DDRB = (0<<5); // Setzt DI auf Eingang
|
4 | DDRB = (1<<6)|(1<<7); //Setzt DO und SCK auf Ausgang
|
5 | PORTD = (1<<7); //Setzt SCL auf HIGH
|
6 |
|
7 | USICR = // Aktiviert USI
|
8 | (1<<USIWM0) |
|
9 | (0<<USIWM1) |
|
10 | (1<<USICS0) |
|
11 | (0<<USICS1) |
|
12 | (1<<USICLK) |
|
13 | (1<<USITC);
|
14 | }
|
Nur leider bekomme ich am SCL nur HIGH und keinen Takt.
Kann mir bitte jemand sagen, was noch zu ergänzen ist, am SCL einen Takt
zu bekommen?
lg georg