tao_z
2022-05-29 a7c0d42a6590c26d37c17b082aef52925b466569
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
/**
  ******************************************************************************
  * @file     xl_mcan.h
  * @author   software group
  * @brief    This file contains all the functions prototypes for the MCAN 
  *           firmware library.
  ******************************************************************************
  * @attention
    *
  * 2019 by Chipways Communications,Inc. All Rights Reserved.
  * This software is supplied under the terms of a license
  * agreement or non-disclosure agreement with Chipways.
  * Passing on and copying of this document,and communication
  * of its contents is not permitted without prior written
  * authorization.
  *
  * <h2><center>&copy; COPYRIGHT 2019 Chipways</center></h2>
  ******************************************************************************
  */
    
/* Define to prevent recursive inclusion -------------------------------------*/      
#ifndef XL_MCAN_H
#define XL_MCAN_H
 
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ---------------------------------------------------------------*/
#include "XL6600.h"
/* Register define ------------------------------------------------------------*/
#pragma anon_unions /* added by neo, to support union function */
 
/* CANMOD Bit Fields */
#define MCAN_CANMOD_RM_MASK                     0x1u
#define MCAN_CANMOD_RM_SHIFT                    0
#define MCAN_CANMOD_LOM_MASK                    0x2u
#define MCAN_CANMOD_LOM_SHIFT                   1
#define MCAN_CANMOD_STM_MASK                    0x4u
#define MCAN_CANMOD_STM_SHIFT                   2
#define MCAN_CANMOD_AFM_MASK                    0x8u
#define MCAN_CANMOD_AFM_SHIFT                   3
#define MCAN_CANMOD_SM_MASK                     0x10u
#define MCAN_CANMOD_SM_SHIFT                    4
#define MCAN_CANMOD_FDM_MASK                    0x20u
#define MCAN_CANMOD_FDM_SHIFT                   5
#define MCAN_CANMOD_FDTREN_MASK                 0x40u
#define MCAN_CANMOD_FDTREN_SHIFT                6
#define MCAN_CANMOD_FDTDCEN_MASK                0x80u
#define MCAN_CANMOD_FDTDCEN_SHIFT               7
 
/* CANCMR Bit Fields */
#define MCAN_CANCMR_TR_MASK                     0x1u
#define MCAN_CANCMR_TR_SHIFT                    0
#define MCAN_CANCMR_AT_MASK                     0x2u
#define MCAN_CANCMR_AT_SHIFT                    1
#define MCAN_CANCMR_RRB_MASK                    0x4u
#define MCAN_CANCMR_RRB_SHIFT                   2
#define MCAN_CANCMR_CDO_MASK                    0x8u
#define MCAN_CANCMR_CDO_SHIFT                   3
#define MCAN_CANCMR_SRR_MASK                    0x10u
#define MCAN_CANCMR_SRR_SHIFT                   4
#define MCAN_CANCMR_EN_MASK                        0x20u
#define MCAN_CANCMR_EN_SHIFT                       5
 
/* CANSR Bit Fields */
#define MCAN_CANSR_RBS_MASK                     0x1u
#define MCAN_CANSR_RBS_SHIFT                    0
#define MCAN_CANSR_DOS_MASK                     0x2u
#define MCAN_CANSR_DOS_SHIFT                    1
#define MCAN_CANSR_TBS_MASK                     0x4u
#define MCAN_CANSR_TBS_SHIFT                    2
#define MCAN_CANSR_TCS_MASK                     0x8u
#define MCAN_CANSR_TCS_SHIFT                    3
#define MCAN_CANSR_RS_MASK                      0x10u
#define MCAN_CANSR_RS_SHIFT                     4
#define MCAN_CANSR_TS_MASK                      0x20u
#define MCAN_CANSR_TS_SHIFT                     5
#define MCAN_CANSR_ES_MASK                      0x40u
#define MCAN_CANSR_ES_SHIFT                     6
#define MCAN_CANSR_BS_MASK                      0x80u
#define MCAN_CANSR_BS_SHIFT                     7
 
