rt-thread-official/bsp/mm32f327x/Libraries/MM32F327x/Include/reg_can.h

533 lines
36 KiB
C
Raw Normal View History

2021-08-06 16:59:04 +08:00
////////////////////////////////////////////////////////////////////////////////
/// @file reg_can.h
/// @author AE TEAM
/// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
/// MM32 FIRMWARE LIBRARY.
////////////////////////////////////////////////////////////////////////////////
/// @attention
///
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
///
/// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
////////////////////////////////////////////////////////////////////////////////
// Define to prevent recursive inclusion
#ifndef __REG_CAN_H
#define __REG_CAN_H
// Files includes
#include <stdint.h>
#include <stdbool.h>
#include "types.h"
#if defined ( __CC_ARM )
#pragma anon_unions
#endif
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN Base Address Definition
////////////////////////////////////////////////////////////////////////////////
#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) ///< Base Address: 0x40006400
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN Register Structure Definition
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN basic
////////////////////////////////////////////////////////////////////////////////
typedef struct {
__IO u32 CR; ///< Control register, offset: 0x00
__IO u32 CMR; ///< Command register, offset: 0x04
__IO u32 SR; ///< <Status register, offset: 0x08
__IO u32 IR; ///< Interrupt register, offset: 0x0c
__IO u32 ACR; ///< Acceptance Code register, offset: 0x10
__IO u32 AMR; ///< Acceptance Mask register, offset: 0x14
__IO u32 BTR0; ///< Bus Timing register 0, offset: 0x18
__IO u32 BTR1; ///< Bus Timing register 1, offset: 0x1C
__IO u32 RESERVED0;
__IO u32 RESERVED1;
__IO u32 TXID0; ///< Send ID register 0, offset: 0x28
__IO u32 TXID1; ///< Send ID register 1, offset: 0x2c
__IO u32 TXDR0; ///< Send Data register 0, offset: 0x30
__IO u32 TXDR1; ///< Send Data register 1, offset: 0x34
__IO u32 TXDR2; ///< Send Data register 2, offset: 0x38
__IO u32 TXDR3; ///< Send Data register 3, offset: 0x3c
__IO u32 TXDR4; ///< Send Data register 4, offset: 0x40
__IO u32 TXDR5; ///< Send Data register 5, offset: 0x44
__IO u32 TXDR6; ///< Send Data register 6, offset: 0x48
__IO u32 TXDR7; ///< Send Data register 7, offset: 0x4c
__IO u32 RXID0; ///< Mode register, offset: 0x50
__IO u32 RXID1; ///< Mode register, offset: 0x54
__IO u32 RXDR0; ///< Mode register, offset: 0x58
__IO u32 RXDR1; ///< Mode register, offset: 0x5C
__IO u32 RXDR2; ///< Mode register, offset: 0x60
__IO u32 RXDR3; ///< Mode register, offset: 0x64
__IO u32 RXDR4; ///< Mode register, offset: 0x68
__IO u32 RXDR5; ///< Mode register, offset: 0x6c
__IO u32 RXDR6; ///< Mode register, offset: 0x70
__IO u32 RXDR7; ///< Mode register, offset: 0x74
__IO u32 RESERVED2;
__IO u32 CDR; ///< Clock Divider register, offset: 0x7c
} CAN_TypeDef;
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN Peli
////////////////////////////////////////////////////////////////////////////////
typedef struct {
__IO u32 MOD; ///< Mode register, offset: 0x00
__IO u32 CMR; ///< Command register, offset: 0x04
__IO u32 SR; ///< Status register, offset: 0x08
__IO u32 IR; ///< Interrupt Enable register, offset: 0x0c
__IO u32 IER; ///< Mode register, offset: 0x10
__IO u32 RESERVED0;
__IO u32 BTR0; ///< Bus Timing register 0, offset: 0x18
__IO u32 BTR1; ///< Bus Timing register 1, offset: 0x1C
__IO u32 RESERVED1;
__IO u32 RESERVED2;
__IO u32 RESERVED3;
__IO u32 ALC; ///< Arbitration Lost Capture register, offset: 0x2c
__IO u32 ECC; ///< Error Code Capture register, offset: 0x30
__IO u32 EWLR; ///< Error Warning Limit register, offset: 0x34
__IO u32 RXERR; ///< RX Error Counter register, offset: 0x38
__IO u32 TXERR; ///< TX Error Counter register, offset: 0x3c
__IO u32 FF; ///< Frame Format register, offset: 0x40
__IO u32 ID0; ///< ID register 0, offset: 0x44
__IO u32 ID1; ///< ID register 1, offset: 0x48
__IO u32 DATA0; ///< Data register 0, offset: 0x4c
__IO u32 DATA1; ///< Data register 1, offset: 0x50
__IO u32 DATA2; ///< Data register 2, offset: 0x54
__IO u32 DATA3; ///< Data register 3, offset: 0x58
__IO u32 DATA4; ///< Data register 4, offset: 0x5c
__IO u32 DATA5; ///< Data register 5, offset: 0x60
__IO u32 DATA6; ///< Data register 6, offset: 0x64
__IO u32 DATA7; ///< Data register 7, offset: 0x68
__IO u32 DATA8; ///< Data register 8, offset: 0x6c
__IO u32 DATA9; ///< Data register 9, offset: 0x70
__IO u32 RMC; ///< RMC register, offset: 0x74
__IO u32 RBSA; ///< RBSA register, offset: 0x78
__IO u32 CDR; ///< Clock Divider register offset: 0x7c
} CAN_Peli_TypeDef;
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN type pointer Definition
////////////////////////////////////////////////////////////////////////////////
typedef struct {
__IO u32 ACR0;
__IO u32 ACR1;
__IO u32 ACR2;
__IO u32 ACR3;
__IO u32 AMR0;
__IO u32 AMR1;
__IO u32 AMR2;
__IO u32 AMR3;
} CAN_FLT_GROUP;
typedef struct {
CAN_FLT_GROUP GROUP0; //Address offset: 0x40
u32 RESERVED[8]; //Address offset: 0x60
__IO u32 AFM0; //Address offset: 0x80
__IO u32 AFM1; //Address offset: 0x84
__IO u32 AFM2; //Address offset: 0x88
__IO u32 FGA0; //Address offset: 0x8C
__IO u32 FGA1; //Address offset: 0x90
__IO u32 FGA2; //Address offset: 0x94
CAN_FLT_GROUP GROUP1; //Address offset: 0x98
CAN_FLT_GROUP GROUP2; //Address offset: 0xB8
CAN_FLT_GROUP GROUP3; //Address offset: 0xD8
CAN_FLT_GROUP GROUP4; //Address offset: 0xF8
CAN_FLT_GROUP GROUP5; //Address offset: 0x118
CAN_FLT_GROUP GROUP6; //Address offset: 0x138
CAN_FLT_GROUP GROUP7; //Address offset: 0x158
CAN_FLT_GROUP GROUP8; //Address offset: 0x178
CAN_FLT_GROUP GROUP9; //Address offset: 0x198
CAN_FLT_GROUP GROUP10; //Address offset: 0x1B8
CAN_FLT_GROUP GROUP11; //Address offset: 0x1D8
CAN_FLT_GROUP GROUP12; //Address offset: 0x1F8
CAN_FLT_GROUP GROUP13; //Address offset: 0x218
CAN_FLT_GROUP GROUP14; //Address offset: 0x238
CAN_FLT_GROUP GROUP15; //Address offset: 0x258
CAN_FLT_GROUP GROUP16; //Address offset: 0x278
CAN_FLT_GROUP GROUP17; //Address offset: 0x298
CAN_FLT_GROUP GROUP18; //Address offset: 0x2B8
CAN_FLT_GROUP GROUP19; //Address offset: 0x2D8
} CAN_Peli_FLT_TypeDef;
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN type pointer Definition
////////////////////////////////////////////////////////////////////////////////
#define CAN1 ((CAN_TypeDef*) CAN1_BASE)
#define CAN1_PELI ((CAN_Peli_TypeDef*) CAN1_BASE)
#define CAN_Peli_FLT ((CAN_Peli_FLT_TypeDef*)(CAN1_BASE + 0x40))
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN basic
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_CR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_CR_RR_Pos (0)
#define CAN_CR_RR (0x01U << CAN_CR_RR_Pos) ///< CAN reset request
#define CAN_CR_RIE_Pos (1)
#define CAN_CR_RIE (0x01U << CAN_CR_RIE_Pos) ///< CAN receive interrupt enable
#define CAN_CR_TIE_Pos (2)
#define CAN_CR_TIE (0x01U << CAN_CR_TIE_Pos) ///< CAN transmit interrupt enable
#define CAN_CR_EIE_Pos (3)
#define CAN_CR_EIE (0x01U << CAN_CR_EIE_Pos) ///< CAN error interrupt enable
#define CAN_CR_OIE_Pos (4)
#define CAN_CR_OIE (0x01U << CAN_CR_OIE_Pos) ///< CAN overflow interrupt enable
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_CMR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_CMR_TR_Pos (0)
#define CAN_CMR_TR (0x01U << CAN_CMR_TR_Pos ) ///< CAN transmission request
#define CAN_CMR_AT_Pos (1)
#define CAN_CMR_AT (0x01U << CAN_CMR_AT_Pos ) ///< CAN abort transmission
#define CAN_CMR_RRB_Pos (2)
#define CAN_CMR_RRB (0x01U << CAN_CMR_RRB_Pos) ///< CAN release receive buffer
#define CAN_CMR_CDO_Pos (3)
#define CAN_CMR_CDO (0x01U << CAN_CMR_CDO_Pos) ///< CAN clear data overrun
#define CAN_CMR_GTS_Pos (4)
#define CAN_CMR_GTS (0x01U << CAN_CMR_GTS_Pos) ///< CAN go to sleep
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_SR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_SR_RBS_Pos (0)
#define CAN_SR_RBS (0x01U << CAN_SR_RBS_Pos) ///< CAN receive buffer status
#define CAN_SR_DOS_Pos (1)
#define CAN_SR_DOS (0x01U << CAN_SR_DOS_Pos) ///< CAN data overrun status
#define CAN_SR_TBS_Pos (2)
#define CAN_SR_TBS (0x01U << CAN_SR_TBS_Pos) ///< CAN transmit buffer status
#define CAN_SR_TCS_Pos (3)
#define CAN_SR_TCS (0x01U << CAN_SR_TCS_Pos) ///< CAN transmission complete status
#define CAN_SR_RS_Pos (4)
#define CAN_SR_RS (0x01U << CAN_SR_RS_Pos) ///< CAN receive status
#define CAN_SR_TS_Pos (5)
#define CAN_SR_TS (0x01U << CAN_SR_TS_Pos) ///< CAN transmit status
#define CAN_SR_ES_Pos (6)
#define CAN_SR_ES (0x01U << CAN_SR_ES_Pos) ///< CAN error status
#define CAN_SR_BS_Pos (7)
#define CAN_SR_BS (0x01U << CAN_SR_BS_Pos) ///< CAN bus status
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_ACR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_ACR_AC (0xFFU << 0) ///< CAN acceptance code
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_AMR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_AMR_AM_Pos (0)
#define CAN_AMR_AM (0xFFU << CAN_AMR_AM_Pos) ///< CAN acceptance mask
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_BTR0 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_BTR0_BRP_Pos (0)
#define CAN_BTR0_BRP (0x003FU << CAN_BTR0_BRP_Pos) ///< CAN baud rate prescaler
#define CAN_BTR0_SJW_Pos (6)
#define CAN_BTR0_SJW (0x03U << CAN_BTR0_SJW_Pos) ///< CAN synchronization jump width
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_BTR1 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_BTR1_TESG1_Pos (0)
#define CAN_BTR1_TESG1 (0x000FU << CAN_BTR1_TESG1_Pos) ///< CAN Time segment 1
#define CAN_BTR1_TESG2_Pos (4)
#define CAN_BTR1_TESG2 (0x07U << CAN_BTR1_TESG2_Pos) ///< CAN Time segment 2
#define CAN_BTR1_SAM_Pos (7)
#define CAN_BTR1_SAM (0x01U << CAN_BTR1_SAM_Pos) ///< CAN sampling
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXID0 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXID0_ID_3_Pos (0)
#define CAN_TXID0_ID_3 (0x01U << CAN_TXID0_ID_3_Pos) ///< CAN identifier byte 3
#define CAN_TXID0_ID_4_Pos (1)
#define CAN_TXID0_ID_4 (0x01U << CAN_TXID0_ID_4_Pos) ///< CAN identifier byte 4
#define CAN_TXID0_ID_5_Pos (2)
#define CAN_TXID0_ID_5 (0x01U << CAN_TXID0_ID_5_Pos) ///< CAN identifier byte 5
#define CAN_TXID0_ID_6_Pos (3)
#define CAN_TXID0_ID_6 (0x01U << CAN_TXID0_ID_6_Pos) ///< CAN identifier byte 6
#define CAN_TXID0_ID_7_Pos (4)
#define CAN_TXID0_ID_7 (0x01U << CAN_TXID0_ID_7_Pos) ///< CAN identifier byte 7
#define CAN_TXID0_ID_8_Pos (5)
#define CAN_TXID0_ID_8 (0x01U << CAN_TXID0_ID_8_Pos) ///< CAN identifier byte 8
#define CAN_TXID0_ID_9_Pos (6)
#define CAN_TXID0_ID_9 (0x01U << CAN_TXID0_ID_9_Pos) ///< CAN identifier byte 9
#define CAN_TXID0_ID_10_Pos (7)
#define CAN_TXID0_ID_10 (0x01U << CAN_TXID0_ID_10_Pos) ///< CAN identifier byte 10
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXID1 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXID1_DLC0_Pos (0)
#define CAN_TXID1_DLC0 (0x01U << CAN_TXID1_DLC0_Pos) ///< CAN data length code 0 ~ 8
#define CAN_TXID1_DLC1_Pos (1)
#define CAN_TXID1_DLC1 (0x01U << CAN_TXID1_DLC1_Pos) ///< CAN data length code 0 ~ 8
#define CAN_TXID1_DLC2_Pos (2)
#define CAN_TXID1_DLC2 (0x01U << CAN_TXID1_DLC2_Pos) ///< CAN data length code 0 ~ 8
#define CAN_TXID1_DLC3_Pos (3)
#define CAN_TXID1_DLC3 (0x01U << CAN_TXID1_DLC3_Pos) ///< CAN data length code 0 ~ 8
#define CAN_TXID1_RTR_Pos (4)
#define CAN_TXID1_RTR (0x01U << CAN_TXID1_RTR_Pos ) ///< CAN remote transmission request
#define CAN_TXID1_ID_0_Pos (5)
#define CAN_TXID1_ID_0 (0x01U << CAN_TXID1_ID_0_Pos) ///< CAN identifier byte 0
#define CAN_TXID1_ID_1_Pos (6)
#define CAN_TXID1_ID_1 (0x01U << CAN_TXID1_ID_1_Pos) ///< CAN identifier byte 1
#define CAN_TXID1_ID_2_Pos (7)
#define CAN_TXID1_ID_2 (0x01U << CAN_TXID1_ID_2_Pos) ///< CAN identifier byte 2
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXDRn register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXDRn (0x00FFU) // (n = 0..7) ///< CAN send data
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_CDR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_CDR_MODE_Pos (7)
#define CAN_CDR_MODE (0x01U << CAN_CDR_MODE_Pos) ///< CAN mode
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN Peli
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_MOD register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_MOD_RM_Pos (0)
#define CAN_MOD_RM (0x01U << CAN_MOD_RM_Pos) ///< CAN reset mode
#define CAN_MOD_LOM_Pos (1)
#define CAN_MOD_LOM (0x01U << CAN_MOD_LOM_Pos) ///< CAN listen only mode
#define CAN_MOD_STM_Pos (2)
#define CAN_MOD_STM (0x01U << CAN_MOD_STM_Pos) ///< CAN self test mode
#define CAN_MOD_AFM_Pos (3)
#define CAN_MOD_AFM (0x01U << CAN_MOD_AFM_Pos) ///< CAN acceptance filter mode
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_CMR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_CMR_TR_Pos (0)
#define CAN_CMR_TR (0x01U << CAN_CMR_TR_Pos ) ///< CAN transmission request
#define CAN_CMR_AT_Pos (1)
#define CAN_CMR_AT (0x01U << CAN_CMR_AT_Pos ) ///< CAN abort transmission
#define CAN_CMR_RRB_Pos (2)
#define CAN_CMR_RRB (0x01U << CAN_CMR_RRB_Pos) ///< CAN release receive buffer
#define CAN_CMR_CDO_Pos (3)
#define CAN_CMR_CDO (0x01U << CAN_CMR_CDO_Pos) ///< CAN clear data overrun
#define CAN_CMR_SRR_Pos (4)
#define CAN_CMR_SRR (0x01U << CAN_CMR_SRR_Pos) ///< CAN self reset request
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_SR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_SR_RBS_Pos (0)
#define CAN_SR_RBS (0x01U << CAN_SR_RBS_Pos) ///< CAN receive buffer status
#define CAN_SR_DOS_Pos (1)
#define CAN_SR_DOS (0x01U << CAN_SR_DOS_Pos) ///< CAN data overrun status
#define CAN_SR_TBS_Pos (2)
#define CAN_SR_TBS (0x01U << CAN_SR_TBS_Pos) ///< CAN transmit buffer status
#define CAN_SR_TCS_Pos (3)
#define CAN_SR_TCS (0x01U << CAN_SR_TCS_Pos) ///< CAN transmission complete status
#define CAN_SR_RS_Pos (4)
#define CAN_SR_RS (0x01U << CAN_SR_RS_Pos) ///< CAN receive status
#define CAN_SR_TS_Pos (5)
#define CAN_SR_TS (0x01U << CAN_SR_TS_Pos) ///< CAN transmit status
#define CAN_SR_ES_Pos (6)
#define CAN_SR_ES (0x01U << CAN_SR_ES_Pos) ///< CAN error status
#define CAN_SR_BS_Pos (7)
#define CAN_SR_BS (0x01U << CAN_SR_BS_Pos) ///< CAN bus status
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_IR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_IR_RI_Pos (0)
#define CAN_IR_RI (0x01U << CAN_IR_RI_Pos) ///< CAN receive interrupt
#define CAN_IR_TI_Pos (1)
#define CAN_IR_TI (0x01U << CAN_IR_TI_Pos) ///< CAN transmit interrupt
#define CAN_IR_EI_Pos (2)
#define CAN_IR_EI (0x01U << CAN_IR_EI_Pos) ///< CAN error interrupt
#define CAN_IR_DOI_Pos (3)
#define CAN_IR_DOI (0x01U << CAN_IR_DOI_Pos) ///< CAN data overrun interrupt
#define CAN_IR_EPI_Pos (5)
#define CAN_IR_EPI (0x01U << CAN_IR_EPI_Pos) ///< CAN error passive interrupt
#define CAN_IR_ALI_Pos (6)
#define CAN_IR_ALI (0x01U << CAN_IR_ALI_Pos) ///< CAN arbitration lost interrupt
#define CAN_IR_BEI_Pos (7)
#define CAN_IR_BEI (0x01U << CAN_IR_BEI_Pos) ///< CAN bus error interrupt
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_IR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_IER_RIE_Pos (0)
#define CAN_IER_RIE (0x01U << CAN_IER_RIE_Pos) ///< CAN receive interrupt enable
#define CAN_IER_TIE_Pos (1)
#define CAN_IER_TIE (0x01U << CAN_IER_TIE_Pos) ///< CAN transmit interrupt enable
#define CAN_IER_EIE_Pos (2)
#define CAN_IER_EIE (0x01U << CAN_IER_EIE_Pos) ///< CAN error interrupt enable
#define CAN_IER_DOIE_Pos (3)
#define CAN_IER_DOIE (0x01U << CAN_IER_DOIE_Pos) ///< CAN data overrun interrupt enable
#define CAN_IER_EPIE_Pos (5)
#define CAN_IER_EPIE (0x01U << CAN_IER_EPI_Pos) ///< CAN error passive interrupt enable
#define CAN_IER_ALIE_Pos (6)
#define CAN_IER_ALIE (0x01U << CAN_IER_ALIE_Pos) ///< CAN arbitration lost interrupt enable
#define CAN_IER_BEIE_Pos (7)
#define CAN_IER_BEIE (0x01U << CAN_IER_BEIE_Pos) ///< CAN bus error interrupt enable
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_ACRn register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_ACRn_AC_Pos (0)
#define CAN_ACRn_AC (0xFFU << CAN_ACRn_AC_Pos) ///< CAN acceptance code
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_AMRn register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_AMRn_AM_Pos (0)
#define CAN_AMRn_AM (0xFFU << CAN_AMRn_AM_Pos) ///< CAN acceptance mask
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_BTR0 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_BTR0_BRP_Pos (0)
#define CAN_BTR0_BRP (0x003FU << CAN_BTR0_BRP_Pos) ///< CAN baud rate prescaler
#define CAN_BTR0_SJW_Pos (6)
#define CAN_BTR0_SJW (0x03U << CAN_BTR0_SJW_Pos) ///< CAN synchronization jump width
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_ALC register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_ALC_BITNO_Pos (0)
#define CAN_ALC_BITNO (0x001FU << CAN_ALC_BITNO_Pos) ///< CAN bit number
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_ECC register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_ECC_SEG_Pos (0)
#define CAN_ECC_SEG (0x001FU <<CAN_ECC_SEG_Pos) ///< CAN error code capture
#define CAN_ECC_DIR_Pos (5)
#define CAN_ECC_DIR (0x01U << CAN_ECC_DIR_Pos) ///< CAN direction
#define CAN_ECC_ERRC_Pos (6)
#define CAN_ECC_ERRC (0x03U << CAN_ECC_ERRC_Pos) ///< CAN error code
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_EWLR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_EWLR_EWL_Pos (0)
#define CAN_EWLR_EWL (0x00FFU << CAN_EWLR_EWL_Pos) ///< CAN programmable error warning limit
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_RXERR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_RXERR_RXERR_Pos (0)
#define CAN_RXERR_RXERR (0x00FFU << CAN_RXERR_RXERR_Pos) ///< CAN RX error counter register
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXERR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXERR_TXERR_Pos (0)
#define CAN_TXERR_TXERR (0x00FFU << CAN_TXERR_TXERR_Pos) ///< CAN TX error counter register
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_FF register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_FF_DLC_0_Pos (0)
#define CAN_FF_DLC_0 (0x01U << CAN_FF_DLC_0_Pos) ///< CAN data length code bit
#define CAN_FF_DLC_1_Pos (1)
#define CAN_FF_DLC_1 (0x01U << CAN_FF_DLC_1_Pos) ///< CAN data length code bit
#define CAN_FF_DLC_2_Pos (2)
#define CAN_FF_DLC_2 (0x01U << CAN_FF_DLC_2_Pos) ///< CAN data length code bit
#define CAN_FF_DLC_3_Pos (3)
#define CAN_FF_DLC_3 (0x01U << CAN_FF_DLC_3_Pos) ///< CAN data length code bit
#define CAN_FF_RTR_Pos (6)
#define CAN_FF_RTR (0x01U << CAN_FF_RTR_Pos) ///< CAN remote transmission request
#define CAN_FF_FF_Pos (7)
#define CAN_FF_FF (0x01U << CAN_FF_FF_Pos) ///< CAN frame format
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXID0 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXID0_ID_21_Pos (0)
#define CAN_TXID0_ID_21 (0x01U << CAN_TXID0_ID_21_Pos) ///< CAN identifier bit 21
#define CAN_TXID0_ID_22_Pos (1)
#define CAN_TXID0_ID_22 (0x01U << CAN_TXID0_ID_22_Pos) ///< CAN identifier bit 22
#define CAN_TXID0_ID_23_Pos (2)
#define CAN_TXID0_ID_23 (0x01U << CAN_TXID0_ID_23_Pos) ///< CAN identifier bit 23
#define CAN_TXID0_ID_24_Pos (3)
#define CAN_TXID0_ID_24 (0x01U << CAN_TXID0_ID_24_Pos) ///< CAN identifier bit 24
#define CAN_TXID0_ID_25_Pos (4)
#define CAN_TXID0_ID_25 (0x01U << CAN_TXID0_ID_25_Pos) ///< CAN identifier bit 25
#define CAN_TXID0_ID_26_Pos (5)
#define CAN_TXID0_ID_26 (0x01U << CAN_TXID0_ID_26_Pos) ///< CAN identifier bit 26
#define CAN_TXID0_ID_27_Pos (6)
#define CAN_TXID0_ID_27 (0x01U << CAN_TXID0_ID_27_Pos) ///< CAN identifier bit 27
#define CAN_TXID0_ID_28_Pos (7)
#define CAN_TXID0_ID_28 (0x01U << CAN_TXID0_ID_28_Pos) ///< CAN identifier bit 28
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXID1 register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXID1_ID_13_Pos (0)
#define CAN_TXID1_ID_13 (0x01U << CAN_TXID1_ID_13_Pos) ///< CAN identifier bit 13
#define CAN_TXID1_ID_14_Pos (1)
#define CAN_TXID1_ID_14 (0x01U << CAN_TXID1_ID_14_Pos) ///< CAN identifier bit 14
#define CAN_TXID1_ID_15_Pos (2)
#define CAN_TXID1_ID_15 (0x01U << CAN_TXID1_ID_15_Pos) ///< CAN identifier bit 15
#define CAN_TXID1_ID_16_Pos (3)
#define CAN_TXID1_ID_16 (0x01U << CAN_TXID1_ID_16_Pos) ///< CAN identifier bit 16
#define CAN_TXID1_ID_17_Pos (4)
#define CAN_TXID1_ID_17 (0x01U << CAN_TXID1_ID_17_Pos) ///< CAN identifier bit 17
#define CAN_TXID1_ID_18_Pos (5)
#define CAN_TXID1_ID_18 (0x01U << CAN_TXID1_ID_18_Pos) ///< CAN identifier bit 18
#define CAN_TXID1_ID_19_Pos (6)
#define CAN_TXID1_ID_19 (0x01U << CAN_TXID1_ID_19_Pos) ///< CAN identifier bit 19
#define CAN_TXID1_ID_20_Pos (7)
#define CAN_TXID1_ID_20 (0x01U << CAN_TXID1_ID_20_Pos) ///< CAN identifier bit 20
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_TXDATAn register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_TXDATAn_Pos (0)
#define CAN_TXDATAn (0x00FFU << CAN_TXDATAn_Pos) ///< CAN transmit data n
////////////////////////////////////////////////////////////////////////////////
/// @brief CAN_CDR register Bit definition
////////////////////////////////////////////////////////////////////////////////
#define CAN_CDR_MODE_Pos (7)
#define CAN_CDR_MODE (0x01U << CAN_CDR_MODE_Pos) ///< CAN mode
/// @}
/// @}
/// @}
////////////////////////////////////////////////////////////////////////////////
#endif
////////////////////////////////////////////////////////////////////////////////