31 lines
545 B
C
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;
|
|
}
|