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