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