]> cloudbase.mooo.com Git - z180-stamp.git/blame - include/spi.h
Card detect over cs pin. (initial)
[z180-stamp.git] / include / spi.h
CommitLineData
7f552300
L
1/*
2 * spi.h
3 *
4 * Created on: 17.04.2009
5 * Author: leo
6 */
7
8#ifndef SPI_H_
9#define SPI_H_
10
11#define SPI_PORT PORTB /* SPI Connection port */
12#define SPI_DDR DDRB /* SPI Direction port */
13#define SPI_SS 0
14#define SPI_SCK 1
15#define SPI_MOSI 2
16#define SPI_MISO 3
17
18
19/* SPI macros */
20
21#define SPI_SET_SPEED_F_2 do {SPCR = (1<<SPE) | (1<<MSTR) | (0<<SPR1) | (0<<SPR0); SPSR = (1<<SPI2X); } while(0)
22#define SPI_SET_SPEED_F_4 do {SPCR = (1<<SPE) | (1<<MSTR) | (0<<SPR1) | (0<<SPR0); SPSR = (0<<SPI2X); } while(0)
23#define SPI_SET_SPEED_F_8 do {SPCR = (1<<SPE) | (1<<MSTR) | (0<<SPR1) | (1<<SPR0); SPSR = (1<<SPI2X); } while(0)
24#define SPI_SET_SPEED_F_16 do {SPCR = (1<<SPE) | (1<<MSTR) | (0<<SPR1) | (1<<SPR0); SPSR = (0<<SPI2X); } while(0)
25#define SPI_SET_SPEED_F_32 do {SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (0<<SPR0); SPSR = (1<<SPI2X); } while(0)
26#define SPI_SET_SPEED_F_64 do {SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (0<<SPR0); SPSR = (0<<SPI2X); } while(0)
27#define SPI_SET_SPEED_F_128 do {SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0); SPSR = (0<<SPI2X); } while(0)
28
29/** switch to fast SPI Clock */
a870134a
L
30#define SPISetFastClock() SPI_SET_SPEED_F_2
31#define SPISetSlowClock() SPI_SET_SPEED_F_8
32#define SPISetMMCInitClock() SPI_SET_SPEED_F_64
7f552300 33
a870134a 34#define SPI_OFF() do { SPCR = 0; } while(0)
7f552300
L
35
36static inline void spi_wait() {
37 loop_until_bit_is_set(SPSR,SPIF);
38}
39
40static inline void spi_write(uint8_t a) {
41 SPDR = a;
42}
43
44static inline void spi_xmit(uint8_t a){
45 spi_write(a);
46 spi_wait();
47}
48
49static inline uint8_t spi_rcvr(void) {
50 SPDR = 0xFF;
51 spi_wait();
52 return SPDR;
53}
54
55#endif /* SPI_H_ */