/* CANIR Bit Fields */
#define MCAN_CANIR_RI_MASK                      0x1u
#define MCAN_CANIR_RI_SHIFT                     0
#define MCAN_CANIR_TI_MASK                      0x2u
#define MCAN_CANIR_TI_SHIFT                     1
#define MCAN_CANIR_EI_MASK                      0x4u
#define MCAN_CANIR_EI_SHIFT                     2
#define MCAN_CANIR_DOI_MASK                     0x8u
#define MCAN_CANIR_DOI_SHIFT                    3
#define MCAN_CANIR_WUI_MASK                     0x10u
#define MCAN_CANIR_WUI_SHIFT                    4
#define MCAN_CANIR_EPI_MASK                     0x20u
#define MCAN_CANIR_EPI_SHIFT                    5
#define MCAN_CANIR_ALI_MASK                     0x40u
#define MCAN_CANIR_ALI_SHIFT                    6
#define MCAN_CANIR_BEI_MASK                     0x80u
#define MCAN_CANIR_BEI_SHIFT                    7
 
/* CANIER Bit Fields */
#define MCAN_CANIER_RIE_MASK                    0x1u
#define MCAN_CANIER_RIE_SHIFT                   0
#define MCAN_CANIER_TIE_MASK                    0x2u
#define MCAN_CANIER_TIE_SHIFT                   1
#define MCAN_CANIER_EIE_MASK                    0x4u
#define MCAN_CANIER_EIE_SHIFT                   2
#define MCAN_CANIER_DOIE_MASK                   0x8u
#define MCAN_CANIER_DOIE_SHIFT                  3
#define MCAN_CANIER_WUIE_MASK                   0x10u
#define MCAN_CANIER_WUIE_SHIFT                  4
#define MCAN_CANIER_EPIE_MASK                   0x20u
#define MCAN_CANIER_EPIE_SHIFT                  5
#define MCAN_CANIER_ALIE_MASK                   0x40u
#define MCAN_CANIER_ALIE_SHIFT                  6
#define MCAN_CANIER_BEIE_MASK                   0x80u
#define MCAN_CANIER_BEIE_SHIFT                  7
 
/* CANTDCS Bit Fields */
#define MCAN_CANTDCS_TDCT_MASK                  0x1Fu
#define MCAN_CANTDCS_TDCT_SHIFT                 0
 
/* CANBTR0 Bit Fields */
#define MCAN_CANBTR0_BRP_MASK                   0x3Fu
#define MCAN_CANBTR0_BRP_SHIFT                  0
#define MCAN_CANBTR0_SJW_MASK                   0xC0u
#define MCAN_CANBTR0_SJW_SHIFT                  6
 
/* CANBTR1 Bit Fields */
#define MCAN_CANBTR1_TSEG1_MASK                 0xFu
#define MCAN_CANBTR1_TSEG1_SHIFT                0
#define MCAN_CANBTR1_TSEG2_MASK                 0x70u
#define MCAN_CANBTR1_TSEG2_SHIFT                4
#define MCAN_CANBTR1_SAMP_MASK                  0x80u
#define MCAN_CANBTR1_SAMP_SHIFT                 7
 
/* CANFDBTR0 Bit Fields */
#define MCAN_CANFDBTR0_FDBRP_MASK               0x3Fu
#define MCAN_CANFDBTR0_FDBRP_SHIFT              0
#define MCAN_CANFDBTR0_FDSJW_MASK               0xC0u
#define MCAN_CANFDBTR0_FDSJW_SHIFT              6
 
/* CANFDBTR1 Bit Fields */
#define MCAN_CANFDBTR1_FDTSEG1_MASK             0xFu
#define MCAN_CANFDBTR1_FDTSEG1_SHIFT            0
#define MCAN_CANFDBTR1_FDTSEG2_MASK             0x70u
#define MCAN_CANFDBTR1_FDTSEG2_SHIFT            4
#define MCAN_CANFDBTR1_FDSAMP_MASK              0x80u
#define MCAN_CANFDBTR1_FDSAMP_SHIFT             7
 
/* CANHFC Bit Fields */
#define MCAN_CANHFC_HFCT_MASK                   0x7Fu
#define MCAN_CANHFC_HFCT_SHIFT                  0
 
/* CANALC Bit Fields */
#define MCAN_CANALC_ALC_MASK                    0x1Fu
#define MCAN_CANALC_ALC_SHIFT                   0
 
/* CANECC Bit Fields */
#define MCAN_CANECC_SEGMENT_MASK                0x1Fu
#define MCAN_CANECC_SEGMENT_SHIFT               0
#define MCAN_CANECC_DIR_MASK                    0x20u
#define MCAN_CANECC_DIR_SHIFT                   5
#define MCAN_CANECC_ERROR_MASK                  0xC0u
#define MCAN_CANECC_ERROR_SHIFT                 6
 
