Hi,
ich stehe gerade etwas auf dem Schlauch. Ich versuche seit Stunden den
SPI im ATMega8 zum Laufen zu bekommen, aber der regt sich überhaupt
nicht.
Ich habe den Code jetzt komplett aufs wesentliche runtergebrochen. Auf
einem Pin sende ich zwischendurch ein paar Impulse, um zu sehen an
welcher Stelle im Programm ich bin.
Nachdem ich den SPI aktiviert und konfiguriert habe, schreibe ich ein
Byte in SPDR. Darauf hin müsste er doch anfangen zu senden, richtig?
Der Screenshot zeigt, dass das Programm durchlaufen wird, der SPI aber
nichts tut.
Liebe Grüße,
Adrian.
edit: fast den Code vergessen...
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | #define SCK PB5 // CLK
|
5 | #define MOSI PB3 // MOSI
|
6 | #define DEBUG1 PC4 // Pin für debug Impulse
|
7 |
|
8 |
|
9 | void SPI_enable(void);
|
10 | void debug(uint8_t);
|
11 |
|
12 | int main(void)
|
13 | {
|
14 | PORTC &= ~(1 << DEBUG1); // Debug Port auf low und Ausgang
|
15 | DDRC |= (1 << DEBUG1);
|
16 |
|
17 | PORTB &= ~((1 << SCK) | (1 << MOSI)); // SCK / MOSI Ports auf low und Ausgang
|
18 | DDRB |= (1 << SCK) | (1 << MOSI);
|
19 |
|
20 | debug(1); // DEBUG Impuls 1
|
21 |
|
22 | PORTB |= (1 << SCK); // Impuls zeigt, dass der SCK Ausgang funktioniert
|
23 | PORTB &= ~(1 << SCK);
|
24 |
|
25 | PORTB |= (1 << MOSI); // Impuls zeigt, dass der MOSI Ausgang funktioniert
|
26 | PORTB &= ~(1 << MOSI);
|
27 |
|
28 | void SPI_enable(void);
|
29 |
|
30 | PORTB |= (1 << SCK); // Impuls zeigt, dass der SCK Ausgang funktioniert
|
31 | PORTB &= ~(1 << SCK);
|
32 |
|
33 | SPDR = 0xFF; // Jetzt müsste doch eine Clock zu sehen sein !?
|
34 |
|
35 | //while(!(SPSR & (1 << SPIF))){} // Warten bis der Transfer abgeschlossen ist.
|
36 |
|
37 | debug(2); // DEBUG Impuls 2
|
38 |
|
39 | return 0;
|
40 | }
|
41 |
|
42 | void SPI_enable(void)
|
43 | {
|
44 | SPCR = 0b01110000; // SPIE=0, SPE=1, DORD=1, MSTR=1, CPOL=0, CPHA=0, SPR1=0, SPR1=0
|
45 | SPSR &= ~(1 << SPI2X); // SPI2X=0
|
46 | return;
|
47 | }
|
48 |
|
49 |
|
50 | void debug(uint8_t n) // Sendet n kurze Debug-Impulse
|
51 | {
|
52 | uint8_t x;
|
53 | for(x=1; x<=n; x++){
|
54 |
|
55 | PORTC |= (1 << DEBUG1);
|
56 | PORTC &= ~(1 << DEBUG1);
|
57 | }
|
58 | return;
|
59 | }
|