]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/ST Library/inc/stm32f10x_spi.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_GCC_Rowley / ST Library / inc / stm32f10x_spi.h
1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_spi.h\r
3 * Author             : MCD Application Team\r
4 * Version            : V2.0.1\r
5 * Date               : 06/13/2008\r
6 * Description        : This file contains all the functions prototypes for the\r
7 *                      SPI firmware library.\r
8 ********************************************************************************\r
9 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
10 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
11 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
12 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
13 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
14 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
15 *******************************************************************************/\r
16 \r
17 /* Define to prevent recursive inclusion -------------------------------------*/\r
18 #ifndef __STM32F10x_SPI_H\r
19 #define __STM32F10x_SPI_H\r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_map.h"\r
23 \r
24 /* Exported types ------------------------------------------------------------*/\r
25 /* SPI Init structure definition */\r
26 typedef struct\r
27 {\r
28   u16 SPI_Direction;\r
29   u16 SPI_Mode;\r
30   u16 SPI_DataSize;\r
31   u16 SPI_CPOL;\r
32   u16 SPI_CPHA;\r
33   u16 SPI_NSS;\r
34   u16 SPI_BaudRatePrescaler;\r
35   u16 SPI_FirstBit;\r
36   u16 SPI_CRCPolynomial;\r
37 }SPI_InitTypeDef;\r
38 \r
39 /* I2S Init structure definition */\r
40 typedef struct\r
41 {\r
42   u16 I2S_Mode;\r
43   u16 I2S_Standard;\r
44   u16 I2S_DataFormat;\r
45   u16 I2S_MCLKOutput;\r
46   u16 I2S_AudioFreq;\r
47   u16 I2S_CPOL;\r
48 }I2S_InitTypeDef;\r
49 \r
50 /* Exported constants --------------------------------------------------------*/\r
51 \r
52 #define IS_SPI_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == SPI1_BASE) || \\r
53                                    ((*(u32*)&(PERIPH)) == SPI2_BASE) || \\r
54                                    ((*(u32*)&(PERIPH)) == SPI3_BASE))\r
55 \r
56 #define IS_SPI_23_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == SPI2_BASE) || \\r
57                                   ((*(u32*)&(PERIPH)) == SPI3_BASE))\r
58 \r
59 /* SPI data direction mode */\r
60 #define SPI_Direction_2Lines_FullDuplex ((u16)0x0000)\r
61 #define SPI_Direction_2Lines_RxOnly     ((u16)0x0400)\r
62 #define SPI_Direction_1Line_Rx          ((u16)0x8000)\r
63 #define SPI_Direction_1Line_Tx          ((u16)0xC000)\r
64 \r
65 #define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \\r
66                                      ((MODE) == SPI_Direction_2Lines_RxOnly) || \\r
67                                      ((MODE) == SPI_Direction_1Line_Rx) || \\r
68                                      ((MODE) == SPI_Direction_1Line_Tx))\r
69 \r
70 /* SPI master/slave mode */\r
71 #define SPI_Mode_Master                 ((u16)0x0104)\r
72 #define SPI_Mode_Slave                  ((u16)0x0000)\r
73 \r
74 #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \\r
75                            ((MODE) == SPI_Mode_Slave))\r
76 \r
77 /* SPI data size */\r
78 #define SPI_DataSize_16b                ((u16)0x0800)\r
79 #define SPI_DataSize_8b                 ((u16)0x0000)\r
80 \r
81 #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \\r
82                                    ((DATASIZE) == SPI_DataSize_8b))\r
83 \r
84 /* SPI Clock Polarity */\r
85 #define SPI_CPOL_Low                    ((u16)0x0000)\r
86 #define SPI_CPOL_High                   ((u16)0x0002)\r
87 \r
88 #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \\r
89                            ((CPOL) == SPI_CPOL_High))\r
90 \r
91 /* SPI Clock Phase */\r
92 #define SPI_CPHA_1Edge                  ((u16)0x0000)\r
93 #define SPI_CPHA_2Edge                  ((u16)0x0001)\r
94 \r
95 #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \\r
96                            ((CPHA) == SPI_CPHA_2Edge))\r
97 \r
98 /* SPI Slave Select management */\r
99 #define SPI_NSS_Soft                    ((u16)0x0200)\r
100 #define SPI_NSS_Hard                    ((u16)0x0000)\r
101 \r
102 #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \\r
103                          ((NSS) == SPI_NSS_Hard))                         \r
104 \r
105 /* SPI BaudRate Prescaler  */\r
106 #define SPI_BaudRatePrescaler_2         ((u16)0x0000)\r
107 #define SPI_BaudRatePrescaler_4         ((u16)0x0008)\r
108 #define SPI_BaudRatePrescaler_8         ((u16)0x0010)\r
109 #define SPI_BaudRatePrescaler_16        ((u16)0x0018)\r
110 #define SPI_BaudRatePrescaler_32        ((u16)0x0020)\r
111 #define SPI_BaudRatePrescaler_64        ((u16)0x0028)\r
112 #define SPI_BaudRatePrescaler_128       ((u16)0x0030)\r
113 #define SPI_BaudRatePrescaler_256       ((u16)0x0038)\r
114 \r
115 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \\r
116                                               ((PRESCALER) == SPI_BaudRatePrescaler_4) || \\r
117                                               ((PRESCALER) == SPI_BaudRatePrescaler_8) || \\r
118                                               ((PRESCALER) == SPI_BaudRatePrescaler_16) || \\r
119                                               ((PRESCALER) == SPI_BaudRatePrescaler_32) || \\r
120                                               ((PRESCALER) == SPI_BaudRatePrescaler_64) || \\r
121                                               ((PRESCALER) == SPI_BaudRatePrescaler_128) || \\r
122                                               ((PRESCALER) == SPI_BaudRatePrescaler_256))\r
123 \r
124 /* SPI MSB/LSB transmission */\r
125 #define SPI_FirstBit_MSB                ((u16)0x0000)\r
126 #define SPI_FirstBit_LSB                ((u16)0x0080)\r
127 \r
128 #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \\r
129                                ((BIT) == SPI_FirstBit_LSB))\r
130 \r
131 /* I2S Mode */\r
132 #define I2S_Mode_SlaveTx                ((u16)0x0000)\r
133 #define I2S_Mode_SlaveRx                ((u16)0x0100)\r
134 #define I2S_Mode_MasterTx               ((u16)0x0200)\r
135 #define I2S_Mode_MasterRx               ((u16)0x0300)\r
136 \r
137 #define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \\r
138                            ((MODE) == I2S_Mode_SlaveRx) || \\r
139                            ((MODE) == I2S_Mode_MasterTx) || \\r
140                            ((MODE) == I2S_Mode_MasterRx) )\r
141 \r
142 /* I2S Standard */\r
143 #define I2S_Standard_Phillips           ((u16)0x0000)\r
144 #define I2S_Standard_MSB                ((u16)0x0010)\r
145 #define I2S_Standard_LSB                ((u16)0x0020)\r
146 #define I2S_Standard_PCMShort           ((u16)0x0030)\r
147 #define I2S_Standard_PCMLong            ((u16)0x00B0)\r
148 \r
149 #define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \\r
150                                    ((STANDARD) == I2S_Standard_MSB) || \\r
151                                    ((STANDARD) == I2S_Standard_LSB) || \\r
152                                    ((STANDARD) == I2S_Standard_PCMShort) || \\r
153                                    ((STANDARD) == I2S_Standard_PCMLong))\r
154 \r
155 /* I2S Data Format */\r
156 #define I2S_DataFormat_16b              ((u16)0x0000)\r
157 #define I2S_DataFormat_16bextended      ((u16)0x0001)\r
158 #define I2S_DataFormat_24b              ((u16)0x0003)\r
159 #define I2S_DataFormat_32b              ((u16)0x0005)\r
160 \r
161 #define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \\r
162                                     ((FORMAT) == I2S_DataFormat_16bextended) || \\r
163                                     ((FORMAT) == I2S_DataFormat_24b) || \\r
164                                     ((FORMAT) == I2S_DataFormat_32b))\r
165 \r
166 /* I2S MCLK Output */ \r
167 #define I2S_MCLKOutput_Enable           ((u16)0x0200)\r
168 #define I2S_MCLKOutput_Disable          ((u16)0x0000)\r
169 \r
170 #define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \\r
171                                     ((OUTPUT) == I2S_MCLKOutput_Disable))\r
172 \r
173 /* I2S Audio Frequency */\r
174 #define I2S_AudioFreq_48k                ((u16)48000)\r
175 #define I2S_AudioFreq_44k                ((u16)44100)\r
176 #define I2S_AudioFreq_22k                ((u16)22050)\r
177 #define I2S_AudioFreq_16k                ((u16)16000)\r
178 #define I2S_AudioFreq_8k                 ((u16)8000)\r
179 #define I2S_AudioFreq_Default            ((u16)2)\r
180 \r
181 #define IS_I2S_AUDIO_FREQ(FREQ) (((FREQ) == I2S_AudioFreq_48k) || \\r
182                                  ((FREQ) == I2S_AudioFreq_44k) || \\r
183                                  ((FREQ) == I2S_AudioFreq_22k) || \\r
184                                  ((FREQ) == I2S_AudioFreq_16k) || \\r
185                                  ((FREQ) == I2S_AudioFreq_8k)  || \\r
186                                  ((FREQ) == I2S_AudioFreq_Default))\r
187 \r
188 /* I2S Clock Polarity */\r
189 #define I2S_CPOL_Low                    ((u16)0x0000)\r
190 #define I2S_CPOL_High                   ((u16)0x0008)\r
191 \r
192 #define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \\r
193                            ((CPOL) == I2S_CPOL_High))\r
194 \r
195 /* SPI_I2S DMA transfer requests */\r
196 #define SPI_I2S_DMAReq_Tx               ((u16)0x0002)\r
197 #define SPI_I2S_DMAReq_Rx               ((u16)0x0001)\r
198 \r
199 #define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (u16)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))\r
200 \r
201 /* SPI NSS internal software mangement */\r
202 #define SPI_NSSInternalSoft_Set         ((u16)0x0100)\r
203 #define SPI_NSSInternalSoft_Reset       ((u16)0xFEFF)\r
204 \r
205 #define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \\r
206                                        ((INTERNAL) == SPI_NSSInternalSoft_Reset))\r
207 \r
208 /* SPI CRC Transmit/Receive */\r
209 #define SPI_CRC_Tx                      ((u8)0x00)\r
210 #define SPI_CRC_Rx                      ((u8)0x01)\r
211 \r
212 #define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))\r
213 \r
214 /* SPI direction transmit/receive */\r
215 #define SPI_Direction_Rx                ((u16)0xBFFF)\r
216 #define SPI_Direction_Tx                ((u16)0x4000)\r
217 \r
218 #define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \\r
219                                      ((DIRECTION) == SPI_Direction_Tx))\r
220 \r
221 /* SPI_I2S interrupts definition */\r
222 #define SPI_I2S_IT_TXE                  ((u8)0x71)\r
223 #define SPI_I2S_IT_RXNE                 ((u8)0x60)\r
224 #define SPI_I2S_IT_ERR                  ((u8)0x50)\r
225 \r
226 #define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \\r
227                                  ((IT) == SPI_I2S_IT_RXNE) || \\r
228                                  ((IT) == SPI_I2S_IT_ERR))\r
229 \r
230 #define SPI_I2S_IT_OVR                  ((u8)0x56)\r
231 #define SPI_IT_MODF                     ((u8)0x55)\r
232 #define SPI_IT_CRCERR                   ((u8)0x54)\r
233 #define I2S_IT_UDR                      ((u8)0x53)\r
234 \r
235 #define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_I2S_IT_OVR) || \\r
236                                  ((IT) == SPI_IT_MODF) || \\r
237                                  ((IT) == SPI_IT_CRCERR) || \\r
238                                  ((IT) == I2S_IT_UDR))\r
239 \r
240 #define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE) || ((IT) == SPI_I2S_IT_TXE) || \\r
241                                ((IT) == I2S_IT_UDR) || ((IT) == SPI_IT_CRCERR) || \\r
242                                ((IT) == SPI_IT_MODF) || ((IT) == SPI_I2S_IT_OVR))\r
243 \r
244 /* SPI_I2S flags definition */\r
245 #define SPI_I2S_FLAG_RXNE               ((u16)0x0001)\r
246 #define SPI_I2S_FLAG_TXE                ((u16)0x0002)\r
247 #define I2S_FLAG_CHSIDE                 ((u16)0x0004)\r
248 #define I2S_FLAG_UDR                    ((u16)0x0008)\r
249 #define SPI_FLAG_CRCERR                 ((u16)0x0010)\r
250 #define SPI_FLAG_MODF                   ((u16)0x0020)\r
251 #define SPI_I2S_FLAG_OVR                ((u16)0x0040)\r
252 #define SPI_I2S_FLAG_BSY                ((u16)0x0080)\r
253 \r
254 #define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_OVR) || ((FLAG) == SPI_FLAG_MODF) || \\r
255                                      ((FLAG) == SPI_FLAG_CRCERR) || ((FLAG) == I2S_FLAG_UDR))\r
256 #define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \\r
257                                    ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \\r
258                                    ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \\r
259                                    ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE))\r
260 \r
261 /* SPI CRC polynomial --------------------------------------------------------*/\r
262 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)\r
263 \r
264 /* Exported macro ------------------------------------------------------------*/\r
265 /* Exported functions ------------------------------------------------------- */\r
266 void SPI_I2S_DeInit(SPI_TypeDef* SPIx);\r
267 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);\r
268 void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);\r
269 void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);\r
270 void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct);\r
271 void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);\r
272 void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);\r
273 void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, u8 SPI_I2S_IT, FunctionalState NewState);\r
274 void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, u16 SPI_I2S_DMAReq, FunctionalState NewState);\r
275 void SPI_I2S_SendData(SPI_TypeDef* SPIx, u16 Data);\r
276 u16 SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);\r
277 void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, u16 SPI_NSSInternalSoft);\r
278 void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);\r
279 void SPI_DataSizeConfig(SPI_TypeDef* SPIx, u16 SPI_DataSize);\r
280 void SPI_TransmitCRC(SPI_TypeDef* SPIx);\r
281 void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);\r
282 u16 SPI_GetCRC(SPI_TypeDef* SPIx, u8 SPI_CRC);\r
283 u16 SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);\r
284 void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, u16 SPI_Direction);\r
285 FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, u16 SPI_I2S_FLAG);\r
286 void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, u16 SPI_I2S_FLAG);\r
287 ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, u8 SPI_I2S_IT);\r
288 void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_I2S_IT);\r
289 \r
290 #endif /*__STM32F10x_SPI_H */\r
291 \r
292 /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/\r