/* CANEWLR Bit Fields */
#define MCAN_CANEWLR_EWL_MASK                   0xFFu
#define MCAN_CANEWLR_EWL_SHIFT                  0
 
/* CANRXERR Bit Fields */
#define MCAN_CANRXERR_RXERR_MASK                0xFFu
#define MCAN_CANRXERR_RXERR_SHIFT               0
 
/* CANTXERR Bit Fields */
#define MCAN_CANTXERR_TXERR_MASK                0xFFu
#define MCAN_CANTXERR_TXERR_SHIFT               0
 
/* CANTB Bit Fields */
#define MCAN_CANTB_TX_MASK                      0xFFu
#define MCAN_CANTB_TX_SHIFT                     0
 
/* CANRB Bit Fields */
#define MCAN_CANRB_RX_MASK                      0xFFu
#define MCAN_CANRB_RX_SHIFT                     0
 
/* CANACR Bit Fields */
#define MCAN_CANACR_AC_MASK                     0xFFu
#define MCAN_CANACR_AC_SHIFT                    0
 
/* CANAMR Bit Fields */
#define MCAN_CANAMR_AM_MASK                     0xFFu
#define MCAN_CANAMR_AM_SHIFT                    0
 
/* CANRMC Bit Fields */
#define MCAN_CANRMC_RMC_MASK                    0x1Fu
#define MCAN_CANRMC_RMC_SHIFT                   0
 
/* CANTB2R Bit Fields */
#define MCAN_CANTB2R_TB2RX_MASK                 0xFFu
#define MCAN_CANTB2R_TB2RX_SHIFT                0
 
/** MCAN - Register Layout Typedef */
typedef struct {
  __IO uint32_t CANMOD;                            /*!< MCANģʽ¼Ä´æÆ÷, offset: 0x0 */
  __O  uint32_t CANCMR;                            /*!< MCANÃüÁî¼Ä´æÆ÷, offset: 0x4 */
  __I  uint32_t CANSR;                             /*!< MCAN״̬¼Ä´æÆ÷, offset: 0x8 */    
  __I  uint32_t CANIR;                             /*!< MCANÖжϼĴæÆ÷, offset: 0xc */    
  __IO uint32_t CANIER;                            /*!< MCANÖжÏʹÄܼĴæÆ÷, offset: 0x10 */    
  __IO uint32_t CANTDCS;                           /*!< MCANÑÓʱ²¹³¥Ê±¼äÉèÖüĴæÆ÷, offset: 0x14 */    
  __IO uint32_t CANBTR0;                           /*!< MCAN×ÜÏß¶¨Ê±¼Ä´æÆ÷0, offset: 0x18 */
  __IO uint32_t CANBTR1;                           /*!< MCAN×ÜÏß¶¨Ê±¼Ä´æÆ÷1, offset: 0x1c */
    __IO uint32_t CANFDBTR0;                         /*!< MCAN FD×ÜÏß¶¨Ê±¼Ä´æÆ÷0, offset: 0x20 */
  __IO uint32_t CANFDBTR1;                         /*!< MCAN FD×ÜÏß¶¨Ê±¼Ä´æÆ÷1, offset: 0x24 */
         uint32_t RESERVED_0[1];
  __IO uint32_t CANHFC;                            /*!< FD½ÓÊÕÖ¡±äƵ²¹³¥¼Ä´æÆ÷, offset: 0x2C */    
         uint32_t RESERVED_1[1];        
  __I  uint32_t CANALC;                            /*!< MCANÖٲöªÊ§¼Ä´æÆ÷, offset: 0x34 */ 
  __I  uint32_t CANECC;                            /*!< MCAN´íÎóÂë²¶»ñ¼Ä´æÆ÷, offset: 0x38 */
  __IO uint32_t CANEWLR;                           /*!< MCAN´íÎ󾯸æÏÞÖÆ¼Ä´æÆ÷, offset: 0x3C */
  __IO uint32_t CANRXERR;                          /*!< MCAN ½ÓÊÕ´íÎó¼ÆÊýÆ÷, offset: 0x40 */
  __IO uint32_t CANTXERR;                          /*!< MCAN·¢ËÍ´íÎó¼ÆÊýÆ÷, offset: 0x44 */
  union 
    {        
        __O uint32_t CANTB[69];                        /*!< MCAN·¢ËÍ»º³åÆ÷0, array offset: 0x48, array step: 0x4  */
        __I uint32_t CANRB[69];                        /*!< MCAN½ÓÊÕ»º³åÆ÷0, array offset: 0x48, array step: 0x4  */
    struct
        {
            __IO uint32_t CANACR[4];                     /*!< MCANÑéÊÕÂë¼Ä´æÆ÷0, array offset: 0x48, array step: 0x4  */
            __IO uint32_t CANAMR[4];                     /*!< MCANÆÁ±ÎÂë¼Ä´æÆ÷0, array offset: 0x58, array step: 0x4  */
            uint32_t RESERVED_2[61];    
        }CANAR; 
    };
             uint32_t RESERVED_3[60];        
  __I  uint32_t CANRMC;                            /*!< MCAN½ÓÊÕ±¨ÎļÆÊýÆ÷, offset: 0x24C*/
         uint32_t RESERVED_4[258];    
  __I  uint32_t CANTB2R[69];                       /*!< MCAN·¢ËÍ»º³åÆ÷¶ÁÈ¡, offset: 0x658, array step: 0x4 */    
 
} MCAN_Type;
 
