Hallo,
folgende Ausgangssituation:
- vorhanden: Oszi + Logicanalyser
- ATMEGA32 (Fuses auf Werkseinstellung)
- "funktionierende" Schaltung (LEDs blinken lassen geht)
folgendes Programm:
1 | #define DDR_SPI DDRB
|
2 | #define DD_MOSI PB5
|
3 | #define DD_SCK PB7
|
4 |
|
5 | void SPI_MasterInit(void)
|
6 | {
|
7 | /* Set MOSI and SCK output, all others input */
|
8 | DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
|
9 | /* Enable SPI, Master, set clock rate fck/16 */
|
10 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
11 | }
|
12 |
|
13 | void SPI_MasterTransmit(char cData)
|
14 | {
|
15 | /* Start transmission */
|
16 | SPDR = cData;
|
17 | /* Wait for transmission complete */
|
18 | while(!(SPSR & (1<<SPIF)))
|
19 | ;
|
20 | }
|
21 |
|
22 | void main(void)
|
23 | {
|
24 | ...
|
25 | SPI_MasterInit();
|
26 | SPI_MasterTransmit(0xA5);
|
27 | SPI_MasterTransmit(0xAA);
|
28 | SPI_MasterTransmit(0x55);
|
29 | ...
|
30 | }
|
folgendes Problem:
Ich kann nur das erste Datenpaket übertragen. Beim zweiten Aufruf der
Funktion SPI_MasterTransmit(...); bleibt das Programm bei while(!(SPSR &
(1<<SPIF))) ; hängen?
Was mache ich falsch???
Vielen Dank für die Hilfe!