hallo,
ich habe versucht möglichst viele der 16 Seiten mit SPI Themen zu lesen
und habe dort auch einige Seiten gefunden wo SPI allgemein gut erklärt
ist, aber mir fehlt noch immer ein gut erklärtes C-Programmbeispiel.
Aus dem Datenblatt habe ich den folgenden code:
(nur die Zeile "DDRB = (1<<PB5)|(1<<PB7);" angepasst)
ATMEGA 644P
1 | void SPI_MasterInit(void)
|
2 | {
|
3 | /* Set MOSI and SCK output, all others input */
|
4 | DDRB = (1<<PB5)|(1<<PB7);
|
5 | /* Enable SPI, Master, set clock rate fck/16 */
|
6 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
7 | }
|
8 |
|
9 | void SPI_MasterTransmit(char cData)
|
10 | {
|
11 | /* Start transmission */
|
12 | SPDR = cData;
|
13 | /* Wait for transmission complete */
|
14 | while(!(SPSR & (1<<SPIF)));
|
15 | }
|
also rufe ich einmal
zum initialisieren des Hardware SPI auf und kann dann mit z.B.
1 | SPI_MasterTransmit(0xFF);
|
ein byte senden.
Ist das korrekt soweit?
der Slave richtet sich nach dem Takt den der Master vorgibt?
der Master gibt die Daten auch aus wenn nichts angeschlossen ist?