]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/ST Library/inc/stm32f10x_sdio.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_GCC_Rowley / ST Library / inc / stm32f10x_sdio.h
1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_sdio.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 *                      SDIO 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_SDIO_H\r
19 #define __STM32F10x_SDIO_H\r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_map.h"\r
23 \r
24 /* Exported types ------------------------------------------------------------*/\r
25 typedef struct\r
26 {\r
27   u8 SDIO_ClockDiv;\r
28   u32 SDIO_ClockEdge;\r
29   u32 SDIO_ClockBypass;\r
30   u32 SDIO_ClockPowerSave;\r
31   u32 SDIO_BusWide;\r
32   u32 SDIO_HardwareFlowControl;\r
33 } SDIO_InitTypeDef;\r
34 \r
35 typedef struct\r
36 {\r
37   u32 SDIO_Argument;\r
38   u32 SDIO_CmdIndex;\r
39   u32 SDIO_Response;\r
40   u32 SDIO_Wait;\r
41   u32 SDIO_CPSM;\r
42 } SDIO_CmdInitTypeDef;\r
43 \r
44 typedef struct\r
45 {\r
46   u32 SDIO_DataTimeOut;\r
47   u32 SDIO_DataLength;\r
48   u32 SDIO_DataBlockSize;\r
49   u32 SDIO_TransferDir;\r
50   u32 SDIO_TransferMode;\r
51   u32 SDIO_DPSM;\r
52 } SDIO_DataInitTypeDef;\r
53 \r
54 /* Exported constants --------------------------------------------------------*/\r
55 /* SDIO Clock Edge -----------------------------------------------------------*/\r
56 #define SDIO_ClockEdge_Rising               ((u32)0x00000000)\r
57 #define SDIO_ClockEdge_Falling              ((u32)0x00002000)\r
58 \r
59 #define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \\r
60                                   ((EDGE) == SDIO_ClockEdge_Falling))\r
61 /* SDIO Clock Bypass ----------------------------------------------------------*/                                  \r
62 #define SDIO_ClockBypass_Disable             ((u32)0x00000000)\r
63 #define SDIO_ClockBypass_Enable              ((u32)0x00000400)    \r
64 \r
65 #define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \\r
66                                      ((BYPASS) == SDIO_ClockBypass_Enable))                             \r
67 \r
68 /* SDIO Clock Power Save  ----------------------------------------------------*/ \r
69 #define SDIO_ClockPowerSave_Disable         ((u32)0x00000000)\r
70 #define SDIO_ClockPowerSave_Enable          ((u32)0x00000200) \r
71 \r
72 #define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \\r
73                                         ((SAVE) == SDIO_ClockPowerSave_Enable))\r
74 \r
75 /* SDIO Bus Wide -------------------------------------------------------------*/\r
76 #define SDIO_BusWide_1b                     ((u32)0x00000000)\r
77 #define SDIO_BusWide_4b                     ((u32)0x00000800)\r
78 #define SDIO_BusWide_8b                     ((u32)0x00001000)\r
79 \r
80 #define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \\r
81                                 ((WIDE) == SDIO_BusWide_8b))\r
82                                 \r
83 /* SDIO Hardware Flow Control  -----------------------------------------------*/ \r
84 #define SDIO_HardwareFlowControl_Disable    ((u32)0x00000000)\r
85 #define SDIO_HardwareFlowControl_Enable     ((u32)0x00004000)\r
86 \r
87 #define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \\r
88                                                 ((CONTROL) == SDIO_HardwareFlowControl_Enable))\r
89                                   \r
90 /* SDIO Power State ----------------------------------------------------------*/\r
91 #define SDIO_PowerState_OFF                 ((u32)0x00000000)\r
92 #define SDIO_PowerState_ON                  ((u32)0x00000003)\r
93 \r
94 #define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON)) \r
95 \r
96 /* SDIO Interrupt soucres ----------------------------------------------------*/\r
97 #define SDIO_IT_CCRCFAIL                    ((u32)0x00000001)\r
98 #define SDIO_IT_DCRCFAIL                    ((u32)0x00000002)\r
99 #define SDIO_IT_CTIMEOUT                    ((u32)0x00000004)\r
100 #define SDIO_IT_DTIMEOUT                    ((u32)0x00000008)\r
101 #define SDIO_IT_TXUNDERR                    ((u32)0x00000010)\r
102 #define SDIO_IT_RXOVERR                     ((u32)0x00000020)\r
103 #define SDIO_IT_CMDREND                     ((u32)0x00000040)\r
104 #define SDIO_IT_CMDSENT                     ((u32)0x00000080)\r
105 #define SDIO_IT_DATAEND                     ((u32)0x00000100)\r
106 #define SDIO_IT_STBITERR                    ((u32)0x00000200)\r
107 #define SDIO_IT_DBCKEND                     ((u32)0x00000400)\r
108 #define SDIO_IT_CMDACT                      ((u32)0x00000800)\r
109 #define SDIO_IT_TXACT                       ((u32)0x00001000)\r
110 #define SDIO_IT_RXACT                       ((u32)0x00002000)\r
111 #define SDIO_IT_TXFIFOHE                    ((u32)0x00004000)\r
112 #define SDIO_IT_RXFIFOHF                    ((u32)0x00008000)\r
113 #define SDIO_IT_TXFIFOF                     ((u32)0x00010000)\r
114 #define SDIO_IT_RXFIFOF                     ((u32)0x00020000)\r
115 #define SDIO_IT_TXFIFOE                     ((u32)0x00040000)\r
116 #define SDIO_IT_RXFIFOE                     ((u32)0x00080000)\r
117 #define SDIO_IT_TXDAVL                      ((u32)0x00100000)\r
118 #define SDIO_IT_RXDAVL                      ((u32)0x00200000)\r
119 #define SDIO_IT_SDIOIT                      ((u32)0x00400000)\r
120 #define SDIO_IT_CEATAEND                    ((u32)0x00800000)\r
121 \r
122 #define IS_SDIO_IT(IT) ((((IT) & (u32)0xFF000000) == 0x00) && ((IT) != (u32)0x00))\r
123 \r
124 /* SDIO Command Index  -------------------------------------------------------*/\r
125 #define IS_SDIO_CMD_INDEX(INDEX)            ((INDEX) < 0x40)\r
126 \r
127 /* SDIO Response Type --------------------------------------------------------*/\r
128 #define SDIO_Response_No                    ((u32)0x00000000)\r
129 #define SDIO_Response_Short                 ((u32)0x00000040)\r
130 #define SDIO_Response_Long                  ((u32)0x000000C0)\r
131 \r
132 #define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \\r
133                                     ((RESPONSE) == SDIO_Response_Short) || \\r
134                                     ((RESPONSE) == SDIO_Response_Long))\r
135 \r
136 /* SDIO Wait Interrupt State -------------------------------------------------*/\r
137 #define SDIO_Wait_No                        ((u32)0x00000000) /* SDIO No Wait, TimeOut is enabled */\r
138 #define SDIO_Wait_IT                        ((u32)0x00000100) /* SDIO Wait Interrupt Request */\r
139 #define SDIO_Wait_Pend                      ((u32)0x00000200) /* SDIO Wait End of transfer */\r
140 \r
141 #define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \\r
142                             ((WAIT) == SDIO_Wait_Pend))\r
143 \r
144 /* SDIO CPSM State -----------------------------------------------------------*/\r
145 #define SDIO_CPSM_Disable                    ((u32)0x00000000)\r
146 #define SDIO_CPSM_Enable                     ((u32)0x00000400)\r
147 \r
148 #define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable))\r
149 \r
150 /* SDIO Response Registers ---------------------------------------------------*/\r
151 #define SDIO_RESP1                          ((u32)0x00000000)\r
152 #define SDIO_RESP2                          ((u32)0x00000004)\r
153 #define SDIO_RESP3                          ((u32)0x00000008)\r
154 #define SDIO_RESP4                          ((u32)0x0000000C)\r
155 \r
156 #define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \\r
157                             ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4))\r
158 \r
159 /* SDIO Data Length ----------------------------------------------------------*/\r
160 #define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF)\r
161 \r
162 /* SDIO Data Block Size ------------------------------------------------------*/\r
163 #define SDIO_DataBlockSize_1b               ((u32)0x00000000)\r
164 #define SDIO_DataBlockSize_2b               ((u32)0x00000010)\r
165 #define SDIO_DataBlockSize_4b               ((u32)0x00000020)\r
166 #define SDIO_DataBlockSize_8b               ((u32)0x00000030)\r
167 #define SDIO_DataBlockSize_16b              ((u32)0x00000040)\r
168 #define SDIO_DataBlockSize_32b              ((u32)0x00000050)\r
169 #define SDIO_DataBlockSize_64b              ((u32)0x00000060)\r
170 #define SDIO_DataBlockSize_128b             ((u32)0x00000070)\r
171 #define SDIO_DataBlockSize_256b             ((u32)0x00000080)\r
172 #define SDIO_DataBlockSize_512b             ((u32)0x00000090)\r
173 #define SDIO_DataBlockSize_1024b            ((u32)0x000000A0)\r
174 #define SDIO_DataBlockSize_2048b            ((u32)0x000000B0)\r
175 #define SDIO_DataBlockSize_4096b            ((u32)0x000000C0)\r
176 #define SDIO_DataBlockSize_8192b            ((u32)0x000000D0)\r
177 #define SDIO_DataBlockSize_16384b           ((u32)0x000000E0)\r
178 \r
179 #define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \\r
180                                   ((SIZE) == SDIO_DataBlockSize_2b) || \\r
181                                   ((SIZE) == SDIO_DataBlockSize_4b) || \\r
182                                   ((SIZE) == SDIO_DataBlockSize_8b) || \\r
183                                   ((SIZE) == SDIO_DataBlockSize_16b) || \\r
184                                   ((SIZE) == SDIO_DataBlockSize_32b) || \\r
185                                   ((SIZE) == SDIO_DataBlockSize_64b) || \\r
186                                   ((SIZE) == SDIO_DataBlockSize_128b) || \\r
187                                   ((SIZE) == SDIO_DataBlockSize_256b) || \\r
188                                   ((SIZE) == SDIO_DataBlockSize_512b) || \\r
189                                   ((SIZE) == SDIO_DataBlockSize_1024b) || \\r
190                                   ((SIZE) == SDIO_DataBlockSize_2048b) || \\r
191                                   ((SIZE) == SDIO_DataBlockSize_4096b) || \\r
192                                   ((SIZE) == SDIO_DataBlockSize_8192b) || \\r
193                                   ((SIZE) == SDIO_DataBlockSize_16384b)) \r
194 \r
195 /* SDIO Transfer Direction ---------------------------------------------------*/\r
196 #define SDIO_TransferDir_ToCard             ((u32)0x00000000)\r
197 #define SDIO_TransferDir_ToSDIO             ((u32)0x00000002)\r
198 \r
199 #define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \\r
200                                    ((DIR) == SDIO_TransferDir_ToSDIO))  \r
201 \r
202 /* SDIO Transfer Type --------------------------------------------------------*/\r
203 #define SDIO_TransferMode_Block             ((u32)0x00000000)\r
204 #define SDIO_TransferMode_Stream            ((u32)0x00000004)\r
205 \r
206 #define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \\r
207                                      ((MODE) == SDIO_TransferMode_Block))                                \r
208 \r
209 /* SDIO DPSM State -----------------------------------------------------------*/\r
210 #define SDIO_DPSM_Disable                    ((u32)0x00000000)\r
211 #define SDIO_DPSM_Enable                     ((u32)0x00000001)\r
212 \r
213 #define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable))\r
214 \r
215 /* SDIO Flags ----------------------------------------------------------------*/\r
216 #define SDIO_FLAG_CCRCFAIL                  ((u32)0x00000001)\r
217 #define SDIO_FLAG_DCRCFAIL                  ((u32)0x00000002)\r
218 #define SDIO_FLAG_CTIMEOUT                  ((u32)0x00000004)\r
219 #define SDIO_FLAG_DTIMEOUT                  ((u32)0x00000008)\r
220 #define SDIO_FLAG_TXUNDERR                  ((u32)0x00000010)\r
221 #define SDIO_FLAG_RXOVERR                   ((u32)0x00000020)\r
222 #define SDIO_FLAG_CMDREND                   ((u32)0x00000040)\r
223 #define SDIO_FLAG_CMDSENT                   ((u32)0x00000080)\r
224 #define SDIO_FLAG_DATAEND                   ((u32)0x00000100)\r
225 #define SDIO_FLAG_STBITERR                  ((u32)0x00000200)\r
226 #define SDIO_FLAG_DBCKEND                   ((u32)0x00000400)\r
227 #define SDIO_FLAG_CMDACT                    ((u32)0x00000800)\r
228 #define SDIO_FLAG_TXACT                     ((u32)0x00001000)\r
229 #define SDIO_FLAG_RXACT                     ((u32)0x00002000)\r
230 #define SDIO_FLAG_TXFIFOHE                  ((u32)0x00004000)\r
231 #define SDIO_FLAG_RXFIFOHF                  ((u32)0x00008000)\r
232 #define SDIO_FLAG_TXFIFOF                   ((u32)0x00010000)\r
233 #define SDIO_FLAG_RXFIFOF                   ((u32)0x00020000)\r
234 #define SDIO_FLAG_TXFIFOE                   ((u32)0x00040000)\r
235 #define SDIO_FLAG_RXFIFOE                   ((u32)0x00080000)\r
236 #define SDIO_FLAG_TXDAVL                    ((u32)0x00100000)\r
237 #define SDIO_FLAG_RXDAVL                    ((u32)0x00200000)\r
238 #define SDIO_FLAG_SDIOIT                    ((u32)0x00400000)\r
239 #define SDIO_FLAG_CEATAEND                  ((u32)0x00800000)\r
240 \r
241 #define IS_SDIO_FLAG(FLAG) (((FLAG)  == SDIO_FLAG_CCRCFAIL) || \\r
242                             ((FLAG)  == SDIO_FLAG_DCRCFAIL) || \\r
243                             ((FLAG)  == SDIO_FLAG_CTIMEOUT) || \\r
244                             ((FLAG)  == SDIO_FLAG_DTIMEOUT) || \\r
245                             ((FLAG)  == SDIO_FLAG_TXUNDERR) || \\r
246                             ((FLAG)  == SDIO_FLAG_RXOVERR) || \\r
247                             ((FLAG)  == SDIO_FLAG_CMDREND) || \\r
248                             ((FLAG)  == SDIO_FLAG_CMDSENT) || \\r
249                             ((FLAG)  == SDIO_FLAG_DATAEND) || \\r
250                             ((FLAG)  == SDIO_FLAG_STBITERR) || \\r
251                             ((FLAG)  == SDIO_FLAG_DBCKEND) || \\r
252                             ((FLAG)  == SDIO_FLAG_CMDACT) || \\r
253                             ((FLAG)  == SDIO_FLAG_TXACT) || \\r
254                             ((FLAG)  == SDIO_FLAG_RXACT) || \\r
255                             ((FLAG)  == SDIO_FLAG_TXFIFOHE) || \\r
256                             ((FLAG)  == SDIO_FLAG_RXFIFOHF) || \\r
257                             ((FLAG)  == SDIO_FLAG_TXFIFOF) || \\r
258                             ((FLAG)  == SDIO_FLAG_RXFIFOF) || \\r
259                             ((FLAG)  == SDIO_FLAG_TXFIFOE) || \\r
260                             ((FLAG)  == SDIO_FLAG_RXFIFOE) || \\r
261                             ((FLAG)  == SDIO_FLAG_TXDAVL) || \\r
262                             ((FLAG)  == SDIO_FLAG_RXDAVL) || \\r
263                             ((FLAG)  == SDIO_FLAG_SDIOIT) || \\r
264                             ((FLAG)  == SDIO_FLAG_CEATAEND))\r
265 \r
266 #define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (u32)0xFF3FF800) == 0x00) && ((FLAG) != (u32)0x00))\r
267 \r
268 #define IS_SDIO_GET_IT(IT) (((IT)  == SDIO_IT_CCRCFAIL) || \\r
269                             ((IT)  == SDIO_IT_DCRCFAIL) || \\r
270                             ((IT)  == SDIO_IT_CTIMEOUT) || \\r
271                             ((IT)  == SDIO_IT_DTIMEOUT) || \\r
272                             ((IT)  == SDIO_IT_TXUNDERR) || \\r
273                             ((IT)  == SDIO_IT_RXOVERR) || \\r
274                             ((IT)  == SDIO_IT_CMDREND) || \\r
275                             ((IT)  == SDIO_IT_CMDSENT) || \\r
276                             ((IT)  == SDIO_IT_DATAEND) || \\r
277                             ((IT)  == SDIO_IT_STBITERR) || \\r
278                             ((IT)  == SDIO_IT_DBCKEND) || \\r
279                             ((IT)  == SDIO_IT_CMDACT) || \\r
280                             ((IT)  == SDIO_IT_TXACT) || \\r
281                             ((IT)  == SDIO_IT_RXACT) || \\r
282                             ((IT)  == SDIO_IT_TXFIFOHE) || \\r
283                             ((IT)  == SDIO_IT_RXFIFOHF) || \\r
284                             ((IT)  == SDIO_IT_TXFIFOF) || \\r
285                             ((IT)  == SDIO_IT_RXFIFOF) || \\r
286                             ((IT)  == SDIO_IT_TXFIFOE) || \\r
287                             ((IT)  == SDIO_IT_RXFIFOE) || \\r
288                             ((IT)  == SDIO_IT_TXDAVL) || \\r
289                             ((IT)  == SDIO_IT_RXDAVL) || \\r
290                             ((IT)  == SDIO_IT_SDIOIT) || \\r
291                             ((IT)  == SDIO_IT_CEATAEND))\r
292 \r
293 #define IS_SDIO_CLEAR_IT(IT) ((((IT) & (u32)0xFF3FF800) == 0x00) && ((IT) != (u32)0x00))\r
294                                                         \r
295 /* SDIO Read Wait Mode -------------------------------------------------------*/\r
296 #define SDIO_ReadWaitMode_CLK               ((u32)0x00000000)\r
297 #define SDIO_ReadWaitMode_DATA2             ((u32)0x00000001)\r
298 \r
299 #define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \\r
300                                      ((MODE) == SDIO_ReadWaitMode_DATA2))  \r
301 \r
302 /* Exported macro ------------------------------------------------------------*/\r
303 /* Exported functions ------------------------------------------------------- */\r
304 void SDIO_DeInit(void);\r
305 void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct);\r
306 void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct);\r
307 void SDIO_ClockCmd(FunctionalState NewState);\r
308 void SDIO_SetPowerState(u32 SDIO_PowerState);\r
309 u32 SDIO_GetPowerState(void);\r
310 void SDIO_ITConfig(u32 SDIO_IT, FunctionalState NewState);\r
311 void SDIO_DMACmd(FunctionalState NewState);\r
312 void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct);\r
313 void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct);\r
314 u8 SDIO_GetCommandResponse(void);\r
315 u32 SDIO_GetResponse(u32 SDIO_RESP);\r
316 void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct);\r
317 void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct);\r
318 u32 SDIO_GetDataCounter(void);\r
319 u32 SDIO_ReadData(void);\r
320 void SDIO_WriteData(u32 Data);\r
321 u32 SDIO_GetFIFOCount(void);\r
322 void SDIO_StartSDIOReadWait(FunctionalState NewState);\r
323 void SDIO_StopSDIOReadWait(FunctionalState NewState);\r
324 void SDIO_SetSDIOReadWaitMode(u32 SDIO_ReadWaitMode);\r
325 void SDIO_SetSDIOOperation(FunctionalState NewState);\r
326 void SDIO_SendSDIOSuspendCmd(FunctionalState NewState);\r
327 void SDIO_CommandCompletionCmd(FunctionalState NewState);\r
328 void SDIO_CEATAITCmd(FunctionalState NewState);\r
329 void SDIO_SendCEATACmd(FunctionalState NewState);\r
330 FlagStatus SDIO_GetFlagStatus(u32 SDIO_FLAG);\r
331 void SDIO_ClearFlag(u32 SDIO_FLAG);\r
332 ITStatus SDIO_GetITStatus(u32 SDIO_IT);\r
333 void SDIO_ClearITPendingBit(u32 SDIO_IT);\r
334 \r
335 #endif /* __STM32F10x_SDIO_H */\r
336 \r
337 /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/\r