Subversion Repositories HomeAutomation

Rev

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

  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. }
  44.