DIGILIGHT
spi.h
1 
2 #ifndef SPI_H
3 #define SPI_H
4 
5 //#define F_CPU 8000000UL
6 
7 #include <avr/io.h>
8 #include <util/delay.h>
9 #include "../avr_helper.h"
10 #include "../hardware.h"
11 
12 /*
13 #define SPI_PORTX PORTB
14 #define SPI_DDRX DDRB
15 
16 #define SPI_MISO 4
17 #define SPI_MOSI 3
18 #define SPI_SCK 5
19 #define SPI_SS 2
20 
21 */
22 /*_______________ макросы ____________________*/
23 
24 
25 /*запретить SPI устройство*/
26 #define SPI_DisableSS_m(ss) do{PORT(PORT_SPI) |= (1<<(PIN_SS)); }while(0)
27 
28 /*разрешить SPI устройство*/
29 #define SPI_EnableSS_m(ss) do{PORT(PORT_SPI) &= ~(1<<(PIN_SS)); }while(0)
30 
31 /*статус SPI устройства*/
32 #define SPI_StatSS_m(ss) (!(PORT(PORT_SPI) & (1<<(PIN_SS))))
33 
34 /*передать байт данных по SPI*/
35 #define SPI_WriteByte_m(data) do{ SPDR = data; while(!(SPSR & (1<<SPIF))); }while(0)
36 
37 /*прочитать байт данных по SPI*/
38 #define SPI_ReadByte_m(data) do{ SPDR = 0xff; while(!(SPSR & (1<<SPIF))); data = SPDR;}while(0)
39 
40 
41 /* ______________ встраиваемые функции _____________*/
42 
43 
44 /*получить байт данных по SPI*/
45 inline static uint8_t SPI_ReadByte_i(void){
46  SPDR = 0xff;
47  while(!(SPSR & (1<<SPIF)));
48  return SPDR;
49 }
50 
51 /* _________________ функции ________________ */
52 
53 /*инициализация SPI модуля*/
54 void SPI_Init(void);
55 
56 /*отправить байт данных по SPI*/
57 void SPI_WriteByte(uint8_t data);
58 
59 /*получить байт данных по SPI*/
60 uint8_t SPI_ReadByte(void);
61 
62 /*отправить и получить байт данных по SPI*/
63 uint8_t SPI_WriteReadByte(uint8_t data);
64 
65 /*отправить несколько байт данных по SPI*/
66 void SPI_WriteArray(uint8_t count, uint8_t *data);
67 
68 /*отправить и получить несколько байт данных по SPI*/
69 void SPI_WriteReadArray(uint8_t count, uint8_t *data);
70 
71 
72 #endif //SPI_H