]> git.sur5r.net Git - freertos/blob - Demo/Common/drivers/ST/STM32F10xFWLib/inc/stm32f10x_spi.h
3ca55e4c7bb1e0bc601b25c780daa3dd71597eec
[freertos] / Demo / Common / drivers / ST / STM32F10xFWLib / inc / stm32f10x_spi.h
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_spi.h\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 09/29/2006\r
5 * Description        : This file contains all the functions prototypes for the\r
6 *                      SPI firmware library.\r
7 ********************************************************************************\r
8 * History:\r
9 * 04/02/2007: V0.2\r
10 * 02/05/2007: V0.1\r
11 * 09/29/2006: V0.01\r
12 ********************************************************************************\r
13 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
14 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
15 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
16 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
17 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
18 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
19 *******************************************************************************/\r
20 \r
21 /* Define to prevent recursive inclusion -------------------------------------*/\r
22 #ifndef __STM32F10x_SPI_H\r
23 #define __STM32F10x_SPI_H\r
24 \r
25 /* Includes ------------------------------------------------------------------*/\r
26 #include "stm32f10x_map.h"\r
27 \r
28 /* Exported types ------------------------------------------------------------*/\r
29 /* SPI Init structure definition */\r
30 typedef struct\r
31 {\r
32   u16 SPI_Direction;\r
33   u16 SPI_Mode;\r
34   u16 SPI_DataSize;\r
35   u16 SPI_CPOL;\r
36   u16 SPI_CPHA;\r
37   u16 SPI_NSS;\r
38   u16 SPI_BaudRatePrescaler;\r
39   u16 SPI_FirstBit;\r
40   u16 SPI_CRCPolynomial;\r
41 }SPI_InitTypeDef;\r
42 \r
43 /* Exported constants --------------------------------------------------------*/\r
44 /* SPI data direction mode */\r
45 #define SPI_Direction_2Lines_FullDuplex    ((u16)0x0000)\r
46 #define SPI_Direction_2Lines_RxOnly        ((u16)0x0400)\r
47 #define SPI_Direction_1Line_Rx             ((u16)0x8000)\r
48 #define SPI_Direction_1Line_Tx             ((u16)0xC000)\r
49 \r
50 #define IS_SPI_DIRECTION_MODE(MODE) ((MODE == SPI_Direction_2Lines_FullDuplex) || \\r
51                                      (MODE == SPI_Direction_2Lines_RxOnly) || \\r
52                                      (MODE == SPI_Direction_1Line_Rx) || \\r
53                                                              (MODE == SPI_Direction_1Line_Tx))\r
54 \r
55 /* SPI master/slave mode */\r
56 #define SPI_Mode_Master                    ((u16)0x0104)\r
57 #define SPI_Mode_Slave                     ((u16)0x0000)\r
58 \r
59 #define IS_SPI_MODE(MODE) ((MODE == SPI_Mode_Master) || \\r
60                            (MODE == SPI_Mode_Slave))\r
61 \r
62 /* SPI data size */\r
63 #define SPI_DataSize_16b                   ((u16)0x0800)\r
64 #define SPI_DataSize_8b                    ((u16)0x0000)\r
65 \r
66 #define IS_SPI_DATASIZE(DATASIZE) ((DATASIZE == SPI_DataSize_16b) || \\r
67                                    (DATASIZE == SPI_DataSize_8b))\r
68 \r
69 /* SPI Clock Polarity */\r
70 #define SPI_CPOL_Low                       ((u16)0x0000)\r
71 #define SPI_CPOL_High                      ((u16)0x0002)\r
72 \r
73 #define IS_SPI_CPOL(CPOL) ((CPOL == SPI_CPOL_Low) || \\r
74                            (CPOL == SPI_CPOL_High))\r
75 \r
76 /* SPI Clock Phase */\r
77 #define SPI_CPHA_1Edge                     ((u16)0x0000)\r
78 #define SPI_CPHA_2Edge                     ((u16)0x0001)\r
79 \r
80 #define IS_SPI_CPHA(CPHA) ((CPHA == SPI_CPHA_1Edge) || \\r
81                            (CPHA == SPI_CPHA_2Edge))\r
82 \r
83 /* SPI Slave Select management */\r
84 #define SPI_NSS_Soft                       ((u16)0x0200)\r
85 #define SPI_NSS_Hard                       ((u16)0x0000)\r
86 \r
87 #define IS_SPI_NSS(NSS) ((NSS == SPI_NSS_Soft) || \\r
88                          (NSS == SPI_NSS_Hard))\r
89 \r
90 /* SPI BaudRate Prescaler  */\r
91 #define SPI_BaudRatePrescaler_2            ((u16)0x0000)\r
92 #define SPI_BaudRatePrescaler_4            ((u16)0x0008)\r
93 #define SPI_BaudRatePrescaler_8            ((u16)0x0010)\r
94 #define SPI_BaudRatePrescaler_16           ((u16)0x0018)\r
95 #define SPI_BaudRatePrescaler_32           ((u16)0x0020)\r
96 #define SPI_BaudRatePrescaler_64           ((u16)0x0028)\r
97 #define SPI_BaudRatePrescaler_128          ((u16)0x0030)\r
98 #define SPI_BaudRatePrescaler_256          ((u16)0x0038)\r
99 \r
100 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) ((PRESCALER == SPI_BaudRatePrescaler_2) || \\r
101                                               (PRESCALER == SPI_BaudRatePrescaler_4) || \\r
102                                               (PRESCALER == SPI_BaudRatePrescaler_8) || \\r
103                                               (PRESCALER == SPI_BaudRatePrescaler_16) || \\r
104                                               (PRESCALER == SPI_BaudRatePrescaler_32) || \\r
105                                               (PRESCALER == SPI_BaudRatePrescaler_64) || \\r
106                                               (PRESCALER == SPI_BaudRatePrescaler_128) || \\r
107                                               (PRESCALER == SPI_BaudRatePrescaler_256))\r
108 \r
109 /* SPI MSB/LSB transmission */\r
110 #define SPI_FirstBit_MSB                   ((u16)0x0000)\r
111 #define SPI_FirstBit_LSB                   ((u16)0x0080)\r
112 \r
113 #define IS_SPI_FIRST_BIT(BIT) ((BIT == SPI_FirstBit_MSB) || \\r
114                                (BIT == SPI_FirstBit_LSB))\r
115 \r
116 /* SPI DMA transfer requests */\r
117 #define SPI_DMAReq_Tx                      ((u16)0x0002)\r
118 #define SPI_DMAReq_Rx                      ((u16)0x0001)\r
119 \r
120 #define IS_SPI_DMA_REQ(REQ) (((REQ & (u16)0xFFFC) == 0x00) && (REQ != 0x00))\r
121 \r
122 /* SPI NSS internal software mangement */\r
123 #define SPI_NSSInternalSoft_Set            ((u16)0x0100)\r
124 #define SPI_NSSInternalSoft_Reset          ((u16)0xFEFF)\r
125 \r
126 #define IS_SPI_NSS_INTERNAL(INTERNAL) ((INTERNAL == SPI_NSSInternalSoft_Set) || \\r
127                                        (INTERNAL == SPI_NSSInternalSoft_Reset))\r
128 \r
129 /* SPI CRC Transmit/Receive */\r
130 #define SPI_CRC_Tx                         ((u8)0x00)\r
131 #define SPI_CRC_Rx                         ((u8)0x01)\r
132 \r
133 #define IS_SPI_CRC(CRC) ((CRC == SPI_CRC_Tx) || (CRC == SPI_CRC_Rx))\r
134 \r
135 /* SPI direction transmit/receive */\r
136 #define SPI_Direction_Rx                   ((u16)0xBFFF)\r
137 #define SPI_Direction_Tx                   ((u16)0x4000)\r
138 \r
139 #define IS_SPI_DIRECTION(DIRECTION) ((DIRECTION == SPI_Direction_Rx) || \\r
140                                      (DIRECTION == SPI_Direction_Tx))\r
141 \r
142 /* SPI interrupts definition */\r
143 #define SPI_IT_TXE                         ((u8)0x71)\r
144 #define SPI_IT_RXNE                        ((u8)0x60)\r
145 #define SPI_IT_ERR                         ((u8)0x50)\r
146 \r
147 #define IS_SPI_CONFIG_IT(IT) ((IT == SPI_IT_TXE) || (IT == SPI_IT_RXNE) || \\r
148                               (IT == SPI_IT_ERR))\r
149 \r
150 #define SPI_IT_OVR                         ((u8)0x56)\r
151 #define SPI_IT_MODF                        ((u8)0x55)\r
152 #define SPI_IT_CRCERR                      ((u8)0x54)\r
153 \r
154 #define IS_SPI_CLEAR_IT(IT) ((IT == SPI_IT_OVR) || (IT == SPI_IT_MODF) || \\r
155                              (IT == SPI_IT_CRCERR))\r
156 \r
157 #define IS_SPI_GET_IT(IT) ((IT == SPI_IT_TXE) || (IT == SPI_IT_RXNE) || \\r
158                            (IT == SPI_IT_OVR) || (IT == SPI_IT_MODF) || \\r
159                            (IT == SPI_IT_CRCERR))\r
160 \r
161 /* SPI flags definition */\r
162 #define SPI_FLAG_RXNE                      ((u16)0x0001)\r
163 #define SPI_FLAG_TXE                       ((u16)0x0002)\r
164 #define SPI_FLAG_CRCERR                    ((u16)0x0010)\r
165 #define SPI_FLAG_MODF                      ((u16)0x0020)\r
166 #define SPI_FLAG_OVR                       ((u16)0x0040)\r
167 #define SPI_FLAG_BSY                       ((u16)0x0080)\r
168 \r
169 #define IS_SPI_CLEAR_FLAG(FLAG) (((FLAG & (u16)0xFF8F) == 0x00) && (FLAG != 0x00))\r
170 #define IS_SPI_GET_FLAG(FLAG) ((FLAG == SPI_FLAG_BSY) || (FLAG == SPI_FLAG_OVR) || \\r
171                                (FLAG == SPI_FLAG_MODF) || (FLAG == SPI_FLAG_CRCERR) || \\r
172                                (FLAG == SPI_FLAG_TXE) || (FLAG == SPI_FLAG_RXNE))\r
173 \r
174 /* SPI CRC polynomial --------------------------------------------------------*/\r
175 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (POLYNOMIAL >= 0x1)\r
176 \r
177 /* Exported macro ------------------------------------------------------------*/\r
178 /* Exported functions ------------------------------------------------------- */\r
179 void SPI_DeInit(SPI_TypeDef* SPIx);\r
180 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);\r
181 void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);\r
182 void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);\r
183 void SPI_ITConfig(SPI_TypeDef* SPIx, u8 SPI_IT, FunctionalState NewState);\r
184 void SPI_DMACmd(SPI_TypeDef* SPIx, u16 SPI_DMAReq, FunctionalState NewState);\r
185 void SPI_SendData(SPI_TypeDef* SPIx, u16 Data);\r
186 u16 SPI_ReceiveData(SPI_TypeDef* SPIx);\r
187 void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, u16 SPI_NSSInternalSoft);\r
188 void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);\r
189 void SPI_DataSizeConfig(SPI_TypeDef* SPIx, u16 SPI_DataSize);\r
190 void SPI_TransmitCRC(SPI_TypeDef* SPIx);\r
191 void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);\r
192 u16 SPI_GetCRC(SPI_TypeDef* SPIx, u8 SPI_CRC);\r
193 u16 SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);\r
194 void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, u16 SPI_Direction);\r
195 FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, u16 SPI_FLAG);\r
196 void SPI_ClearFlag(SPI_TypeDef* SPIx, u16 SPI_FLAG);\r
197 ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, u8 SPI_IT);\r
198 void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_IT);\r
199 \r
200 #endif /*__STM32F10x_SPI_H */\r
201 \r
202 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r