spi.h


1
#ifndef SPI_H
2
#define SPI_H
3
4
#include <stdint.h>
5
#include <avr/io.h>
6
7
#if defined (__AVR_ATmega32__)
8
9
#define SPI_PORT PORTB
10
#define SPI_DDR DDRB
11
12
#define SCK_PIN PB7
13
#define MISO_PIN PB6
14
#define MOSI_PIN PB5
15
16
#define SS_DDR DDRB
17
#define SS_PORT PORTB
18
#define SS_PIN PB4
19
20
#elif defined (__AVR_ATmega168__)
21
22
#define SPI_PORT PORTB
23
#define SPI_DDR DDRB
24
#define SCK_PIN PB5
25
#define MISO_PIN PB4
26
#define MOSI_PIN PB3
27
28
#define SS_DDR DDRB
29
#define SS_PORT PORTB
30
#define SS_PIN PB1
31
32
#endif
33
34
35
#define LOW 0
36
#define HIGH 1
37
38
#define SPI_RESET    0xC0
39
#define  SPI_READ    0x03
40
#define  SPI_READ_RX    0x90
41
#define  SPI_WRITE    0x02
42
#define  SPI_WRITE_TX  0x40
43
#define  SPI_RTS      0x80
44
#define SPI_READ_STATUS  0xA0
45
#define  SPI_RX_STATUS  0xB0
46
#define  SPI_BIT_MODIFY  0x05
47
48
uint8_t init_spi();
49
void set_cs(uint8_t state);
50
uint8_t spi_putc(uint8_t data);
51
void write_register(uint8_t address, uint8_t data);
52
uint8_t read_register(uint8_t address);
53
void modify_register(uint8_t address, uint8_t mask, uint8_t data);
54
void set_bit(uint8_t address, uint8_t bit, uint8_t value);
55
56
57
#endif