avr: Decoding table no longer static
[avr-sim.git] / test / spi.c
blob3ba85641e7ad31f246640a271186559342df0dac
1 #include <avr/io.h>
2 #include "spi.h"
4 #define SPIDONTCARE (0x00)
6 /* init as SPI-Master */
7 void spi_init(void) {
8 // SCK, MOSI as outputs
9 SPIDDR |= (1<<SPISCK)|(1<<SPISS)|(1<<SPIMOSI);
10 // MISO as input
11 SPIDDR &= ~(1<<SPIMISO);
13 // fck/128 = 16Mhz/128 = 125kHz
14 // INIT interface, Master, set clock rate fck/128
15 SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
18 uint8_t spi_readwrite(uint8_t data) {
19 // set data to send into SPI data register
20 SPDR = data;
21 // Wait for transmission complete
22 while(!(SPSR & (1<<SPIF)));
23 // return data read from SPI
24 return SPDR;
27 void spi_write(uint8_t data) {
28 // set data to send into SPI data register
29 SPDR = data;
30 // Wait for transmission complete
31 while(!(SPSR & (1<<SPIF)));
34 uint8_t spi_read(void) {
35 return spi_readwrite(SPIDONTCARE);