Hallo, Ich versuche ein paar Daten per SPI zu übertragen und kann leider kein Signal am MOSI messen. Ich verwende einen AT90PWM316 als Controler! Kann mir bitte jemand weiter helfen? Hier mein Code:
1 | /********************************************************
|
2 | * SPI-Master - Datenübertragung *
|
3 | * Übertragung zweier 8-Bit Daten (11010010 und 10000001)*
|
4 | * Prozessor: AT90PWM316 *
|
5 | * Clock: Osz. 8MHz intern *
|
6 | ********************************************************/
|
7 | |
8 | #include <avr/io.h> |
9 | #include <util/delay.h> |
10 | |
11 | void SPI_Master_Init(void) |
12 | {
|
13 | SPCR &= ~(1<<DORD); // Send MSB first |
14 | SPCR |= (1<<MSTR); // Controller = Master |
15 | SPCR &= ~(1<<CPOL); // CLK positiv phase |
16 | SPCR |= (1<<CPHA); // Sampling data @ rising edge |
17 | SPCR |= (1<<SPR1); // CLK / 64 = 125kHz |
18 | |
19 | DDRB |= (1<<PB1); // Set MOSI output |
20 | DDRB &= ~(1<<PB0); // Set MISO input |
21 | DDRB |= (1<<PB7); // Set SCK output |
22 | DDRD |= (1<<PD3); // Set SS output |
23 | |
24 | SPCR |= (1<<SPE); // SPI enable |
25 | }
|
26 | |
27 | void SPI_Master_Transmit(char cData) |
28 | {
|
29 | PORTD &= ~(1<<PD3); // SS = low (Slave = enabled) |
30 | SPDR = cData; // Start transmission |
31 | while (!(SPSR & (1<<SPIF))); // Wait for transmission complete |
32 | PORTD |= (1<<PD3); // SS = high (Slave = disabled) |
33 | }
|
34 | |
35 | |
36 | int main(void) |
37 | {
|
38 | SPI_Master_Init(); |
39 | |
40 | while(1) |
41 | {
|
42 | SPI_Master_Transmit(0b11010010); |
43 | _delay_ms(500); // delaytime between next transmission |
44 | SPI_Master_Transmit(0b10000001); |
45 | _delay_ms(500); // delaytime between next transmission |
46 | }
|
47 | }
|