]> git.sur5r.net Git - freertos/blob - Demo/Common/drivers/ST/STM32F10xFWLib/inc/stm32f10x_can.h
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / Common / drivers / ST / STM32F10xFWLib / inc / stm32f10x_can.h
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_can.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 *                      CAN 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_CAN_H\r
23 #define __STM32F10x_CAN_H\r
24 \r
25 /* Includes ------------------------------------------------------------------*/\r
26 #include "stm32f10x_map.h"\r
27 \r
28 /* Exported types ------------------------------------------------------------*/\r
29 /* CAN init structure definition */\r
30 typedef struct\r
31 {\r
32   FunctionalState CAN_TTCM;\r
33   FunctionalState CAN_ABOM;\r
34   FunctionalState CAN_AWUM;\r
35   FunctionalState CAN_NART;\r
36   FunctionalState CAN_RFLM;\r
37   FunctionalState CAN_TXFP;\r
38   u8 CAN_Mode;\r
39   u8 CAN_SJW;\r
40   u8 CAN_BS1;\r
41   u8 CAN_BS2;\r
42   u8 CAN_Clock;\r
43   u16 CAN_Prescaler;\r
44 } CAN_InitTypeDef;\r
45 \r
46 /* CAN filter init structure definition */\r
47 typedef struct\r
48 {\r
49   u8 CAN_FilterNumber;\r
50   u8 CAN_FilterMode;\r
51   u8 CAN_FilterScale;\r
52   u16 CAN_FilterIdHigh;\r
53   u16 CAN_FilterIdLow;\r
54   u16 CAN_FilterMaskIdHigh;\r
55   u16 CAN_FilterMaskIdLow;\r
56   u16 CAN_FilterFIFOAssignment;\r
57   FunctionalState CAN_FilterActivation;\r
58 } CAN_FilterInitTypeDef;\r
59 \r
60 /* CAN Tx message structure definition */\r
61 typedef struct\r
62 {\r
63   u32 StdId;\r
64   u32 ExtId;\r
65   u8 IDE;\r
66   u8 RTR;\r
67   u8 DLC;\r
68   u8 Data[8];\r
69 } CanTxMsg;\r
70 \r
71 /* CAN Rx message structure definition */\r
72 typedef struct\r
73 {\r
74   u32 StdId;\r
75   u32 ExtId;\r
76   u8 IDE;\r
77   u8 RTR;\r
78   u8 DLC;\r
79   u8 Data[8];\r
80   u8 FMI;\r
81 } CanRxMsg;\r
82 \r
83 /* Exported constants --------------------------------------------------------*/\r
84 \r
85 /* CAN sleep constants */\r
86 #define CANINITFAILED              ((u8)0x00) /* CAN initialization failed */\r
87 #define CANINITOK                  ((u8)0x01) /* CAN initialization failed */\r
88 \r
89 /* CAN operating mode */\r
90 #define CAN_Mode_Normal             ((u8)0x00)  /* normal mode */\r
91 #define CAN_Mode_LoopBack           ((u8)0x01)  /* loopback mode */\r
92 #define CAN_Mode_Silent             ((u8)0x02)  /* silent mode */\r
93 #define CAN_Mode_Silent_LoopBack    ((u8)0x03)  /* loopback combined with silent mode */\r
94 \r
95 #define IS_CAN_MODE(MODE) ((MODE == CAN_Mode_Normal) || (MODE == CAN_Mode_LoopBack)|| \\r
96                            (MODE == CAN_Mode_Silent) || (MODE == CAN_Mode_Silent_LoopBack))\r
97 \r
98 /* CAN synchronisation jump width */\r
99 #define CAN_SJW_0tq                 ((u8)0x00)  /* 0 time quantum */\r
100 #define CAN_SJW_1tq                 ((u8)0x01)  /* 1 time quantum */\r
101 #define CAN_SJW_2tq                 ((u8)0x02)  /* 2 time quantum */\r
102 #define CAN_SJW_3tq                 ((u8)0x03)  /* 3 time quantum */\r
103 \r
104 #define IS_CAN_SJW(SJW) ((SJW == CAN_SJW_0tq) || (SJW == CAN_SJW_1tq)|| \\r
105                          (SJW == CAN_SJW_2tq) || (SJW == CAN_SJW_3tq))\r
106 \r
107 /* time quantum in bit segment 1 */\r
108 #define CAN_BS1_1tq                 ((u8)0x00)  /* 1 time quantum */\r
109 #define CAN_BS1_2tq                 ((u8)0x01)  /* 2 time quantum */\r
110 #define CAN_BS1_3tq                 ((u8)0x02)  /* 3 time quantum */\r
111 #define CAN_BS1_4tq                 ((u8)0x03)  /* 4 time quantum */\r
112 #define CAN_BS1_5tq                 ((u8)0x04)  /* 5 time quantum */\r
113 #define CAN_BS1_6tq                 ((u8)0x05)  /* 6 time quantum */\r
114 #define CAN_BS1_7tq                 ((u8)0x06)  /* 7 time quantum */\r
115 #define CAN_BS1_8tq                 ((u8)0x07)  /* 8 time quantum */\r
116 #define CAN_BS1_9tq                 ((u8)0x08)  /* 9 time quantum */\r
117 #define CAN_BS1_10tq                ((u8)0x09)  /* 10 time quantum */\r
118 #define CAN_BS1_11tq                ((u8)0x0A)  /* 11 time quantum */\r
119 #define CAN_BS1_12tq                ((u8)0x0B)  /* 12 time quantum */\r
120 #define CAN_BS1_13tq                ((u8)0x0C)  /* 13 time quantum */\r
121 #define CAN_BS1_14tq                ((u8)0x0D)  /* 14 time quantum */\r
122 #define CAN_BS1_15tq                ((u8)0x0E)  /* 15 time quantum */\r
123 #define CAN_BS1_16tq                ((u8)0x0F)  /* 16 time quantum */\r
124 \r
125 #define IS_CAN_BS1(BS1) (BS1 <= CAN_BS1_16tq)\r
126 \r
127 /* time quantum in bit segment 2 */\r
128 #define CAN_BS2_1tq                 ((u8)0x00)  /* 1 time quantum */\r
129 #define CAN_BS2_2tq                 ((u8)0x01)  /* 2 time quantum */\r
130 #define CAN_BS2_3tq                 ((u8)0x02)  /* 3 time quantum */\r
131 #define CAN_BS2_4tq                 ((u8)0x03)  /* 4 time quantum */\r
132 #define CAN_BS2_5tq                 ((u8)0x04)  /* 5 time quantum */\r
133 #define CAN_BS2_6tq                 ((u8)0x05)  /* 6 time quantum */\r
134 #define CAN_BS2_7tq                 ((u8)0x06)  /* 7 time quantum */\r
135 #define CAN_BS2_8tq                 ((u8)0x07)  /* 8 time quantum */\r
136 \r
137 #define IS_CAN_BS2(BS2) (BS2 <= CAN_BS2_8tq)\r
138 \r
139 /* CAN clock selected */\r
140 #define CAN_Clock_8MHz              ((u8)0x00)  /* 8MHz XTAL clock selected */\r
141 #define CAN_Clock_APB               ((u8)0x01)  /* APB clock selected */\r
142 \r
143 #define IS_CAN_CLOCK(CLOCK) ((CLOCK == CAN_Clock_8MHz) || (CLOCK == CAN_Clock_APB))\r
144 \r
145 /* CAN clock prescaler */\r
146 #define IS_CAN_PRESCALER(PRESCALER) ((PRESCALER >= 1) && (PRESCALER <= 1024))\r
147 \r
148 /* CAN filter number */\r
149 #define IS_CAN_FILTER_NUMBER(NUMBER) (NUMBER <= 13)\r
150 \r
151 /* CAN filter mode */\r
152 #define CAN_FilterMode_IdMask       ((u8)0x00)  /* id/mask mode */\r
153 #define CAN_FilterMode_IdList       ((u8)0x01)  /* identifier list mode */\r
154 \r
155 #define IS_CAN_FILTER_MODE(MODE) ((MODE == CAN_FilterMode_IdMask) || \\r
156                                        (MODE == CAN_FilterMode_IdList))\r
157 \r
158 /* CAN filter scale */\r
159 #define CAN_FilterScale_16bit       ((u8)0x00) /* 16-bit filter scale */\r
160 #define CAN_FilterScale_32bit       ((u8)0x01) /* 2-bit filter scale */\r
161 \r
162 #define IS_CAN_FILTER_SCALE(SCALE) ((SCALE == CAN_FilterScale_16bit) || \\r
163                                          (SCALE == CAN_FilterScale_32bit))\r
164 \r
165 /* CAN filter FIFO assignation */\r
166 #define CAN_FilterFIFO0             ((u8)0x00)  /* Filter FIFO 0 assignment for filter x */\r
167 #define CAN_FilterFIFO1             ((u8)0x01)  /* Filter FIFO 1 assignment for filter x */\r
168 \r
169 #define IS_CAN_FILTER_FIFO(FIFO) ((FIFO == CAN_FilterFIFO0) || \\r
170                                        (FIFO == CAN_FilterFIFO1))\r
171 \r
172 /* CAN Tx */\r
173 #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) (TRANSMITMAILBOX <= ((u8)0x02))\r
174 #define IS_CAN_STDID(STDID)   (STDID <= ((u32)0x7FF))\r
175 #define IS_CAN_EXTID(EXTID)   (EXTID <= ((u32)0x3FFFF))\r
176 #define IS_CAN_DLC(DLC)       (DLC <= ((u8)0x08))\r
177 \r
178 /* CAN identifier type */\r
179 #define CAN_ID_STD                 ((u32)0x00000000)  /* Standard Id */\r
180 #define CAN_ID_EXT                 ((u32)0x00000004)  /* Extended Id */\r
181 \r
182 #define IS_CAN_IDTYPE(IDTYPE) ((IDTYPE == CAN_ID_STD) || (IDTYPE == CAN_ID_EXT))\r
183 \r
184 /* CAN remote transmission request */\r
185 #define CAN_RTR_DATA                ((u32)0x00000000)  /* Data frame */\r
186 #define CAN_RTR_REMOTE              ((u32)0x00000002)  /* Remote frame */\r
187 \r
188 #define IS_CAN_RTR(RTR) ((RTR == CAN_RTR_DATA) || (RTR == CAN_RTR_REMOTE))\r
189 \r
190 /* CAN transmit constants */\r
191 #define CANTXFAILED                 ((u8)0x00) /* CAN transmission failed */\r
192 #define CANTXOK                     ((u8)0x01) /* CAN transmission succeeded */\r
193 #define CANTXPENDING                ((u8)0x02) /* CAN transmission pending */\r
194 #define CAN_NO_MB                   ((u8)0x04) /* CAN cell did not provide an empty mailbox */\r
195 \r
196 /* CAN receive FIFO number constants */\r
197 #define CAN_FIFO0                 ((u8)0x00) /* CAN FIFO0 used to receive */\r
198 #define CAN_FIFO1                 ((u8)0x01) /* CAN FIFO1 used to receive */\r
199 \r
200 #define IS_CAN_FIFO(FIFO) ((FIFO == CAN_FIFO0) || (FIFO == CAN_FIFO1))\r
201 \r
202 /* CAN sleep constants */\r
203 #define CANSLEEPFAILED              ((u8)0x00) /* CAN did not enter the sleep mode */\r
204 #define CANSLEEPOK                  ((u8)0x01) /* CAN entered the sleep mode */\r
205 \r
206 /* CAN wake up constants */\r
207 #define CANWAKEUPFAILED             ((u8)0x00) /* CAN did not leave the sleep mode */\r
208 #define CANWAKEUPOK                 ((u8)0x01) /* CAN leaved the sleep mode */\r
209 \r
210 /* CAN flags */\r
211 #define CAN_FLAG_EWG                ((u32)0x00000001) /* Error Warning Flag */\r
212 #define CAN_FLAG_EPV                ((u32)0x00000002) /* Error Passive Flag */\r
213 #define CAN_FLAG_BOF                ((u32)0x00000004) /* Bus-Off Flag */\r
214 \r
215 #define IS_CAN_FLAG(FLAG) ((FLAG == CAN_FLAG_EWG) || (FLAG == CAN_FLAG_EPV) ||\\r
216                            (FLAG == CAN_FLAG_BOF))\r
217 \r
218 /* CAN interrupts */\r
219 #define CAN_IT_RQCP0                ((u8)0x05) /* Request completed mailbox 0 */\r
220 #define CAN_IT_RQCP1                ((u8)0x06) /* Request completed mailbox 1 */\r
221 #define CAN_IT_RQCP2                ((u8)0x07) /* Request completed mailbox 2 */\r
222 #define CAN_IT_TME                  ((u32)0x00000001) /* Transmit mailbox empty */\r
223 #define CAN_IT_FMP0                 ((u32)0x00000002) /* FIFO 0 message pending */\r
224 #define CAN_IT_FF0                  ((u32)0x00000004) /* FIFO 0 full */\r
225 #define CAN_IT_FOV0                 ((u32)0x00000008) /* FIFO 0 overrun */\r
226 #define CAN_IT_FMP1                 ((u32)0x00000010) /* FIFO 1 message pending */\r
227 #define CAN_IT_FF1                  ((u32)0x00000020) /* FIFO 1 full */\r
228 #define CAN_IT_FOV1                 ((u32)0x00000040) /* FIFO 1 overrun */\r
229 #define CAN_IT_EWG                  ((u32)0x00000100) /* Error warning */\r
230 #define CAN_IT_EPV                  ((u32)0x00000200) /* Error passive */\r
231 #define CAN_IT_BOF                  ((u32)0x00000400) /* Bus-off */\r
232 #define CAN_IT_LEC                  ((u32)0x00000800) /* Last error code */\r
233 #define CAN_IT_ERR                  ((u32)0x00008000) /* Error */\r
234 #define CAN_IT_WKU                  ((u32)0x00010000) /* Wake-up */\r
235 #define CAN_IT_SLK                  ((u32)0x00020000) /* Sleep */\r
236 \r
237 #define IS_CAN_IT(IT) ((IT == CAN_IT_RQCP0) || (IT == CAN_IT_RQCP1) ||\\r
238                        (IT == CAN_IT_RQCP2) || (IT == CAN_IT_TME)   ||\\r
239                        (IT == CAN_IT_FMP0)  || (IT == CAN_IT_FF0)   ||\\r
240                        (IT == CAN_IT_FOV0)  || (IT == CAN_IT_FMP1)  ||\\r
241                        (IT == CAN_IT_FF1)   || (IT == CAN_IT_FOV1)  ||\\r
242                        (IT == CAN_IT_EWG)   || (IT == CAN_IT_EPV)   ||\\r
243                        (IT == CAN_IT_BOF)   || (IT == CAN_IT_LEC)   ||\\r
244                        (IT == CAN_IT_ERR)   || (IT == CAN_IT_WKU)   ||\\r
245                        (IT == CAN_IT_SLK))\r
246 \r
247 /* Exported macro ------------------------------------------------------------*/\r
248 /* Exported function protypes ----------------------------------------------- */\r
249 void CAN_DeInit(void);\r
250 u8 CAN_Init(CAN_InitTypeDef* CAN_InitStruct);\r
251 void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct);\r
252 void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct);\r
253 void CAN_ITConfig(u32 CAN_IT, FunctionalState NewState);\r
254 u8 CAN_Transmit(CanTxMsg* TxMessage);\r
255 u32 CAN_TransmitStatus(u8 TransmitMailbox);\r
256 void CAN_CancelTransmit(u8 Mailbox);\r
257 void CAN_FIFORelease(u8 FIFONumber);\r
258 u8 CAN_MessagePending(u8 FIFONumber);\r
259 void CAN_Receive(u8 FIFONumber, CanRxMsg* RxMessage);\r
260 u8 CAN_Sleep(void);\r
261 u8 CAN_WakeUp(void);\r
262 FlagStatus CAN_GetFlagStatus(u32 CAN_FLAG);\r
263 void CAN_ClearFlag(u32 CAN_FLAG);\r
264 ITStatus CAN_GetITStatus(u32 CAN_IT);\r
265 void CAN_ClearITPendingBit(u32 CAN_IT);\r
266 \r
267 #endif /* __STM32F10x_CAN_H */\r
268 \r
269 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r