533 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			533 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// @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>© 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
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 |