Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
29 jimmy 1
/******************************************************************************
2
 * Copyright (C) 2005 Martin THOMAS, Kaiserslautern, Germany
3
 * <eversmith@heizung-thomas.de>
4
 * http://www.siwawi.arubi.uni-kl.de/avr_projects
5
 *****************************************************************************
6
 *
7
 * File    : spi.c
8
 * Version : 0.9
9
 *
10
 * Summary : AVR SPI driver
11
 *
12
 *****************************************************************************/
13
 
14
#include <avr/io.h>
15
#include "spi.h"
16
 
17
#define SPIDONTCARE (0x00)
18
 
19
/* init as SPI-Master */
20
void spi_init(void)
21
{
22
    // SCK, SS!!, MOSI as outputs
23
    SPIDDR |= (1<<SPISCK)|(1<<SPISS)|(1<<SPIMOSI);
24
    // MISO as input
25
    SPIDDR &= ~(1<<SPIMISO);    // cbi(SPIDDR,SPIMISO);
26
    // INIT interface, Master, set clock rate fck/128 TODO: check prescaler
27
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
28
}
29
 
30
uint8_t spi_readwrite(uint8_t data)
31
{
32
    // set data to send into SPI data register
33
    SPDR = data;
34
    // Wait for transmission complete 
35
    while(!(SPSR & (1<<SPIF)));
36
    // return data read from SPI
37
    return SPDR;
38
}
39
 
40
uint8_t spi_read(void)
41
{
42
    return spi_readwrite(SPIDONTCARE);
43
}