Hallo Leute,
ich sitze hier und versuche über die Hardware SPI meines ATMEGA16 Daten
zu senden. Leider ohne Erfolg. Vielleicht kann mir ja einer meinen
Fehler zeigen.
Ich habe folgenden Code:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/pgmspace.h>
|
4 | #include <avr/eeprom.h>
|
5 | #include <stdlib.h>
|
6 |
|
7 | #define F_CPU 8000000UL
|
8 | #include <util/delay.h>
|
9 |
|
10 | #define SPI_PORT PORTB
|
11 | #define SPI_DDR DDRB
|
12 | #define SPI_PIN PINB
|
13 |
|
14 | #define SPI_SDI 5
|
15 | #define SPI_SCK 7
|
16 | #define SPI_CS 4
|
17 | #define SPI_SDO 6
|
18 |
|
19 | unsigned short spi_Trans(unsigned short data)
|
20 | {
|
21 | uint8_t highbyte;
|
22 | uint8_t lowbyte;
|
23 |
|
24 | lowbyte = data;
|
25 | highbyte = (data >> 8);
|
26 |
|
27 | SPI_PORT &= ~(1 << SPI_CS); //vorsichtshalber SS selber setzen
|
28 | SPDR = highbyte;
|
29 | // Wait for transmission complete
|
30 | while(!(SPSR & (1<<SPIF)))
|
31 | ;
|
32 | SPI_PORT |= (1 << SPI_CS); // SS zurücksetzen
|
33 |
|
34 |
|
35 | SPI_PORT &= ~(1 << SPI_CS); //vorsichtshalber SS selber setzen
|
36 | SPDR = lowbyte;
|
37 | // Wait for transmission complete
|
38 | while(!(SPSR & (1<<SPIF)))
|
39 | ;
|
40 | SPI_PORT |= (1 << SPI_CS); // SS zurücksetzen
|
41 | _delay_ms(1);
|
42 |
|
43 | return SPDR;
|
44 | }
|
45 |
|
46 | void spi_InitPort(void)
|
47 | {
|
48 | SPI_DDR=(1<<SPI_SDI)|(1<<SPI_SCK)|(1<<SPI_CS);
|
49 | SPI_PORT=(1<<SPI_CS);
|
50 | SPCR|=(1<<SPE)|(1<<MSTR);
|
51 | }
|
52 |
|
53 | int main(void)
|
54 | {
|
55 | spi_InitPort();
|
56 | spi_Trans(0xA000);
|
57 | }
|
Ich freue mich über jede hilfe.