2022-06-01 08:34:17 +02:00
|
|
|
#include <avr/io.h>
|
|
|
|
#include <avr/interrupt.h>
|
|
|
|
|
|
|
|
#define SS_LOW PORTB &= ~(1<<PORTB2)
|
|
|
|
#define SS_HIGH PORTB |= (1<<PORTB2)
|
|
|
|
|
|
|
|
//inicjalizacja
|
|
|
|
void spiInit(void) {
|
|
|
|
// /SS, MOSI, SCK jako wyjścia
|
|
|
|
DDRB |= (1<<PORTB2) | (1<<PORTB3) | (1<<PORTB5);
|
|
|
|
// /SS w stanie wysokim
|
|
|
|
SS_HIGH;
|
|
|
|
//SPI włączone, tryb master, podział przez 2 (najwyższa możliwa prędkość)
|
|
|
|
SPCR = (1<<SPE) | (1<<MSTR);
|
|
|
|
SPSR |= (1<<SPI2X);
|
|
|
|
}
|
|
|
|
|
|
|
|
//wysłanie jednego bajtu
|
2022-06-08 08:20:11 +02:00
|
|
|
void spiTransfer(uint8_t data) {
|
2022-06-01 08:34:17 +02:00
|
|
|
//rozpocznij transmisję
|
|
|
|
SPDR = data;
|
|
|
|
//poczekaj na koniec
|
2022-06-08 08:20:11 +02:00
|
|
|
while(!(SPSR & (1<<SPIF)));
|
2022-06-01 08:34:17 +02:00
|
|
|
}
|