1 | #include "global.h" // Globale Lib
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | char data; //Received data stored here
|
6 |
|
7 | cli(); // Disable all interrupts
|
8 | spi_init_master(); // SPI Inizalisierung
|
9 | // spi_init_slave ();
|
10 | initPort(); // Inizalisierung der Ports
|
11 | sei(); // enable all interrupts
|
12 |
|
13 | while(1)
|
14 | {
|
15 | SWITCH_LED1;
|
16 | _delay_ms(500);
|
17 | data = 0x00; //Reset ACK in "data"
|
18 | data = spi_tranceiver('Hallo', PIN_SPI_CS1);
|
19 | SET_LED3;
|
20 | }
|
21 | }
|
22 |
|
23 | in der global.h
|
24 |
|
25 | // SPI
|
26 | #define PORT_SPI PORTB
|
27 | #define DDR_SPI DDRB
|
28 | #define PIN_SPI_MISO 3 // PB3
|
29 | #define PIN_SPI_MOSI 2 // PB2
|
30 | #define PIN_SPI_SCK 1 // PB1
|
31 | #define PORT_SPI_CS PORTC
|
32 | #define DDR_SPI_CS DDRC
|
33 | #define PIN_SPI_CS1 7 // PC7
|
34 | #define PIN_SPI_CS2 6 // PC6
|
35 | #define PIN_SPI_CS3 5 // PC5
|
36 |
|
37 | in der spi_master_slave.c
|
38 | /*
|
39 | * spi_master_slave.c
|
40 | *
|
41 | * Created: 12.02.2015 14:08:46
|
42 | * Author: u308488
|
43 | */
|
44 |
|
45 | #include "spi_master_slave.h"
|
46 |
|
47 | /*
|
48 | // SPI Transmission/reception complete ISR
|
49 | ISR(SPI_STC_vect)
|
50 | {
|
51 | // Code to execute
|
52 | // whenever transmission/reception
|
53 | // is complete.
|
54 | }
|
55 | */
|
56 |
|
57 | void spi_init_slave (void)
|
58 | {
|
59 | DDR_SPI |= (1<<PIN_SPI_MISO); // MISO als Ausgang definieren
|
60 | SPCR |= (1<<SPE); //Enable SPI
|
61 |
|
62 | }
|
63 |
|
64 | //Initialize SPI Master Device
|
65 | void spi_init_master (void)
|
66 | {
|
67 | DDR_SPI = (1<<PIN_SPI_MOSI) | (1<<PIN_SPI_SCK); // MOSI und SCK als
|
68 | Ausgang definieren
|
69 | DDR_SPI &= ~(1<<PIN_SPI_MISO); // MISO als Eingang definieren
|
70 | PORT_SPI = (1<<PIN_SPI_MOSI) | (1<<PIN_SPI_SCK);
|
71 |
|
72 | // SPCR = (1<<SPR1)|(1<<SPR0); // Prescaler: Fosc/128,
|
73 | Enable Interrupts
|
74 | // SPCR = (1<<SPI2X); // Prescaler: Fosc/2,
|
75 | SPCR = (1<<MSTR); // Set as Master
|
76 | SPCR = (1<<SPE); // Enable SPI
|
77 | // SPCR = (1<<SPIE); // SPI Interrupt Enable
|
78 |
|
79 | SPSR |= (0 << SPIF); // SPIF zum Start löschen
|
80 | _delay_ms(10);
|
81 | }
|
82 |
|
83 | //Function to send and receive data
|
84 | char spi_tranceiver (char data, unsigned char cs)
|
85 | {
|
86 | PORT_SPI_CS &= ~(1<<cs); //SS am Slave Low --> Beginn der Übertragung
|
87 | SWITCH_LED2;
|
88 | SPDR = data; //Load data into the buffer
|
89 | while(!(SPSR & (1<<SPIF))); //Wait until transmission complete
|
90 | PORT_SPI_CS |= (1<<cs); //SS High --> Ende der Übertragung
|
91 | return SPDR; //Return received data
|
92 | }
|