day09/ex05/src/lib/spi.c
2026-04-27 15:42:00 +02:00

31 lines
545 B
C

#include <avr/io.h>
#include "lib/mystd.h"
#include "lib/spi.h"
void spi_init(void) {
// set the correct pins as output
SPI_DDR |= BV(CS) | BV(MOSI) | BV(SCK);
// enable SPI, set as master, and clock to fosc/128
SPCR = BV(SPE) | BV(MSTR) | BV(SPR1) | BV(SPR0);
}
void spi_uninit(void) {
SPCR = 0;
}
t_error spi_write(uint8_t data) {
uint16_t o = 0;
// load data into register
SPDR = data;
// Wait for transmission complete
while (!(SPSR & BV(SPIF)) && o < 32768)
o++;
if (o >= 32768)
return ERROR;
return NO_ERROR;
}