/** ****************************************************************************** * @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. * *

© COPYRIGHT 2019 Chipways

****************************************************************************** */ /* 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__ */ /** * @} */ /** * @} */