]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_IAR/STM32F10xFWLib/inc/stm32f10x_i2c.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_IAR / STM32F10xFWLib / inc / stm32f10x_i2c.h
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_i2c.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 *                      I2C 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_I2C_H\r
23 #define __STM32F10x_I2C_H\r
24 \r
25 /* Includes ------------------------------------------------------------------*/\r
26 #include "stm32f10x_map.h"\r
27 \r
28 /* Exported types ------------------------------------------------------------*/\r
29 /* I2C Init structure definition */\r
30 typedef struct\r
31 {\r
32   u16 I2C_Mode;\r
33   u16 I2C_DutyCycle;\r
34   u16 I2C_OwnAddress1;\r
35   u16 I2C_Ack;\r
36   u16 I2C_AcknowledgedAddress;\r
37   u32 I2C_ClockSpeed;\r
38 }I2C_InitTypeDef;\r
39 \r
40 /* Exported constants --------------------------------------------------------*/\r
41 /* I2C modes */\r
42 #define I2C_Mode_I2C                    ((u16)0x0000)\r
43 #define I2C_Mode_SMBusDevice            ((u16)0x0002)\r
44 #define I2C_Mode_SMBusHost              ((u16)0x000A)\r
45 \r
46 #define IS_I2C_MODE(MODE) ((MODE == I2C_Mode_I2C) || \\r
47                            (MODE == I2C_Mode_SMBusDevice) || \\r
48                            (MODE == I2C_Mode_SMBusHost))\r
49 /* I2C duty cycle in fast mode */\r
50 #define I2C_DutyCycle_16_9              ((u16)0x4000)\r
51 #define I2C_DutyCycle_2                 ((u16)0xBFFF)\r
52 \r
53 #define IS_I2C_DUTY_CYCLE(CYCLE) ((CYCLE == I2C_DutyCycle_16_9) || \\r
54                                   (CYCLE == I2C_DutyCycle_2))\r
55 \r
56 /* I2C cknowledgementy */\r
57 #define I2C_Ack_Enable                  ((u16)0x0400)\r
58 #define I2C_Ack_Disable                 ((u16)0x0000)\r
59 \r
60 #define IS_I2C_ACK_STATE(STATE) ((STATE == I2C_Ack_Enable) || \\r
61                                  (STATE == I2C_Ack_Disable))\r
62 \r
63 /* I2C transfer direction */\r
64 #define  I2C_Direction_Transmitter      ((u8)0x00)\r
65 #define  I2C_Direction_Receiver         ((u8)0x01)\r
66 \r
67 #define IS_I2C_DIRECTION(DIRECTION) ((DIRECTION == I2C_Direction_Transmitter) || \\r
68                                      (DIRECTION == I2C_Direction_Receiver))\r
69 \r
70 /* I2C acknowledged address defines */\r
71 #define I2C_AcknowledgedAddress_7bit    ((u16)0x4000)\r
72 #define I2C_AcknowledgedAddress_10bit   ((u16)0xC000)\r
73 \r
74 #define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) ((ADDRESS == I2C_AcknowledgedAddress_7bit) || \\r
75                                              (ADDRESS == I2C_AcknowledgedAddress_10bit))\r
76 \r
77 /* I2C registers */\r
78 #define I2C_Register_CR1                ((u8)0x00)\r
79 #define I2C_Register_CR2                ((u8)0x04)\r
80 #define I2C_Register_OAR1               ((u8)0x08)\r
81 #define I2C_Register_OAR2               ((u8)0x0C)\r
82 #define I2C_Register_DR                 ((u8)0x10)\r
83 #define I2C_Register_SR1                ((u8)0x14)\r
84 #define I2C_Register_SR2                ((u8)0x18)\r
85 #define I2C_Register_CCR                ((u8)0x1C)\r
86 #define I2C_Register_TRISE              ((u8)0x20)\r
87 \r
88 #define IS_I2C_REGISTER(REGISTER) ((REGISTER == I2C_Register_CR1) || \\r
89                                    (REGISTER == I2C_Register_CR2) || \\r
90                                    (REGISTER == I2C_Register_OAR1) || \\r
91                                    (REGISTER == I2C_Register_OAR2) || \\r
92                                    (REGISTER == I2C_Register_DR) || \\r
93                                    (REGISTER == I2C_Register_SR1) || \\r
94                                    (REGISTER == I2C_Register_SR2) || \\r
95                                    (REGISTER == I2C_Register_CCR) || \\r
96                                    (REGISTER == I2C_Register_TRISE))\r
97 \r
98 /* I2C SMBus alert pin level */\r
99 #define I2C_SMBusAlert_Low              ((u16)0x2000)\r
100 #define I2C_SMBusAlert_High             ((u16)0xCFFF)\r
101 \r
102 #define IS_I2C_SMBUS_ALERT(ALERT) ((ALERT == I2C_SMBusAlert_Low) || \\r
103                                    (ALERT == I2C_SMBusAlert_High))\r
104 \r
105 /* I2C PEC position */\r
106 #define I2C_PECPosition_Next            ((u16)0x0800)\r
107 #define I2C_PECPosition_Current         ((u16)0xF7FF)\r
108 \r
109 #define IS_I2C_PEC_POSITION(POSITION) ((POSITION == I2C_PECPosition_Next) || \\r
110                                        (POSITION == I2C_PECPosition_Current))\r
111 \r
112 /* I2C interrupts definition */\r
113 #define I2C_IT_BUF                      ((u16)0x0400)\r
114 #define I2C_IT_EVT                      ((u16)0x0200)\r
115 #define I2C_IT_ERR                      ((u16)0x0100)\r
116 \r
117 #define IS_I2C_CONFIG_IT(IT) (((IT & (u16)0xF8FF) == 0x00) && (IT != 0x00))\r
118 \r
119 /* I2C interrupts definition */\r
120 #define I2C_IT_SMBALERT                 ((u32)0x10008000)\r
121 #define I2C_IT_TIMEOUT                  ((u32)0x10004000)\r
122 #define I2C_IT_PECERR                   ((u32)0x10001000)\r
123 #define I2C_IT_OVR                      ((u32)0x10000800)\r
124 #define I2C_IT_AF                       ((u32)0x10000400)\r
125 #define I2C_IT_ARLO                     ((u32)0x10000200)\r
126 #define I2C_IT_BERR                     ((u32)0x10000100)\r
127 #define I2C_IT_TXE                      ((u32)0x00000080)\r
128 #define I2C_IT_RXNE                     ((u32)0x00000040)\r
129 #define I2C_IT_STOPF                    ((u32)0x60000010)\r
130 #define I2C_IT_ADD10                    ((u32)0x20000008)\r
131 #define I2C_IT_BTF                      ((u32)0x60000004)\r
132 #define I2C_IT_ADDR                     ((u32)0xA0000002)\r
133 #define I2C_IT_SB                       ((u32)0x20000001)\r
134 \r
135 #define IS_I2C_CLEAR_IT(IT) ((IT == I2C_IT_SMBALERT) || (IT == I2C_IT_TIMEOUT) || \\r
136                              (IT == I2C_IT_PECERR) || (IT == I2C_IT_OVR) || \\r
137                              (IT == I2C_IT_AF) || (IT == I2C_IT_ARLO) || \\r
138                              (IT == I2C_IT_BERR) || (IT == I2C_IT_STOPF) || \\r
139                              (IT == I2C_IT_ADD10) || (IT == I2C_IT_BTF) || \\r
140                              (IT == I2C_IT_ADDR) || (IT == I2C_IT_SB))\r
141 \r
142 #define IS_I2C_GET_IT(IT) ((IT == I2C_IT_SMBALERT) || (IT == I2C_IT_TIMEOUT) || \\r
143                            (IT == I2C_IT_PECERR) || (IT == I2C_IT_OVR) || \\r
144                            (IT == I2C_IT_AF) || (IT == I2C_IT_ARLO) || \\r
145                            (IT == I2C_IT_BERR) || (IT == I2C_IT_TXE) || \\r
146                            (IT == I2C_IT_RXNE) || (IT == I2C_IT_STOPF) || \\r
147                            (IT == I2C_IT_ADD10) || (IT == I2C_IT_BTF) || \\r
148                            (IT == I2C_IT_ADDR) || (IT == I2C_IT_SB))\r
149 \r
150 /* I2C flags definition */\r
151 #define I2C_FLAG_DUALF                  ((u32)0x00800000)\r
152 #define I2C_FLAG_SMBHOST                ((u32)0x00400000)\r
153 #define I2C_FLAG_SMBDEFAULT             ((u32)0x00200000)\r
154 #define I2C_FLAG_GENCALL                ((u32)0x00100000)\r
155 #define I2C_FLAG_TRA                    ((u32)0x00040000)\r
156 #define I2C_FLAG_BUSY                   ((u32)0x00020000)\r
157 #define I2C_FLAG_MSL                    ((u32)0x00010000)\r
158 #define I2C_FLAG_SMBALERT               ((u32)0x10008000)\r
159 #define I2C_FLAG_TIMEOUT                ((u32)0x10004000)\r
160 #define I2C_FLAG_PECERR                 ((u32)0x10001000)\r
161 #define I2C_FLAG_OVR                    ((u32)0x10000800)\r
162 #define I2C_FLAG_AF                     ((u32)0x10000400)\r
163 #define I2C_FLAG_ARLO                   ((u32)0x10000200)\r
164 #define I2C_FLAG_BERR                   ((u32)0x10000100)\r
165 #define I2C_FLAG_TXE                    ((u32)0x00000080)\r
166 #define I2C_FLAG_RXNE                   ((u32)0x00000040)\r
167 #define I2C_FLAG_STOPF                  ((u32)0x60000010)\r
168 #define I2C_FLAG_ADD10                  ((u32)0x20000008)\r
169 #define I2C_FLAG_BTF                    ((u32)0x60000004)\r
170 #define I2C_FLAG_ADDR                   ((u32)0xA0000002)\r
171 #define I2C_FLAG_SB                     ((u32)0x20000001)\r
172 \r
173 #define IS_I2C_CLEAR_FLAG(FLAG) ((FLAG == I2C_FLAG_SMBALERT) || (FLAG == I2C_FLAG_TIMEOUT) || \\r
174                                  (FLAG == I2C_FLAG_PECERR) || (FLAG == I2C_FLAG_OVR) || \\r
175                                  (FLAG == I2C_FLAG_AF) || (FLAG == I2C_FLAG_ARLO) || \\r
176                                  (FLAG == I2C_FLAG_BERR) || (FLAG == I2C_FLAG_STOPF) || \\r
177                                  (FLAG == I2C_FLAG_ADD10) || (FLAG == I2C_FLAG_BTF) || \\r
178                                  (FLAG == I2C_FLAG_ADDR) || (FLAG == I2C_FLAG_SB))\r
179 \r
180 #define IS_I2C_GET_FLAG(FLAG) ((FLAG == I2C_FLAG_DUALF) || (FLAG == I2C_FLAG_SMBHOST) || \\r
181                                (FLAG == I2C_FLAG_SMBDEFAULT) || (FLAG == I2C_FLAG_GENCALL) || \\r
182                                (FLAG == I2C_FLAG_TRA) || (FLAG == I2C_FLAG_BUSY) || \\r
183                                (FLAG == I2C_FLAG_MSL) || (FLAG == I2C_FLAG_SMBALERT) || \\r
184                                (FLAG == I2C_FLAG_TIMEOUT) || (FLAG == I2C_FLAG_PECERR) || \\r
185                                                            (FLAG == I2C_FLAG_OVR) || (FLAG == I2C_FLAG_AF) || \\r
186                                                            (FLAG == I2C_FLAG_ARLO) || (FLAG == I2C_FLAG_BERR) || \\r
187                                                            (FLAG == I2C_FLAG_TXE) || (FLAG == I2C_FLAG_RXNE) || \\r
188                                                            (FLAG == I2C_FLAG_STOPF) || (FLAG == I2C_FLAG_ADD10) || \\r
189                                                            (FLAG == I2C_FLAG_BTF) || (FLAG == I2C_FLAG_ADDR) || \\r
190                                                            (FLAG == I2C_FLAG_SB))\r
191 \r
192 /* I2C Events */\r
193 /* EV1 */\r
194 #define  I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((u32)0x00060082) /* TRA, BUSY, TXE and ADDR flags */\r
195 #define  I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED  ((u32)0x00020002) /* BUSY and ADDR flags */\r
196 #define  I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((u32)0x00860080)  /* DUALF, TRA, BUSY and TXE flags */\r
197 #define  I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((u32)0x00820000)  /* DUALF and BUSY flags */\r
198 #define  I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((u32)0x00120000)  /* GENCALL and BUSY flags */\r
199 \r
200 /* EV2 */\r
201 #define  I2C_EVENT_SLAVE_BYTE_RECEIVED  ((u32)0x00020040)  /* BUSY and RXNE flags */\r
202      \r
203 /* EV3 */\r
204 #define  I2C_EVENT_SLAVE_BYTE_TRANSMITTED  ((u32)0x00060084)  /* TRA, BUSY, TXE and BTF flags */\r
205 \r
206 /* EV4 */\r
207 #define  I2C_EVENT_SLAVE_STOP_DETECTED  ((u32)0x00000010)  /* STOPF flag */\r
208 \r
209 /* EV5 */\r
210 #define  I2C_EVENT_MASTER_MODE_SELECT  ((u32)0x00030001)  /* BUSY, MSL and SB flag */\r
211 \r
212 /* EV6 */\r
213 #define  I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED  ((u32)0x00070082)  /* BUSY, MSL, ADDR, TXE and TRA flags */\r
214 #define  I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED  ((u32)0x00030002)  /* BUSY, MSL and ADDR flags */\r
215 \r
216 /* EV7 */\r
217 #define  I2C_EVENT_MASTER_BYTE_RECEIVED  ((u32)0x00030040)  /* BUSY, MSL and RXNE flags */\r
218 \r
219 /* EV8 */\r
220 #define  I2C_EVENT_MASTER_BYTE_TRANSMITTED  ((u32)0x00070084)  /* TRA, BUSY, MSL, TXE and BTF flags */\r
221       \r
222 /* EV9 */\r
223 #define  I2C_EVENT_MASTER_MODE_ADDRESS10  ((u32)0x00030008)  /* BUSY, MSL and ADD10 flags */\r
224                                           \r
225 /* EV3_1 */\r
226 #define  I2C_EVENT_SLAVE_ACK_FAILURE  ((u32)0x00000400)  /* AF flag */\r
227 \r
228 #define IS_I2C_EVENT(EVENT) ((EVENT == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \\r
229                              (EVENT == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \\r
230                              (EVENT == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \\r
231                              (EVENT == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \\r
232                              (EVENT == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \\r
233                              (EVENT == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \\r
234                              (EVENT == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \\r
235                              (EVENT == I2C_EVENT_SLAVE_STOP_DETECTED) || \\r
236                              (EVENT == I2C_EVENT_MASTER_MODE_SELECT) || \\r
237                              (EVENT == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \\r
238                              (EVENT == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \\r
239                              (EVENT == I2C_EVENT_MASTER_BYTE_RECEIVED) || \\r
240                              (EVENT == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \\r
241                              (EVENT == I2C_EVENT_MASTER_MODE_ADDRESS10) || \\r
242                              (EVENT == I2C_EVENT_SLAVE_ACK_FAILURE))\r
243 \r
244 /* I2C own address1 -----------------------------------------------------------*/\r
245 #define IS_I2C_OWN_ADDRESS1(ADDRESS1) (ADDRESS1 <= 0x3FF)\r
246 /* I2C clock speed ------------------------------------------------------------*/\r
247 #define IS_I2C_CLOCK_SPEED(SPEED) ((SPEED >= 0x1) && (SPEED <= 400000))\r
248 \r
249 /* Exported macro ------------------------------------------------------------*/\r
250 /* Exported functions ------------------------------------------------------- */\r
251 void I2C_DeInit(I2C_TypeDef* I2Cx);\r
252 void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);\r
253 void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);\r
254 void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
255 void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
256 void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
257 void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
258 void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
259 void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
260 void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address);\r
261 void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
262 void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
263 void I2C_ITConfig(I2C_TypeDef* I2Cx, u16 I2C_IT, FunctionalState NewState);\r
264 void I2C_SendData(I2C_TypeDef* I2Cx, u8 Data);\r
265 u8 I2C_ReceiveData(I2C_TypeDef* I2Cx);\r
266 void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, u8 Address, u8 I2C_Direction);\r
267 u16 I2C_ReadRegister(I2C_TypeDef* I2Cx, u8 I2C_Register);\r
268 void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
269 void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, u16 I2C_SMBusAlert);\r
270 void I2C_TransmitPEC(I2C_TypeDef* I2Cx);\r
271 void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, u16 I2C_PECPosition);\r
272 void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
273 u8 I2C_GetPEC(I2C_TypeDef* I2Cx);\r
274 void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
275 void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);\r
276 void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, u16 I2C_DutyCycle);\r
277 u32 I2C_GetLastEvent(I2C_TypeDef* I2Cx);\r
278 ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, u32 I2C_EVENT);\r
279 FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, u32 I2C_FLAG);\r
280 void I2C_ClearFlag(I2C_TypeDef* I2Cx, u32 I2C_FLAG);\r
281 ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, u32 I2C_IT);\r
282 void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, u32 I2C_IT);\r
283 \r
284 #endif /*__STM32F10x_I2C_H */\r
285 \r
286 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r