extern MCAN_Type*        MCAN;
 
 
/** @addtogroup XL6600_StdPeriph_Driver
  * @{
  */
 
/** @addtogroup MCAN 
  * @{
  */
 
/* Exported types ------------------------------------------------------------*/ 
 
/**
 * @brief MCAN ´íÎóÀàÐͳõʼ»¯½á¹¹Ìå
 */
typedef struct
{
    uint8_t MCAN_ErrorWarningLimit ;                 /*!< ´íÎ󾯸æÏÞÖÆ */
    uint8_t MCAN_ReceiveErrorCount ;                /*!< ½ÓÊÕ´íÎó¼ÆÊýÆ÷ */
    uint8_t MCAN_TranmitErrorCount ;                 /*!< ·¢ËÍ´íÎó¼ÆÊýÆ÷ */    
}MCAN_ErrorSettingDef;
 
/**
 * @brief MCAN ³õʼ»¯½á¹¹Ìå
 */
typedef struct
{
    uint32_t MCAN_SJW;                                     /*!< Í¬²½Ìø×ªÎ»¿í */
    uint32_t MCAN_BRP;                                      /*!< ²¨ÌØÂÊÔ¤·ÖƵÆ÷ */
    uint32_t MCAN_SAMP;                                         /*!< ²ÉÑù */
    uint32_t MCAN_TSEG2;                                    /*!< Ê±¼ä¶Î2 */
    uint32_t MCAN_TSEG1;                                    /*!< Ê±¼ä¶Î1 */
    uint32_t MCAN_FDSJW;                                 /*!< CAN FD Í¬²½Ìø×ªÎ»¿í */
    uint32_t MCAN_FDBRP;                                  /*!< CAN FD ²¨ÌØÂÊÔ¤·ÖƵÆ÷ */
    uint32_t MCAN_FDSAMP;                                     /*!< CAN FD ²ÉÑù */
    uint32_t MCAN_FDTSEG2;                                /*!< CAN FD Ê±¼ä¶Î2 */
    uint32_t MCAN_FDTSEG1;                                /*!< CAN FD Ê±¼ä¶Î1 */
}MCAN_InitTypeDef;
   
/**
 * @brief MCAN Â˲¨³õʼ»¯½á¹¹Ìå
 */
typedef struct
{
    uint32_t MCAN_IDMode;                                    /*!< ±êʶ·û¸ñʽ */
    uint32_t MCAN_FiltMode;                            /*!< Â˲¨Ä£Ê½£¬µ¥Â˲¨Æ÷»òÕßË«Â˲¨Æ÷ */
    uint32_t MCAN_IDAR;                                    /*!< MCAN±êʶ·û + Ò»Î»Ô¶³Ì´«ÊäÇëÇó */
    uint32_t MCAN_IDMR;                                       /*!< MCANÑéÊÕÆÁ±Î + Ò»Î»Ô¶³Ì´«ÊäÇëÇó */
    uint32_t MCAN_DIDAR;
    uint32_t MCAN_DIDMR;         
}MCAN_FilterDef, *MCAN_FilterConfigPtr;
 
