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