current_v/Drivers/FM33LG0xx_FL_Driver/Inc/fm33lg0xx_fl_can.h
2025-12-31 08:21:43 +08:00

2216 lines
77 KiB
C

/**
*******************************************************************************************************
* @file fm33lg0xx_fl_can.h
* @author FMSH Application Team
* @brief Head file of CAN FL Module
*******************************************************************************************************
* @attention
*
* Copyright (c) [2021] [Fudan Microelectronics]
* THIS SOFTWARE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*
*******************************************************************************************************
*/
/* Define to prevent recursive inclusion---------------------------------------------------------------*/
#ifndef __FM33LG0XX_FL_CAN_H
#define __FM33LG0XX_FL_CAN_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes -------------------------------------------------------------------------------------------*/
#include "fm33lg0xx_fl_def.h"
/** @addtogroup FM33LG0XX_FL_Driver
* @{
*/
/** @defgroup CAN CAN
* @brief CAN FL driver
* @{
*/
/* Exported types -------------------------------------------------------------------------------------*/
/** @defgroup CAN_FL_ES_INIT CAN Exported Init structures
* @{
*/
/**
* @brief FL CAN Init Sturcture definition
*/
typedef struct
{
/*工作模式*/
uint8_t mode;
/*同步段长度*/
uint8_t SJW;
/*时间段1*/
uint8_t TS1;
/*时间段2*/
uint8_t TS2;
/*波特率预分频*/
uint8_t BRP;
/*时钟源选择*/
uint8_t clockSource;
} FL_CAN_InitTypeDef;
/**
* @brief CAN filter init structure definition
*/
typedef struct
{
/*滤波器SRR位*/
uint32_t filterIdSRR;
/*滤波器IDE位*/
uint32_t filterIdIDE;
/*滤波器RTR位*/
uint32_t filterIdRTR;
/*滤波器使能*/
uint32_t filterEn;
/*滤波器标准ID*/
uint32_t filterIdStandard;
/*滤波器扩展ID*/
uint32_t filterIdExtend;
/*滤波器ID高11位掩码*/
uint32_t filterMaskIdHigh;
/*滤波器SRR位掩码*/
uint32_t filterMaskIdSRR;
/*滤波器IDE位掩码*/
uint32_t filterMaskIdIDE;
/*滤波器ID低18位掩码*/
uint32_t filterMaskIdLow;
/*滤波器RTR位掩码*/
uint32_t filterMaskIdRTR;
} FL_CAN_FilterInitTypeDef;
/**
* @}
*/
/* Exported constants ---------------------------------------------------------------------------------*/
/** @defgroup CAN_FL_Exported_Constants CAN Exported Constants
* @{
*/
#define CAN_CR_CEN_Pos (1U)
#define CAN_CR_CEN_Msk (0x1U << CAN_CR_CEN_Pos)
#define CAN_CR_CEN CAN_CR_CEN_Msk
#define CAN_CR_SRST_Pos (0U)
#define CAN_CR_SRST_Msk (0x1U << CAN_CR_SRST_Pos)
#define CAN_CR_SRST CAN_CR_SRST_Msk
#define CAN_MSR_LPBACK_Pos (1U)
#define CAN_MSR_LPBACK_Msk (0x1U << CAN_MSR_LPBACK_Pos)
#define CAN_MSR_LPBACK CAN_MSR_LPBACK_Msk
#define CAN_BRPR_BRP_Pos (0U)
#define CAN_BRPR_BRP_Msk (0xffU << CAN_BRPR_BRP_Pos)
#define CAN_BRPR_BRP CAN_BRPR_BRP_Msk
#define CAN_BTR_SJW_Pos (7U)
#define CAN_BTR_SJW_Msk (0x3U << CAN_BTR_SJW_Pos)
#define CAN_BTR_SJW CAN_BTR_SJW_Msk
#define CAN_BTR_TS2_Pos (4U)
#define CAN_BTR_TS2_Msk (0x7U << CAN_BTR_TS2_Pos)
#define CAN_BTR_TS2 CAN_BTR_TS2_Msk
#define CAN_BTR_TS1_Pos (0U)
#define CAN_BTR_TS1_Msk (0xfU << CAN_BTR_TS1_Pos)
#define CAN_BTR_TS1 CAN_BTR_TS1_Msk
#define CAN_ECR_REC_Pos (8U)
#define CAN_ECR_REC_Msk (0xffU << CAN_ECR_REC_Pos)
#define CAN_ECR_REC CAN_ECR_REC_Msk
#define CAN_ECR_TEC_Pos (0U)
#define CAN_ECR_TEC_Msk (0xffU << CAN_ECR_TEC_Pos)
#define CAN_ECR_TEC CAN_ECR_TEC_Msk
#define CAN_ESR_ACKER_Pos (4U)
#define CAN_ESR_ACKER_Msk (0x1U << CAN_ESR_ACKER_Pos)
#define CAN_ESR_ACKER CAN_ESR_ACKER_Msk
#define CAN_ESR_BERR_Pos (3U)
#define CAN_ESR_BERR_Msk (0x1U << CAN_ESR_BERR_Pos)
#define CAN_ESR_BERR CAN_ESR_BERR_Msk
#define CAN_ESR_STER_Pos (2U)
#define CAN_ESR_STER_Msk (0x1U << CAN_ESR_STER_Pos)
#define CAN_ESR_STER CAN_ESR_STER_Msk
#define CAN_ESR_FMER_Pos (1U)
#define CAN_ESR_FMER_Msk (0x1U << CAN_ESR_FMER_Pos)
#define CAN_ESR_FMER CAN_ESR_FMER_Msk
#define CAN_ESR_CRCER_Pos (0U)
#define CAN_ESR_CRCER_Msk (0x1U << CAN_ESR_CRCER_Pos)
#define CAN_ESR_CRCER CAN_ESR_CRCER_Msk
#define CAN_SR_ACFBSY_Pos (11U)
#define CAN_SR_ACFBSY_Msk (0x1U << CAN_SR_ACFBSY_Pos)
#define CAN_SR_ACFBSY CAN_SR_ACFBSY_Msk
#define CAN_SR_TXFLL_Pos (10U)
#define CAN_SR_TXFLL_Msk (0x1U << CAN_SR_TXFLL_Pos)
#define CAN_SR_TXFLL CAN_SR_TXFLL_Msk
#define CAN_SR_TXBFLL_Pos (9U)
#define CAN_SR_TXBFLL_Msk (0x1U << CAN_SR_TXBFLL_Pos)
#define CAN_SR_TXBFLL CAN_SR_TXBFLL_Msk
#define CAN_SR_ESTAT_Pos (7U)
#define CAN_SR_ESTAT_Msk (0x3U << CAN_SR_ESTAT_Pos)
#define CAN_SR_ESTAT CAN_SR_ESTAT_Msk
#define CAN_SR_ERRWRN_Pos (6U)
#define CAN_SR_ERRWRN_Msk (0x1U << CAN_SR_ERRWRN_Pos)
#define CAN_SR_ERRWRN CAN_SR_ERRWRN_Msk
#define CAN_SR_BBSY_Pos (5U)
#define CAN_SR_BBSY_Msk (0x1U << CAN_SR_BBSY_Pos)
#define CAN_SR_BBSY CAN_SR_BBSY_Msk
#define CAN_SR_BIDLE_Pos (4U)
#define CAN_SR_BIDLE_Msk (0x1U << CAN_SR_BIDLE_Pos)
#define CAN_SR_BIDLE CAN_SR_BIDLE_Msk
#define CAN_SR_NORMAL_Pos (3U)
#define CAN_SR_NORMAL_Msk (0x1U << CAN_SR_NORMAL_Pos)
#define CAN_SR_NORMAL CAN_SR_NORMAL_Msk
#define CAN_SR_LBACK_Pos (1U)
#define CAN_SR_LBACK_Msk (0x1U << CAN_SR_LBACK_Pos)
#define CAN_SR_LBACK CAN_SR_LBACK_Msk
#define CAN_SR_CONFIG_Pos (0U)
#define CAN_SR_CONFIG_Msk (0x1U << CAN_SR_CONFIG_Pos)
#define CAN_SR_CONFIG CAN_SR_CONFIG_Msk
#define CAN_ISR_BSOFF_Pos (9U)
#define CAN_ISR_BSOFF_Msk (0x1U << CAN_ISR_BSOFF_Pos)
#define CAN_ISR_BSOFF CAN_ISR_BSOFF_Msk
#define CAN_ISR_ERROR_Pos (8U)
#define CAN_ISR_ERROR_Msk (0x1U << CAN_ISR_ERROR_Pos)
#define CAN_ISR_ERROR CAN_ISR_ERROR_Msk
#define CAN_ISR_RXNEMP_Pos (7U)
#define CAN_ISR_RXNEMP_Msk (0x1U << CAN_ISR_RXNEMP_Pos)
#define CAN_ISR_RXNEMP CAN_ISR_RXNEMP_Msk
#define CAN_ISR_RXOFLW_Pos (6U)
#define CAN_ISR_RXOFLW_Msk (0x1U << CAN_ISR_RXOFLW_Pos)
#define CAN_ISR_RXOFLW CAN_ISR_RXOFLW_Msk
#define CAN_ISR_RXUFLW_Pos (5U)
#define CAN_ISR_RXUFLW_Msk (0x1U << CAN_ISR_RXUFLW_Pos)
#define CAN_ISR_RXUFLW CAN_ISR_RXUFLW_Msk
#define CAN_ISR_RXOK_Pos (4U)
#define CAN_ISR_RXOK_Msk (0x1U << CAN_ISR_RXOK_Pos)
#define CAN_ISR_RXOK CAN_ISR_RXOK_Msk
#define CAN_ISR_TXBFLL_Pos (3U)
#define CAN_ISR_TXBFLL_Msk (0x1U << CAN_ISR_TXBFLL_Pos)
#define CAN_ISR_TXBFLL CAN_ISR_TXBFLL_Msk
#define CAN_ISR_TXFLL_Pos (2U)
#define CAN_ISR_TXFLL_Msk (0x1U << CAN_ISR_TXFLL_Pos)
#define CAN_ISR_TXFLL CAN_ISR_TXFLL_Msk
#define CAN_ISR_TXOK_Pos (1U)
#define CAN_ISR_TXOK_Msk (0x1U << CAN_ISR_TXOK_Pos)
#define CAN_ISR_TXOK CAN_ISR_TXOK_Msk
#define CAN_ISR_ARBLST_Pos (0U)
#define CAN_ISR_ARBLST_Msk (0x1U << CAN_ISR_ARBLST_Pos)
#define CAN_ISR_ARBLST CAN_ISR_ARBLST_Msk
#define CAN_IER_BSOFFIE_Pos (9U)
#define CAN_IER_BSOFFIE_Msk (0x1U << CAN_IER_BSOFFIE_Pos)
#define CAN_IER_BSOFFIE CAN_IER_BSOFFIE_Msk
#define CAN_IER_ERRORIE_Pos (8U)
#define CAN_IER_ERRORIE_Msk (0x1U << CAN_IER_ERRORIE_Pos)
#define CAN_IER_ERRORIE CAN_IER_ERRORIE_Msk
#define CAN_IER_RXNEMPIE_Pos (7U)
#define CAN_IER_RXNEMPIE_Msk (0x1U << CAN_IER_RXNEMPIE_Pos)
#define CAN_IER_RXNEMPIE CAN_IER_RXNEMPIE_Msk
#define CAN_IER_RXOFLWIE_Pos (6U)
#define CAN_IER_RXOFLWIE_Msk (0x1U << CAN_IER_RXOFLWIE_Pos)
#define CAN_IER_RXOFLWIE CAN_IER_RXOFLWIE_Msk
#define CAN_IER_RXUFLWIE_Pos (5U)
#define CAN_IER_RXUFLWIE_Msk (0x1U << CAN_IER_RXUFLWIE_Pos)
#define CAN_IER_RXUFLWIE CAN_IER_RXUFLWIE_Msk
#define CAN_IER_RXOKIE_Pos (4U)
#define CAN_IER_RXOKIE_Msk (0x1U << CAN_IER_RXOKIE_Pos)
#define CAN_IER_RXOKIE CAN_IER_RXOKIE_Msk
#define CAN_IER_TXBFLLIE_Pos (3U)
#define CAN_IER_TXBFLLIE_Msk (0x1U << CAN_IER_TXBFLLIE_Pos)
#define CAN_IER_TXBFLLIE CAN_IER_TXBFLLIE_Msk
#define CAN_IER_TXFLLIE_Pos (2U)
#define CAN_IER_TXFLLIE_Msk (0x1U << CAN_IER_TXFLLIE_Pos)
#define CAN_IER_TXFLLIE CAN_IER_TXFLLIE_Msk
#define CAN_IER_TXOKIE_Pos (1U)
#define CAN_IER_TXOKIE_Msk (0x1U << CAN_IER_TXOKIE_Pos)
#define CAN_IER_TXOKIE CAN_IER_TXOKIE_Msk
#define CAN_IER_ARBLSTIE_Pos (0U)
#define CAN_IER_ARBLSTIE_Msk (0x1U << CAN_IER_ARBLSTIE_Pos)
#define CAN_IER_ARBLSTIE CAN_IER_ARBLSTIE_Msk
#define CAN_ICR_CBSOFF_Pos (9U)
#define CAN_ICR_CBSOFF_Msk (0x1U << CAN_ICR_CBSOFF_Pos)
#define CAN_ICR_CBSOFF CAN_ICR_CBSOFF_Msk
#define CAN_ICR_CERROR_Pos (8U)
#define CAN_ICR_CERROR_Msk (0x1U << CAN_ICR_CERROR_Pos)
#define CAN_ICR_CERROR CAN_ICR_CERROR_Msk
#define CAN_ICR_CRXNEMP_Pos (7U)
#define CAN_ICR_CRXNEMP_Msk (0x1U << CAN_ICR_CRXNEMP_Pos)
#define CAN_ICR_CRXNEMP CAN_ICR_CRXNEMP_Msk
#define CAN_ICR_CRXOFLW_Pos (6U)
#define CAN_ICR_CRXOFLW_Msk (0x1U << CAN_ICR_CRXOFLW_Pos)
#define CAN_ICR_CRXOFLW CAN_ICR_CRXOFLW_Msk
#define CAN_ICR_CRXUFLW_Pos (5U)
#define CAN_ICR_CRXUFLW_Msk (0x1U << CAN_ICR_CRXUFLW_Pos)
#define CAN_ICR_CRXUFLW CAN_ICR_CRXUFLW_Msk
#define CAN_ICR_CRXOK_Pos (4U)
#define CAN_ICR_CRXOK_Msk (0x1U << CAN_ICR_CRXOK_Pos)
#define CAN_ICR_CRXOK CAN_ICR_CRXOK_Msk
#define CAN_ICR_CTXBFLL_Pos (3U)
#define CAN_ICR_CTXBFLL_Msk (0x1U << CAN_ICR_CTXBFLL_Pos)
#define CAN_ICR_CTXBFLL CAN_ICR_CTXBFLL_Msk
#define CAN_ICR_CTXFLL_Pos (2U)
#define CAN_ICR_CTXFLL_Msk (0x1U << CAN_ICR_CTXFLL_Pos)
#define CAN_ICR_CTXFLL CAN_ICR_CTXFLL_Msk
#define CAN_ICR_CTXOK_Pos (1U)
#define CAN_ICR_CTXOK_Msk (0x1U << CAN_ICR_CTXOK_Pos)
#define CAN_ICR_CTXOK CAN_ICR_CTXOK_Msk
#define CAN_ICR_CARBLST_Pos (0U)
#define CAN_ICR_CARBLST_Msk (0x1U << CAN_ICR_CARBLST_Pos)
#define CAN_ICR_CARBLST CAN_ICR_CARBLST_Msk
#define CAN_TXFIDR_IDR_Pos (0U)
#define CAN_TXFIDR_IDR_Msk (0xffffffffU << CAN_TXFIDR_IDR_Pos)
#define CAN_TXFIDR_IDR CAN_TXFIDR_IDR_Msk
#define CAN_TXFDLCR_DLC_Pos (0U)
#define CAN_TXFDLCR_DLC_Msk (0xfU << CAN_TXFDLCR_DLC_Pos)
#define CAN_TXFDLCR_DLC CAN_TXFDLCR_DLC_Msk
#define CAN_TXFDW1R_DB_Pos (0U)
#define CAN_TXFDW1R_DB_Msk (0xffffffffU << CAN_TXFDW1R_DB_Pos)
#define CAN_TXFDW1R_DB CAN_TXFDW1R_DB_Msk
#define CAN_TXFDW2R_DB_Pos (0U)
#define CAN_TXFDW2R_DB_Msk (0xffffffffU << CAN_TXFDW2R_DB_Pos)
#define CAN_TXFDW2R_DB CAN_TXFDW2R_DB_Msk
#define CAN_HPBIDR_IDR_Pos (0U)
#define CAN_HPBIDR_IDR_Msk (0xffffffffU << CAN_HPBIDR_IDR_Pos)
#define CAN_HPBIDR_IDR CAN_HPBIDR_IDR_Msk
#define CAN_HPBDLCR_DLC_Pos (0U)
#define CAN_HPBDLCR_DLC_Msk (0xfU << CAN_HPBDLCR_DLC_Pos)
#define CAN_HPBDLCR_DLC CAN_HPBDLCR_DLC_Msk
#define CAN_HPBDW1R_DB_Pos (0U)
#define CAN_HPBDW1R_DB_Msk (0xffffffffU << CAN_HPBDW1R_DB_Pos)
#define CAN_HPBDW1R_DB CAN_HPBDW1R_DB_Msk
#define CAN_HPBDW2R_DB_Pos (0U)
#define CAN_HPBDW2R_DB_Msk (0xffffffffU << CAN_HPBDW2R_DB_Pos)
#define CAN_HPBDW2R_DB CAN_HPBDW2R_DB_Msk
#define CAN_RXFIDR_IDR_Pos (0U)
#define CAN_RXFIDR_IDR_Msk (0xffffffffU << CAN_RXFIDR_IDR_Pos)
#define CAN_RXFIDR_IDR CAN_RXFIDR_IDR_Msk
#define CAN_RXFDLCR_DLC_Pos (0U)
#define CAN_RXFDLCR_DLC_Msk (0xfU << CAN_RXFDLCR_DLC_Pos)
#define CAN_RXFDLCR_DLC CAN_RXFDLCR_DLC_Msk
#define CAN_RXFDW1R_DB_Pos (0U)
#define CAN_RXFDW1R_DB_Msk (0xffffffffU << CAN_RXFDW1R_DB_Pos)
#define CAN_RXFDW1R_DB CAN_RXFDW1R_DB_Msk
#define CAN_RXFDW2R_DB_Pos (0U)
#define CAN_RXFDW2R_DB_Msk (0xffffffffU << CAN_RXFDW2R_DB_Pos)
#define CAN_RXFDW2R_DB CAN_RXFDW2R_DB_Msk
#define CAN_AFR_UAF_Pos (0U)
#define CAN_AFR_UAF_Msk (0xfU << CAN_AFR_UAF_Pos)
#define CAN_AFR_UAF CAN_AFR_UAF_Msk
#define CAN_AFMR_AMRTR_Pos (31U)
#define CAN_AFMR_AMRTR_Msk (0x1U << CAN_AFMR_AMRTR_Pos)
#define CAN_AFMR_AMRTR CAN_AFMR_AMRTR_Msk
#define CAN_AFMR_AMID18_Pos (13U)
#define CAN_AFMR_AMID18_Msk (0x3ffffU << CAN_AFMR_AMID18_Pos)
#define CAN_AFMR_AMID18 CAN_AFMR_AMID18_Msk
#define CAN_AFMR_AMIDE_Pos (12U)
#define CAN_AFMR_AMIDE_Msk (0x1U << CAN_AFMR_AMIDE_Pos)
#define CAN_AFMR_AMIDE CAN_AFMR_AMIDE_Msk
#define CAN_AFMR_AMSRR_Pos (11U)
#define CAN_AFMR_AMSRR_Msk (0x1U << CAN_AFMR_AMSRR_Pos)
#define CAN_AFMR_AMSRR CAN_AFMR_AMSRR_Msk
#define CAN_AFMR_AMID11_Pos (0U)
#define CAN_AFMR_AMID11_Msk (0x7ffU << CAN_AFMR_AMID11_Pos)
#define CAN_AFMR_AMID11 CAN_AFMR_AMID11_Msk
#define CAN_AFIR_AIRTR_Pos (31U)
#define CAN_AFIR_AIRTR_Msk (0x1U << CAN_AFIR_AIRTR_Pos)
#define CAN_AFIR_AIRTR CAN_AFIR_AIRTR_Msk
#define CAN_AFIR_AIID18_Pos (13U)
#define CAN_AFIR_AIID18_Msk (0x3ffffU << CAN_AFIR_AIID18_Pos)
#define CAN_AFIR_AIID18 CAN_AFIR_AIID18_Msk
#define CAN_AFIR_AIIDE_Pos (12U)
#define CAN_AFIR_AIIDE_Msk (0x1U << CAN_AFIR_AIIDE_Pos)
#define CAN_AFIR_AIIDE CAN_AFIR_AIIDE_Msk
#define CAN_AFIR_AISRR_Pos (11U)
#define CAN_AFIR_AISRR_Msk (0x1U << CAN_AFIR_AISRR_Pos)
#define CAN_AFIR_AISRR CAN_AFIR_AISRR_Msk
#define CAN_AFIR_AIID11_Pos (0U)
#define CAN_AFIR_AIID11_Msk (0x7ffU << CAN_AFIR_AIID11_Pos)
#define CAN_AFIR_AIID11 CAN_AFIR_AIID11_Msk
#define FL_CAN_ERROR_STATUS_CONFIG (0x0U << CAN_SR_ESTAT_Pos)
#define FL_CAN_ERROR_STATUS_ACTIVE (0x1U << CAN_SR_ESTAT_Pos)
#define FL_CAN_ERROR_STATUS_BUSOFF (0x2U << CAN_SR_ESTAT_Pos)
#define FL_CAN_ERROR_STATUS_PASSIVE (0x3U << CAN_SR_ESTAT_Pos)
#define FL_CAN_RTR_BIT_LOW (0x0U << CAN_AFIR_AIRTR_Pos)
#define FL_CAN_RTR_BIT_HIGH (0x1U << CAN_AFIR_AIRTR_Pos)
#define FL_CAN_IDE_BIT_LOW (0x0U << CAN_AFIR_AIIDE_Pos)
#define FL_CAN_IDE_BIT_HIGH (0x1U << CAN_AFIR_AIIDE_Pos)
#define FL_CAN_SRR_BIT_LOW (0x0U << CAN_AFIR_AISRR_Pos)
#define FL_CAN_SRR_BIT_HIGH (0x1U << CAN_AFIR_AISRR_Pos)
#define FL_CAN_SOFTWARE_NO_RESET (0x0U << CAN_CR_SRST_Pos)
#define FL_CAN_SOFTWARE_RESET (0x1U << CAN_CR_SRST_Pos)
#define FL_CAN_TS1_1Tq (0U)
#define FL_CAN_TS1_2Tq (1U)
#define FL_CAN_TS1_3Tq (2U)
#define FL_CAN_TS1_4Tq (3U)
#define FL_CAN_TS1_5Tq (4U)
#define FL_CAN_TS1_6Tq (5U)
#define FL_CAN_TS1_7Tq (6U)
#define FL_CAN_TS1_8Tq (7U)
#define FL_CAN_TS1_9Tq (8U)
#define FL_CAN_TS1_10Tq (9U)
#define FL_CAN_TS1_11Tq (10U)
#define FL_CAN_TS1_12Tq (11U)
#define FL_CAN_TS1_13Tq (12U)
#define FL_CAN_TS1_14Tq (13U)
#define FL_CAN_TS1_15Tq (14U)
#define FL_CAN_TS1_16Tq (15U)
#define FL_CAN_TS2_1Tq (0U)
#define FL_CAN_TS2_2Tq (1U)
#define FL_CAN_TS2_3Tq (2U)
#define FL_CAN_TS2_4Tq (3U)
#define FL_CAN_TS2_5Tq (4U)
#define FL_CAN_TS2_6Tq (5U)
#define FL_CAN_TS2_7Tq (6U)
#define FL_CAN_TS2_8Tq (7U)
#define FL_CAN_SJW_1Tq (0U)
#define FL_CAN_SJW_2Tq (1U)
#define FL_CAN_SJW_3Tq (2U)
#define FL_CAN_SJW_4Tq (3U)
#define FL_CAN_MODE_NORMAL (0U)
#define FL_CAN_MODE_LOOPBACK (1U)
#define FL_CAN_MODE_CONFIG (2U)
#define FL_CAN_FIL1_EN (1U << 0U)
#define FL_CAN_FIL2_EN (1U << 1U)
#define FL_CAN_FIL3_EN (1U << 2U)
#define FL_CAN_FIL4_EN (1U << 3U)
#define FL_CAN_FIL1_MSK (1U << 0U)
#define FL_CAN_FIL2_MSK (1U << 1U)
#define FL_CAN_FIL3_MSK (1U << 2U)
#define FL_CAN_FIL4_MSK (1U << 3U)
#define FL_CAN_FILTER1 (0x0U << 0U)
#define FL_CAN_FILTER2 (0x1U << 0U)
#define FL_CAN_FILTER3 (0x2U << 0U)
#define FL_CAN_FILTER4 (0x3U << 0U)
#define FL_CAN_FORMAT_STANDARD_DATA (0U)
#define FL_CAN_FORMAT_STANDARD_REMOTE (1U)
#define FL_CAN_FORMAT_EXTEND_DATA (2U)
#define FL_CAN_FORMAT_EXTEND_REMOTE (3U)
#define CAN_TIMEOUT 0xFFFFFU
/**
* @}
*/
/* Exported functions ---------------------------------------------------------------------------------*/
/** @defgroup CAN_FL_Exported_Functions CAN Exported Functions
* @{
*/
/**
* @brief CAN enable
* @rmtoll CR CEN FL_CAN_Enable
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_Enable(CAN_Type *CANx)
{
SET_BIT(CANx->CR, CAN_CR_CEN_Msk);
}
/**
* @brief Get CAN enable status
* @rmtoll CR CEN FL_CAN_IsEnabled
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabled(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->CR, CAN_CR_CEN_Msk) == CAN_CR_CEN_Msk);
}
/**
* @brief CAN disable
* @rmtoll CR CEN FL_CAN_Disable
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_Disable(CAN_Type *CANx)
{
CLEAR_BIT(CANx->CR, CAN_CR_CEN_Msk);
}
/**
* @brief Set CAN software reset
* @rmtoll CR SRST FL_CAN_SetSoftwareReset
* @param CANx CAN instance
* @param reset This parameter can be one of the following values:
* @arg @ref FL_CAN_SOFTWARE_NO_RESET
* @arg @ref FL_CAN_SOFTWARE_RESET
* @retval None
*/
__STATIC_INLINE void FL_CAN_SetSoftwareReset(CAN_Type *CANx, uint32_t reset)
{
MODIFY_REG(CANx->CR, CAN_CR_SRST_Msk, reset);
}
/**
* @brief Get CAN software reset
* @rmtoll CR SRST FL_CAN_GetSoftwareReset
* @param CANx CAN instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_CAN_SOFTWARE_NO_RESET
* @arg @ref FL_CAN_SOFTWARE_RESET
*/
__STATIC_INLINE uint32_t FL_CAN_GetSoftwareReset(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->CR, CAN_CR_SRST_Msk));
}
/**
* @brief Enable loop back mode
* @rmtoll MSR LPBACK FL_CAN_EnableLoopBackMode
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableLoopBackMode(CAN_Type *CANx)
{
SET_BIT(CANx->MSR, CAN_MSR_LPBACK_Msk);
}
/**
* @brief CAN disable
* @rmtoll CR CEN FL_CAN_Disable
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableLoopBackMode(CAN_Type *CANx)
{
CLEAR_BIT(CANx->MSR, CAN_MSR_LPBACK_Msk);
}
/**
* @brief Get loop back mode Enable Status
* @rmtoll MSR LPBACK FL_CAN_IsEnabledLoopBackMode
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledLoopBackMode(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->MSR, CAN_MSR_LPBACK_Msk) == CAN_MSR_LPBACK_Msk);
}
/**
* @brief Set baud rate prescaler
* @rmtoll BRPR BRP FL_CAN_WriteBaudRatePrescaler
* @param CANx CAN instance
* @param psc
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteBaudRatePrescaler(CAN_Type *CANx, uint32_t psc)
{
MODIFY_REG(CANx->BRPR, CAN_BRPR_BRP_Msk, (psc << CAN_BRPR_BRP_Pos));
}
/**
* @brief Get baud rate prescaler
* @rmtoll BRPR BRP FL_CAN_ReadBaudRatePrescaler
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadBaudRatePrescaler(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->BRPR, CAN_BRPR_BRP_Msk) >> CAN_BRPR_BRP_Pos);
}
/**
* @brief Set synchronization jump width
* @rmtoll BTR SJW FL_CAN_WriteSyncJumpWidth
* @param CANx CAN instance
* @param width
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteSyncJumpWidth(CAN_Type *CANx, uint32_t width)
{
MODIFY_REG(CANx->BTR, CAN_BTR_SJW_Msk, (width << CAN_BTR_SJW_Pos));
}
/**
* @brief Get synchronization jump width
* @rmtoll BTR SJW FL_CAN_ReadSyncJumpWidth
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadSyncJumpWidth(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->BTR, CAN_BTR_SJW_Msk) >> CAN_BTR_SJW_Pos);
}
/**
* @brief Set time segment2 length
* @rmtoll BTR TS2 FL_CAN_WriteTimeSegment2Length
* @param CANx CAN instance
* @param length
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTimeSegment2Length(CAN_Type *CANx, uint32_t length)
{
MODIFY_REG(CANx->BTR, CAN_BTR_TS2_Msk, (length << CAN_BTR_TS2_Pos));
}
/**
* @brief Get time segment2 length
* @rmtoll BTR TS2 FL_CAN_ReadTimeSegment2Length
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTimeSegment2Length(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->BTR, CAN_BTR_TS2_Msk) >> CAN_BTR_TS2_Pos);
}
/**
* @brief Set time segment2 length
* @rmtoll BTR TS1 FL_CAN_WriteTimeSegment1Length
* @param CANx CAN instance
* @param length
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTimeSegment1Length(CAN_Type *CANx, uint32_t length)
{
MODIFY_REG(CANx->BTR, CAN_BTR_TS1_Msk, (length << CAN_BTR_TS1_Pos));
}
/**
* @brief Get time segment2 length
* @rmtoll BTR TS1 FL_CAN_ReadTimeSegment1Length
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTimeSegment1Length(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->BTR, CAN_BTR_TS1_Msk) >> CAN_BTR_TS1_Pos);
}
/**
* @brief Get receive error number
* @rmtoll ECR REC FL_CAN_ReadRXErrorCount
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadRXErrorCount(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ECR, CAN_ECR_REC_Msk) >> CAN_ECR_REC_Pos);
}
/**
* @brief Get transmit error number
* @rmtoll ECR TEC FL_CAN_ReadTXErrorCount
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTXErrorCount(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ECR, CAN_ECR_TEC_Msk) >> CAN_ECR_TEC_Pos);
}
/**
* @brief Get ACK error flag
* @rmtoll ESR ACKER FL_CAN_IsActiveFlag_AckError
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_AckError(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ESR, CAN_ESR_ACKER_Msk) == (CAN_ESR_ACKER_Msk));
}
/**
* @brief Clear ACK error flag
* @rmtoll ESR ACKER FL_CAN_ClearFlag_AckError
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_AckError(CAN_Type *CANx)
{
WRITE_REG(CANx->ESR, CAN_ESR_ACKER_Msk);
}
/**
* @brief Get receive bit error flag
* @rmtoll ESR BERR FL_CAN_IsActiveFlag_BitError
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_BitError(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ESR, CAN_ESR_BERR_Msk) == (CAN_ESR_BERR_Msk));
}
/**
* @brief Clear receive bit error flag
* @rmtoll ESR BERR FL_CAN_ClearFlag_BitError
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_BitError(CAN_Type *CANx)
{
WRITE_REG(CANx->ESR, CAN_ESR_BERR_Msk);
}
/**
* @brief Get stuffing error flag
* @rmtoll ESR STER FL_CAN_IsActiveFlag_StuffError
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_StuffError(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ESR, CAN_ESR_STER_Msk) == (CAN_ESR_STER_Msk));
}
/**
* @brief Clear stuffing error flag
* @rmtoll ESR STER FL_CAN_ClearFlag_StuffError
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_StuffError(CAN_Type *CANx)
{
WRITE_REG(CANx->ESR, CAN_ESR_STER_Msk);
}
/**
* @brief Get form error flag
* @rmtoll ESR FMER FL_CAN_IsActiveFlag_FormatError
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_FormatError(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ESR, CAN_ESR_FMER_Msk) == (CAN_ESR_FMER_Msk));
}
/**
* @brief Clear form error flag
* @rmtoll ESR FMER FL_CAN_ClearFlag_FormatError
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_FormatError(CAN_Type *CANx)
{
WRITE_REG(CANx->ESR, CAN_ESR_FMER_Msk);
}
/**
* @brief Get CRC error fiag
* @rmtoll ESR CRCER FL_CAN_IsActiveFlag_CRCError
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_CRCError(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ESR, CAN_ESR_CRCER_Msk) == (CAN_ESR_CRCER_Msk));
}
/**
* @brief Clear CRC error flag
* @rmtoll ESR CRCER FL_CAN_ClearFlag_CRCError
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_CRCError(CAN_Type *CANx)
{
WRITE_REG(CANx->ESR, CAN_ESR_CRCER_Msk);
}
/**
* @brief Get acceptance filter busy flag
* @rmtoll SR ACFBSY FL_CAN_IsActiveFlag_FilterBusy
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_FilterBusy(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_ACFBSY_Msk) == (CAN_SR_ACFBSY_Msk));
}
/**
* @brief Get transmit FIFO FULL interrupt flag
* @rmtoll SR TXFLL FL_CAN_IsActiveFlag_TXBuffFullSignal
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_TXBuffFullSignal(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_TXFLL_Msk) == (CAN_SR_TXFLL_Msk));
}
/**
* @brief Get high priority transmit buffer FULL interrupt flag
* @rmtoll SR TXBFLL FL_CAN_IsActiveFlag_TXHighPriorBuffFullSignal
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_TXHighPriorBuffFullSignal(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_TXBFLL_Msk) == (CAN_SR_TXBFLL_Msk));
}
/**
* @brief Get error status flag
* @rmtoll SR ESTAT FL_CAN_GetErrorStatus
* @param CANx CAN instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_CAN_ERROR_STATUS_CONFIG
* @arg @ref FL_CAN_ERROR_STATUS_ACTIVE
* @arg @ref FL_CAN_ERROR_STATUS_BUSOFF
* @arg @ref FL_CAN_ERROR_STATUS_PASSIVE
*/
__STATIC_INLINE uint32_t FL_CAN_GetErrorStatus(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_ESTAT_Msk));
}
/**
* @brief Get error warning
* @rmtoll SR ERRWRN FL_CAN_IsActiveFlag_ErrorWarning
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_ErrorWarning(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_ERRWRN_Msk) == (CAN_SR_ERRWRN_Msk));
}
/**
* @brief Get bus busy flag
* @rmtoll SR BBSY FL_CAN_IsActiveFlag_BusBusy
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_BusBusy(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_BBSY_Msk) == (CAN_SR_BBSY_Msk));
}
/**
* @brief Get bus IDLE flag
* @rmtoll SR BIDLE FL_CAN_IsActiveFlag_BusIdle
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_BusIdle(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_BIDLE_Msk) == (CAN_SR_BIDLE_Msk));
}
/**
* @brief Get normal mode flag
* @rmtoll SR NORMAL FL_CAN_IsActiveFlag_NormalMode
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_NormalMode(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_NORMAL_Msk) == (CAN_SR_NORMAL_Msk));
}
/**
* @brief Get loop back mode flag
* @rmtoll SR LBACK FL_CAN_IsActiveFlag_LoopbackMode
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_LoopbackMode(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_LBACK_Msk) == (CAN_SR_LBACK_Msk));
}
/**
* @brief Get configuration mode flag
* @rmtoll SR CONFIG FL_CAN_IsActiveFlag_ConfigMode
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_ConfigMode(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->SR, CAN_SR_CONFIG_Msk) == (CAN_SR_CONFIG_Msk));
}
/**
* @brief Get bus off interrupt flag
* @rmtoll ISR BSOFF FL_CAN_IsActiveFlag_BusOff
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_BusOff(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_BSOFF_Msk) == (CAN_ISR_BSOFF_Msk));
}
/**
* @brief Get error interrupt flag
* @rmtoll ISR ERROR FL_CAN_IsActiveFlag_Error
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_Error(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_ERROR_Msk) == (CAN_ISR_ERROR_Msk));
}
/**
* @brief Get receive FIFO not empty interrupt flag
* @rmtoll ISR RXNEMP FL_CAN_IsActiveFlag_RXNotEmpty
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_RXNotEmpty(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_RXNEMP_Msk) == (CAN_ISR_RXNEMP_Msk));
}
/**
* @brief Get receive FIFO overflow interrupt flag
* @rmtoll ISR RXOFLW FL_CAN_IsActiveFlag_RXOverflow
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_RXOverflow(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_RXOFLW_Msk) == (CAN_ISR_RXOFLW_Msk));
}
/**
* @brief Get receive FIFO empty interrupt flag
* @rmtoll ISR RXUFLW FL_CAN_IsActiveFlag_RXEmpty
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_RXEmpty(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_RXUFLW_Msk) == (CAN_ISR_RXUFLW_Msk));
}
/**
* @brief Get receive Ok interrupt flag
* @rmtoll ISR RXOK FL_CAN_IsActiveFlag_RXOK
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_RXOK(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_RXOK_Msk) == (CAN_ISR_RXOK_Msk));
}
/**
* @brief Get high priority transmit buffer FULL interrupt flag
* @rmtoll ISR TXBFLL FL_CAN_IsActiveFlag_TXHighPriorBuffFull
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_TXHighPriorBuffFull(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_TXBFLL_Msk) == (CAN_ISR_TXBFLL_Msk));
}
/**
* @brief Get transmit FIFO FULL interrupt flag
* @rmtoll ISR TXFLL FL_CAN_IsActiveFlag_TXBuffFull
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_TXBuffFull(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_TXFLL_Msk) == (CAN_ISR_TXFLL_Msk));
}
/**
* @brief Get transmission OK interrupt flag
* @rmtoll ISR TXOK FL_CAN_IsActiveFlag_TXOK
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_TXOK(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_TXOK_Msk) == (CAN_ISR_TXOK_Msk));
}
/**
* @brief Get arbitration lost interrupt flag
* @rmtoll ISR ARBLST FL_CAN_IsActiveFlag_ArbitrationLost
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsActiveFlag_ArbitrationLost(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->ISR, CAN_ISR_ARBLST_Msk) == (CAN_ISR_ARBLST_Msk));
}
/**
* @brief Bus OFF interrupt enable
* @rmtoll IER BSOFFIE FL_CAN_EnableIT_BusOff
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_BusOff(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_BSOFFIE_Msk);
}
/**
* @brief Get bus OFF interrupt enable status
* @rmtoll IER BSOFFIE FL_CAN_IsEnabledIT_BusOff
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_BusOff(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_BSOFFIE_Msk) == CAN_IER_BSOFFIE_Msk);
}
/**
* @brief Bus OFF interrupt disable
* @rmtoll IER BSOFFIE FL_CAN_DisableIT_BusOff
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_BusOff(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_BSOFFIE_Msk);
}
/**
* @brief Error interrupt enable
* @rmtoll IER ERRORIE FL_CAN_EnableIT_Error
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_Error(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_ERRORIE_Msk);
}
/**
* @brief Get error interrupt enable status
* @rmtoll IER ERRORIE FL_CAN_IsEnabledIT_Error
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_Error(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_ERRORIE_Msk) == CAN_IER_ERRORIE_Msk);
}
/**
* @brief Error interrupt disable
* @rmtoll IER ERRORIE FL_CAN_DisableIT_Error
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_Error(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_ERRORIE_Msk);
}
/**
* @brief Receive FIFO not empty interrupt enable
* @rmtoll IER RXNEMPIE FL_CAN_EnableIT_RXNotEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_RXNotEmpty(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_RXNEMPIE_Msk);
}
/**
* @brief Get receive FIFO not empty interrupt enable status
* @rmtoll IER RXNEMPIE FL_CAN_IsEnabledIT_RXNotEmpty
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_RXNotEmpty(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_RXNEMPIE_Msk) == CAN_IER_RXNEMPIE_Msk);
}
/**
* @brief Receive FIFO not empty interrupt disable
* @rmtoll IER RXNEMPIE FL_CAN_DisableIT_RXNotEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_RXNotEmpty(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_RXNEMPIE_Msk);
}
/**
* @brief Receive FIFO overflow interrupt ennable
* @rmtoll IER RXOFLWIE FL_CAN_EnableIT_RXOverflow
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_RXOverflow(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_RXOFLWIE_Msk);
}
/**
* @brief Get receive FIFO overflow interrupt enable status
* @rmtoll IER RXOFLWIE FL_CAN_IsEnabledIT_RXOverflow
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_RXOverflow(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_RXOFLWIE_Msk) == CAN_IER_RXOFLWIE_Msk);
}
/**
* @brief Receive FIFO overflow interrupt disable
* @rmtoll IER RXOFLWIE FL_CAN_DisableIT_RXOverflow
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_RXOverflow(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_RXOFLWIE_Msk);
}
/**
* @brief Receive FIFO empty interrupt enable
* @rmtoll IER RXUFLWIE FL_CAN_EnableIT_RXEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_RXEmpty(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_RXUFLWIE_Msk);
}
/**
* @brief Get receive FIFO empty interrupt enable status
* @rmtoll IER RXUFLWIE FL_CAN_IsEnabledIT_RXEmpty
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_RXEmpty(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_RXUFLWIE_Msk) == CAN_IER_RXUFLWIE_Msk);
}
/**
* @brief Receive FIFO empty interrupt disable
* @rmtoll IER RXUFLWIE FL_CAN_DisableIT_RXEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_RXEmpty(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_RXUFLWIE_Msk);
}
/**
* @brief Receive OK interrupt enable
* @rmtoll IER RXOKIE FL_CAN_EnableIT_RXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_RXOK(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_RXOKIE_Msk);
}
/**
* @brief Get receive OK interrupt enable
* @rmtoll IER RXOKIE FL_CAN_IsEnabledIT_RXOK
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_RXOK(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_RXOKIE_Msk) == CAN_IER_RXOKIE_Msk);
}
/**
* @brief Receive OK interrupt disable
* @rmtoll IER RXOKIE FL_CAN_DisableIT_RXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_RXOK(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_RXOKIE_Msk);
}
/**
* @brief High priority transmit buffer FULL interrupt enable
* @rmtoll IER TXBFLLIE FL_CAN_EnableIT_TXHighPriorBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_TXHighPriorBuffFull(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_TXBFLLIE_Msk);
}
/**
* @brief Get high priority transmit buffer FULL interrupt enable status
* @rmtoll IER TXBFLLIE FL_CAN_IsEnabledIT_TXHighPriorBuffFull
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_TXHighPriorBuffFull(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_TXBFLLIE_Msk) == CAN_IER_TXBFLLIE_Msk);
}
/**
* @brief High priority transmit buffer FULL interrupt disable
* @rmtoll IER TXBFLLIE FL_CAN_DisableIT_TXHighPriorBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_TXHighPriorBuffFull(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_TXBFLLIE_Msk);
}
/**
* @brief Transmit FIFO FULL interrupt enable
* @rmtoll IER TXFLLIE FL_CAN_EnableIT_TXBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_TXBuffFull(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_TXFLLIE_Msk);
}
/**
* @brief Get transmit FIFO FULL interrupt enable
* @rmtoll IER TXFLLIE FL_CAN_IsEnabledIT_TXBuffFull
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_TXBuffFull(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_TXFLLIE_Msk) == CAN_IER_TXFLLIE_Msk);
}
/**
* @brief Transmit FIFO FULL interrupt disable
* @rmtoll IER TXFLLIE FL_CAN_DisableIT_TXBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_TXBuffFull(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_TXFLLIE_Msk);
}
/**
* @brief Transmission OK interrupt enable
* @rmtoll IER TXOKIE FL_CAN_EnableIT_TXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_TXOK(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_TXOKIE_Msk);
}
/**
* @brief Get transmission OK interrupt enable status
* @rmtoll IER TXOKIE FL_CAN_IsEnabledIT_TXOK
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_TXOK(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_TXOKIE_Msk) == CAN_IER_TXOKIE_Msk);
}
/**
* @brief Transmission OK interrupt disable
* @rmtoll IER TXOKIE FL_CAN_DisableIT_TXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_TXOK(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_TXOKIE_Msk);
}
/**
* @brief Arbitration lost interrupt enable
* @rmtoll IER ARBLSTIE FL_CAN_EnableIT_ArbitrationLost
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_EnableIT_ArbitrationLost(CAN_Type *CANx)
{
SET_BIT(CANx->IER, CAN_IER_ARBLSTIE_Msk);
}
/**
* @brief Get arbitration lost interrupt enable
* @rmtoll IER ARBLSTIE FL_CAN_IsEnabledIT_ArbitrationLost
* @param CANx CAN instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_IsEnabledIT_ArbitrationLost(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->IER, CAN_IER_ARBLSTIE_Msk) == CAN_IER_ARBLSTIE_Msk);
}
/**
* @brief Arbitration lost interrupt disable
* @rmtoll IER ARBLSTIE FL_CAN_DisableIT_ArbitrationLost
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_DisableIT_ArbitrationLost(CAN_Type *CANx)
{
CLEAR_BIT(CANx->IER, CAN_IER_ARBLSTIE_Msk);
}
/**
* @brief Clear bus off interrupt flag
* @rmtoll ICR CBSOFF FL_CAN_ClearFlag_BusOff
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_BusOff(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CBSOFF_Msk);
}
/**
* @brief Clear error interrupt flag
* @rmtoll ICR CERROR FL_CAN_ClearFlag_Error
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_Error(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CERROR_Msk);
}
/**
* @brief Clear receive FIFO not empty interrupt flag
* @rmtoll ICR CRXNEMP FL_CAN_ClearFlag_RXNotEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_RXNotEmpty(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CRXNEMP_Msk);
}
/**
* @brief Clear receive FIFO overflow interrupt flag
* @rmtoll ICR CRXOFLW FL_CAN_ClearFlag_RXOverflow
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_RXOverflow(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CRXOFLW_Msk);
}
/**
* @brief Clear receive FIFO underflow interrupt flag
* @rmtoll ICR CRXUFLW FL_CAN_ClearFlag_RXEmpty
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_RXEmpty(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CRXUFLW_Msk);
}
/**
* @brief Clear receive OK interrupt flag
* @rmtoll ICR CRXOK FL_CAN_ClearFlag_RXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_RXOK(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CRXOK_Msk);
}
/**
* @brief Clear high priority transmit buffer FULL interrupt flag
* @rmtoll ICR CTXBFLL FL_CAN_ClearFlag_TXHighPriorBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_TXHighPriorBuffFull(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CTXBFLL_Msk);
}
/**
* @brief Clear transmit FIFO FULL interrupt flag
* @rmtoll ICR CTXFLL FL_CAN_ClearFlag_TXBuffFull
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_TXBuffFull(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CTXFLL_Msk);
}
/**
* @brief Clear transmission OK interrupt flag
* @rmtoll ICR CTXOK FL_CAN_ClearFlag_TXOK
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_TXOK(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CTXOK_Msk);
}
/**
* @brief Clear arbitration lost interrupt flag
* @rmtoll ICR CARBLST FL_CAN_ClearFlag_ArbitrationLost
* @param CANx CAN instance
* @retval None
*/
__STATIC_INLINE void FL_CAN_ClearFlag_ArbitrationLost(CAN_Type *CANx)
{
WRITE_REG(CANx->ICR, CAN_ICR_CARBLST_Msk);
}
/**
* @brief Set TXFIFO message identifier code
* @rmtoll TXFIDR IDR FL_CAN_WriteTXMessageID
* @param CANx CAN instance
* @param id
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTXMessageID(CAN_Type *CANx, uint32_t id)
{
MODIFY_REG(CANx->TXFIDR, (0xffffffffU << 0U), (id << 0U));
}
/**
* @brief Get TXFIFO message identifier code
* @rmtoll TXFIDR IDR FL_CAN_ReadTXMessageID
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTXMessageID(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->TXFIDR, 0xffffffffU) >> 0U);
}
/**
* @brief Set TXFIFO data length code
* @rmtoll TXFDLCR DLC FL_CAN_WriteTXMessageLength
* @param CANx CAN instance
* @param length
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTXMessageLength(CAN_Type *CANx, uint32_t length)
{
MODIFY_REG(CANx->TXFDLCR, (0xfU << 0U), (length << 0U));
}
/**
* @brief Get TXFIFO data length code
* @rmtoll TXFDLCR DLC FL_CAN_ReadTXMessageLength
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTXMessageLength(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->TXFDLCR, 0xfU) >> 0U);
}
/**
* @brief Set TXFIFO data word1
* @rmtoll TXFDW1R DB FL_CAN_WriteTXMessageWord1
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTXMessageWord1(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->TXFDW1R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get TXFIFO data word1
* @rmtoll TXFDW1R DB FL_CAN_ReadTXMessageWord1
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTXMessageWord1(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->TXFDW1R, 0xffffffffU) >> 0U);
}
/**
* @brief Set TXFIFO data word2
* @rmtoll TXFDW2R DB FL_CAN_WriteTXMessageWord2
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteTXMessageWord2(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->TXFDW2R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get TXFIFO data word2
* @rmtoll TXFDW2R DB FL_CAN_ReadTXMessageWord2
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadTXMessageWord2(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->TXFDW2R, 0xffffffffU) >> 0U);
}
/**
* @brief Set HPB identifier code
* @rmtoll HPBIDR IDR FL_CAN_WriteHighPriorTXMessageID
* @param CANx CAN instance
* @param id
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteHighPriorTXMessageID(CAN_Type *CANx, uint32_t id)
{
MODIFY_REG(CANx->HPBIDR, (0xffffffffU << 0U), (id << 0U));
}
/**
* @brief Get HPB identifier code
* @rmtoll HPBIDR IDR FL_CAN_ReadHighPriorTXMessageID
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadHighPriorTXMessageID(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->HPBIDR, 0xffffffffU) >> 0U);
}
/**
* @brief Set HPB data length code
* @rmtoll HPBDLCR DLC FL_CAN_WriteHighPriorMessageLength
* @param CANx CAN instance
* @param length
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteHighPriorMessageLength(CAN_Type *CANx, uint32_t length)
{
MODIFY_REG(CANx->HPBDLCR, (0xfU << 0U), (length << 0U));
}
/**
* @brief Get HPB data length code
* @rmtoll HPBDLCR DLC FL_CAN_ReadHighPriorMessageLength
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadHighPriorMessageLength(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->HPBDLCR, 0xfU) >> 0U);
}
/**
* @brief Set HPB data word1
* @rmtoll HPBDW1R DB FL_CAN_WriteHighPriorMessageWord1
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteHighPriorMessageWord1(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->HPBDW1R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get HPB data word1
* @rmtoll HPBDW1R DB FL_CAN_ReadHighPriorMessageWord1
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadHighPriorMessageWord1(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->HPBDW1R, 0xffffffffU) >> 0U);
}
/**
* @brief Set HPB data word2
* @rmtoll HPBDW2R DB FL_CAN_WriteHighPriorMessageWord2
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteHighPriorMessageWord2(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->HPBDW2R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get HPB data word2
* @rmtoll HPBDW2R DB FL_CAN_ReadHighPriorMessageWord2
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadHighPriorMessageWord2(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->HPBDW2R, 0xffffffffU) >> 0U);
}
/**
* @brief Set RXFIFO message identifier code
* @rmtoll RXFIDR IDR FL_CAN_WriteRXMessageID
* @param CANx CAN instance
* @param id
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteRXMessageID(CAN_Type *CANx, uint32_t id)
{
MODIFY_REG(CANx->RXFIDR, (0xffffffffU << 0U), (id << 0U));
}
/**
* @brief Get RXFIFO message identifier code
* @rmtoll RXFIDR IDR FL_CAN_ReadRXMessageID
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadRXMessageID(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->RXFIDR, 0xffffffffU) >> 0U);
}
/**
* @brief Set RXFIFO data length code
* @rmtoll RXFDLCR DLC FL_CAN_WriteRXMessageLength
* @param CANx CAN instance
* @param length
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteRXMessageLength(CAN_Type *CANx, uint32_t length)
{
MODIFY_REG(CANx->RXFDLCR, (0xfU << 0U), (length << 0U));
}
/**
* @brief Get RXFIFO data length code
* @rmtoll RXFDLCR DLC FL_CAN_ReadRXMessageLength
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadRXMessageLength(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->RXFDLCR, 0xfU) >> 0U);
}
/**
* @brief Set RXFIFO data word1
* @rmtoll RXFDW1R DB FL_CAN_WriteRXMessageWord1
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteRXMessageWord1(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->RXFDW1R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get RXFIFO data word1
* @rmtoll RXFDW1R DB FL_CAN_ReadRXMessageWord1
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadRXMessageWord1(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->RXFDW1R, 0xffffffffU) >> 0U);
}
/**
* @brief Set RXFIFO data word2
* @rmtoll RXFDW2R DB FL_CAN_WriteRXMessageWord2
* @param CANx CAN instance
* @param word
* @retval None
*/
__STATIC_INLINE void FL_CAN_WriteRXMessageWord2(CAN_Type *CANx, uint32_t word)
{
MODIFY_REG(CANx->RXFDW2R, (0xffffffffU << 0U), (word << 0U));
}
/**
* @brief Get RXFIFO data word2
* @rmtoll RXFDW2R DB FL_CAN_ReadRXMessageWord2
* @param CANx CAN instance
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_ReadRXMessageWord2(CAN_Type *CANx)
{
return (uint32_t)(READ_BIT(CANx->RXFDW2R, 0xffffffffU) >> 0U);
}
/**
* @brief Acceptance filter 4 enable
* @rmtoll AFR UAF FL_CAN_Filter_Enable
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_Enable(CAN_Type *CANx, uint32_t filterX)
{
SET_BIT(CANx->AFR, 0x1U << filterX);
}
/**
* @brief Get acceptance filter 4 enable status
* @rmtoll AFR UAF FL_CAN_Filter_IsEnabled
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_IsEnabled(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(CANx->AFR, (((0x1U << filterX) & 0xf) << CAN_AFR_UAF_Pos)) == (((0x1U << filterX) & 0xf) << CAN_AFR_UAF_Pos));
}
/**
* @brief Acceptance filter 4 disable
* @rmtoll AFR UAF FL_CAN_Filter_Disable
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_Disable(CAN_Type *CANx, uint32_t filterX)
{
CLEAR_BIT(CANx->AFR, (((0x1U << filterX) & 0xf) << CAN_AFR_UAF_Pos));
}
/**
* @brief Enable RTR participate filter compare
* @rmtoll AFMR AMRTR FL_CAN_Filter_EnableRTRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_EnableRTRCompare(CAN_Type *CANx, uint32_t filterX)
{
SET_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMRTR_Msk);
}
/**
* @brief Disable RTR participate filter compare
* @rmtoll AFMR AMRTR FL_CAN_Filter_DisableRTRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE void FL_CAN_Filter_DisableRTRCompare(CAN_Type *CANx, uint32_t filterX)
{
CLEAR_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMRTR_Msk);
}
/**
* @brief Get RTR participate filter compare Enable Status
* @rmtoll AFMR AMRTR FL_CAN_Filter_IsEnabledRTRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_IsEnabledRTRCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMRTR_Msk) == CAN_AFMR_AMRTR_Msk);
}
/**
* @brief Set ID low 18bit participate filter compare
* @rmtoll AFMR AMID18 FL_CAN_Filter_WriteEXTIDCompareMask
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_WriteEXTIDCompareMask(CAN_Type *CANx, uint32_t filterX, uint32_t id18)
{
MODIFY_REG(*(&(CANx->AFMR0) + 2 * filterX), (0x3ffffU << CAN_AFMR_AMID18_Pos), (id18 << CAN_AFMR_AMID18_Pos));
}
/**
* @brief Get ID low 18bit participate filter compare
* @rmtoll AFMR AMID18 FL_CAN_Filter_ReadEXTIDCompareMask
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_ReadEXTIDCompareMask(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*(&(CANx->AFMR0) + 2 * filterX), (0x3ffffU << CAN_AFMR_AMID18_Pos)) >> CAN_AFMR_AMID18_Pos);
}
/**
* @brief Enable IDE participate filter compare
* @rmtoll AFMR AMIDE FL_CAN_Filter_EnableIDECompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_EnableIDECompare(CAN_Type *CANx, uint32_t filterX)
{
SET_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMIDE_Msk);
}
/**
* @brief Disable IDE participate filter compare
* @rmtoll AFMR AMIDE FL_CAN_Filter_DisableIDECompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE void FL_CAN_Filter_DisableIDECompare(CAN_Type *CANx, uint32_t filterX)
{
CLEAR_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMIDE_Msk);
}
/**
* @brief Get IDE participate filter compare Enable Status
* @rmtoll AFMR AMIDE FL_CAN_Filter_IsEnabledIDECompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_IsEnabledIDECompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMIDE_Msk) == CAN_AFMR_AMIDE_Msk);
}
/**
* @brief Enable SRR participate filter compare
* @rmtoll AFMR AMSRR FL_CAN_Filter_EnableSRRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_EnableSRRCompare(CAN_Type *CANx, uint32_t filterX)
{
SET_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMSRR_Msk);
}
/**
* @brief Disable SRR participate filter compare
* @rmtoll AFMR AMSRR FL_CAN_Filter_DisableSRRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE void FL_CAN_Filter_DisableSRRCompare(CAN_Type *CANx, uint32_t filterX)
{
CLEAR_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMSRR_Msk);
}
/**
* @brief Get SRR participate filter compare Enable Status
* @rmtoll AFMR AMSRR FL_CAN_Filter_IsEnabledSRRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_IsEnabledSRRCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*(&(CANx->AFMR0) + 2 * filterX), CAN_AFMR_AMSRR_Msk) == CAN_AFMR_AMSRR_Msk);
}
/**
* @brief Set ID high 11bit participate filter compare
* @rmtoll AFMR AMID11 FL_CAN_Filter_WriteIDCompareMask
* @param CANx CAN instance
* @param filterX
* @param id11
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_WriteIDCompareMask(CAN_Type *CANx, uint32_t filterX, uint32_t id11)
{
MODIFY_REG(*((&(CANx->AFMR0)) + 2 * filterX), (0x7ffU << CAN_AFMR_AMID11_Pos), id11 << CAN_AFMR_AMID11_Pos);
}
/**
* @brief Get ID high 11bit participate filter compare
* @rmtoll AFMR AMID11 FL_CAN_Filter_ReadIDCompareMask
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_ReadIDCompareMask(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*((&(CANx->AFMR0)) + 2 * filterX), (0x7ffU << CAN_AFMR_AMID11_Pos)) >> CAN_AFMR_AMID11_Pos);
}
/**
* @brief Set filter RTR
* @rmtoll AFIR AIRTR FL_CAN_Filter_SetRTRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @param rtr This parameter can be one of the following values:
* @arg @ref FL_CAN_RTR_BIT_LOW
* @arg @ref FL_CAN_RTR_BIT_HIGH
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_SetRTRCompare(CAN_Type *CANx, uint32_t filterX, uint32_t rtr)
{
MODIFY_REG(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AIRTR_Msk, rtr);
}
/**
* @brief Get filter RTR
* @rmtoll AFIR AIRTR FL_CAN_Filter_GetRTRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
* @arg @ref FL_CAN_RTR_BIT_LOW
* @arg @ref FL_CAN_RTR_BIT_HIGH
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_GetRTRCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AIRTR_Msk));
}
/**
* @brief Set filter ID[17:0]
* @rmtoll AFIR AIID18 FL_CAN_Filter_WriteEXTIDCompare
* @param CANx CAN instance
* @param filterX
* @param id18
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_WriteEXTIDCompare(CAN_Type *CANx, uint32_t filterX, uint32_t id18)
{
MODIFY_REG(*(&(CANx->AFIR0) + 2 * filterX), (0x3ffffU << CAN_AFIR_AIID18_Pos), (id18 << CAN_AFIR_AIID18_Pos));
}
/**
* @brief Get filter ID[17:0]
* @rmtoll AFIR AIID18 FL_CAN_Filter_ReadEXTIDCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_ReadEXTIDCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*(&(CANx->AFIR0) + 2 * filterX), (0x3ffffU << CAN_AFIR_AIID18_Pos)) >> CAN_AFIR_AIID18_Pos);
}
/**
* @brief Set filter IDE
* @rmtoll AFIR AIIDE FL_CAN_Filter_SetIDECompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @param ide This parameter can be one of the following values:
* @arg @ref FL_CAN_IDE_BIT_LOW
* @arg @ref FL_CAN_IDE_BIT_HIGH
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_SetIDECompare(CAN_Type *CANx, uint32_t filterX, uint32_t ide)
{
MODIFY_REG(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AIIDE_Msk, ide);
}
/**
* @brief Get filter IDE
* @rmtoll AFIR AIIDE FL_CAN_Filter_GetIDECompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
* @arg @ref FL_CAN_IDE_BIT_LOW
* @arg @ref FL_CAN_IDE_BIT_HIGH
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_GetIDECompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AIIDE_Msk));
}
/**
* @brief Set filter SRR
* @rmtoll AFIR AISRR FL_CAN_Filter_SetSRRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @param srr This parameter can be one of the following values:
* @arg @ref FL_CAN_SRR_BIT_LOW
* @arg @ref FL_CAN_SRR_BIT_HIGH
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_SetSRRCompare(CAN_Type *CANx, uint32_t filterX, uint32_t srr)
{
MODIFY_REG(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AISRR_Msk, srr);
}
/**
* @brief Get filter SRR
* @rmtoll AFIR AISRR FL_CAN_Filter_GetSRRCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval Returned value can be one of the following values:
* @arg @ref FL_CAN_SRR_BIT_LOW
* @arg @ref FL_CAN_SRR_BIT_HIGH
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_GetSRRCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*((&(CANx->AFIR0)) + 2 * filterX), CAN_AFIR_AISRR_Msk));
}
/**
* @brief Set filterID[28:18]
* @rmtoll AFIR AIID11 FL_CAN_Filter_WriteIDCompare
* @param CANx CAN instance
* @param filterX
* @param id11
* @retval None
*/
__STATIC_INLINE void FL_CAN_Filter_WriteIDCompare(CAN_Type *CANx, uint32_t filterX, uint32_t id11)
{
MODIFY_REG(*((&(CANx->AFIR0)) + 2 * filterX), (0x7ffU << CAN_AFIR_AIID11_Pos), id11 << CAN_AFIR_AIID11_Pos);
}
/**
* @brief Get filter ID[28:18]
* @rmtoll AFIR AIID11 FL_CAN_Filter_ReadIDCompare
* @param CANx CAN instance
* @param filterX This parameter can be one of the following values:
* @arg @ref FL_CAN_FILTER1
* @arg @ref FL_CAN_FILTER2
* @arg @ref FL_CAN_FILTER3
* @arg @ref FL_CAN_FILTER4
* @retval
*/
__STATIC_INLINE uint32_t FL_CAN_Filter_ReadIDCompare(CAN_Type *CANx, uint32_t filterX)
{
return (uint32_t)(READ_BIT(*((&(CANx->AFIR0)) + 2 * filterX), 0x7ffU) >> CAN_AFIR_AIID11_Pos);
}
/**
* @}
*/
/** @defgroup CAN_FL_EF_Init Initialization and de-initialization functions
* @{
*/
FL_ErrorStatus FL_CAN_Init(CAN_Type *CANx, FL_CAN_InitTypeDef *CAN_InitStructure);
FL_ErrorStatus FL_CAN_FilterInit(CAN_Type *CANx, FL_CAN_FilterInitTypeDef *CAN_FilterInitStructure, uint32_t filterX);
void FL_CAN_StructInit(FL_CAN_InitTypeDef *CAN_InitStruct);
void FL_CAN_StructFilterInit(FL_CAN_FilterInitTypeDef *CAN_FilterInitStruct);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __FM33LG0XX_FL_CAN_H*/
/*************************Py_Code_Generator Version: 0.1-0.11-0.1 @ 2020-09-12*************************/
/*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/