/** 
  * @brief  MCAN ·¢ËͽÓÊÕÐÅÏ¢³õʼ»¯½á¹¹Ìå
  */
typedef struct
{
  uint32_t MCAN_ID;                                /*!< ±êʶ·û£¬11λ±ê×¼Ö¡»òÕß29Î»ÍØÕ¹Ö¡ */
  uint32_t MCAN_FDBRS;                          /*!< ¿É±äËÙÂÊʹÄÜλ, ½ö²Ù×÷ÓÚFDģʽ  */
  uint32_t MCAN_FDESI;                          /*!< ´íÎó״̬λ, ½ö²Ù×÷ÓÚFDģʽ    */    
  uint32_t MCAN_FF;                             /*!< Ö¡¸ñʽ  */
  uint32_t MCAN_RTR;                               /*!< Ô¶³Ì´«ÊäÇëÇó    £¬Ô¶³ÌÖ¡»òÕßÊý¾ÝÖ¡            */
  uint32_t MCAN_DLC;                            /*!< Êý¾Ý³¤¶È */
  uint8_t MCAN_Data[64];                           /*!< °üº¬µÄ½ÓÊÕÊý¾Ý£¬·¶Î§ÊÇ 0 µ½ 63 */
                                             
} MCAN_MsgTypeDef, *MCAN_MsgConfigPtr;
 
/* Exported constants --------------------------------------------------------*/
/** @defgroup MCAN_Exported_Constants MCANÄ£¿éʹÓòÎÊý¶¨Òå
  * @{
  */
 
 
/**  
    * @defgroup MCAN_Mode_List MCANģʽ¶¨Òå
  * @{
  */    
#define MCAN_NORMALMODE                           0            /*!< Õý³£Ä£Ê½ */
#define MCAN_RESETMODE                            1            /*!< ÖØÖÃģʽ */    
#define MCAN_LISTENONLYMODE                       2            /*!< Ö»Ìýģʽ */
#define MCAN_SELFTESTMODE                         3            /*!< ×Ô²âģʽ */
#define MCAN_SLEEPMODE                            4            /*!< Ë¯Ãßģʽ */
/** 
  * @} 
  */
    
/** 
    * @defgroup MCAN_synchronisation_jump_width MCANͬ²½Ìø×ª¿í¶È¶¨Òå
  * @{
  */    
#define MCAN_SJW_1tq                                     ((uint8_t)0x00)  /*!< 1¸öTqʱÖÓÖÜÆÚ */
#define MCAN_SJW_2tq                                     ((uint8_t)0x01)  /*!< 2¸öTqʱÖÓÖÜÆÚ */
#define MCAN_SJW_3tq                                     ((uint8_t)0x02)  /*!< 3¸öTqʱÖÓÖÜÆÚ */
#define MCAN_SJW_4tq                                     ((uint8_t)0x03)  /*!< 4¸öTqʱÖÓÖÜÆÚ */
/** 
  * @} 
  */
    
/** 
    * @defgroup MCAN_Sample_Times  MCAN²ÉÑùʱ¼ä¶¨Òå
  * @{
  */    
