Mega32 SPI Master hängt sich auf?

Gast #969649
Lesenswert?

nun ich muss leider mal mein Problem hier anführen da ich seit stunden 
die SPI nicht zum laufen bekomme.

Nun vielleicht sehr ich auch im Code den Fehler nicht.
Ich nutze den mega32 als SPI Master via Hardware.
Ich möchte ergänzen, dass ich zum Debuggen ein LCD angeschlossen habe.

Laut Aussagen des LCD bleibt die Übertragung hier stehen.
1
while(!(SPSR & (1<<SPIF)));

hier mein Code:
1
typedef unsigned char BYTE;
2
typedef unsigned short WORD;
3

4
// Settings for SPI
5
#define SPI_PORT        PORTB
6
#define SPI_PORT_DIR    DDRB
7
#define MISO            6
8
#define MOSI            5
9
#define SCK             7
10

11
void SPI_MasterInit(void)
12
{
13
  /* Set MOSI and SCK output, all others input */
14
  // Set SPI Pins
15
  SPI_PORT_DIR |= (1<<MOSI);      // SPI_PORT_DIR.MOSI = Output
16
    SPI_PORT_DIR &= ~(1<<MISO);      // SPI_PORT_DIR.MISO = Input
17
    SPI_PORT_DIR |= (1<<SCK);      // SPI_PORT_DIR.SCK = Output
18
    SPI_PORT_DIR |= (1<<PB4);      // SPI_PORT_DIR.PB4 = Output
19

20
  /* Enable SPI, Master, set clock rate fck/2 */
21
    // Master, full Speed, Mode 0, MSB first
22
    SPCR |= (1<<SPE)|(1<<MSTR);
23
    SPCR &= ~(1<<SPR0)|(1<<SPR1);
24
    SPSR |= (1<<SPI2X);
25

26
    //PORTB |= (1 << PB7)|(1 << PB4);
27

28
}
29

30
void send_byte(BYTE cData)
31
{
32
  /* Start transmission */
33
  char buffer[7];
34
  lcd_clrscr();
35
  //PORTB &= ~(1 << PB4);  // set chip select to low
36
  SPDR = cData;
37
  itoa(cData, buffer, 16); // Hex
38
  lcd_puts(buffer);
39
  lcd_gotoxy(0,1);
40
  lcd_puts("Daten im Speicher\n");
41
  /* Wait for transmission complete */
42
  while(!(SPSR & (1<<SPIF)));
43
  lcd_puts("Übertragung fertig");
44
}
45

46
int main(void) 
47
{
48
        sei();
49
        BYTE test= 0x0F;
50
        send_byte(test);
51

52
        for(;;)
53
        {
54

55
        }
56
}

Vielleicht findet jemand den Fehler.

Timo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren