Hallo!
Ich bin gerade dabei die SPI-Schnittstelle in Betrieb zu nehmen. Dazu
habe ich auf einem Steckbrett folgendes Aufgebaut:
Atmega48
Kondensator zw. Vcc und GND
Pullup an Reset zu Vcc
LED an PC0 und PC1
Folgendes Programm habe ich dazu geschrieben:
1 | #include <avr/io.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | SPI_MasterInit();
|
6 |
|
7 | DDRC = 0xff;
|
8 | PORTC = 0;
|
9 |
|
10 | while(1)
|
11 | {
|
12 | SPI_Transmit(125);
|
13 | }
|
14 | }
|
15 |
|
16 | void SPI_MasterInit(){
|
17 | DDRB = (1<<3) | (1<<5);
|
18 | SPCR = (1<<SPE) |(1<<MSTR) | (1<<SPR0);
|
19 | }
|
20 |
|
21 | void SPI_Transmit(char cData){
|
22 | SPDR = cData;
|
23 | PORTC = 1;
|
24 | while(!(SPSR & (1<<SPIF))){}
|
25 | PORTC = 3;
|
26 |
|
27 | }
|
Ich will nun die Daten vom SPI-Bus mit meinem Logikanalysator
aufzeichnen. Jedoch kommen da keine Daten an. (LA von IKALOGIK -
Samplingrate: 1MHz, 261888 Samples --> Resolution: 1µs)
Nun habe ich testweise in SPI_Transmit Ausgänge (LEDs) gesetzt um zu
testen, ob hier etwas nicht stimmt. Es ist nur Portc0 aktiv. Es scheint,
als würde das Programm in der while(!(SPSR & (1<<SPIF))){} stecken.
Woran könnte das liegen?