Hallo alle zusammen,
nach reichlichem Lesen hier im Forum komme ich jedoch alleine nicht
weiter und hoffe hier Hilfe zu bekommen.
Und zwar möchte ich bei einem ATMEGA168 die USART Schnittstelle im
SPI-Mode betreiben. Jedoch kann ich mit meinem Oszilloskop keinen Takt
messen, sprich in meinen Augen läuft die Kommunikation nicht und ich
weiß leider nicht warum. Hier mein Code:
1 | void SPI_USART_Init()
|
2 | {
|
3 | UBRR0 = 0;
|
4 | // Setting the XCKn port pin as output, enables master mode.
|
5 | DDRD |= _BV(PD4);
|
6 | // Set MSPI mode of operation and SPI data mode
|
7 | UCSR0C = (1<<UMSEL01)|(1<<UMSEL00)|(1<<UCPHA0)|(1<<UCPOL0);
|
8 | // Enable receiver and transmitter.
|
9 | UCSR0B = (1<<RXEN0)|(1<<TXEN0);
|
10 | // Set baud rate.
|
11 | // IMPORTANT: The Baud Rate must be set after the transmitter is enabled
|
12 | UBRR0 = 6;
|
13 | }
|
14 |
|
15 | unsigned int SPI2_MasterTransfer (unsigned int c1)
|
16 | {
|
17 | while (!(UCSR0A & (1<<UDRE0))){ asm volatile("nop"); };
|
18 |
|
19 | UCSR0A |= (1 << TXC0);
|
20 |
|
21 | UDR0 = c1;
|
22 |
|
23 | while (!(UCSR0A & (1<<RXC0)));
|
24 |
|
25 | return UDR0;
|
26 | _delay_ms(100);
|
27 | }
|
Hab ich was vergessen in der Initialisierung? Oder hat jemand ein
Beispiel welches funktioniert hat?
Dankeschön