Mega32 SPI Master hängt sich auf?

Gast #969649
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
Gast
schade über mein haupt.
Ja ich denke irgendwo sollte ich des SPI_MasterInit() aufrufen sonst 
wird des wohl nie was.

Jetzt sollte es doch dann gehen..
DANKE

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.