NetBurner 3.5.6
PDF Version
mcan_internal.h
1
2#ifndef __MCAN_INTERNAL_H__
3#define __MCAN_INTERNAL_H__
4
5#include <same70q21_sim.h>
6
7/* -------- MCAN_RX_ELEMENT_R0 : (MCAN RX element: 0x00) (R/W 32) Rx Element R0 Configuration -------- */
8typedef union
9{
10 struct
11 {
12 /* bit: 0..28 Identifier */
13 uint32_t ID:29;
14 /* bit: 29 Remote Transmission Request */
15 uint32_t RTR:1;
16 /* bit: 30 Extended Identifier */
17 uint32_t XTD:1;
18 /* bit: 31 Error State Indicator */
19 uint32_t ESI:1;
20 } bit;
21 /* Type used for register access */
22 uint32_t reg;
23} MCAN_RX_ELEMENT_R0_Type;
24
25#define MCAN_RX_ELEMENT_R0_ID_Pos 0
26#define MCAN_RX_ELEMENT_R0_ID_Msk (0x1FFFFFFFul << MCAN_RX_ELEMENT_R0_ID_Pos)
27#define MCAN_RX_ELEMENT_R0_ID(value) ((MCAN_RX_ELEMENT_R0_ID_Msk & ((value) << MCAN_RX_ELEMENT_R0_ID_Pos)))
28#define MCAN_RX_ELEMENT_R0_RTR_Pos 29
29#define MCAN_RX_ELEMENT_R0_RTR (0x1ul << MCAN_RX_ELEMENT_R0_RTR_Pos)
30#define MCAN_RX_ELEMENT_R0_XTD_Pos 30
31#define MCAN_RX_ELEMENT_R0_XTD (0x1ul << MCAN_RX_ELEMENT_R0_XTD_Pos)
32#define MCAN_RX_ELEMENT_R0_ESI_Pos 31
33#define MCAN_RX_ELEMENT_R0_ESI (0x1ul << MCAN_RX_ELEMENT_R0_ESI_Pos)
34
35/* -------- MCAN_RX_ELEMENT_R1 : (MCAN RX element: 0x01) (R/W 32) Rx Element R1 Configuration -------- */
36typedef union
37{
38 struct
39 {
40 /* bit: 0..15 Rx Timestamp */
41 uint32_t RXTS:16;
42 /* bit: 16..19 Data Length Code */
43 uint32_t DLC:4;
44 /* bit: 20 Bit Rate Switch */
45 uint32_t BRS:1;
46 /* bit: 21 FD Format */
47 uint32_t EDL:1;
48 /* bit: 22..23 Reserved */
49 uint32_t :2;
50 /* bit: 24..30 Filter Index */
51 uint32_t FIDX:7;
52 /* bit: 31 Accepted Non-matching Frame */
53 uint32_t ANMF:1;
54 } bit;
55 /* Type used for register access */
56 uint32_t reg;
57} MCAN_RX_ELEMENT_R1_Type;
58
59#define MCAN_RX_ELEMENT_R1_RXTS_Pos 0
60#define MCAN_RX_ELEMENT_R1_RXTS_Msk (0xFFFFul << MCAN_RX_ELEMENT_R1_RXTS_Pos)
61#define MCAN_RX_ELEMENT_R1_RXTS(value) ((MCAN_RX_ELEMENT_R1_RXTS_Msk & ((value) << MCAN_RX_ELEMENT_R1_RXTS_Pos)))
62#define MCAN_RX_ELEMENT_R1_DLC_Pos 16
63#define MCAN_RX_ELEMENT_R1_DLC_Msk (0xFul << MCAN_RX_ELEMENT_R1_DLC_Pos)
64#define MCAN_RX_ELEMENT_R1_DLC(value) ((MCAN_RX_ELEMENT_R1_DLC_Msk & ((value) << MCAN_RX_ELEMENT_R1_DLC_Pos)))
65#define MCAN_RX_ELEMENT_R1_BRS_Pos 20
66#define MCAN_RX_ELEMENT_R1_BRS (0x1ul << MCAN_RX_ELEMENT_R1_BRS_Pos)
67#define MCAN_RX_ELEMENT_R1_FDF_Pos 21
68#define MCAN_RX_ELEMENT_R1_FDF (0x1ul << MCAN_RX_ELEMENT_R1_FDF_Pos)
69#define MCAN_RX_ELEMENT_R1_FIDX_Pos 24
70#define MCAN_RX_ELEMENT_R1_FIDX_Msk (0x7Ful << MCAN_RX_ELEMENT_R1_FIDX_Pos)
71#define MCAN_RX_ELEMENT_R1_FIDX(value) ((MCAN_RX_ELEMENT_R1_FIDX_Msk & ((value) << MCAN_RX_ELEMENT_R1_FIDX_Pos)))
72#define MCAN_RX_ELEMENT_R1_ANMF_Pos 31
73#define MCAN_RX_ELEMENT_R1_ANMF (0x1ul << MCAN_RX_ELEMENT_R1_ANMF_Pos)
74
79{
80 __IO MCAN_RX_ELEMENT_R0_Type R0;
81 __IO MCAN_RX_ELEMENT_R1_Type R1;
82 uint8_t data[CONF_MCAN_ELEMENT_DATA_SIZE];
83};
84
85
86/* -------- MCAN_TX_ELEMENT_T0 : (MCAN TX element: 0x00) (R/W 32) Tx Element T0 Configuration -------- */
87typedef union
88{
89 struct
90 {
91 /* bit: 0..28 Identifier */
92 uint32_t ID:29;
93 /* bit: 29 Remote Transmission Request */
94 uint32_t RTR:1;
95 /* bit: 30 Extended Identifier */
96 uint32_t XTD:1;
97#if (SAMV71B || SAME70B || SAMV70B)
98 /* bit: 31 Error State Indicator */
99 uint32_t ESI:1;
100#else
101 /* bit: 31 Reserved */
102 uint32_t :1;
103#endif
104 } bit;
105 /* Type used for register access */
106 uint32_t reg;
107} MCAN_TX_ELEMENT_T0_Type;
108
109#define MCAN_TX_ELEMENT_T0_EXTENDED_ID_Pos 0
110#define MCAN_TX_ELEMENT_T0_EXTENDED_ID_Msk (0x1FFFFFFFul << MCAN_TX_ELEMENT_T0_EXTENDED_ID_Pos)
111#define MCAN_TX_ELEMENT_T0_EXTENDED_ID(value) ((MCAN_TX_ELEMENT_T0_EXTENDED_ID_Msk & ((value) << MCAN_TX_ELEMENT_T0_EXTENDED_ID_Pos)))
112#define MCAN_TX_ELEMENT_T0_STANDARD_ID_Pos 18
113#define MCAN_TX_ELEMENT_T0_STANDARD_ID_Msk (0x7FFul << MCAN_TX_ELEMENT_T0_STANDARD_ID_Pos)
114#define MCAN_TX_ELEMENT_T0_STANDARD_ID(value) ((MCAN_TX_ELEMENT_T0_STANDARD_ID_Msk & ((value) << MCAN_TX_ELEMENT_T0_STANDARD_ID_Pos)))
115#define MCAN_TX_ELEMENT_T0_RTR_Pos 29
116#define MCAN_TX_ELEMENT_T0_RTR (0x1ul << MCAN_TX_ELEMENT_T0_RTR_Pos)
117#define MCAN_TX_ELEMENT_T0_XTD_Pos 30
118#define MCAN_TX_ELEMENT_T0_XTD (0x1ul << MCAN_TX_ELEMENT_T0_XTD_Pos)
119#if (SAMV71B || SAME70B || SAMV70B)
120 #define MCAN_TX_ELEMENT_T0_ESI_Pos 31
121 #define MCAN_TX_ELEMENT_T0_ESI (0x1ul << MCAN_TX_ELEMENT_T0_ESI_Pos)
122#endif
123
124/* -------- MCAN_TX_ELEMENT_T1 : (MCAN TX element: 0x01) (R/W 32) Tx Element T1 Configuration -------- */
125typedef union
126{
127 struct
128 {
129 /* bit: 0..15 Reserved */
130 uint32_t :16;
131 /* bit: 16..19 Data Length Code */
132 uint32_t DLC:4;
133#if (SAMV71B || SAME70B || SAMV70B)
134 /* bit: 20 Bit Rate Switch */
135 uint32_t BRS:1;
136 /* bit: 21 FD Format */
137 uint32_t FDF:1;
138 /* bit: 22 Reserved */
139 uint32_t :1;
140#else
141 /* bit: 20..22 Reserved */
142 uint32_t :3;
143#endif
144 /* bit: 23 Event FIFO Control */
145 uint32_t EFCC:1;
146 /* bit: 24..31 Message Marker */
147 uint32_t MM:8;
148 } bit;
149 /* Type used for register access */
150 uint32_t reg;
151} MCAN_TX_ELEMENT_T1_Type;
152
153#define MCAN_TX_ELEMENT_T1_DLC_Pos 16
154#define MCAN_TX_ELEMENT_T1_DLC_Msk (0xFul << MCAN_TX_ELEMENT_T1_DLC_Pos)
155#define MCAN_TX_ELEMENT_T1_DLC(value) ((MCAN_TX_ELEMENT_T1_DLC_Msk & ((value) << MCAN_TX_ELEMENT_T1_DLC_Pos)))
157#define MCAN_TX_ELEMENT_T1_DLC_DATA8_Val 0x8ul
159#define MCAN_TX_ELEMENT_T1_DLC_DATA12_Val 0x9ul
161#define MCAN_TX_ELEMENT_T1_DLC_DATA16_Val 0xAul
163#define MCAN_TX_ELEMENT_T1_DLC_DATA20_Val 0xBul
165#define MCAN_TX_ELEMENT_T1_DLC_DATA24_Val 0xCul
167#define MCAN_TX_ELEMENT_T1_DLC_DATA32_Val 0xDul
169#define MCAN_TX_ELEMENT_T1_DLC_DATA48_Val 0xEul
171#define MCAN_TX_ELEMENT_T1_DLC_DATA64_Val 0xFul
172#if (SAMV71B || SAME70B || SAMV70B)
173 #define MCAN_TX_ELEMENT_T1_BRS_Pos 20
174 #define MCAN_TX_ELEMENT_T1_BRS (0x1ul << MCAN_TX_ELEMENT_T1_BRS_Pos)
175 #define MCAN_TX_ELEMENT_T1_FDF_Pos 21
176 #define MCAN_TX_ELEMENT_T1_FDF (0x1ul << MCAN_TX_ELEMENT_T1_FDF_Pos)
177#endif
178#define MCAN_TX_ELEMENT_T1_EFC_Pos 23
179#define MCAN_TX_ELEMENT_T1_EFC (0x1ul << MCAN_TX_ELEMENT_T1_EFC_Pos)
180#define MCAN_TX_ELEMENT_T1_MM_Pos 24
181#define MCAN_TX_ELEMENT_T1_MM_Msk (0xFFul << MCAN_TX_ELEMENT_T1_MM_Pos)
182#define MCAN_TX_ELEMENT_T1_MM(value) ((MCAN_TX_ELEMENT_T1_MM_Msk & ((value) << MCAN_TX_ELEMENT_T1_MM_Pos)))
183
189struct mcan_tx_element
191 __IO MCAN_TX_ELEMENT_T0_Type T0;
192 __IO MCAN_TX_ELEMENT_T1_Type T1;
193 uint8_t data[CONF_MCAN_ELEMENT_DATA_SIZE];
194};
195
196/* -------- MCAN_TX_EVENT_ELEMENT_E0 : (MCAN TX event element: 0x00) (R/W 32) Tx Event Element E0 Configuration -------- */
197typedef union
198{
199 struct
200 {
201 /* bit: 0..28 Identifier */
202 uint32_t ID:29;
203 /* bit: 29 Remote Transmission Request */
204 uint32_t RTR:1;
205 /* bit: 30 Extended Identifier */
206 uint32_t XTD:1;
207 /* bit: 31 Error State Indicator */
208 uint32_t ESI:1;
209 } bit;
210 /* Type used for register access */
211 uint32_t reg;
212} MCAN_TX_EVENT_ELEMENT_E0_Type;
213
214#define MCAN_TX_EVENT_ELEMENT_E0_ID_Pos 0
215#define MCAN_TX_EVENT_ELEMENT_E0_ID_Msk (0x1FFFFFFFul << MCAN_TX_EVENT_ELEMENT_E0_ID_Pos)
216#define MCAN_TX_EVENT_ELEMENT_E0_ID(value) ((MCAN_TX_EVENT_ELEMENT_E0_ID_Msk & ((value) << MCAN_TX_EVENT_ELEMENT_E0_ID_Pos)))
217#define MCAN_TX_EVENT_ELEMENT_E0_RTR_Pos 29
218#define MCAN_TX_EVENT_ELEMENT_E0_RTR (0x1ul << MCAN_TX_EVENT_ELEMENT_E0_RTR_Pos)
219#define MCAN_TX_EVENT_ELEMENT_E0_XTD_Pos 30
220#define MCAN_TX_EVENT_ELEMENT_E0_XTD (0x1ul << MCAN_TX_EVENT_ELEMENT_E0_XTD_Pos)
221#define MCAN_TX_EVENT_ELEMENT_E0_ESI_Pos 31
222#define MCAN_TX_EVENT_ELEMENT_E0_ESI (0x1ul << MCAN_TX_EVENT_ELEMENT_E0_ESI_Pos)
223
224/* -------- MCAN_TX_EVENT_ELEMENT_E1 : (MCAN TX event element: 0x01) (R/W 32) Tx Event Element E1 Configuration -------- */
225typedef union
226{
227 struct
228 {
229 /* bit: 0..15 Tx Timestamp */
230 uint32_t TXTS:16;
231 /* bit: 16..19 Data Length Code */
232 uint32_t DLC:4;
233 /* bit: 20 Bit Rate Switch */
234 uint32_t BRS:1;
235 /* bit: 21 FD Format */
236 uint32_t EDL:1;
237 /* bit: 22..23 Event Type */
238 uint32_t ET:2;
239 /* bit: 24..31 Message Marker */
240 uint32_t MM:8;
241 } bit;
242 /* Type used for register access */
243 uint32_t reg;
244} MCAN_TX_EVENT_ELEMENT_E1_Type;
245
246#define MCAN_TX_EVENT_ELEMENT_E1_TXTS_Pos 0
247#define MCAN_TX_EVENT_ELEMENT_E1_TXTS_Msk (0xFFFFul << MCAN_TX_EVENT_ELEMENT_E1_TXTS_Pos)
248#define MCAN_TX_EVENT_ELEMENT_E1_TXTS(value) ((MCAN_TX_EVENT_ELEMENT_E1_TXTS_Msk & ((value) << MCAN_TX_EVENT_ELEMENT_E1_TXTS_Pos)))
249#define MCAN_TX_EVENT_ELEMENT_E1_DLC_Pos 16
250#define MCAN_TX_EVENT_ELEMENT_E1_DLC_Msk (0xFul << MCAN_TX_EVENT_ELEMENT_E1_DLC_Pos)
251#define MCAN_TX_EVENT_ELEMENT_E1_DLC(value) ((MCAN_TX_EVENT_ELEMENT_E1_DLC_Msk & ((value) << MCAN_TX_EVENT_ELEMENT_E1_DLC_Pos)))
252#define MCAN_TX_EVENT_ELEMENT_E1_BRS_Pos 20
253#define MCAN_TX_EVENT_ELEMENT_E1_BRS (0x1ul << MCAN_TX_EVENT_ELEMENT_E1_BRS_Pos)
254#define MCAN_TX_EVENT_ELEMENT_E1_FDF_Pos 21
255#define MCAN_TX_EVENT_ELEMENT_E1_FDF (0x1ul << MCAN_TX_EVENT_ELEMENT_E1_FDF_Pos)
256#define MCAN_TX_EVENT_ELEMENT_E1_ET_Pos 22
257#define MCAN_TX_EVENT_ELEMENT_E1_ET_Msk (0x3ul << MCAN_TX_EVENT_ELEMENT_E1_ET_Pos)
258#define MCAN_TX_EVENT_ELEMENT_E1_ET(value) ((MCAN_TX_EVENT_ELEMENT_E1_ET_Msk & ((value) << MCAN_TX_EVENT_ELEMENT_E1_ET_Pos)))
259#define MCAN_TX_EVENT_ELEMENT_E1_MM_Pos 24
260#define MCAN_TX_EVENT_ELEMENT_E1_MM_Msk (0xFFul << MCAN_TX_EVENT_ELEMENT_E1_MM_Pos)
261#define MCAN_TX_EVENT_ELEMENT_E1_MM(value) ((MCAN_TX_EVENT_ELEMENT_E1_MM_Msk & ((value) << MCAN_TX_EVENT_ELEMENT_E1_MM_Pos)))
262
270 __IO MCAN_TX_EVENT_ELEMENT_E0_Type E0;
271 __IO MCAN_TX_EVENT_ELEMENT_E1_Type E1;
272};
273
274/* -------- MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0 : (MCAN standard message ID filter element: 0x00) (R/W 32) Standard Message ID Filter Element S0 Configuration -------- */
275typedef union
276{
277 struct
278 {
279 /* bit: 0..10 Standard Filter ID 2 */
280 uint32_t SFID2:11;
281 /* bit: 11..15 Reserved */
282 uint32_t :5;
283 /* bit: 16..26 Standard Filter ID 1 */
284 uint32_t SFID1:11;
285 /* bit: 27..29 Standard Filter Element Configuration */
286 uint32_t SFEC:3;
287 /* bit: 30..31 Standard Filter Type */
288 uint32_t SFT:2;
289 } bit;
290 /* Type used for register access */
291 uint32_t reg;
292} MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_Type;
293
294#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Pos 0
295#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Msk (0x7FFul << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Pos)
296#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2(value) ((MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Msk & ((value) << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Pos)))
297#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1_Pos 16
298#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1_Msk (0x7FFul << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1_Pos)
299#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1(value) ((MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1_Msk & ((value) << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1_Pos)))
300#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_Pos 27
301#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_Msk (0x7ul << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_Pos)
302#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC(value) ((MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_Msk & ((value) << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_Pos)))
303#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_DISABLE_Val 0
304#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_STF0M_Val 1
305#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_STF1M_Val 2
306#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_REJECT_Val 3
307#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_PRIORITY_Val 4
308#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_PRIF0M_Val 5
309#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_PRIF1M_Val 6
310#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_STRXBUF_Val 7
311#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_Pos 30
312#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_Msk (0x3ul << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_Pos)
313#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT(value) ((MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_Msk & ((value) << MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_Pos)))
314#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_RANGE MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT(0)
315#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_DUAL MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT(1)
316#define MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_CLASSIC MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT(2)
317
326class mcan_module;
327class mcan_standard_message_filter_element
328{
329private:
330 __IO MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_Type S0;
331public:
332 mcan_standard_message_filter_element() {S0.reg=0;};
333 mcan_standard_message_filter_element(int id, int mask=0x7FF)
334 {
335 set_id_mask(id,mask);
336 }
337 void set_id_mask(int id, int mask=0x7FF);
338 void set_exact(int id1, int id2);
339 inline void set_exact(int id1) {set_id_mask(id1); };
340 friend mcan_module;
341};
342
343
344
345
346
347
348
349
350
351/* -------- MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0 : (MCAN extended message ID filter element: 0x00) (R/W 32) Extended Message ID Filter Element F0 Configuration -------- */
352typedef union
353{
354 struct
355 {
356 /* bit: 0..28 Extended Filter ID 1 */
357 uint32_t EFID1:29;
358 /* bit: 29..31 Extended Filter Element Configuration */
359 uint32_t EFEC:3;
360 } bit;
361 /* Type used for register access */
362 uint32_t reg;
363} MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_Type;
364
365#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1_Pos 0
366#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1_Msk (0x1FFFFFFFul << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1_Pos)
367#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1(value) ((MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1_Msk & ((value) << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1_Pos)))
368#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_Pos 29
369#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_Msk (0x7ul << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_Pos)
370#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC(value) ((MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_Msk & ((value) << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_Pos)))
371#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_DISABLE_Val 0
372#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_STF0M_Val 1
373#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_STF1M_Val 2
374#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_REJECT_Val 3
375#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_PRIORITY_Val 4
376#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_PRIF0M_Val 5
377#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_PRIF1M_Val 6
378#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_STRXBUF_Val 7
379
380/* -------- MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1 : (MCAN extended message ID filter element: 0x01) (R/W 32) Extended Message ID Filter Element F1 Configuration -------- */
381typedef union
382{
383 struct
384 {
385 /* bit: 0..28 Extended Filter ID 2 */
386 uint32_t EFID2:29;
387 /* bit: 29 Reserved */
388 uint32_t :1;
389 /* bit: 30..31 Extended Filter Type */
390 uint32_t EFT:2;
391 } bit;
392 /* Type used for register access */
393 uint32_t reg;
394} MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_Type;
395
396#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Pos 0
397#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Msk (0x1FFFFFFFul << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Pos)
398#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2(value) ((MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Msk & ((value) << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Pos)))
399#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_Pos 30
400#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_Msk (0x3ul << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_Pos)
401#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT(value) ((MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_Msk & ((value) << MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_Pos)))
402#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_RANGEM MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT(0)
403#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_DUAL MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT(1)
404#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_CLASSIC MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT(2)
405#define MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_RANGE MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT(3)
406
414private:
415 __IO MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_Type F0;
416 __IO MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_Type F1;
417public:
418 mcan_extended_message_filter_element() {F0.reg=0; F1.reg=0; };
419 mcan_extended_message_filter_element(int id,int mask=0x1FFFFFFF)
420 {
421 set_id_mask(id,mask);
422 }
423 void set_id_mask(int id, int mask=0x1FFFFFFF);
424 void set_exact(int id1, int id2);
425 inline void set_exact(int id1) {set_id_mask(id1); };
426 friend mcan_module;
427};
428/* @} */
429
430
431enum status_code {
432 STATUS_OK = 0,
433 STATUS_ERR_BUSY = 0x19,
434 STATUS_ERR_DENIED = 0x1C,
435 STATUS_ERR_TIMEOUT = 0x12,
436 ERR_IO_ERROR = -1,
437 ERR_FLUSHED = -2,
438 ERR_TIMEOUT = -3,
439 ERR_BAD_DATA = -4,
440 ERR_PROTOCOL = -5,
441 ERR_UNSUPPORTED_DEV = -6,
442 ERR_NO_MEMORY = -7,
443 ERR_INVALID_ARG = -8,
444 ERR_BAD_ADDRESS = -9,
445 ERR_BUSY = -10,
446 ERR_BAD_FORMAT = -11,
447 ERR_NO_TIMER = -12,
448 ERR_TIMER_ALREADY_RUNNING = -13,
449 ERR_TIMER_NOT_RUNNING = -14,
450 ERR_ABORTED = -15,
460 OPERATION_IN_PROGRESS = -128,
461};
462
463
464
547 MCAN_TIMEOUT_CONTINUES = MCAN_TOCC_TOS_CONTINUOUS,
549 MCAN_TIMEOUT_TX_EVEN_FIFO = MCAN_TOCC_TOS_TX_EV_TIMEOUT,
551 MCAN_TIMEOUT_RX_FIFO_0 = MCAN_TOCC_TOS_RX0_EV_TIMEOUT,
553 MCAN_TIMEOUT_RX_FIFO_1 = MCAN_TOCC_TOS_RX1_EV_TIMEOUT,
555
556
570
571
580 MCAN_RX_FIFO_0_NEW_MESSAGE = MCAN_IE_RF0NE,
582 MCAN_RX_FIFO_0_WATERMARK = MCAN_IE_RF0WE,
584 MCAN_RX_FIFO_0_FULL = MCAN_IE_RF0FE,
586 MCAN_RX_FIFO_0_LOST_MESSAGE = MCAN_IE_RF0LE,
588 MCAN_RX_FIFO_1_NEW_MESSAGE = MCAN_IE_RF1NE,
590 MCAN_RX_FIFO_1_WATERMARK = MCAN_IE_RF1WE,
592 MCAN_RX_FIFO_1_FULL = MCAN_IE_RF1FE,
594 MCAN_RX_FIFO_1_MESSAGE_LOST = MCAN_IE_RF1LE,
596 MCAN_RX_HIGH_PRIORITY_MESSAGE = MCAN_IE_HPME,
598 MCAN_TIMESTAMP_COMPLETE = MCAN_IE_TCE,
600 MCAN_TX_CANCELLATION_FINISH = MCAN_IE_TCFE,
602 MCAN_TX_FIFO_EMPTY = MCAN_IE_TFEE,
604 MCAN_TX_EVENT_FIFO_NEW_ENTRY = MCAN_IE_TEFNE,
606 MCAN_TX_EVENT_FIFO_WATERMARK = MCAN_IE_TEFWE,
608 MCAN_TX_EVENT_FIFO_FULL = MCAN_IE_TEFFE,
610 MCAN_TX_EVENT_FIFO_ELEMENT_LOST = MCAN_IE_TEFLE,
612 MCAN_TIMESTAMP_WRAPAROUND = MCAN_IE_TSWE,
614 MCAN_MESSAGE_RAM_ACCESS_FAILURE = MCAN_IE_MRAFE,
616 MCAN_TIMEOUT_OCCURRED = MCAN_IE_TOOE,
618 MCAN_RX_BUFFER_NEW_MESSAGE = MCAN_IE_DRXE,
620 MCAN_ERROR_LOGGING_OVERFLOW = MCAN_IE_ELOE,
622 MCAN_ERROR_PASSIVE = MCAN_IE_EPE,
624 MCAN_WARNING_STATUS = MCAN_IE_EWE,
626 MCAN_BUS_OFF = MCAN_IE_BOE,
628 MCAN_WATCHDOG = MCAN_IE_WDIE,
630 MCAN_CRC_ERROR = MCAN_IE_CRCEE,
632 MCAN_BIT_ERROR = MCAN_IE_BEE,
634 MCAN_ACKNOWLEDGE_ERROR = MCAN_IE_ACKEE,
636 MCAN_FORMAT_ERROR = MCAN_IE_FOEE,
638 MCAN_STUFF_ERROR = MCAN_IE_STEE
639};
643struct tx_record
644{
645OS_SEM * pSem;
646volatile uint32_t when;
647};
648
649#endif // __MCAN_INTERNAL_H__
650
MCAN extended message ID filter element structure.
Definition mcan_internal.h:414
mcan_timeout_mode
Can time out modes.
Definition mcan_internal.h:546
mcan_nonmatching_frames_action
Can non-matching frames action.
Definition mcan_internal.h:562
mcan_interrupt_source
Can module interrupt source.
Definition mcan_internal.h:579
@ MCAN_TIMEOUT_RX_FIFO_1
Definition mcan_internal.h:554
@ MCAN_TIMEOUT_TX_EVEN_FIFO
Definition mcan_internal.h:550
@ MCAN_TIMEOUT_RX_FIFO_0
Definition mcan_internal.h:552
@ MCAN_TIMEOUT_CONTINUES
Definition mcan_internal.h:548
@ MCAN_NONMATCHING_FRAMES_FIFO_0
Definition mcan_internal.h:564
@ MCAN_NONMATCHING_FRAMES_FIFO_1
Definition mcan_internal.h:566
@ MCAN_NONMATCHING_FRAMES_REJECT
Definition mcan_internal.h:568
@ MCAN_RX_BUFFER_NEW_MESSAGE
Definition mcan_internal.h:619
@ MCAN_RX_FIFO_0_LOST_MESSAGE
Definition mcan_internal.h:587
@ MCAN_TX_EVENT_FIFO_WATERMARK
Definition mcan_internal.h:607
@ MCAN_RX_FIFO_1_FULL
Definition mcan_internal.h:593
@ MCAN_BUS_OFF
Definition mcan_internal.h:627
@ MCAN_RX_FIFO_0_FULL
Definition mcan_internal.h:585
@ MCAN_ERROR_LOGGING_OVERFLOW
Definition mcan_internal.h:621
@ MCAN_TX_FIFO_EMPTY
Definition mcan_internal.h:603
@ MCAN_TIMESTAMP_WRAPAROUND
Definition mcan_internal.h:613
@ MCAN_RX_HIGH_PRIORITY_MESSAGE
Definition mcan_internal.h:597
@ MCAN_RX_FIFO_0_WATERMARK
Definition mcan_internal.h:583
@ MCAN_RX_FIFO_0_NEW_MESSAGE
Definition mcan_internal.h:581
@ MCAN_TIMEOUT_OCCURRED
Definition mcan_internal.h:617
@ MCAN_RX_FIFO_1_NEW_MESSAGE
Definition mcan_internal.h:589
@ MCAN_TX_EVENT_FIFO_ELEMENT_LOST
Definition mcan_internal.h:611
@ MCAN_FORMAT_ERROR
Definition mcan_internal.h:637
@ MCAN_RX_FIFO_1_MESSAGE_LOST
Definition mcan_internal.h:595
@ MCAN_CRC_ERROR
Definition mcan_internal.h:631
@ MCAN_MESSAGE_RAM_ACCESS_FAILURE
Definition mcan_internal.h:615
@ MCAN_TX_EVENT_FIFO_NEW_ENTRY
Definition mcan_internal.h:605
@ MCAN_ACKNOWLEDGE_ERROR
Definition mcan_internal.h:635
@ MCAN_TX_EVENT_FIFO_FULL
Definition mcan_internal.h:609
@ MCAN_ERROR_PASSIVE
Definition mcan_internal.h:623
@ MCAN_TX_CANCELLATION_FINISH
Definition mcan_internal.h:601
@ MCAN_RX_FIFO_1_WATERMARK
Definition mcan_internal.h:591
@ MCAN_WATCHDOG
Definition mcan_internal.h:629
@ MCAN_WARNING_STATUS
Definition mcan_internal.h:625
@ MCAN_BIT_ERROR
Definition mcan_internal.h:633
@ MCAN_TIMESTAMP_COMPLETE
Definition mcan_internal.h:599
@ MCAN_STUFF_ERROR
Definition mcan_internal.h:639
#define STATUS_OK
OK, no errors.
Definition mailto.h:28
MCAN receive element structure for buffer.
Definition mcan_internal.h:79
MCAN transfer element structure.
Definition mcan_internal.h:191
MCAN transfer event FIFO element structure.
Definition mcan_internal.h:270