summaryrefslogtreecommitdiff
path: root/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h')
-rw-r--r--tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h837
1 files changed, 837 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h b/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h
new file mode 100644
index 0000000000..deed4a9589
--- /dev/null
+++ b/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/can/fsl_flexcan_hal.h
@@ -0,0 +1,837 @@
+/*
+ * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef __FSL_FLEXCAN_HAL_H__
+#define __FSL_FLEXCAN_HAL_H__
+
+#include <assert.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_flexcan_features.h"
+#include "fsl_device_registers.h"
+
+#ifndef MBED_NO_FLEXCAN
+
+/*!
+ * @addtogroup flexcan_hal
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*! @brief FlexCAN constants*/
+enum _flexcan_constants
+{
+ kFlexCanMessageSize = 8, /*!< FlexCAN message buffer data size in bytes*/
+};
+
+/*! @brief The Status enum is used to report current status of the FlexCAN interface.*/
+enum _flexcan_err_status
+{
+ kFlexCan_RxWrn = 0x0080, /*!< Reached warning level for RX errors*/
+ kFlexCan_TxWrn = 0x0100, /*!< Reached warning level for TX errors*/
+ kFlexCan_StfErr = 0x0200, /*!< Stuffing Error*/
+ kFlexCan_FrmErr = 0x0400, /*!< Form Error*/
+ kFlexCan_CrcErr = 0x0800, /*!< Cyclic Redundancy Check Error*/
+ kFlexCan_AckErr = 0x1000, /*!< Received no ACK on transmission*/
+ kFlexCan_Bit0Err = 0x2000, /*!< Unable to send dominant bit*/
+ kFlexCan_Bit1Err = 0x4000, /*!< Unable to send recessive bit*/
+};
+
+/*! @brief FlexCAN status return codes*/
+typedef enum _flexcan_status
+{
+ kStatus_FLEXCAN_Success = 0,
+ kStatus_FLEXCAN_OutOfRange,
+ kStatus_FLEXCAN_UnknownProperty,
+ kStatus_FLEXCAN_InvalidArgument,
+ kStatus_FLEXCAN_Fail,
+ kStatus_FLEXCAN_TimeOut,
+} flexcan_status_t;
+
+
+/*! @brief FlexCAN operation modes*/
+typedef enum _flexcan_operation_modes {
+ kFlexCanNormalMode, /*!< Normal mode or user mode*/
+ kFlexCanListenOnlyMode, /*!< Listen-only mode*/
+ kFlexCanLoopBackMode, /*!< Loop-back mode*/
+ kFlexCanFreezeMode, /*!< Freeze mode*/
+ kFlexCanDisableMode, /*!< Module disable mode*/
+} flexcan_operation_modes_t;
+
+/*! @brief FlexCAN message buffer CODE for Rx buffers*/
+typedef enum _flexcan_mb_code_rx {
+ kFlexCanRX_Inactive = 0x0, /*!< MB is not active.*/
+ kFlexCanRX_Full = 0x2, /*!< MB is full.*/
+ kFlexCanRX_Empty = 0x4, /*!< MB is active and empty.*/
+ kFlexCanRX_Overrun = 0x6, /*!< MB is overwritten into a full buffer.*/
+ kFlexCanRX_Busy = 0x8, /*!< FlexCAN is updating the contents of the MB.*/
+ /*! The CPU must not access the MB.*/
+ kFlexCanRX_Ranswer = 0xA, /*!< A frame was configured to recognize a Remote Request Frame*/
+ /*! and transmit a Response Frame in return.*/
+ kFlexCanRX_NotUsed = 0xF, /*!< Not used*/
+} flexcan_mb_code_rx_t;
+
+/*! @brief FlexCAN message buffer CODE FOR Tx buffers*/
+typedef enum _flexcan_mb_code_tx {
+ kFlexCanTX_Inactive = 0x08, /*!< MB is not active.*/
+ kFlexCanTX_Abort = 0x09, /*!< MB is aborted.*/
+ kFlexCanTX_Data = 0x0C, /*!< MB is a TX Data Frame(MB RTR must be 0).*/
+ kFlexCanTX_Remote = 0x1C, /*!< MB is a TX Remote Request Frame (MB RTR must be 1).*/
+ kFlexCanTX_Tanswer = 0x0E, /*!< MB is a TX Response Request Frame from.*/
+ /*! an incoming Remote Request Frame.*/
+ kFlexCanTX_NotUsed = 0xF, /*!< Not used*/
+} flexcan_mb_code_tx_t;
+
+/*! @brief FlexCAN message buffer transmission types*/
+typedef enum _flexcan_mb_transmission_type {
+ kFlexCanMBStatusType_TX, /*!< Transmit MB*/
+ kFlexCanMBStatusType_TXRemote, /*!< Transmit remote request MB*/
+ kFlexCanMBStatusType_RX, /*!< Receive MB*/
+ kFlexCanMBStatusType_RXRemote, /*!< Receive remote request MB*/
+ kFlexCanMBStatusType_RXTXRemote, /*!< FlexCAN remote frame receives remote request and*/
+ /*! transmits MB.*/
+} flexcan_mb_transmission_type_t;
+
+typedef enum _flexcan_rx_fifo_id_element_format {
+ kFlexCanRxFifoIdElementFormat_A, /*!< One full ID (standard and extended) per ID Filter Table*/
+ /*! element.*/
+ kFlexCanRxFifoIdElementFormat_B, /*!< Two full standard IDs or two partial 14-bit (standard and*/
+ /*! extended) IDs per ID Filter Table element.*/
+ kFlexCanRxFifoIdElementFormat_C, /*!< Four partial 8-bit Standard IDs per ID Filter Table*/
+ /*! element.*/
+ kFlexCanRxFifoIdElementFormat_D, /*!< All frames rejected.*/
+} flexcan_rx_fifo_id_element_format_t;
+
+/*! @brief FlexCAN Rx FIFO filters number*/
+typedef enum _flexcan_rx_fifo_id_filter_number {
+ kFlexCanRxFifoIDFilters_8 = 0x0, /*!< 8 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_16 = 0x1, /*!< 16 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_24 = 0x2, /*!< 24 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_32 = 0x3, /*!< 32 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_40 = 0x4, /*!< 40 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_48 = 0x5, /*!< 48 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_56 = 0x6, /*!< 56 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_64 = 0x7, /*!< 64 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_72 = 0x8, /*!< 72 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_80 = 0x9, /*!< 80 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_88 = 0xA, /*!< 88 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_96 = 0xB, /*!< 96 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_104 = 0xC, /*!< 104 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_112 = 0xD, /*!< 112 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_120 = 0xE, /*!< 120 Rx FIFO Filters*/
+ kFlexCanRxFifoIDFilters_128 = 0xF /*!< 128 Rx FIFO Filters*/
+} flexcan_rx_fifo_id_filter_num_t;
+
+/*! @brief FlexCAN RX FIFO ID filter table structure*/
+typedef struct FLEXCANIdTable {
+ bool is_remote_mb; /*!< Remote frame*/
+ bool is_extended_mb; /*!< Extended frame*/
+ uint32_t *id_filter; /*!< Rx FIFO ID filter elements*/
+} flexcan_id_table_t;
+
+/*! @brief FlexCAN RX mask type.*/
+typedef enum _flexcan_rx_mask_type {
+ kFlexCanRxMask_Global, /*!< Rx global mask*/
+ kFlexCanRxMask_Individual, /*!< Rx individual mask*/
+} flexcan_rx_mask_type_t;
+
+/*! @brief FlexCAN MB ID type*/
+typedef enum _flexcan_mb_id_type {
+ kFlexCanMbId_Std, /*!< Standard ID*/
+ kFlexCanMbId_Ext, /*!< Extended ID*/
+} flexcan_mb_id_type_t;
+
+/*! @brief FlexCAN clock source*/
+typedef enum _flexcan_clk_source {
+ kFlexCanClkSource_Osc, /*!< Oscillator clock*/
+ kFlexCanClkSource_Ipbus, /*!< Peripheral clock*/
+} flexcan_clk_source_t;
+
+/*! @brief FlexCAN error interrupt types*/
+typedef enum _flexcan_int_type {
+ kFlexCanInt_Buf, /*!< OR'd message buffers interrupt*/
+ kFlexCanInt_Err, /*!< Error interrupt*/
+ kFlexCanInt_Boff, /*!< Bus off interrupt*/
+ kFlexCanInt_Wakeup, /*!< Wakeup interrupt*/
+ kFlexCanInt_Txwarning, /*!< TX warning interrupt*/
+ kFlexCanInt_Rxwarning, /*!< RX warning interrupt*/
+} flexcan_int_type_t;
+
+/*! @brief FlexCAN bus error counters*/
+typedef struct FLEXCANBerrCounter {
+ uint16_t txerr; /*!< Transmit error counter*/
+ uint16_t rxerr; /*!< Receive error counter*/
+} flexcan_berr_counter_t;
+
+/*! @brief FlexCAN MB code and status for transmit and receive */
+typedef struct FLEXCANMbCodeStatus {
+ uint32_t code; /*!< MB code for TX or RX buffers.
+ Defined by flexcan_mb_code_rx_t and flexcan_mb_code_tx_t */
+ flexcan_mb_id_type_t msg_id_type; /*!< Type of message ID (standard or extended)*/
+ uint32_t data_length; /*!< Length of Data in Bytes*/
+} flexcan_mb_code_status_t;
+
+/*! @brief FlexCAN message buffer structure*/
+typedef struct FLEXCANMb {
+ uint32_t cs; /*!< Code and Status*/
+ uint32_t msg_id; /*!< Message Buffer ID*/
+ uint8_t data[kFlexCanMessageSize]; /*!< Bytes of the FlexCAN message*/
+} flexcan_mb_t;
+
+/*! @brief FlexCAN configuration*/
+typedef struct FLEXCANUserConfig {
+ uint32_t max_num_mb; /*!< The maximum number of Message Buffers*/
+ flexcan_rx_fifo_id_filter_num_t num_id_filters; /*!< The number of Rx FIFO ID filters needed*/
+ bool is_rx_fifo_needed; /*!< 1 if needed; 0 if not*/
+} flexcan_user_config_t;
+
+/*! @brief FlexCAN timing related structures*/
+typedef struct FLEXCANTimeSegment {
+ uint32_t propseg; /*!< Propagation segment*/
+ uint32_t pseg1; /*!< Phase segment 1*/
+ uint32_t pseg2; /*!< Phase segment 2*/
+ uint32_t pre_divider; /*!< Clock pre divider*/
+ uint32_t rjw; /*!< Resync jump width*/
+} flexcan_time_segment_t;
+
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ * @name Configuration
+ * @{
+ */
+
+/*!
+ * @brief Enables FlexCAN controller.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_Enable(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables FlexCAN controller.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_Disable(uint32_t canBaseAddr);
+
+/*!
+ * @brief Checks whether the FlexCAN is enabled or disabled.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return State of FlexCAN enable(0)/disable(1)
+ */
+static inline bool FLEXCAN_HAL_IsEnabled(uint32_t canBaseAddr)
+{
+ return BR_CAN_MCR_MDIS(canBaseAddr);
+}
+
+/*!
+ * @brief Selects the clock source for FlexCAN.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param clk The FlexCAN clock source
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_SelectClock(uint32_t canBaseAddr, flexcan_clk_source_t clk);
+
+/*!
+ * @brief Initializes the FlexCAN controller.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data.
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_Init(uint32_t canBaseAddr, const flexcan_user_config_t *data);
+
+/*!
+ * @brief Sets the FlexCAN time segments for setting up bit rate.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param time_seg FlexCAN time segments, which need to be set for the bit rate.
+ * @return 0 if successful; non-zero failed
+ */
+void FLEXCAN_HAL_SetTimeSegments(uint32_t canBaseAddr, flexcan_time_segment_t *time_seg);
+
+/*!
+ * @brief Gets the FlexCAN time segments to calculate the bit rate.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param time_seg FlexCAN time segments read for bit rate
+ * @return 0 if successful; non-zero failed
+ */
+void FLEXCAN_HAL_GetTimeSegments(uint32_t canBaseAddr, flexcan_time_segment_t *time_seg);
+
+/*!
+ * @brief Un freezes the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return 0 if successful; non-zero failed.
+ */
+void FLEXCAN_HAL_ExitFreezeMode(uint32_t canBaseAddr);
+
+/*!
+ * @brief Freezes the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnterFreezeMode(uint32_t canBaseAddr);
+
+/*!
+ * @brief Enables operation mode.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param mode An operation mode to be enabled
+ * @return 0 if successful; non-zero failed.
+ */
+flexcan_status_t FLEXCAN_HAL_EnableOperationMode(
+ uint32_t canBaseAddr,
+ flexcan_operation_modes_t mode);
+
+/*!
+ * @brief Disables operation mode.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param mode An operation mode to be disabled
+ * @return 0 if successful; non-zero failed.
+ */
+flexcan_status_t FLEXCAN_HAL_DisableOperationMode(
+ uint32_t canBaseAddr,
+ flexcan_operation_modes_t mode);
+
+/*@}*/
+
+/*!
+ * @name Data transfer
+ * @{
+ */
+
+/*!
+ * @brief Sets the FlexCAN message buffer fields for transmitting.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @param cs CODE/status values (TX)
+ * @param msg_id ID of the message to transmit
+ * @param mb_data Bytes of the FlexCAN message
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_SetMbTx(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx,
+ flexcan_mb_code_status_t *cs,
+ uint32_t msg_id,
+ uint8_t *mb_data);
+
+/*!
+ * @brief Sets the FlexCAN message buffer fields for receiving.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @param cs CODE/status values (RX)
+ * @param msg_id ID of the message to receive
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_SetMbRx(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx,
+ flexcan_mb_code_status_t *cs,
+ uint32_t msg_id);
+
+/*!
+ * @brief Gets the FlexCAN message buffer fields.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @param mb The fields of the message buffer
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_GetMb(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx,
+ flexcan_mb_t *mb);
+
+/*!
+ * @brief Locks the FlexCAN Rx message buffer.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_LockRxMb(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx);
+
+/*!
+ * @brief Unlocks the FlexCAN Rx message buffer.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return 0 if successful; non-zero failed
+ */
+static inline void FLEXCAN_HAL_UnlockRxMb(uint32_t canBaseAddr)
+{
+ /* Unlock the mailbox */
+ HW_CAN_TIMER_RD(canBaseAddr);
+}
+
+/*!
+ * @brief Enables the Rx FIFO.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableRxFifo(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables the Rx FIFO.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableRxFifo(uint32_t canBaseAddr);
+
+/*!
+ * @brief Sets the number of the Rx FIFO filters.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param number The number of Rx FIFO filters
+ */
+void FLEXCAN_HAL_SetRxFifoFiltersNumber(uint32_t canBaseAddr, uint32_t number);
+
+/*!
+ * @brief Sets the maximum number of Message Buffers.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ */
+void FLEXCAN_HAL_SetMaxMbNumber(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data);
+
+/*!
+ * @brief Sets the Rx FIFO ID filter table elements.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param id_format The format of the Rx FIFO ID Filter Table Elements
+ * @param id_filter_table The ID filter table elements which contain if RTR bit,
+ * IDE bit and RX message ID need to be set.
+ * @return 0 if successful; non-zero failed.
+ */
+flexcan_status_t FLEXCAN_HAL_SetIdFilterTableElements(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ flexcan_rx_fifo_id_element_format_t id_format,
+ flexcan_id_table_t *id_filter_table);
+
+/*!
+ * @brief Sets the FlexCAN Rx FIFO fields.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param id_format The format of the Rx FIFO ID Filter Table Elements
+ * @param id_filter_table The ID filter table elements which contain RTR bit, IDE bit,
+ * and RX message ID.
+ * @return 0 if successful; non-zero failed.
+ */
+flexcan_status_t FLEXCAN_HAL_SetRxFifo(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ flexcan_rx_fifo_id_element_format_t id_format,
+ flexcan_id_table_t *id_filter_table);
+
+/*!
+ * @brief Gets the FlexCAN Rx FIFO data.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param rx_fifo The FlexCAN receive FIFO data
+ * @return 0 if successful; non-zero failed.
+ */
+flexcan_status_t FLEXCAN_HAL_ReadFifo(
+ uint32_t canBaseAddr,
+ flexcan_mb_t *rx_fifo);
+
+/*@}*/
+
+/*!
+ * @name Interrupts
+ * @{
+ */
+
+/*!
+ * @brief Enables the FlexCAN Message Buffer interrupt.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_EnableMbInt(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx);
+
+/*!
+ * @brief Disables the FlexCAN Message Buffer interrupt.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @return 0 if successful; non-zero failed
+ */
+flexcan_status_t FLEXCAN_HAL_DisableMbInt(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx);
+
+/*!
+ * @brief Enables error interrupt of the FlexCAN module.
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableErrInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables error interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableErrInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Enables Bus off interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableBusOffInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables Bus off interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableBusOffInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Enables Wakeup interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableWakeupInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables Wakeup interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableWakeupInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Enables TX warning interrupt of the FlexCAN module
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableTxWarningInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables TX warning interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableTxWarningInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Enables RX warning interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_EnableRxWarningInt(uint32_t canBaseAddr);
+
+/*!
+ * @brief Disables RX warning interrupt of the FlexCAN module.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_DisableRxWarningInt(uint32_t canBaseAddr);
+
+/*@}*/
+
+/*!
+ * @name Status
+ * @{
+ */
+
+/*!
+ * @brief Gets the value of FlexCAN freeze ACK.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return freeze ACK state (1-freeze mode, 0-not in freeze mode).
+ */
+static inline uint32_t FLEXCAN_HAL_GetFreezeAck(uint32_t canBaseAddr)
+{
+ return HW_CAN_MCR(canBaseAddr).B.FRZACK;
+}
+
+/*!
+ * @brief Gets the individual FlexCAN MB interrupt flag.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @return the individual MB interrupt flag (0 and 1 are the flag value)
+ */
+uint8_t FLEXCAN_HAL_GetMbIntFlag(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t *data,
+ uint32_t mb_idx);
+
+/*!
+ * @brief Gets all FlexCAN MB interrupt flags.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return all MB interrupt flags
+ */
+static inline uint32_t FLEXCAN_HAL_GetAllMbIntFlags(uint32_t canBaseAddr)
+{
+ return HW_CAN_IFLAG1_RD(canBaseAddr);
+}
+
+/*!
+ * @brief Clears the interrupt flag of the message buffers.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param reg_val The value to be written to the interrupt flag1 register.
+ */
+/* See fsl_flexcan_hal.h for documentation of this function.*/
+static inline void FLEXCAN_HAL_ClearMbIntFlag(
+ uint32_t canBaseAddr,
+ uint32_t reg_val)
+{
+ /* Clear the corresponding message buffer interrupt flag*/
+ HW_CAN_IFLAG1_SET(canBaseAddr, reg_val);
+}
+
+/*!
+ * @brief Gets the transmit error counter and receives the error counter.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param err_cnt Transmit error counter and receive error counter
+ */
+void FLEXCAN_HAL_GetErrCounter(
+ uint32_t canBaseAddr,
+ flexcan_berr_counter_t *err_cnt);
+
+/*!
+ * @brief Gets error and status.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return The current error and status
+ */
+static inline uint32_t FLEXCAN_HAL_GetErrStatus(uint32_t canBaseAddr)
+{
+ return HW_CAN_ESR1_RD(canBaseAddr);
+}
+
+/*!
+ * @brief Clears all other interrupts in ERRSTAT register (Error, Busoff, Wakeup).
+ *
+ * @param canBaseAddr The FlexCAN base address
+ */
+void FLEXCAN_HAL_ClearErrIntStatus(uint32_t canBaseAddr);
+
+/*@}*/
+
+/*!
+ * @name Mask
+ * @{
+ */
+
+/*!
+ * @brief Sets the Rx masking type.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param type The FlexCAN Rx mask type
+ */
+void FLEXCAN_HAL_SetMaskType(uint32_t canBaseAddr, flexcan_rx_mask_type_t type);
+
+/*!
+ * @brief Sets the FlexCAN RX FIFO global standard mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param std_mask Standard mask
+ */
+void FLEXCAN_HAL_SetRxFifoGlobalStdMask(
+ uint32_t canBaseAddr,
+ uint32_t std_mask);
+
+/*!
+ * @brief Sets the FlexCAN Rx FIFO global extended mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param ext_mask Extended mask
+ */
+void FLEXCAN_HAL_SetRxFifoGlobalExtMask(
+ uint32_t canBaseAddr,
+ uint32_t ext_mask);
+
+/*!
+ * @brief Sets the FlexCAN Rx individual standard mask for ID filtering in the Rx MBs and the Rx FIFO.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @param std_mask Individual standard mask
+ * @return 0 if successful; non-zero failed
+*/
+flexcan_status_t FLEXCAN_HAL_SetRxIndividualStdMask(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t * data,
+ uint32_t mb_idx,
+ uint32_t std_mask);
+
+/*!
+ * @brief Sets the FlexCAN Rx individual extended mask for ID filtering in the Rx MBs and the Rx FIFO.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param data The FlexCAN platform data
+ * @param mb_idx Index of the message buffer
+ * @param ext_mask Individual extended mask
+ * @return 0 if successful; non-zero failed
+*/
+flexcan_status_t FLEXCAN_HAL_SetRxIndividualExtMask(
+ uint32_t canBaseAddr,
+ const flexcan_user_config_t * data,
+ uint32_t mb_idx,
+ uint32_t ext_mask);
+
+/*!
+ * @brief Sets the FlexCAN Rx MB global standard mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param std_mask Standard mask
+ */
+void FLEXCAN_HAL_SetRxMbGlobalStdMask(
+ uint32_t canBaseAddr,
+ uint32_t std_mask);
+
+/*!
+ * @brief Sets the FlexCAN RX MB BUF14 standard mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param std_mask Standard mask
+ */
+void FLEXCAN_HAL_SetRxMbBuf14StdMask(
+ uint32_t canBaseAddr,
+ uint32_t std_mask);
+
+/*!
+ * @brief Sets the FlexCAN Rx MB BUF15 standard mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param std_mask Standard mask
+ * @return 0 if successful; non-zero failed
+ */
+void FLEXCAN_HAL_SetRxMbBuf15StdMask(
+ uint32_t canBaseAddr,
+ uint32_t std_mask);
+
+/*!
+ * @brief Sets the FlexCAN RX MB global extended mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param ext_mask Extended mask
+ */
+void FLEXCAN_HAL_SetRxMbGlobalExtMask(
+ uint32_t canBaseAddr,
+ uint32_t ext_mask);
+
+/*!
+ * @brief Sets the FlexCAN RX MB BUF14 extended mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param ext_mask Extended mask
+ */
+void FLEXCAN_HAL_SetRxMbBuf14ExtMask(
+ uint32_t canBaseAddr,
+ uint32_t ext_mask);
+
+/*!
+ * @brief Sets the FlexCAN RX MB BUF15 extended mask.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @param ext_mask Extended mask
+ */
+void FLEXCAN_HAL_SetRxMbBuf15ExtMask(
+ uint32_t canBaseAddr,
+ uint32_t ext_mask);
+
+/*!
+ * @brief Gets the FlexCAN ID acceptance filter hit indicator on Rx FIFO.
+ *
+ * @param canBaseAddr The FlexCAN base address
+ * @return RX FIFO information
+ */
+static inline uint32_t FLEXCAN_HAL_GetIdAcceptanceFilterRxFifo(uint32_t canBaseAddr)
+{
+ return BR_CAN_RXFIR_IDHIT(canBaseAddr);
+}
+
+/*@}*/
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*! @}*/
+
+#endif /* MBED_NO_FLEXCAN */
+
+#endif /* __FSL_FLEXCAN_HAL_H__*/
+
+/*******************************************************************************
+ * EOF
+ ******************************************************************************/
+