1 /**
2   ******************************************************************************
3   * @file    lib_spi.h
4   * @author  Application Team
5   * @version V4.4.0
6   * @date    2018-09-27
7   * @brief   SPI library.
8   ******************************************************************************
9   * @attention
10   *
11   ******************************************************************************
12   */
13 #ifndef __LIB_SPI_H
14 #define __LIB_SPI_H
15 
16 #ifdef __cplusplus
17  extern "C" {
18 #endif
19 
20 #include "target.h"
21 
22 typedef struct
23 {
24   uint32_t Mode;
25   uint32_t SPH;
26   uint32_t SPO;
27   uint32_t ClockDivision;
28   uint32_t CSNSoft;
29   uint32_t SWAP;
30 } SPI_InitType;
31 //Mode
32 #define SPI_MODE_MASTER         0
33 #define SPI_MODE_SLAVE          SPI_CTRL_MOD
34 //SPH
35 #define SPI_SPH_0               0
36 #define SPI_SPH_1               SPI_CTRL_SCKPHA
37 //SPO
38 #define SPI_SPO_0               0
39 #define SPI_SPO_1               SPI_CTRL_SCKPOL
40 //ClockDivision
41 #define SPI_CLKDIV_2            (0)
42 #define SPI_CLKDIV_4            (SPI_CTRL_SCKSEL_0)
43 #define SPI_CLKDIV_8            (SPI_CTRL_SCKSEL_1)
44 #define SPI_CLKDIV_16           (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_1)
45 #define SPI_CLKDIV_32           (SPI_CTRL_SCKSEL_2)
46 #define SPI_CLKDIV_64           (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_2)
47 #define SPI_CLKDIV_128          (SPI_CTRL_SCKSEL_1 | SPI_CTRL_SCKSEL_2)
48 //CSNSoft
49 #define SPI_CSNSOFT_ENABLE      SPI_CTRL_CSGPIO
50 #define SPI_CSNSOFT_DISABLE     0
51 //SWAP
52 #define SPI_SWAP_ENABLE         SPI_CTRL_SWAP
53 #define SPI_SWAP_DISABLE        0
54 
55 //INT
56 #define SPI_INT_TX          (0x80000000|SPI_TXSTS_TXIEN)
57 #define SPI_INT_RX          (0x40000000|SPI_RXSTS_RXIEN)
58 
59 //status
60 #define SPI_STS_TXIF     (0x80000000|SPI_TXSTS_TXIF)
61 #define SPI_STS_TXEMPTY  (0x80000000|SPI_TXSTS_TXEMPTY)
62 #define SPI_STS_TXFUR    (0x80000000|SPI_TXSTS_TXFUR)
63 #define SPI_STS_RXIF     (0x40000000|SPI_RXSTS_RXIF)
64 #define SPI_STS_RXFULL   (0x40000000|SPI_RXSTS_RXFULL)
65 #define SPI_STS_RXFOV    (0x40000000|SPI_RXSTS_RXFOV)
66 #define SPI_STS_BSY      (0x20000000|SPI_MISC_BSY)
67 #define SPI_STS_RFF      (0x20000000|SPI_MISC_RFF)
68 #define SPI_STS_RNE      (0x20000000|SPI_MISC_RNE)
69 #define SPI_STS_TNF      (0x20000000|SPI_MISC_TNF)
70 #define SPI_STS_TFE      (0x20000000|SPI_MISC_TFE)
71 
72 //TXFLEV
73 #define SPI_TXFLEV_0       (0)
74 #define SPI_TXFLEV_1       (SPI_TXSTS_TXFLEV_0)
75 #define SPI_TXFLEV_2       (SPI_TXSTS_TXFLEV_1)
76 #define SPI_TXFLEV_3       (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1)
77 #define SPI_TXFLEV_4       (SPI_TXSTS_TXFLEV_2)
78 #define SPI_TXFLEV_5       (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_2)
79 #define SPI_TXFLEV_6       (SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2)
80 #define SPI_TXFLEV_7       (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2)
81 
82 //RXFLEV
83 #define SPI_RXFLEV_0       (0)
84 #define SPI_RXFLEV_1       (SPI_RXSTS_RXFLEV_0)
85 #define SPI_RXFLEV_2       (SPI_RXSTS_RXFLEV_1)
86 #define SPI_RXFLEV_3       (SPI_RXSTS_RXFLEV_0 | SPI_RXSTS_RXFLEV_1)
87 #define SPI_RXFLEV_4       (SPI_RXSTS_RXFLEV_2)
88 #define SPI_RXFLEV_5       (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_0)
89 #define SPI_RXFLEV_6       (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1)
90 #define SPI_RXFLEV_7       (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1 | SPI_RXSTS_RXFLEV_0)
91 
92 
93 /* Private macros ------------------------------------------------------------*/
94 #define IS_SPI_MODE(__MODE__)  (((__MODE__) == SPI_MODE_MASTER) || ((__MODE__) == SPI_MODE_SLAVE))
95 
96 #define IS_SPI_SPH(__SPH__)  (((__SPH__) == SPI_SPH_0) || ((__SPH__) == SPI_SPH_1))
97 
98 #define IS_SPI_SPO(__SPO__)  (((__SPO__) == SPI_SPO_0) || ((__SPO__) == SPI_SPO_1))
99 
100 #define IS_SPI_CLKDIV(__CLKDIV__)  (((__CLKDIV__) == SPI_CLKDIV_2) ||\
101                                     ((__CLKDIV__) == SPI_CLKDIV_4) ||\
102                                     ((__CLKDIV__) == SPI_CLKDIV_8) ||\
103                                     ((__CLKDIV__) == SPI_CLKDIV_16) ||\
104                                     ((__CLKDIV__) == SPI_CLKDIV_32) ||\
105                                     ((__CLKDIV__) == SPI_CLKDIV_64) ||\
106                                     ((__CLKDIV__) == SPI_CLKDIV_128))
107 
108 #define IS_SPI_CSN(__CSN__)  (((__CSN__) == SPI_CSNSOFT_ENABLE) || ((__CSN__) == SPI_CSNSOFT_DISABLE))
109 
110 #define IS_SPI_SWAP(__SWAP__)  (((__SWAP__) == SPI_SWAP_ENABLE) || ((__SWAP__) == SPI_SWAP_DISABLE))
111 
112 #define IS_SPI_INT(__INT__)  ((((__INT__) & (SPI_INT_TX | SPI_INT_RX)) != 0U) &&\
113                               (((__INT__) & ~(SPI_INT_TX | SPI_INT_RX)) == 0U))
114 
115 #define IS_SPI_STSR(__STSR__)  (((__STSR__) == SPI_STS_TXIF)    ||\
116                                 ((__STSR__) == SPI_STS_TXEMPTY) ||\
117                                 ((__STSR__) == SPI_STS_TXFUR)   ||\
118                                 ((__STSR__) == SPI_STS_RXFULL)  ||\
119                                 ((__STSR__) == SPI_STS_RXFOV)   ||\
120                                 ((__STSR__) == SPI_STS_BSY)     ||\
121                                 ((__STSR__) == SPI_STS_RFF)     ||\
122                                 ((__STSR__) == SPI_STS_RNE)     ||\
123                                 ((__STSR__) == SPI_STS_TNF)     ||\
124                                 ((__STSR__) == SPI_STS_TFE)     ||\
125                                 ((__STSR__) == SPI_STS_RXIF))
126 
127 #define IS_SPI_STSC(__STSC__)  ((((__STSC__) & (SPI_STS_TXIF | SPI_STS_RXIF)) != 0U) &&\
128                                 (((__STSC__) & ~(SPI_STS_TXIF | SPI_STS_RXIF)) == 0U))
129 
130 #define IS_SPI_TXFLEV(__TXFLEV__)  (((__TXFLEV__) == SPI_TXFLEV_0) ||\
131                                     ((__TXFLEV__) == SPI_TXFLEV_1) ||\
132                                     ((__TXFLEV__) == SPI_TXFLEV_2) ||\
133                                     ((__TXFLEV__) == SPI_TXFLEV_3) ||\
134                                     ((__TXFLEV__) == SPI_TXFLEV_4) ||\
135                                     ((__TXFLEV__) == SPI_TXFLEV_5) ||\
136                                     ((__TXFLEV__) == SPI_TXFLEV_6) ||\
137                                     ((__TXFLEV__) == SPI_TXFLEV_7))
138 
139 #define IS_SPI_RXFLEV(__RXFLEV__)  (((__RXFLEV__) == SPI_RXFLEV_0) ||\
140                                     ((__RXFLEV__) == SPI_RXFLEV_1) ||\
141                                     ((__RXFLEV__) == SPI_RXFLEV_2) ||\
142                                     ((__RXFLEV__) == SPI_RXFLEV_3) ||\
143                                     ((__RXFLEV__) == SPI_RXFLEV_4) ||\
144                                     ((__RXFLEV__) == SPI_RXFLEV_5) ||\
145                                     ((__RXFLEV__) == SPI_RXFLEV_6) ||\
146                                     ((__RXFLEV__) == SPI_RXFLEV_7))
147 
148 /* Exported Functions ------------------------------------------------------- */
149 /* SPI Exported Functions Group1:
150                                   (De)Initialization -------------------------*/
151 void SPI_DeviceInit(SPI_TypeDef *SPIx);
152 void SPI_Init(SPI_TypeDef *SPIx, SPI_InitType *InitStruct);
153 void SPI_StructInit(SPI_InitType *InitStruct);
154 /* SPI Exported Functions Group2:
155                                   Interrupt (flag) ---------------------------*/
156 void SPI_INTConfig(SPI_TypeDef *SPIx, uint32_t INTMask, uint32_t NewState);
157 uint8_t SPI_GetStatus(SPI_TypeDef *SPIx, uint32_t Status);
158 void SPI_ClearStatus(SPI_TypeDef *SPIx, uint32_t Status);
159 /* SPI Exported Functions Group3:
160                                   Transfer datas -----------------------------*/
161 void SPI_SendData(SPI_TypeDef *SPIx, uint8_t ch);
162 uint8_t SPI_ReceiveData(SPI_TypeDef *SPIx);
163 /* SPI Exported Functions Group4:
164                                   MISC Configuration -------------------------*/
165 void SPI_Cmd(SPI_TypeDef *SPIx, uint32_t NewState);
166 void SPI_TransmitFIFOLevelConfig(SPI_TypeDef *SPIx, uint32_t FIFOLevel);
167 void SPI_ReceiveFIFOLevelConfig(SPI_TypeDef *SPIx, uint32_t FIFOLevel);
168 uint8_t SPI_GetTransmitFIFOLevel(SPI_TypeDef *SPIx);
169 uint8_t SPI_GetReceiveFIFOLevel(SPI_TypeDef *SPIx);
170 void SPI_SmartModeCmd(SPI_TypeDef *SPIx, uint32_t NewState);
171 void SPI_OverWriteModeCmd(SPI_TypeDef *SPIx, uint32_t NewState);
172 
173 
174 #ifdef __cplusplus
175 }
176 #endif
177 
178 #endif  /* __LIB_SPI_H */
179 
180 /*********************************** END OF FILE ******************************/
181