Hallo zusammen
Ich habe ein Problem mit dem SPI meines mega16. Schlussendlich bin ich
soweit, dass ich den code vom Datenblatt kopiert habe und auch das
funktioniert nicht.
Wenn ich den SPI initialisiere und dann ein Byte ins SPDR schreibe, dann
sollte ja das Byte gesendet werden. Ich sehe aber nichts mit meinem
analogen KO, auch wenn ich dass in einer Endlosschlaufe mache.
Wenn ich dann auf das SPIF Flag im SPSR warte, dann wird das nie
gesetzt.
ss habe ich probehalber jetzt weggelassen und testweise sogar MISO und
MOSI des mega16 verbunden. So sollte doch das geschriebene Byte direkt
wieder eingelsesn werden!
Programmiere jetzt mit dem AVR-Studio5 und habe alle codeoptimierungen
ausgeschalten!
Hoffe einer kann mir helfen.
Peet
Anbei noch der Code:
1 | #include <avr/io.h>
|
2 |
|
3 | void SPI_MasterInit(void)
|
4 | {
|
5 | int dummy;
|
6 | /* Set MOSI and SCK output, all others input */
|
7 | DDRB = 0x00;
|
8 | DDRB = (1<<5)|(1<<7);
|
9 | /* Enable SPI, Master, set clock rate fck/16 */
|
10 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
11 | dummy = SPSR; // clear SPIF bit in SPSR
|
12 | dummy = SPDR;
|
13 | }
|
14 |
|
15 | void SPI_MasterTransmit(char cData)
|
16 | {
|
17 | /* Start transmission */
|
18 | SPDR = cData;
|
19 | /* Wait for transmission complete */
|
20 | while(!(SPSR & (1<<SPIF)));
|
21 | }
|
22 |
|
23 |
|
24 | int main(void)
|
25 | {
|
26 | SPI_MasterInit();
|
27 |
|
28 | while(1)
|
29 | {
|
30 | SPI_MasterTransmit('AA');
|
31 | }
|
32 | }
|