#define MCAN_SAMPLE_1                                    ((uint8_t)0x00) /*!< Ã¿Î»Ò»¸ö²ÉÑù */
#define MCAN_SAMPLE_3                                    ((uint8_t)0x01) /*!< Ã¿Î»Èý¸ö²ÉÑù */
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN_TSEG1_Select MCANʱ¼ä¶Î2¶¨Òå
  * @{
  */
#define MCAN_TSEG1_1tq                                 ((uint8_t)0x00)  /*!< 1¸öTqʱÖÓÖÜÆÚ */    
#define MCAN_TSEG1_2tq                                 ((uint8_t)0x01)  /*!< 2¸öTqʱÖÓÖÜÆÚ */    
#define MCAN_TSEG1_3tq                                 ((uint8_t)0x02)  /*!< 3¸öTqʱÖÓÖÜÆÚ */        
#define MCAN_TSEG1_4tq                                 ((uint8_t)0x03)  /*!< 4¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_5tq                                 ((uint8_t)0x04)  /*!< 5¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_6tq                                 ((uint8_t)0x05)  /*!< 6¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_7tq                                 ((uint8_t)0x06)  /*!< 7¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_8tq                                 ((uint8_t)0x07)  /*!< 8¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_9tq                                 ((uint8_t)0x08)  /*!< 9¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_10tq                                ((uint8_t)0x09)  /*!< 10¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_11tq                                ((uint8_t)0x0A)  /*!< 11¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_12tq                                ((uint8_t)0x0B)  /*!< 12¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_13tq                                ((uint8_t)0x0C)  /*!< 13¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_14tq                                ((uint8_t)0x0D)  /*!< 14¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_15tq                                ((uint8_t)0x0E)  /*!< 15¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG1_16tq                                ((uint8_t)0x0F)  /*!< 16¸öTqʱÖÓÖÜÆÚ */
/** 
  * @} 
  */
    
    
/** 
    * @defgroup MCAN_TSEG2_Select MCANʱ¼ä¶Î1¶¨Òå
  * @{
  */
#define MCAN_TSEG2_1tq                                 ((uint8_t)0x00)  /*!< 1¸öTqʱÖÓÖÜÆÚ */  //Nemo cmt
#define MCAN_TSEG2_2tq                                 ((uint8_t)0x01)  /*!< 2¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_3tq                                 ((uint8_t)0x02)  /*!< 3¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_4tq                                 ((uint8_t)0x03)  /*!< 4¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_5tq                                 ((uint8_t)0x04)  /*!< 5¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_6tq                                 ((uint8_t)0x05)  /*!< 6¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_7tq                                 ((uint8_t)0x06)  /*!< 7¸öTqʱÖÓÖÜÆÚ */
#define MCAN_TSEG2_8tq                                 ((uint8_t)0x07)  /*!< 8¸öTqʱÖÓÖÜÆÚ */
/** 
  * @} 
  */
    
/** 
    * @defgroup MCAN_Filter_Scale  MCANÂ˲¨Ñ¡Ôñ¶¨Òå
  * @{
  */
#define MCAN_Dual_Filter                          ((uint8_t)0x00) /*!< Á½¸öµ¥¶À16λÂ˲¨Æ÷ */
#define MCAN_Single_Filter                        ((uint8_t)0x01) /*!< µ¥¸ö32λÂ˲¨Æ÷ */
/** 
  * @} 
  */
    
/** 
    * @defgroup MCAN_FDM_FRAME  MCANFDÖ¡¶¨Òå
  * @{
  */    
#define MCAN_FDM_NOMFrame                         ((uint8_t)0x00) /*!< ·¢ËÍ֡ΪÆÕͨCANÊý¾ÝÖ¡          */
#define MCAN_FDM_FDFrame                          ((uint8_t)0x01) /*!< ·¢ËÍ֡ΪCAN FDÖ¡      */
/** 
  * @} 
  */     
    
/** 
    * @defgroup MCAN_BRS_Enable MCAN±ÈÌØÂÊת»»
  * @{
  */    
#define MCAN_BRS_DISABLE                          ((uint8_t)0x00) /*!< ÏàͬδËÙÂÊ·¢ËÍ */
#define MCAN_BRS_ENABLE                           ((uint8_t)0x01) /*!< ESI ×ֶΡ¢DLC ×ֶΡ¢DATA ×ֶΡ¢CRC ×Ö¶ÎʹÓÃ¸ßÆµËÙÂÊ·¢ËÍ */
/** 
  * @} 
  */
    
    
/** 
    * @defgroup MCAN_ESI_Define MCAN´íÎó¼ì²â
  * @{
  */        
#define MCAN_ESI_ACTIVE                           ((uint8_t)0x00) /*!< »î¶¯´íÎó±êÖ¾ */
#define MCAN_ESI_PASSIVE                              ((uint8_t)0x01) /*!< ±»¶¯´íÎó±êÖ¾ */
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN_FRAME_FORMAT MCANÖ¡½á¹¹¶¨Òå
  * @{
  */    
#define MCAN_Standard_Frame                       ((uint8_t)0x00) /*!< ±ê×¼Ö¡ */
#define MCAN_Extended_Frame                       ((uint8_t)0x01) /*!< ÍØÕ¹Ö¡ */
#define MCAN_Custom_Frame                        ((uint8_t)0x02) /*!< Ìض¨Ö¡ */
/** 
  * @} 
  */
    
/** 
    * @defgroup MCAN_REMOTE_TYPE MCANÖ¡½á¹¹¶¨Òå
  * @{
  */    
#define MCAN_RTR_Data                             ((uint8_t)0x00)  /*!< Êý¾ÝÖ¡ */
#define MCAN_RTR_Remote                           ((uint8_t)0x01)  /*!< Ô¶³ÌÖ¡ */
/** 
  * @} 
  */
    
    
/** 
    * @defgroup MCAN_DATA_LENGTH MCANÊý¾Ý³¤¶È
  * @{
  */
#define MCAN_DLC_DATASIZE0                        ((uint8_t)0x00)  /*!< 0×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE1                        ((uint8_t)0x01)  /*!< 1×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE2                        ((uint8_t)0x02)  /*!< 2×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE3                        ((uint8_t)0x03)  /*!< 3×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE4                        ((uint8_t)0x04)  /*!< 4×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE5                        ((uint8_t)0x05)  /*!< 5×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE6                        ((uint8_t)0x06)  /*!< 6×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE7                        ((uint8_t)0x07)  /*!< 7×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE8                        ((uint8_t)0x08)  /*!< 8×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE12                       ((uint8_t)0x09)  /*!< 12×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE16                       ((uint8_t)0x0A)  /*!< 16×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE20                       ((uint8_t)0x0B)  /*!< 20×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE24                       ((uint8_t)0x0C)  /*!< 24×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE32                       ((uint8_t)0x0D)  /*!< 32×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE48                       ((uint8_t)0x0E)  /*!< 48×Ö½ÚÊý¾Ý³¤¶È */
#define MCAN_DLC_DATASIZE64                       ((uint8_t)0x0F)  /*!< 64×Ö½ÚÊý¾Ý³¤¶È */
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN_Bus_Error MCAN´íÎóÀàÐÍ
  * @{
  */
typedef enum
{
  MCAN_BusErrorType = 0x00,             /*!< Î»´íÎó */
  MCAN_BusErrorDirection  = 0x01,       /*!< ±íµ¥´íÎó */
  MCAN_BusErrorPosition = 0x02          /*!< Ìî³ä´íÎó */
}MCAN_BusErrorCaptureDef;
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN Command_Set MCAN ÃüÁîÀàÐÍ
  * @{
  */
#define MCAN_TransmissionRequest                         0x01                     /*!< ·¢ËÍÇëÇó */
#define    MCAN_AbortTransmission                            0x02                 /*!< ´«ÊäÖÐÖ¹ */                   
#define    MCAN_ReleaseReceiveBuffer                        0x04                  /*!< ÊͷŽÓÊÕ»º³å */
#define    MCAN_ClearDataOverrun                            0x08                 /*!< ÇåÁãÊý¾ÝÒç³ö */
#define    MCAN_SelfReceptionRequest                        0x10                 /*!< ×Ô½ÓÊÕÇëÇó */
/** 
  * @} 
  */    
 
/** 
    * @defgroup MCAN_Status_SR  MCAN״̬ÀàÐÍ
  * @{
  */
typedef enum {
    MCAN_ReceiveBufferStatus= 0,          /*!< ½ÓÊÕ»º³åÇø×´Ì¬ */
    MCAN_DataOverrunStatus,               /*!< Êý¾ÝÒç³ö״̬ */
    MCAN_TransBufferStatus,               /*!< ·¢ËÍ»º³åÇø×´Ì¬ */
    MCAN_TransCompleteStatus,             /*!< ´«ÊäÍê³É״̬ */
    MCAN_ReceiveStatus,                   /*!< ½ÓÊÕ״̬ */
    MCAN_TransmitStatus,                  /*!< ·¢ËÍ״̬ */
    MCAN_ErrorStatus,                     /*!< ´íÎó״̬ */
    MCAN_BusStatus                          /*!< ×ÜÏß״̬ */
} MCAN_StatusTypeDef;
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN_Interrupt_ID MCANÖжÏID
  * @{
  */
typedef enum {
    MCAN_ReceiveInterrupt= 0,             /*!< ½ÓÊÕÖжϠ*/
    MCAN_TransmitInterrupt,               /*!< ·¢ËÍÖжϠ*/
    MCAN_ErrorWarningInterrupt,           /*!< ´íÎ󾯸æÖжϠ*/
    MCAN_DataOverrunInterrupt,            /*!< Êý¾ÝÒç³öÖжϠ*/
    MCAN_WakeUpInterrupt,                 /*!< »½ÐÑÖжϠ*/
    MCAN_ErrorPassiveInterrupt,           /*!< ´íÎó±»¶¯ÖжϠ*/
    MCAN_ArbitrationLostInterrupt,        /*!< ÖٲöªÊ§ÖжϠ*/
    MCAN_BusErrorInterrupt                /*!< ×ÜÏß´íÎóÖжϠ*/
} MCAN_InterruptFlgDef;
/** 
  * @} 
  */
 
/** 
    * @defgroup MCAN_Interrupt_Enable MCANÖжÏʹÄÜ
  * @{
  */
typedef enum {
    MCAN_ReceiveInterruptEn= 0,            /*!< ½ÓÊÕÖжÏʹÄÜ */
    MCAN_TransmitInterruptEn,              /*!< ·¢ËÍÖжÏʹÄÜ */
    MCAN_ErrorWarningInterruptEn,          /*!< ´íÎ󾯸æÖжÏʹÄÜ */
    MCAN_DataOverrunInterruptEn,           /*!< Êý¾ÝÒç³öÖжÏʹÄÜ */
    MCAN_WakeUpInterruptEn,                /*!< »½ÐÑÖжÏʹÄÜ */
    MCAN_ErrorPassiveInterruptEn,          /*!< ´íÎó±»¶¯ÖжÏʹÄÜ */
    MCAN_ArbitrationLostInterruptEn,       /*!< ÖٲöªÊ§ÖжÏʹÄÜ */
    MCAN_BusErrorInterruptEn               /*!< ×ÜÏß´íÎóÖжÏʹÄÜ */    
} MCAN_InterruptEnDef;
/** 
  * @} 
  */
 
/**
    * @}
    */
 
 
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/ 
void MCAN_DeInit(MCAN_Type* MCANx);
void MCAN_Init(MCAN_Type* MCANx, const MCAN_InitTypeDef* MCAN_InitStruct);
void MCAN_FDCmd(MCAN_Type* MCANx, FunctionalState NewState);
void MCAN_FDSendFormatSel(MCAN_Type* MCANx, uint8_t FdFormat);
void MCAN_FDTDCSet(MCAN_Type* MCANx, uint32_t CompensateTime);
void MCAN_FDTDCENCmd(MCAN_Type* MCANx, FunctionalState NewState);
void MCAN_FDHFCSet(MCAN_Type* MCANx, uint32_t CompensateTime);
void MCAN_FilterConfig(MCAN_Type* MCANx, const MCAN_FilterDef* MCAN_FilterStruct);
void MCAN_LoadTransmitData(MCAN_Type *MCANx, const MCAN_MsgTypeDef* TxMessage);
void MCAN_ReceiveData(MCAN_Type *MCANx, MCAN_MsgTypeDef* RxMessage);
void MCAN_SetMode(MCAN_Type *MCANx, uint8_t MCAN_ModeType);
void MCAN_WakeUp(MCAN_Type *MCANx);
void MCAN_SetCmd(MCAN_Type *MCANx, uint8_t MCAN_CommandType);
void MCAN_ClearReceiveInterrupt(MCAN_Type *MCANx);
FlagStatus MCAN_GetStatus(const MCAN_Type *MCANx, MCAN_StatusTypeDef MCAN_StatusType);
ITStatus MCAN_GetInterruptFlg(const MCAN_Type *MCANx, MCAN_InterruptFlgDef MCAN_InterruptFlg);
void MCAN_InterruptEn(MCAN_Type *MCANx, MCAN_InterruptEnDef MCAN_Interrupt, FunctionalState NewState);
uint8_t MCAN_ArbitrationLostCap(const MCAN_Type *MCANx);
uint8_t MCAN_GetBusErrorType(const MCAN_Type *MCANx, MCAN_BusErrorCaptureDef MCAN_BusErrorCapture);
uint8_t MCAN_GetReceiveErrorCounter(const MCAN_Type *MCANx);
uint8_t MCAN_GetTransmitErrorCounter(const MCAN_Type *MCANx);
uint8_t MCAN_GetReceiveMessageCounter(const MCAN_Type *MCANx);
void MCAN_ErrorSettingModify(MCAN_Type *MCANx, const MCAN_ErrorSettingDef *MCAN_ErrorSetting);
void MCAN_Enable(MCAN_Type* MCANx, FunctionalState NewState);
#ifdef __cplusplus
}
#endif
 
#endif   /*__XL_MCAN_H__ */
 
/**
  * @}
  */
 
/**
  * @}
  */