The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_MIMXRT1050_EVK/TOOLCHAIN_IAR/fsl_flexcan.h@172:65be27845400, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 20:53:29 2019 +0000
- Revision:
- 172:65be27845400
- Parent:
- 171:3a7713b1edbc
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 161:aa5281ff4a02 | 1 | /* |
AnnaBridge | 170:e95d10626187 | 2 | * The Clear BSD License |
AnnaBridge | 161:aa5281ff4a02 | 3 | * Copyright (c) 2015, Freescale Semiconductor, Inc. |
AnnaBridge | 161:aa5281ff4a02 | 4 | * Copyright 2016-2017 NXP |
AnnaBridge | 170:e95d10626187 | 5 | * All rights reserved. |
AnnaBridge | 161:aa5281ff4a02 | 6 | * |
AnnaBridge | 161:aa5281ff4a02 | 7 | * Redistribution and use in source and binary forms, with or without modification, |
AnnaBridge | 170:e95d10626187 | 8 | * are permitted (subject to the limitations in the disclaimer below) provided |
AnnaBridge | 170:e95d10626187 | 9 | * that the following conditions are met: |
AnnaBridge | 161:aa5281ff4a02 | 10 | * |
AnnaBridge | 161:aa5281ff4a02 | 11 | * o Redistributions of source code must retain the above copyright notice, this list |
AnnaBridge | 161:aa5281ff4a02 | 12 | * of conditions and the following disclaimer. |
AnnaBridge | 161:aa5281ff4a02 | 13 | * |
AnnaBridge | 161:aa5281ff4a02 | 14 | * o Redistributions in binary form must reproduce the above copyright notice, this |
AnnaBridge | 161:aa5281ff4a02 | 15 | * list of conditions and the following disclaimer in the documentation and/or |
AnnaBridge | 161:aa5281ff4a02 | 16 | * other materials provided with the distribution. |
AnnaBridge | 161:aa5281ff4a02 | 17 | * |
AnnaBridge | 161:aa5281ff4a02 | 18 | * o Neither the name of the copyright holder nor the names of its |
AnnaBridge | 161:aa5281ff4a02 | 19 | * contributors may be used to endorse or promote products derived from this |
AnnaBridge | 161:aa5281ff4a02 | 20 | * software without specific prior written permission. |
AnnaBridge | 161:aa5281ff4a02 | 21 | * |
AnnaBridge | 170:e95d10626187 | 22 | * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. |
AnnaBridge | 161:aa5281ff4a02 | 23 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
AnnaBridge | 161:aa5281ff4a02 | 24 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
AnnaBridge | 161:aa5281ff4a02 | 25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
AnnaBridge | 161:aa5281ff4a02 | 26 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
AnnaBridge | 161:aa5281ff4a02 | 27 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
AnnaBridge | 161:aa5281ff4a02 | 28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
AnnaBridge | 161:aa5281ff4a02 | 29 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
AnnaBridge | 161:aa5281ff4a02 | 30 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
AnnaBridge | 161:aa5281ff4a02 | 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
AnnaBridge | 161:aa5281ff4a02 | 32 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
AnnaBridge | 161:aa5281ff4a02 | 33 | */ |
AnnaBridge | 161:aa5281ff4a02 | 34 | #ifndef _FSL_FLEXCAN_H_ |
AnnaBridge | 161:aa5281ff4a02 | 35 | #define _FSL_FLEXCAN_H_ |
AnnaBridge | 161:aa5281ff4a02 | 36 | |
AnnaBridge | 161:aa5281ff4a02 | 37 | #include "fsl_common.h" |
AnnaBridge | 161:aa5281ff4a02 | 38 | |
AnnaBridge | 161:aa5281ff4a02 | 39 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 40 | * @addtogroup flexcan_driver |
AnnaBridge | 161:aa5281ff4a02 | 41 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 42 | */ |
AnnaBridge | 161:aa5281ff4a02 | 43 | |
AnnaBridge | 161:aa5281ff4a02 | 44 | /****************************************************************************** |
AnnaBridge | 161:aa5281ff4a02 | 45 | * Definitions |
AnnaBridge | 161:aa5281ff4a02 | 46 | *****************************************************************************/ |
AnnaBridge | 161:aa5281ff4a02 | 47 | |
AnnaBridge | 161:aa5281ff4a02 | 48 | /*! @name Driver version */ |
AnnaBridge | 161:aa5281ff4a02 | 49 | /*@{*/ |
AnnaBridge | 161:aa5281ff4a02 | 50 | /*! @brief FlexCAN driver version 2.2.0. */ |
AnnaBridge | 170:e95d10626187 | 51 | #define FSL_FLEXCAN_DRIVER_VERSION (MAKE_VERSION(2, 2, 0)) |
AnnaBridge | 161:aa5281ff4a02 | 52 | /*@}*/ |
AnnaBridge | 161:aa5281ff4a02 | 53 | |
AnnaBridge | 161:aa5281ff4a02 | 54 | /*! @brief FlexCAN Frame ID helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 55 | #define FLEXCAN_ID_STD(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 56 | (((uint32_t)(((uint32_t)(id)) << CAN_ID_STD_SHIFT)) & CAN_ID_STD_MASK) /*!< Standard Frame ID helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 57 | #define FLEXCAN_ID_EXT(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 58 | (((uint32_t)(((uint32_t)(id)) << CAN_ID_EXT_SHIFT)) & \ |
AnnaBridge | 161:aa5281ff4a02 | 59 | (CAN_ID_EXT_MASK | CAN_ID_STD_MASK)) /*!< Extend Frame ID helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 60 | |
AnnaBridge | 161:aa5281ff4a02 | 61 | /*! @brief FlexCAN Rx Message Buffer Mask helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 62 | #define FLEXCAN_RX_MB_STD_MASK(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 63 | (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 161:aa5281ff4a02 | 64 | FLEXCAN_ID_STD(id)) /*!< Standard Rx Message Buffer Mask helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 65 | #define FLEXCAN_RX_MB_EXT_MASK(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 66 | (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 161:aa5281ff4a02 | 67 | FLEXCAN_ID_EXT(id)) /*!< Extend Rx Message Buffer Mask helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 68 | |
AnnaBridge | 161:aa5281ff4a02 | 69 | /*! @brief FlexCAN Rx FIFO Mask helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 70 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 71 | (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 161:aa5281ff4a02 | 72 | (FLEXCAN_ID_STD(id) << 1)) /*!< Standard Rx FIFO Mask helper macro Type A helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 73 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 74 | (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 170:e95d10626187 | 75 | (((uint32_t)(id)&0x7FF) << 19)) /*!< Standard Rx FIFO Mask helper macro Type B upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 76 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 77 | (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \ |
AnnaBridge | 170:e95d10626187 | 78 | (((uint32_t)(id)&0x7FF) << 3)) /*!< Standard Rx FIFO Mask helper macro Type B lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 79 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH(id) \ |
AnnaBridge | 170:e95d10626187 | 80 | (((uint32_t)(id)&0x7F8) << 21) /*!< Standard Rx FIFO Mask helper macro Type C upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 81 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH(id) \ |
AnnaBridge | 170:e95d10626187 | 82 | (((uint32_t)(id)&0x7F8) << 13) /*!< Standard Rx FIFO Mask helper macro Type C mid-upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 83 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW(id) \ |
AnnaBridge | 170:e95d10626187 | 84 | (((uint32_t)(id)&0x7F8) << 5) /*!< Standard Rx FIFO Mask helper macro Type C mid-lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 85 | #define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW(id) \ |
AnnaBridge | 170:e95d10626187 | 86 | (((uint32_t)(id)&0x7F8) >> 3) /*!< Standard Rx FIFO Mask helper macro Type C lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 87 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 88 | (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 161:aa5281ff4a02 | 89 | (FLEXCAN_ID_EXT(id) << 1)) /*!< Extend Rx FIFO Mask helper macro Type A helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 90 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH(id, rtr, ide) \ |
AnnaBridge | 170:e95d10626187 | 91 | ( \ |
AnnaBridge | 170:e95d10626187 | 92 | ((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \ |
AnnaBridge | 170:e95d10626187 | 93 | ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) \ |
AnnaBridge | 170:e95d10626187 | 94 | << 1)) /*!< Extend Rx FIFO Mask helper macro Type B upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 95 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 96 | (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \ |
AnnaBridge | 161:aa5281ff4a02 | 97 | ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) >> \ |
AnnaBridge | 161:aa5281ff4a02 | 98 | 15)) /*!< Extend Rx FIFO Mask helper macro Type B lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 99 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 100 | ((FLEXCAN_ID_EXT(id) & 0x1FE00000) << 3) /*!< Extend Rx FIFO Mask helper macro Type C upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 101 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 102 | ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \ |
AnnaBridge | 161:aa5281ff4a02 | 103 | 5) /*!< Extend Rx FIFO Mask helper macro Type C mid-upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 104 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 105 | ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \ |
AnnaBridge | 161:aa5281ff4a02 | 106 | 13) /*!< Extend Rx FIFO Mask helper macro Type C mid-lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 107 | #define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 108 | ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> 21) /*!< Extend Rx FIFO Mask helper macro Type C lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 109 | |
AnnaBridge | 161:aa5281ff4a02 | 110 | /*! @brief FlexCAN Rx FIFO Filter helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 111 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_A(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 112 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide) /*!< Standard Rx FIFO Filter helper macro Type A helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 113 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_HIGH(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 114 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH( \ |
AnnaBridge | 161:aa5281ff4a02 | 115 | id, rtr, ide) /*!< Standard Rx FIFO Filter helper macro Type B upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 116 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_LOW(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 117 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW( \ |
AnnaBridge | 161:aa5281ff4a02 | 118 | id, rtr, ide) /*!< Standard Rx FIFO Filter helper macro Type B lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 119 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_HIGH(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 120 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH( \ |
AnnaBridge | 161:aa5281ff4a02 | 121 | id) /*!< Standard Rx FIFO Filter helper macro Type C upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 122 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_HIGH(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 123 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH( \ |
AnnaBridge | 161:aa5281ff4a02 | 124 | id) /*!< Standard Rx FIFO Filter helper macro Type C mid-upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 125 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_LOW(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 126 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW( \ |
AnnaBridge | 161:aa5281ff4a02 | 127 | id) /*!< Standard Rx FIFO Filter helper macro Type C mid-lower part helper macro. */ |
AnnaBridge | 170:e95d10626187 | 128 | #define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_LOW(id) \ |
AnnaBridge | 170:e95d10626187 | 129 | FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW( \ |
AnnaBridge | 170:e95d10626187 | 130 | id) /*!< Standard Rx FIFO Filter helper macro Type C lower part helper macro. \ \ \ \ \ \ |
AnnaBridge | 170:e95d10626187 | 131 | */ |
AnnaBridge | 161:aa5281ff4a02 | 132 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_A(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 133 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide) /*!< Extend Rx FIFO Filter helper macro Type A helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 134 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_HIGH(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 135 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH( \ |
AnnaBridge | 161:aa5281ff4a02 | 136 | id, rtr, ide) /*!< Extend Rx FIFO Filter helper macro Type B upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 137 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_LOW(id, rtr, ide) \ |
AnnaBridge | 161:aa5281ff4a02 | 138 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW( \ |
AnnaBridge | 161:aa5281ff4a02 | 139 | id, rtr, ide) /*!< Extend Rx FIFO Filter helper macro Type B lower part helper macro. */ |
AnnaBridge | 170:e95d10626187 | 140 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_HIGH(id) \ |
AnnaBridge | 170:e95d10626187 | 141 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH( \ |
AnnaBridge | 170:e95d10626187 | 142 | id) /*!< Extend Rx FIFO Filter helper macro Type C upper part helper macro. \ \ \ \ \ \ |
AnnaBridge | 170:e95d10626187 | 143 | */ |
AnnaBridge | 161:aa5281ff4a02 | 144 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_HIGH(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 145 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH( \ |
AnnaBridge | 161:aa5281ff4a02 | 146 | id) /*!< Extend Rx FIFO Filter helper macro Type C mid-upper part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 147 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_LOW(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 148 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW( \ |
AnnaBridge | 161:aa5281ff4a02 | 149 | id) /*!< Extend Rx FIFO Filter helper macro Type C mid-lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 150 | #define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_LOW(id) \ |
AnnaBridge | 161:aa5281ff4a02 | 151 | FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id) /*!< Extend Rx FIFO Filter helper macro Type C lower part helper macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 152 | |
AnnaBridge | 161:aa5281ff4a02 | 153 | /*! @brief FlexCAN transfer status. */ |
AnnaBridge | 161:aa5281ff4a02 | 154 | enum _flexcan_status |
AnnaBridge | 161:aa5281ff4a02 | 155 | { |
AnnaBridge | 161:aa5281ff4a02 | 156 | kStatus_FLEXCAN_TxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 0), /*!< Tx Message Buffer is Busy. */ |
AnnaBridge | 161:aa5281ff4a02 | 157 | kStatus_FLEXCAN_TxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 1), /*!< Tx Message Buffer is Idle. */ |
AnnaBridge | 161:aa5281ff4a02 | 158 | kStatus_FLEXCAN_TxSwitchToRx = MAKE_STATUS( |
AnnaBridge | 161:aa5281ff4a02 | 159 | kStatusGroup_FLEXCAN, 2), /*!< Remote Message is send out and Message buffer changed to Receive one. */ |
AnnaBridge | 161:aa5281ff4a02 | 160 | kStatus_FLEXCAN_RxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 3), /*!< Rx Message Buffer is Busy. */ |
AnnaBridge | 161:aa5281ff4a02 | 161 | kStatus_FLEXCAN_RxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 4), /*!< Rx Message Buffer is Idle. */ |
AnnaBridge | 161:aa5281ff4a02 | 162 | kStatus_FLEXCAN_RxOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 5), /*!< Rx Message Buffer is Overflowed. */ |
AnnaBridge | 161:aa5281ff4a02 | 163 | kStatus_FLEXCAN_RxFifoBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 6), /*!< Rx Message FIFO is Busy. */ |
AnnaBridge | 161:aa5281ff4a02 | 164 | kStatus_FLEXCAN_RxFifoIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 7), /*!< Rx Message FIFO is Idle. */ |
AnnaBridge | 161:aa5281ff4a02 | 165 | kStatus_FLEXCAN_RxFifoOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 8), /*!< Rx Message FIFO is overflowed. */ |
AnnaBridge | 161:aa5281ff4a02 | 166 | kStatus_FLEXCAN_RxFifoWarning = MAKE_STATUS(kStatusGroup_FLEXCAN, 9), /*!< Rx Message FIFO is almost overflowed. */ |
AnnaBridge | 161:aa5281ff4a02 | 167 | kStatus_FLEXCAN_ErrorStatus = MAKE_STATUS(kStatusGroup_FLEXCAN, 10), /*!< FlexCAN Module Error and Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 168 | kStatus_FLEXCAN_UnHandled = MAKE_STATUS(kStatusGroup_FLEXCAN, 11), /*!< UnHadled Interrupt asserted. */ |
AnnaBridge | 161:aa5281ff4a02 | 169 | }; |
AnnaBridge | 161:aa5281ff4a02 | 170 | |
AnnaBridge | 161:aa5281ff4a02 | 171 | /*! @brief FlexCAN frame format. */ |
AnnaBridge | 161:aa5281ff4a02 | 172 | typedef enum _flexcan_frame_format |
AnnaBridge | 161:aa5281ff4a02 | 173 | { |
AnnaBridge | 161:aa5281ff4a02 | 174 | kFLEXCAN_FrameFormatStandard = 0x0U, /*!< Standard frame format attribute. */ |
AnnaBridge | 161:aa5281ff4a02 | 175 | kFLEXCAN_FrameFormatExtend = 0x1U, /*!< Extend frame format attribute. */ |
AnnaBridge | 161:aa5281ff4a02 | 176 | } flexcan_frame_format_t; |
AnnaBridge | 161:aa5281ff4a02 | 177 | |
AnnaBridge | 161:aa5281ff4a02 | 178 | /*! @brief FlexCAN frame type. */ |
AnnaBridge | 161:aa5281ff4a02 | 179 | typedef enum _flexcan_frame_type |
AnnaBridge | 161:aa5281ff4a02 | 180 | { |
AnnaBridge | 161:aa5281ff4a02 | 181 | kFLEXCAN_FrameTypeData = 0x0U, /*!< Data frame type attribute. */ |
AnnaBridge | 161:aa5281ff4a02 | 182 | kFLEXCAN_FrameTypeRemote = 0x1U, /*!< Remote frame type attribute. */ |
AnnaBridge | 161:aa5281ff4a02 | 183 | } flexcan_frame_type_t; |
AnnaBridge | 161:aa5281ff4a02 | 184 | |
AnnaBridge | 161:aa5281ff4a02 | 185 | #if (!defined(FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE)) || !FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE |
AnnaBridge | 161:aa5281ff4a02 | 186 | /*! @brief FlexCAN clock source. */ |
AnnaBridge | 161:aa5281ff4a02 | 187 | typedef enum _flexcan_clock_source |
AnnaBridge | 161:aa5281ff4a02 | 188 | { |
AnnaBridge | 161:aa5281ff4a02 | 189 | kFLEXCAN_ClkSrcOsc = 0x0U, /*!< FlexCAN Protocol Engine clock from Oscillator. */ |
AnnaBridge | 161:aa5281ff4a02 | 190 | kFLEXCAN_ClkSrcPeri = 0x1U, /*!< FlexCAN Protocol Engine clock from Peripheral Clock. */ |
AnnaBridge | 161:aa5281ff4a02 | 191 | } flexcan_clock_source_t; |
AnnaBridge | 161:aa5281ff4a02 | 192 | #endif /* FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE */ |
AnnaBridge | 161:aa5281ff4a02 | 193 | |
AnnaBridge | 161:aa5281ff4a02 | 194 | /*! @brief FlexCAN Rx Fifo Filter type. */ |
AnnaBridge | 161:aa5281ff4a02 | 195 | typedef enum _flexcan_rx_fifo_filter_type |
AnnaBridge | 161:aa5281ff4a02 | 196 | { |
AnnaBridge | 161:aa5281ff4a02 | 197 | kFLEXCAN_RxFifoFilterTypeA = 0x0U, /*!< One full ID (standard and extended) per ID Filter element. */ |
AnnaBridge | 161:aa5281ff4a02 | 198 | kFLEXCAN_RxFifoFilterTypeB = |
AnnaBridge | 161:aa5281ff4a02 | 199 | 0x1U, /*!< Two full standard IDs or two partial 14-bit ID slices per ID Filter Table element. */ |
AnnaBridge | 161:aa5281ff4a02 | 200 | kFLEXCAN_RxFifoFilterTypeC = |
AnnaBridge | 161:aa5281ff4a02 | 201 | 0x2U, /*!< Four partial 8-bit Standard or extended ID slices per ID Filter Table element. */ |
AnnaBridge | 161:aa5281ff4a02 | 202 | kFLEXCAN_RxFifoFilterTypeD = 0x3U, /*!< All frames rejected. */ |
AnnaBridge | 161:aa5281ff4a02 | 203 | } flexcan_rx_fifo_filter_type_t; |
AnnaBridge | 161:aa5281ff4a02 | 204 | |
AnnaBridge | 161:aa5281ff4a02 | 205 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 206 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 207 | * @brief FlexCAN Message Buffer Data Size. |
AnnaBridge | 161:aa5281ff4a02 | 208 | */ |
AnnaBridge | 161:aa5281ff4a02 | 209 | typedef enum _flexcan_mb_size |
AnnaBridge | 161:aa5281ff4a02 | 210 | { |
AnnaBridge | 161:aa5281ff4a02 | 211 | kFLEXCAN_8BperMB = 0x0U, /*!< Selects 8 bytes per Message Buffer. */ |
AnnaBridge | 161:aa5281ff4a02 | 212 | kFLEXCAN_16BperMB = 0x1U, /*!< Selects 16 bytes per Message Buffer. */ |
AnnaBridge | 161:aa5281ff4a02 | 213 | kFLEXCAN_32BperMB = 0x2U, /*!< Selects 32 bytes per Message Buffer. */ |
AnnaBridge | 161:aa5281ff4a02 | 214 | kFLEXCAN_64BperMB = 0x3U, /*!< Selects 64 bytes per Message Buffer. */ |
AnnaBridge | 161:aa5281ff4a02 | 215 | } flexcan_mb_size_t; |
AnnaBridge | 161:aa5281ff4a02 | 216 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 217 | |
AnnaBridge | 161:aa5281ff4a02 | 218 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 219 | * @brief FlexCAN Rx FIFO priority. |
AnnaBridge | 161:aa5281ff4a02 | 220 | * |
AnnaBridge | 161:aa5281ff4a02 | 221 | * The matching process starts from the Rx MB(or Rx FIFO) with higher priority. |
AnnaBridge | 161:aa5281ff4a02 | 222 | * If no MB(or Rx FIFO filter) is satisfied, the matching process goes on with |
AnnaBridge | 161:aa5281ff4a02 | 223 | * the Rx FIFO(or Rx MB) with lower priority. |
AnnaBridge | 161:aa5281ff4a02 | 224 | */ |
AnnaBridge | 161:aa5281ff4a02 | 225 | typedef enum _flexcan_rx_fifo_priority |
AnnaBridge | 161:aa5281ff4a02 | 226 | { |
AnnaBridge | 161:aa5281ff4a02 | 227 | kFLEXCAN_RxFifoPrioLow = 0x0U, /*!< Matching process start from Rx Message Buffer first*/ |
AnnaBridge | 161:aa5281ff4a02 | 228 | kFLEXCAN_RxFifoPrioHigh = 0x1U, /*!< Matching process start from Rx FIFO first*/ |
AnnaBridge | 161:aa5281ff4a02 | 229 | } flexcan_rx_fifo_priority_t; |
AnnaBridge | 161:aa5281ff4a02 | 230 | |
AnnaBridge | 161:aa5281ff4a02 | 231 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 232 | * @brief FlexCAN interrupt configuration structure, default settings all disabled. |
AnnaBridge | 161:aa5281ff4a02 | 233 | * |
AnnaBridge | 161:aa5281ff4a02 | 234 | * This structure contains the settings for all of the FlexCAN Module interrupt configurations. |
AnnaBridge | 161:aa5281ff4a02 | 235 | * Note: FlexCAN Message Buffers and Rx FIFO have their own interrupts. |
AnnaBridge | 161:aa5281ff4a02 | 236 | */ |
AnnaBridge | 161:aa5281ff4a02 | 237 | enum _flexcan_interrupt_enable |
AnnaBridge | 161:aa5281ff4a02 | 238 | { |
AnnaBridge | 161:aa5281ff4a02 | 239 | kFLEXCAN_BusOffInterruptEnable = CAN_CTRL1_BOFFMSK_MASK, /*!< Bus Off interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 240 | kFLEXCAN_ErrorInterruptEnable = CAN_CTRL1_ERRMSK_MASK, /*!< Error interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 241 | kFLEXCAN_RxWarningInterruptEnable = CAN_CTRL1_RWRNMSK_MASK, /*!< Rx Warning interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 242 | kFLEXCAN_TxWarningInterruptEnable = CAN_CTRL1_TWRNMSK_MASK, /*!< Tx Warning interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 243 | kFLEXCAN_WakeUpInterruptEnable = CAN_MCR_WAKMSK_MASK, /*!< Wake Up interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 244 | }; |
AnnaBridge | 161:aa5281ff4a02 | 245 | |
AnnaBridge | 161:aa5281ff4a02 | 246 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 247 | * @brief FlexCAN status flags. |
AnnaBridge | 161:aa5281ff4a02 | 248 | * |
AnnaBridge | 161:aa5281ff4a02 | 249 | * This provides constants for the FlexCAN status flags for use in the FlexCAN functions. |
AnnaBridge | 161:aa5281ff4a02 | 250 | * Note: The CPU read action clears FlEXCAN_ErrorFlag, therefore user need to |
AnnaBridge | 161:aa5281ff4a02 | 251 | * read FlEXCAN_ErrorFlag and distinguish which error is occur using |
AnnaBridge | 161:aa5281ff4a02 | 252 | * @ref _flexcan_error_flags enumerations. |
AnnaBridge | 161:aa5281ff4a02 | 253 | */ |
AnnaBridge | 161:aa5281ff4a02 | 254 | enum _flexcan_flags |
AnnaBridge | 161:aa5281ff4a02 | 255 | { |
AnnaBridge | 161:aa5281ff4a02 | 256 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 257 | kFLEXCAN_FDErrorIntFlag = CAN_ESR1_ERRINT_FAST_MASK, /*!< Error Overrun Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 258 | kFLEXCAN_BusoffDoneIntFlag = CAN_ESR1_BOFFDONEINT_MASK, /*!< Error Overrun Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 259 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 260 | kFLEXCAN_SynchFlag = CAN_ESR1_SYNCH_MASK, /*!< CAN Synchronization Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 261 | kFLEXCAN_TxWarningIntFlag = CAN_ESR1_TWRNINT_MASK, /*!< Tx Warning Interrupt Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 262 | kFLEXCAN_RxWarningIntFlag = CAN_ESR1_RWRNINT_MASK, /*!< Rx Warning Interrupt Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 263 | kFLEXCAN_TxErrorWarningFlag = CAN_ESR1_TXWRN_MASK, /*!< Tx Error Warning Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 264 | kFLEXCAN_RxErrorWarningFlag = CAN_ESR1_RXWRN_MASK, /*!< Rx Error Warning Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 265 | kFLEXCAN_IdleFlag = CAN_ESR1_IDLE_MASK, /*!< CAN IDLE Status Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 266 | kFLEXCAN_FaultConfinementFlag = CAN_ESR1_FLTCONF_MASK, /*!< Fault Confinement State Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 267 | kFLEXCAN_TransmittingFlag = CAN_ESR1_TX_MASK, /*!< FlexCAN In Transmission Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 268 | kFLEXCAN_ReceivingFlag = CAN_ESR1_RX_MASK, /*!< FlexCAN In Reception Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 269 | kFLEXCAN_BusOffIntFlag = CAN_ESR1_BOFFINT_MASK, /*!< Bus Off Interrupt Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 270 | kFLEXCAN_ErrorIntFlag = CAN_ESR1_ERRINT_MASK, /*!< Error Interrupt Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 271 | kFLEXCAN_WakeUpIntFlag = CAN_ESR1_WAKINT_MASK, /*!< Wake-Up Interrupt Flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 272 | kFLEXCAN_ErrorFlag = /*!< All FlexCAN Error Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 273 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 274 | CAN_ESR1_STFERR_FAST_MASK | CAN_ESR1_FRMERR_FAST_MASK | CAN_ESR1_CRCERR_FAST_MASK | CAN_ESR1_BIT0ERR_FAST_MASK | |
AnnaBridge | 161:aa5281ff4a02 | 275 | CAN_ESR1_BIT1ERR_FAST_MASK | CAN_ESR1_ERROVR_MASK | |
AnnaBridge | 161:aa5281ff4a02 | 276 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 277 | CAN_ESR1_BIT1ERR_MASK | CAN_ESR1_BIT0ERR_MASK | CAN_ESR1_ACKERR_MASK | CAN_ESR1_CRCERR_MASK | CAN_ESR1_FRMERR_MASK | |
AnnaBridge | 161:aa5281ff4a02 | 278 | CAN_ESR1_STFERR_MASK, |
AnnaBridge | 161:aa5281ff4a02 | 279 | }; |
AnnaBridge | 161:aa5281ff4a02 | 280 | |
AnnaBridge | 161:aa5281ff4a02 | 281 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 282 | * @brief FlexCAN error status flags. |
AnnaBridge | 161:aa5281ff4a02 | 283 | * |
AnnaBridge | 161:aa5281ff4a02 | 284 | * The FlexCAN Error Status enumerations is used to report current error of the FlexCAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 285 | * This enumerations should be used with KFLEXCAN_ErrorFlag in @ref _flexcan_flags enumerations |
AnnaBridge | 161:aa5281ff4a02 | 286 | * to ditermine which error is generated. |
AnnaBridge | 161:aa5281ff4a02 | 287 | */ |
AnnaBridge | 161:aa5281ff4a02 | 288 | enum _flexcan_error_flags |
AnnaBridge | 161:aa5281ff4a02 | 289 | { |
AnnaBridge | 161:aa5281ff4a02 | 290 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 291 | kFLEXCAN_FDStuffingError = CAN_ESR1_STFERR_FAST_MASK, /*!< Stuffing Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 292 | kFLEXCAN_FDFormError = CAN_ESR1_FRMERR_FAST_MASK, /*!< Form Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 293 | kFLEXCAN_FDCrcError = CAN_ESR1_CRCERR_FAST_MASK, /*!< Cyclic Redundancy Check Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 294 | kFLEXCAN_FDBit0Error = CAN_ESR1_BIT0ERR_FAST_MASK, /*!< Unable to send dominant bit. */ |
AnnaBridge | 161:aa5281ff4a02 | 295 | kFLEXCAN_FDBit1Error = CAN_ESR1_BIT1ERR_FAST_MASK, /*!< Unable to send recessive bit. */ |
AnnaBridge | 161:aa5281ff4a02 | 296 | kFLEXCAN_OverrunError = CAN_ESR1_ERROVR_MASK, /*!< Error Overrun Status. */ |
AnnaBridge | 161:aa5281ff4a02 | 297 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 298 | kFLEXCAN_StuffingError = CAN_ESR1_STFERR_MASK, /*!< Stuffing Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 299 | kFLEXCAN_FormError = CAN_ESR1_FRMERR_MASK, /*!< Form Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 300 | kFLEXCAN_CrcError = CAN_ESR1_CRCERR_MASK, /*!< Cyclic Redundancy Check Error. */ |
AnnaBridge | 161:aa5281ff4a02 | 301 | kFLEXCAN_AckError = CAN_ESR1_ACKERR_MASK, /*!< Received no ACK on transmission. */ |
AnnaBridge | 161:aa5281ff4a02 | 302 | kFLEXCAN_Bit0Error = CAN_ESR1_BIT0ERR_MASK, /*!< Unable to send dominant bit. */ |
AnnaBridge | 161:aa5281ff4a02 | 303 | kFLEXCAN_Bit1Error = CAN_ESR1_BIT1ERR_MASK, /*!< Unable to send recessive bit. */ |
AnnaBridge | 161:aa5281ff4a02 | 304 | }; |
AnnaBridge | 161:aa5281ff4a02 | 305 | |
AnnaBridge | 161:aa5281ff4a02 | 306 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 307 | * @brief FlexCAN Rx FIFO status flags. |
AnnaBridge | 161:aa5281ff4a02 | 308 | * |
AnnaBridge | 161:aa5281ff4a02 | 309 | * The FlexCAN Rx FIFO Status enumerations are used to determine the status of the |
AnnaBridge | 161:aa5281ff4a02 | 310 | * Rx FIFO. Because Rx FIFO occupy the MB0 ~ MB7 (Rx Fifo filter also occupies |
AnnaBridge | 161:aa5281ff4a02 | 311 | * more Message Buffer space), Rx FIFO status flags are mapped to the corresponding |
AnnaBridge | 161:aa5281ff4a02 | 312 | * Message Buffer status flags. |
AnnaBridge | 161:aa5281ff4a02 | 313 | */ |
AnnaBridge | 161:aa5281ff4a02 | 314 | enum _flexcan_rx_fifo_flags |
AnnaBridge | 161:aa5281ff4a02 | 315 | { |
AnnaBridge | 161:aa5281ff4a02 | 316 | kFLEXCAN_RxFifoOverflowFlag = CAN_IFLAG1_BUF7I_MASK, /*!< Rx FIFO overflow flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 317 | kFLEXCAN_RxFifoWarningFlag = CAN_IFLAG1_BUF6I_MASK, /*!< Rx FIFO almost full flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 318 | kFLEXCAN_RxFifoFrameAvlFlag = CAN_IFLAG1_BUF5I_MASK, /*!< Frames available in Rx FIFO flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 319 | }; |
AnnaBridge | 161:aa5281ff4a02 | 320 | |
AnnaBridge | 161:aa5281ff4a02 | 321 | #if defined(__CC_ARM) |
AnnaBridge | 161:aa5281ff4a02 | 322 | #pragma anon_unions |
AnnaBridge | 161:aa5281ff4a02 | 323 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 324 | /*! @brief FlexCAN message frame structure. */ |
AnnaBridge | 161:aa5281ff4a02 | 325 | typedef struct _flexcan_frame |
AnnaBridge | 161:aa5281ff4a02 | 326 | { |
AnnaBridge | 161:aa5281ff4a02 | 327 | struct |
AnnaBridge | 161:aa5281ff4a02 | 328 | { |
AnnaBridge | 161:aa5281ff4a02 | 329 | uint32_t timestamp : 16; /*!< FlexCAN internal Free-Running Counter Time Stamp. */ |
AnnaBridge | 161:aa5281ff4a02 | 330 | uint32_t length : 4; /*!< CAN frame payload length in bytes(Range: 0~8). */ |
AnnaBridge | 161:aa5281ff4a02 | 331 | uint32_t type : 1; /*!< CAN Frame Type(DATA or REMOTE). */ |
AnnaBridge | 161:aa5281ff4a02 | 332 | uint32_t format : 1; /*!< CAN Frame Identifier(STD or EXT format). */ |
AnnaBridge | 161:aa5281ff4a02 | 333 | uint32_t : 1; /*!< Reserved. */ |
AnnaBridge | 161:aa5281ff4a02 | 334 | uint32_t idhit : 9; /*!< CAN Rx FIFO filter hit id(This value is only used in Rx FIFO receive mode). */ |
AnnaBridge | 161:aa5281ff4a02 | 335 | }; |
AnnaBridge | 161:aa5281ff4a02 | 336 | struct |
AnnaBridge | 161:aa5281ff4a02 | 337 | { |
AnnaBridge | 161:aa5281ff4a02 | 338 | uint32_t id : 29; /*!< CAN Frame Identifier, should be set using FLEXCAN_ID_EXT() or FLEXCAN_ID_STD() macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 339 | uint32_t : 3; /*!< Reserved. */ |
AnnaBridge | 161:aa5281ff4a02 | 340 | }; |
AnnaBridge | 161:aa5281ff4a02 | 341 | union |
AnnaBridge | 161:aa5281ff4a02 | 342 | { |
AnnaBridge | 161:aa5281ff4a02 | 343 | struct |
AnnaBridge | 161:aa5281ff4a02 | 344 | { |
AnnaBridge | 161:aa5281ff4a02 | 345 | uint32_t dataWord0; /*!< CAN Frame payload word0. */ |
AnnaBridge | 161:aa5281ff4a02 | 346 | uint32_t dataWord1; /*!< CAN Frame payload word1. */ |
AnnaBridge | 161:aa5281ff4a02 | 347 | }; |
AnnaBridge | 161:aa5281ff4a02 | 348 | struct |
AnnaBridge | 161:aa5281ff4a02 | 349 | { |
AnnaBridge | 161:aa5281ff4a02 | 350 | uint8_t dataByte3; /*!< CAN Frame payload byte3. */ |
AnnaBridge | 161:aa5281ff4a02 | 351 | uint8_t dataByte2; /*!< CAN Frame payload byte2. */ |
AnnaBridge | 161:aa5281ff4a02 | 352 | uint8_t dataByte1; /*!< CAN Frame payload byte1. */ |
AnnaBridge | 161:aa5281ff4a02 | 353 | uint8_t dataByte0; /*!< CAN Frame payload byte0. */ |
AnnaBridge | 161:aa5281ff4a02 | 354 | uint8_t dataByte7; /*!< CAN Frame payload byte7. */ |
AnnaBridge | 161:aa5281ff4a02 | 355 | uint8_t dataByte6; /*!< CAN Frame payload byte6. */ |
AnnaBridge | 161:aa5281ff4a02 | 356 | uint8_t dataByte5; /*!< CAN Frame payload byte5. */ |
AnnaBridge | 161:aa5281ff4a02 | 357 | uint8_t dataByte4; /*!< CAN Frame payload byte4. */ |
AnnaBridge | 161:aa5281ff4a02 | 358 | }; |
AnnaBridge | 161:aa5281ff4a02 | 359 | }; |
AnnaBridge | 161:aa5281ff4a02 | 360 | } flexcan_frame_t; |
AnnaBridge | 161:aa5281ff4a02 | 361 | |
AnnaBridge | 161:aa5281ff4a02 | 362 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 363 | /*! @brief CAN FDmessage frame structure. */ |
AnnaBridge | 161:aa5281ff4a02 | 364 | typedef struct _flexcan_fd_frame |
AnnaBridge | 161:aa5281ff4a02 | 365 | { |
AnnaBridge | 161:aa5281ff4a02 | 366 | struct |
AnnaBridge | 161:aa5281ff4a02 | 367 | { |
AnnaBridge | 161:aa5281ff4a02 | 368 | uint32_t timestamp : 16; /*!< FlexCAN internal Free-Running Counter Time Stamp. */ |
AnnaBridge | 161:aa5281ff4a02 | 369 | uint32_t length : 4; /*!< CAN frame payload length in bytes(Range: 0~8). */ |
AnnaBridge | 161:aa5281ff4a02 | 370 | uint32_t type : 1; /*!< CAN Frame Type(DATA or REMOTE). */ |
AnnaBridge | 161:aa5281ff4a02 | 371 | uint32_t format : 1; /*!< CAN Frame Identifier(STD or EXT format). */ |
AnnaBridge | 161:aa5281ff4a02 | 372 | uint32_t srr : 1; /*!< Substitute Remote request. */ |
AnnaBridge | 161:aa5281ff4a02 | 373 | uint32_t : 1; |
AnnaBridge | 170:e95d10626187 | 374 | uint32_t code : 4; /*!< Message Buffer Code. */ |
AnnaBridge | 161:aa5281ff4a02 | 375 | uint32_t : 1; |
AnnaBridge | 170:e95d10626187 | 376 | uint32_t esi : 1; /*!< Error State Indicator. */ |
AnnaBridge | 170:e95d10626187 | 377 | uint32_t brs : 1; /*!< Bit Rate Switch. */ |
AnnaBridge | 170:e95d10626187 | 378 | uint32_t edl : 1; /*!< Extended Data Length. */ |
AnnaBridge | 161:aa5281ff4a02 | 379 | }; |
AnnaBridge | 161:aa5281ff4a02 | 380 | struct |
AnnaBridge | 161:aa5281ff4a02 | 381 | { |
AnnaBridge | 161:aa5281ff4a02 | 382 | uint32_t id : 29; /*!< CAN Frame Identifier, should be set using FLEXCAN_ID_EXT() or FLEXCAN_ID_STD() macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 383 | uint32_t : 3; /*!< Reserved. */ |
AnnaBridge | 161:aa5281ff4a02 | 384 | }; |
AnnaBridge | 161:aa5281ff4a02 | 385 | union |
AnnaBridge | 161:aa5281ff4a02 | 386 | { |
AnnaBridge | 161:aa5281ff4a02 | 387 | struct |
AnnaBridge | 161:aa5281ff4a02 | 388 | { |
AnnaBridge | 161:aa5281ff4a02 | 389 | uint32_t dataWord[16]; /*!< CAN FD Frame payload, 16 double word maximum. */ |
AnnaBridge | 161:aa5281ff4a02 | 390 | }; |
AnnaBridge | 161:aa5281ff4a02 | 391 | struct |
AnnaBridge | 161:aa5281ff4a02 | 392 | { |
AnnaBridge | 161:aa5281ff4a02 | 393 | uint8_t dataByte3; /*!< CAN Frame payload byte3. */ |
AnnaBridge | 161:aa5281ff4a02 | 394 | uint8_t dataByte2; /*!< CAN Frame payload byte2. */ |
AnnaBridge | 161:aa5281ff4a02 | 395 | uint8_t dataByte1; /*!< CAN Frame payload byte1. */ |
AnnaBridge | 161:aa5281ff4a02 | 396 | uint8_t dataByte0; /*!< CAN Frame payload byte0. */ |
AnnaBridge | 161:aa5281ff4a02 | 397 | uint8_t dataByte7; /*!< CAN Frame payload byte7. */ |
AnnaBridge | 161:aa5281ff4a02 | 398 | uint8_t dataByte6; /*!< CAN Frame payload byte6. */ |
AnnaBridge | 161:aa5281ff4a02 | 399 | uint8_t dataByte5; /*!< CAN Frame payload byte5. */ |
AnnaBridge | 161:aa5281ff4a02 | 400 | uint8_t dataByte4; /*!< CAN Frame payload byte4. */ |
AnnaBridge | 161:aa5281ff4a02 | 401 | }; |
AnnaBridge | 161:aa5281ff4a02 | 402 | }; |
AnnaBridge | 161:aa5281ff4a02 | 403 | } flexcan_fd_frame_t; |
AnnaBridge | 161:aa5281ff4a02 | 404 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 405 | |
AnnaBridge | 170:e95d10626187 | 406 | /*! @brief FlexCAN protocol timing characteristic configuration structure. */ |
AnnaBridge | 170:e95d10626187 | 407 | typedef struct _flexcan_timing_config |
AnnaBridge | 170:e95d10626187 | 408 | { |
AnnaBridge | 170:e95d10626187 | 409 | uint16_t preDivider; /*!< Clock Pre-scaler Division Factor. */ |
AnnaBridge | 170:e95d10626187 | 410 | uint8_t rJumpwidth; /*!< Re-sync Jump Width. */ |
AnnaBridge | 170:e95d10626187 | 411 | uint8_t phaseSeg1; /*!< Phase Segment 1. */ |
AnnaBridge | 170:e95d10626187 | 412 | uint8_t phaseSeg2; /*!< Phase Segment 2. */ |
AnnaBridge | 170:e95d10626187 | 413 | uint8_t propSeg; /*!< Propagation Segment. */ |
AnnaBridge | 170:e95d10626187 | 414 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 170:e95d10626187 | 415 | uint16_t fpreDivider; /*!< Fast Clock Pre-scaler Division Factor. */ |
AnnaBridge | 170:e95d10626187 | 416 | uint8_t frJumpwidth; /*!< Fast Re-sync Jump Width. */ |
AnnaBridge | 170:e95d10626187 | 417 | uint8_t fphaseSeg1; /*!< Fast Phase Segment 1. */ |
AnnaBridge | 170:e95d10626187 | 418 | uint8_t fphaseSeg2; /*!< Fast Phase Segment 2. */ |
AnnaBridge | 170:e95d10626187 | 419 | uint8_t fpropSeg; /*!< Fast Propagation Segment. */ |
AnnaBridge | 170:e95d10626187 | 420 | #endif |
AnnaBridge | 170:e95d10626187 | 421 | } flexcan_timing_config_t; |
AnnaBridge | 170:e95d10626187 | 422 | |
AnnaBridge | 161:aa5281ff4a02 | 423 | /*! @brief FlexCAN module configuration structure. */ |
AnnaBridge | 161:aa5281ff4a02 | 424 | typedef struct _flexcan_config |
AnnaBridge | 161:aa5281ff4a02 | 425 | { |
AnnaBridge | 161:aa5281ff4a02 | 426 | uint32_t baudRate; /*!< FlexCAN baud rate in bps. */ |
AnnaBridge | 161:aa5281ff4a02 | 427 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 428 | uint32_t baudRateFD; /*!< FlexCAN FD baud rate in bps. */ |
AnnaBridge | 161:aa5281ff4a02 | 429 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 430 | #if (!defined(FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE)) || !FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE |
AnnaBridge | 161:aa5281ff4a02 | 431 | flexcan_clock_source_t clkSrc; /*!< Clock source for FlexCAN Protocol Engine. */ |
AnnaBridge | 161:aa5281ff4a02 | 432 | #endif /* FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE */ |
AnnaBridge | 161:aa5281ff4a02 | 433 | uint8_t maxMbNum; /*!< The maximum number of Message Buffers used by user. */ |
AnnaBridge | 161:aa5281ff4a02 | 434 | bool enableLoopBack; /*!< Enable or Disable Loop Back Self Test Mode. */ |
AnnaBridge | 161:aa5281ff4a02 | 435 | bool enableSelfWakeup; /*!< Enable or Disable Self Wakeup Mode. */ |
AnnaBridge | 161:aa5281ff4a02 | 436 | bool enableIndividMask; /*!< Enable or Disable Rx Individual Mask. */ |
AnnaBridge | 161:aa5281ff4a02 | 437 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT) |
AnnaBridge | 161:aa5281ff4a02 | 438 | bool enableDoze; /*!< Enable or Disable Doze Mode. */ |
AnnaBridge | 161:aa5281ff4a02 | 439 | #endif |
AnnaBridge | 170:e95d10626187 | 440 | flexcan_timing_config_t timingConfig; /* Protocol timing . */ |
AnnaBridge | 161:aa5281ff4a02 | 441 | } flexcan_config_t; |
AnnaBridge | 161:aa5281ff4a02 | 442 | |
AnnaBridge | 161:aa5281ff4a02 | 443 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 444 | * @brief FlexCAN Receive Message Buffer configuration structure |
AnnaBridge | 161:aa5281ff4a02 | 445 | * |
AnnaBridge | 161:aa5281ff4a02 | 446 | * This structure is used as the parameter of FLEXCAN_SetRxMbConfig() function. |
AnnaBridge | 161:aa5281ff4a02 | 447 | * The FLEXCAN_SetRxMbConfig() function is used to configure FlexCAN Receive |
AnnaBridge | 161:aa5281ff4a02 | 448 | * Message Buffer. The function abort previous receiving process, clean the |
AnnaBridge | 161:aa5281ff4a02 | 449 | * Message Buffer and activate the Rx Message Buffer using given Message Buffer |
AnnaBridge | 161:aa5281ff4a02 | 450 | * setting. |
AnnaBridge | 161:aa5281ff4a02 | 451 | */ |
AnnaBridge | 161:aa5281ff4a02 | 452 | typedef struct _flexcan_rx_mb_config |
AnnaBridge | 161:aa5281ff4a02 | 453 | { |
AnnaBridge | 161:aa5281ff4a02 | 454 | uint32_t id; /*!< CAN Message Buffer Frame Identifier, should be set using |
AnnaBridge | 161:aa5281ff4a02 | 455 | FLEXCAN_ID_EXT() or FLEXCAN_ID_STD() macro. */ |
AnnaBridge | 161:aa5281ff4a02 | 456 | flexcan_frame_format_t format; /*!< CAN Frame Identifier format(Standard of Extend). */ |
AnnaBridge | 161:aa5281ff4a02 | 457 | flexcan_frame_type_t type; /*!< CAN Frame Type(Data or Remote). */ |
AnnaBridge | 161:aa5281ff4a02 | 458 | } flexcan_rx_mb_config_t; |
AnnaBridge | 161:aa5281ff4a02 | 459 | |
AnnaBridge | 161:aa5281ff4a02 | 460 | /*! @brief FlexCAN Rx FIFO configuration structure. */ |
AnnaBridge | 161:aa5281ff4a02 | 461 | typedef struct _flexcan_rx_fifo_config |
AnnaBridge | 161:aa5281ff4a02 | 462 | { |
AnnaBridge | 161:aa5281ff4a02 | 463 | uint32_t *idFilterTable; /*!< Pointer to the FlexCAN Rx FIFO identifier filter table. */ |
AnnaBridge | 161:aa5281ff4a02 | 464 | uint8_t idFilterNum; /*!< The quantity of filter elements. */ |
AnnaBridge | 161:aa5281ff4a02 | 465 | flexcan_rx_fifo_filter_type_t idFilterType; /*!< The FlexCAN Rx FIFO Filter type. */ |
AnnaBridge | 161:aa5281ff4a02 | 466 | flexcan_rx_fifo_priority_t priority; /*!< The FlexCAN Rx FIFO receive priority. */ |
AnnaBridge | 161:aa5281ff4a02 | 467 | } flexcan_rx_fifo_config_t; |
AnnaBridge | 161:aa5281ff4a02 | 468 | |
AnnaBridge | 161:aa5281ff4a02 | 469 | /*! @brief FlexCAN Message Buffer transfer. */ |
AnnaBridge | 161:aa5281ff4a02 | 470 | typedef struct _flexcan_mb_transfer |
AnnaBridge | 161:aa5281ff4a02 | 471 | { |
AnnaBridge | 161:aa5281ff4a02 | 472 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 473 | flexcan_fd_frame_t *framefd; |
AnnaBridge | 161:aa5281ff4a02 | 474 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 475 | flexcan_frame_t *frame; /*!< The buffer of CAN Message to be transfer. */ |
AnnaBridge | 161:aa5281ff4a02 | 476 | uint8_t mbIdx; /*!< The index of Message buffer used to transfer Message. */ |
AnnaBridge | 161:aa5281ff4a02 | 477 | } flexcan_mb_transfer_t; |
AnnaBridge | 161:aa5281ff4a02 | 478 | |
AnnaBridge | 161:aa5281ff4a02 | 479 | /*! @brief FlexCAN Rx FIFO transfer. */ |
AnnaBridge | 161:aa5281ff4a02 | 480 | typedef struct _flexcan_fifo_transfer |
AnnaBridge | 161:aa5281ff4a02 | 481 | { |
AnnaBridge | 161:aa5281ff4a02 | 482 | flexcan_frame_t *frame; /*!< The buffer of CAN Message to be received from Rx FIFO. */ |
AnnaBridge | 161:aa5281ff4a02 | 483 | } flexcan_fifo_transfer_t; |
AnnaBridge | 161:aa5281ff4a02 | 484 | |
AnnaBridge | 161:aa5281ff4a02 | 485 | /*! @brief FlexCAN handle structure definition. */ |
AnnaBridge | 161:aa5281ff4a02 | 486 | typedef struct _flexcan_handle flexcan_handle_t; |
AnnaBridge | 161:aa5281ff4a02 | 487 | |
AnnaBridge | 161:aa5281ff4a02 | 488 | /*! @brief FlexCAN transfer callback function. |
AnnaBridge | 161:aa5281ff4a02 | 489 | * |
AnnaBridge | 161:aa5281ff4a02 | 490 | * The FlexCAN transfer callback returns a value from the underlying layer. |
AnnaBridge | 161:aa5281ff4a02 | 491 | * If the status equals to kStatus_FLEXCAN_ErrorStatus, the result parameter is the Content of |
AnnaBridge | 161:aa5281ff4a02 | 492 | * FlexCAN status register which can be used to get the working status(or error status) of FlexCAN module. |
AnnaBridge | 161:aa5281ff4a02 | 493 | * If the status equals to other FlexCAN Message Buffer transfer status, the result is the index of |
AnnaBridge | 161:aa5281ff4a02 | 494 | * Message Buffer that generate transfer event. |
AnnaBridge | 161:aa5281ff4a02 | 495 | * If the status equals to other FlexCAN Message Buffer transfer status, the result is meaningless and should be |
AnnaBridge | 161:aa5281ff4a02 | 496 | * Ignored. |
AnnaBridge | 161:aa5281ff4a02 | 497 | */ |
AnnaBridge | 161:aa5281ff4a02 | 498 | typedef void (*flexcan_transfer_callback_t)( |
AnnaBridge | 161:aa5281ff4a02 | 499 | CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData); |
AnnaBridge | 161:aa5281ff4a02 | 500 | |
AnnaBridge | 161:aa5281ff4a02 | 501 | /*! @brief FlexCAN handle structure. */ |
AnnaBridge | 161:aa5281ff4a02 | 502 | struct _flexcan_handle |
AnnaBridge | 161:aa5281ff4a02 | 503 | { |
AnnaBridge | 161:aa5281ff4a02 | 504 | flexcan_transfer_callback_t callback; /*!< Callback function. */ |
AnnaBridge | 161:aa5281ff4a02 | 505 | void *userData; /*!< FlexCAN callback function parameter.*/ |
AnnaBridge | 161:aa5281ff4a02 | 506 | flexcan_frame_t *volatile mbFrameBuf[CAN_WORD1_COUNT]; |
AnnaBridge | 161:aa5281ff4a02 | 507 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 508 | flexcan_fd_frame_t *volatile mbFDFrameBuf[CAN_WORD1_COUNT]; |
AnnaBridge | 161:aa5281ff4a02 | 509 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 510 | /*!< The buffer for received data from Message Buffers. */ |
AnnaBridge | 161:aa5281ff4a02 | 511 | flexcan_frame_t *volatile rxFifoFrameBuf; /*!< The buffer for received data from Rx FIFO. */ |
AnnaBridge | 161:aa5281ff4a02 | 512 | volatile uint8_t mbState[CAN_WORD1_COUNT]; /*!< Message Buffer transfer state. */ |
AnnaBridge | 161:aa5281ff4a02 | 513 | volatile uint8_t rxFifoState; /*!< Rx FIFO transfer state. */ |
AnnaBridge | 161:aa5281ff4a02 | 514 | }; |
AnnaBridge | 161:aa5281ff4a02 | 515 | |
AnnaBridge | 161:aa5281ff4a02 | 516 | /****************************************************************************** |
AnnaBridge | 161:aa5281ff4a02 | 517 | * API |
AnnaBridge | 161:aa5281ff4a02 | 518 | *****************************************************************************/ |
AnnaBridge | 161:aa5281ff4a02 | 519 | |
AnnaBridge | 161:aa5281ff4a02 | 520 | #if defined(__cplusplus) |
AnnaBridge | 161:aa5281ff4a02 | 521 | extern "C" { |
AnnaBridge | 161:aa5281ff4a02 | 522 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 523 | |
AnnaBridge | 161:aa5281ff4a02 | 524 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 525 | * @name Initialization and deinitialization |
AnnaBridge | 161:aa5281ff4a02 | 526 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 527 | */ |
AnnaBridge | 161:aa5281ff4a02 | 528 | |
AnnaBridge | 161:aa5281ff4a02 | 529 | /*! |
AnnaBridge | 170:e95d10626187 | 530 | * @brief Get the FlexCAN instance from peripheral base address. |
AnnaBridge | 170:e95d10626187 | 531 | * |
AnnaBridge | 170:e95d10626187 | 532 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 170:e95d10626187 | 533 | * @return FlexCAN instance. |
AnnaBridge | 170:e95d10626187 | 534 | */ |
AnnaBridge | 170:e95d10626187 | 535 | uint32_t FLEXCAN_GetInstance(CAN_Type *base); |
AnnaBridge | 170:e95d10626187 | 536 | |
AnnaBridge | 170:e95d10626187 | 537 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 538 | * @brief Initializes a FlexCAN instance. |
AnnaBridge | 161:aa5281ff4a02 | 539 | * |
AnnaBridge | 161:aa5281ff4a02 | 540 | * This function initializes the FlexCAN module with user-defined settings. |
AnnaBridge | 161:aa5281ff4a02 | 541 | * This example shows how to set up the flexcan_config_t parameters and how |
AnnaBridge | 161:aa5281ff4a02 | 542 | * to call the FLEXCAN_Init function by passing in these parameters. |
AnnaBridge | 161:aa5281ff4a02 | 543 | * @code |
AnnaBridge | 161:aa5281ff4a02 | 544 | * flexcan_config_t flexcanConfig; |
AnnaBridge | 161:aa5281ff4a02 | 545 | * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc; |
AnnaBridge | 161:aa5281ff4a02 | 546 | * flexcanConfig.baudRate = 1000000U; |
AnnaBridge | 161:aa5281ff4a02 | 547 | * flexcanConfig.maxMbNum = 16; |
AnnaBridge | 161:aa5281ff4a02 | 548 | * flexcanConfig.enableLoopBack = false; |
AnnaBridge | 161:aa5281ff4a02 | 549 | * flexcanConfig.enableSelfWakeup = false; |
AnnaBridge | 161:aa5281ff4a02 | 550 | * flexcanConfig.enableIndividMask = false; |
AnnaBridge | 161:aa5281ff4a02 | 551 | * flexcanConfig.enableDoze = false; |
AnnaBridge | 170:e95d10626187 | 552 | * flexcanConfig.timingConfig = timingConfig; |
AnnaBridge | 161:aa5281ff4a02 | 553 | * FLEXCAN_Init(CAN0, &flexcanConfig, 8000000UL); |
AnnaBridge | 161:aa5281ff4a02 | 554 | * @endcode |
AnnaBridge | 161:aa5281ff4a02 | 555 | * |
AnnaBridge | 161:aa5281ff4a02 | 556 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 557 | * @param config Pointer to the user-defined configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 558 | * @param sourceClock_Hz FlexCAN Protocol Engine clock source frequency in Hz. |
AnnaBridge | 161:aa5281ff4a02 | 559 | */ |
AnnaBridge | 161:aa5281ff4a02 | 560 | void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *config, uint32_t sourceClock_Hz); |
AnnaBridge | 161:aa5281ff4a02 | 561 | |
AnnaBridge | 161:aa5281ff4a02 | 562 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 563 | * @brief De-initializes a FlexCAN instance. |
AnnaBridge | 161:aa5281ff4a02 | 564 | * |
AnnaBridge | 161:aa5281ff4a02 | 565 | * This function disables the FlexCAN module clock and sets all register values |
AnnaBridge | 161:aa5281ff4a02 | 566 | * to the reset value. |
AnnaBridge | 161:aa5281ff4a02 | 567 | * |
AnnaBridge | 161:aa5281ff4a02 | 568 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 569 | */ |
AnnaBridge | 161:aa5281ff4a02 | 570 | void FLEXCAN_Deinit(CAN_Type *base); |
AnnaBridge | 161:aa5281ff4a02 | 571 | |
AnnaBridge | 161:aa5281ff4a02 | 572 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 573 | * @brief Gets the default configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 574 | * |
AnnaBridge | 161:aa5281ff4a02 | 575 | * This function initializes the FlexCAN configuration structure to default values. The default |
AnnaBridge | 161:aa5281ff4a02 | 576 | * values are as follows. |
AnnaBridge | 161:aa5281ff4a02 | 577 | * flexcanConfig->clkSrc = KFLEXCAN_ClkSrcOsc; |
AnnaBridge | 161:aa5281ff4a02 | 578 | * flexcanConfig->baudRate = 1000000U; |
AnnaBridge | 161:aa5281ff4a02 | 579 | * flexcanConfig->maxMbNum = 16; |
AnnaBridge | 161:aa5281ff4a02 | 580 | * flexcanConfig->enableLoopBack = false; |
AnnaBridge | 161:aa5281ff4a02 | 581 | * flexcanConfig->enableSelfWakeup = false; |
AnnaBridge | 161:aa5281ff4a02 | 582 | * flexcanConfig->enableIndividMask = false; |
AnnaBridge | 161:aa5281ff4a02 | 583 | * flexcanConfig->enableDoze = false; |
AnnaBridge | 170:e95d10626187 | 584 | * flexcanConfig.timingConfig = timingConfig; |
AnnaBridge | 161:aa5281ff4a02 | 585 | * |
AnnaBridge | 161:aa5281ff4a02 | 586 | * @param config Pointer to the FlexCAN configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 587 | */ |
AnnaBridge | 161:aa5281ff4a02 | 588 | void FLEXCAN_GetDefaultConfig(flexcan_config_t *config); |
AnnaBridge | 161:aa5281ff4a02 | 589 | |
AnnaBridge | 161:aa5281ff4a02 | 590 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 591 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 592 | * @brief Sets the FlexCAN FD protocol characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 593 | * |
AnnaBridge | 161:aa5281ff4a02 | 594 | * This function gives user settings to CAN FD characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 595 | * |
AnnaBridge | 161:aa5281ff4a02 | 596 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 597 | * @param dataSize Quantity of data bytes allocated for the message payload. |
AnnaBridge | 161:aa5281ff4a02 | 598 | * @param brs Enable/Disable the effect of bit rate switch during data phase of Tx messages. |
AnnaBridge | 161:aa5281ff4a02 | 599 | */ |
AnnaBridge | 161:aa5281ff4a02 | 600 | void FLEXCAN_FDEnable(CAN_Type *base, flexcan_mb_size_t dataSize, bool brs); |
AnnaBridge | 161:aa5281ff4a02 | 601 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 602 | |
AnnaBridge | 161:aa5281ff4a02 | 603 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 604 | |
AnnaBridge | 161:aa5281ff4a02 | 605 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 606 | * @name Configuration. |
AnnaBridge | 161:aa5281ff4a02 | 607 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 608 | */ |
AnnaBridge | 161:aa5281ff4a02 | 609 | |
AnnaBridge | 161:aa5281ff4a02 | 610 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 611 | * @brief Sets the FlexCAN protocol timing characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 612 | * |
AnnaBridge | 161:aa5281ff4a02 | 613 | * This function gives user settings to CAN bus timing characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 614 | * The function is for an experienced user. For less experienced users, call |
AnnaBridge | 161:aa5281ff4a02 | 615 | * the FLEXCAN_Init() and fill the baud rate field with a desired value. |
AnnaBridge | 161:aa5281ff4a02 | 616 | * This provides the default timing characteristics to the module. |
AnnaBridge | 161:aa5281ff4a02 | 617 | * |
AnnaBridge | 161:aa5281ff4a02 | 618 | * Note that calling FLEXCAN_SetTimingConfig() overrides the baud rate set |
AnnaBridge | 161:aa5281ff4a02 | 619 | * in FLEXCAN_Init(). |
AnnaBridge | 161:aa5281ff4a02 | 620 | * |
AnnaBridge | 161:aa5281ff4a02 | 621 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 622 | * @param config Pointer to the timing configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 623 | */ |
AnnaBridge | 161:aa5281ff4a02 | 624 | void FLEXCAN_SetTimingConfig(CAN_Type *base, const flexcan_timing_config_t *config); |
AnnaBridge | 161:aa5281ff4a02 | 625 | |
AnnaBridge | 161:aa5281ff4a02 | 626 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 627 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 628 | * @brief Sets the FlexCAN FD protocol timing characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 629 | * |
AnnaBridge | 161:aa5281ff4a02 | 630 | * This function gives user settings to CAN bus timing characteristic. |
AnnaBridge | 161:aa5281ff4a02 | 631 | * The function is for an experienced user. For less experienced users, call |
AnnaBridge | 161:aa5281ff4a02 | 632 | * the FLEXCAN_Init() and fill the baud rate field with a desired value. |
AnnaBridge | 161:aa5281ff4a02 | 633 | * This provides the default timing characteristics to the module. |
AnnaBridge | 161:aa5281ff4a02 | 634 | * |
AnnaBridge | 161:aa5281ff4a02 | 635 | * Note that calling FLEXCAN_SetFDTimingConfig() overrides the baud rate set |
AnnaBridge | 161:aa5281ff4a02 | 636 | * in FLEXCAN_Init(). |
AnnaBridge | 161:aa5281ff4a02 | 637 | * |
AnnaBridge | 161:aa5281ff4a02 | 638 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 639 | * @param config Pointer to the timing configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 640 | */ |
AnnaBridge | 161:aa5281ff4a02 | 641 | void FLEXCAN_SetFDTimingConfig(CAN_Type *base, const flexcan_timing_config_t *config); |
AnnaBridge | 161:aa5281ff4a02 | 642 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 643 | |
AnnaBridge | 161:aa5281ff4a02 | 644 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 645 | * @brief Sets the FlexCAN receive message buffer global mask. |
AnnaBridge | 161:aa5281ff4a02 | 646 | * |
AnnaBridge | 161:aa5281ff4a02 | 647 | * This function sets the global mask for the FlexCAN message buffer in a matching process. |
AnnaBridge | 161:aa5281ff4a02 | 648 | * The configuration is only effective when the Rx individual mask is disabled in the FLEXCAN_Init(). |
AnnaBridge | 161:aa5281ff4a02 | 649 | * |
AnnaBridge | 161:aa5281ff4a02 | 650 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 651 | * @param mask Rx Message Buffer Global Mask value. |
AnnaBridge | 161:aa5281ff4a02 | 652 | */ |
AnnaBridge | 161:aa5281ff4a02 | 653 | void FLEXCAN_SetRxMbGlobalMask(CAN_Type *base, uint32_t mask); |
AnnaBridge | 161:aa5281ff4a02 | 654 | |
AnnaBridge | 161:aa5281ff4a02 | 655 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 656 | * @brief Sets the FlexCAN receive FIFO global mask. |
AnnaBridge | 161:aa5281ff4a02 | 657 | * |
AnnaBridge | 161:aa5281ff4a02 | 658 | * This function sets the global mask for FlexCAN FIFO in a matching process. |
AnnaBridge | 161:aa5281ff4a02 | 659 | * |
AnnaBridge | 161:aa5281ff4a02 | 660 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 661 | * @param mask Rx Fifo Global Mask value. |
AnnaBridge | 161:aa5281ff4a02 | 662 | */ |
AnnaBridge | 161:aa5281ff4a02 | 663 | void FLEXCAN_SetRxFifoGlobalMask(CAN_Type *base, uint32_t mask); |
AnnaBridge | 161:aa5281ff4a02 | 664 | |
AnnaBridge | 161:aa5281ff4a02 | 665 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 666 | * @brief Sets the FlexCAN receive individual mask. |
AnnaBridge | 161:aa5281ff4a02 | 667 | * |
AnnaBridge | 161:aa5281ff4a02 | 668 | * This function sets the individual mask for the FlexCAN matching process. |
AnnaBridge | 161:aa5281ff4a02 | 669 | * The configuration is only effective when the Rx individual mask is enabled in the FLEXCAN_Init(). |
AnnaBridge | 161:aa5281ff4a02 | 670 | * If the Rx FIFO is disabled, the individual mask is applied to the corresponding Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 671 | * If the Rx FIFO is enabled, the individual mask for Rx FIFO occupied Message Buffer is applied to |
AnnaBridge | 161:aa5281ff4a02 | 672 | * the Rx Filter with the same index. Note that only the first 32 |
AnnaBridge | 161:aa5281ff4a02 | 673 | * individual masks can be used as the Rx FIFO filter mask. |
AnnaBridge | 161:aa5281ff4a02 | 674 | * |
AnnaBridge | 161:aa5281ff4a02 | 675 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 676 | * @param maskIdx The Index of individual Mask. |
AnnaBridge | 161:aa5281ff4a02 | 677 | * @param mask Rx Individual Mask value. |
AnnaBridge | 161:aa5281ff4a02 | 678 | */ |
AnnaBridge | 161:aa5281ff4a02 | 679 | void FLEXCAN_SetRxIndividualMask(CAN_Type *base, uint8_t maskIdx, uint32_t mask); |
AnnaBridge | 161:aa5281ff4a02 | 680 | |
AnnaBridge | 161:aa5281ff4a02 | 681 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 682 | * @brief Configures a FlexCAN transmit message buffer. |
AnnaBridge | 161:aa5281ff4a02 | 683 | * |
AnnaBridge | 161:aa5281ff4a02 | 684 | * This function aborts the previous transmission, cleans the Message Buffer, and |
AnnaBridge | 161:aa5281ff4a02 | 685 | * configures it as a Transmit Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 686 | * |
AnnaBridge | 161:aa5281ff4a02 | 687 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 688 | * @param mbIdx The Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 689 | * @param enable Enable/disable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 690 | * - true: Enable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 691 | * - false: Disable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 692 | */ |
AnnaBridge | 161:aa5281ff4a02 | 693 | void FLEXCAN_SetTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 694 | |
AnnaBridge | 161:aa5281ff4a02 | 695 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 696 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 697 | * @brief Configures a FlexCAN transmit message buffer. |
AnnaBridge | 161:aa5281ff4a02 | 698 | * |
AnnaBridge | 161:aa5281ff4a02 | 699 | * This function aborts the previous transmission, cleans the Message Buffer, and |
AnnaBridge | 161:aa5281ff4a02 | 700 | * configures it as a Transmit Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 701 | * |
AnnaBridge | 161:aa5281ff4a02 | 702 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 703 | * @param mbIdx The Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 704 | * @param enable Enable/disable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 705 | * - true: Enable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 706 | * - false: Disable Tx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 707 | */ |
AnnaBridge | 161:aa5281ff4a02 | 708 | void FLEXCAN_SetFDTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 709 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 710 | |
AnnaBridge | 161:aa5281ff4a02 | 711 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 712 | * @brief Configures a FlexCAN Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 713 | * |
AnnaBridge | 161:aa5281ff4a02 | 714 | * This function cleans a FlexCAN build-in Message Buffer and configures it |
AnnaBridge | 161:aa5281ff4a02 | 715 | * as a Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 716 | * |
AnnaBridge | 161:aa5281ff4a02 | 717 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 718 | * @param mbIdx The Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 719 | * @param config Pointer to the FlexCAN Message Buffer configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 720 | * @param enable Enable/disable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 721 | * - true: Enable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 722 | * - false: Disable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 723 | */ |
AnnaBridge | 161:aa5281ff4a02 | 724 | void FLEXCAN_SetRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *config, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 725 | |
AnnaBridge | 161:aa5281ff4a02 | 726 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 727 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 728 | * @brief Configures a FlexCAN Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 729 | * |
AnnaBridge | 161:aa5281ff4a02 | 730 | * This function cleans a FlexCAN build-in Message Buffer and configures it |
AnnaBridge | 161:aa5281ff4a02 | 731 | * as a Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 732 | * |
AnnaBridge | 161:aa5281ff4a02 | 733 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 734 | * @param mbIdx The Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 735 | * @param config Pointer to the FlexCAN Message Buffer configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 736 | * @param enable Enable/disable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 737 | * - true: Enable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 738 | * - false: Disable Rx Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 739 | */ |
AnnaBridge | 161:aa5281ff4a02 | 740 | void FLEXCAN_SetFDRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *config, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 741 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 742 | |
AnnaBridge | 161:aa5281ff4a02 | 743 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 744 | * @brief Configures the FlexCAN Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 745 | * |
AnnaBridge | 161:aa5281ff4a02 | 746 | * This function configures the Rx FIFO with given Rx FIFO configuration. |
AnnaBridge | 161:aa5281ff4a02 | 747 | * |
AnnaBridge | 161:aa5281ff4a02 | 748 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 749 | * @param config Pointer to the FlexCAN Rx FIFO configuration structure. |
AnnaBridge | 161:aa5281ff4a02 | 750 | * @param enable Enable/disable Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 751 | * - true: Enable Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 752 | * - false: Disable Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 753 | */ |
AnnaBridge | 161:aa5281ff4a02 | 754 | void FLEXCAN_SetRxFifoConfig(CAN_Type *base, const flexcan_rx_fifo_config_t *config, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 755 | |
AnnaBridge | 161:aa5281ff4a02 | 756 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 757 | |
AnnaBridge | 161:aa5281ff4a02 | 758 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 759 | * @name Status |
AnnaBridge | 161:aa5281ff4a02 | 760 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 761 | */ |
AnnaBridge | 161:aa5281ff4a02 | 762 | |
AnnaBridge | 161:aa5281ff4a02 | 763 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 764 | * @brief Gets the FlexCAN module interrupt flags. |
AnnaBridge | 161:aa5281ff4a02 | 765 | * |
AnnaBridge | 161:aa5281ff4a02 | 766 | * This function gets all FlexCAN status flags. The flags are returned as the logical |
AnnaBridge | 161:aa5281ff4a02 | 767 | * OR value of the enumerators @ref _flexcan_flags. To check the specific status, |
AnnaBridge | 161:aa5281ff4a02 | 768 | * compare the return value with enumerators in @ref _flexcan_flags. |
AnnaBridge | 161:aa5281ff4a02 | 769 | * |
AnnaBridge | 161:aa5281ff4a02 | 770 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 771 | * @return FlexCAN status flags which are ORed by the enumerators in the _flexcan_flags. |
AnnaBridge | 161:aa5281ff4a02 | 772 | */ |
AnnaBridge | 161:aa5281ff4a02 | 773 | static inline uint32_t FLEXCAN_GetStatusFlags(CAN_Type *base) |
AnnaBridge | 161:aa5281ff4a02 | 774 | { |
AnnaBridge | 161:aa5281ff4a02 | 775 | return base->ESR1; |
AnnaBridge | 161:aa5281ff4a02 | 776 | } |
AnnaBridge | 161:aa5281ff4a02 | 777 | |
AnnaBridge | 161:aa5281ff4a02 | 778 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 779 | * @brief Clears status flags with the provided mask. |
AnnaBridge | 161:aa5281ff4a02 | 780 | * |
AnnaBridge | 161:aa5281ff4a02 | 781 | * This function clears the FlexCAN status flags with a provided mask. An automatically cleared flag |
AnnaBridge | 161:aa5281ff4a02 | 782 | * can't be cleared by this function. |
AnnaBridge | 161:aa5281ff4a02 | 783 | * |
AnnaBridge | 161:aa5281ff4a02 | 784 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 785 | * @param mask The status flags to be cleared, it is logical OR value of @ref _flexcan_flags. |
AnnaBridge | 161:aa5281ff4a02 | 786 | */ |
AnnaBridge | 161:aa5281ff4a02 | 787 | static inline void FLEXCAN_ClearStatusFlags(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 788 | { |
AnnaBridge | 161:aa5281ff4a02 | 789 | /* Write 1 to clear status flag. */ |
AnnaBridge | 161:aa5281ff4a02 | 790 | base->ESR1 = mask; |
AnnaBridge | 161:aa5281ff4a02 | 791 | } |
AnnaBridge | 161:aa5281ff4a02 | 792 | |
AnnaBridge | 161:aa5281ff4a02 | 793 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 794 | * @brief Gets the FlexCAN Bus Error Counter value. |
AnnaBridge | 161:aa5281ff4a02 | 795 | * |
AnnaBridge | 161:aa5281ff4a02 | 796 | * This function gets the FlexCAN Bus Error Counter value for both Tx and |
AnnaBridge | 161:aa5281ff4a02 | 797 | * Rx direction. These values may be needed in the upper layer error handling. |
AnnaBridge | 161:aa5281ff4a02 | 798 | * |
AnnaBridge | 161:aa5281ff4a02 | 799 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 800 | * @param txErrBuf Buffer to store Tx Error Counter value. |
AnnaBridge | 161:aa5281ff4a02 | 801 | * @param rxErrBuf Buffer to store Rx Error Counter value. |
AnnaBridge | 161:aa5281ff4a02 | 802 | */ |
AnnaBridge | 161:aa5281ff4a02 | 803 | static inline void FLEXCAN_GetBusErrCount(CAN_Type *base, uint8_t *txErrBuf, uint8_t *rxErrBuf) |
AnnaBridge | 161:aa5281ff4a02 | 804 | { |
AnnaBridge | 161:aa5281ff4a02 | 805 | if (txErrBuf) |
AnnaBridge | 161:aa5281ff4a02 | 806 | { |
AnnaBridge | 161:aa5281ff4a02 | 807 | *txErrBuf = (uint8_t)((base->ECR & CAN_ECR_TXERRCNT_MASK) >> CAN_ECR_TXERRCNT_SHIFT); |
AnnaBridge | 161:aa5281ff4a02 | 808 | } |
AnnaBridge | 161:aa5281ff4a02 | 809 | |
AnnaBridge | 161:aa5281ff4a02 | 810 | if (rxErrBuf) |
AnnaBridge | 161:aa5281ff4a02 | 811 | { |
AnnaBridge | 161:aa5281ff4a02 | 812 | *rxErrBuf = (uint8_t)((base->ECR & CAN_ECR_RXERRCNT_MASK) >> CAN_ECR_RXERRCNT_SHIFT); |
AnnaBridge | 161:aa5281ff4a02 | 813 | } |
AnnaBridge | 161:aa5281ff4a02 | 814 | } |
AnnaBridge | 161:aa5281ff4a02 | 815 | |
AnnaBridge | 161:aa5281ff4a02 | 816 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 817 | * @brief Gets the FlexCAN Message Buffer interrupt flags. |
AnnaBridge | 161:aa5281ff4a02 | 818 | * |
AnnaBridge | 161:aa5281ff4a02 | 819 | * This function gets the interrupt flags of a given Message Buffers. |
AnnaBridge | 161:aa5281ff4a02 | 820 | * |
AnnaBridge | 161:aa5281ff4a02 | 821 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 822 | * @param mask The ORed FlexCAN Message Buffer mask. |
AnnaBridge | 161:aa5281ff4a02 | 823 | * @return The status of given Message Buffers. |
AnnaBridge | 161:aa5281ff4a02 | 824 | */ |
AnnaBridge | 161:aa5281ff4a02 | 825 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 826 | static inline uint64_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint64_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 827 | #else |
AnnaBridge | 161:aa5281ff4a02 | 828 | static inline uint32_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 829 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 830 | { |
AnnaBridge | 161:aa5281ff4a02 | 831 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 832 | return ((((uint64_t)base->IFLAG1) & mask) | ((((uint64_t)base->IFLAG2) << 32) & mask)); |
AnnaBridge | 161:aa5281ff4a02 | 833 | #else |
AnnaBridge | 161:aa5281ff4a02 | 834 | return (base->IFLAG1 & mask); |
AnnaBridge | 161:aa5281ff4a02 | 835 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 836 | } |
AnnaBridge | 161:aa5281ff4a02 | 837 | |
AnnaBridge | 161:aa5281ff4a02 | 838 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 839 | * @brief Clears the FlexCAN Message Buffer interrupt flags. |
AnnaBridge | 161:aa5281ff4a02 | 840 | * |
AnnaBridge | 161:aa5281ff4a02 | 841 | * This function clears the interrupt flags of a given Message Buffers. |
AnnaBridge | 161:aa5281ff4a02 | 842 | * |
AnnaBridge | 161:aa5281ff4a02 | 843 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 844 | * @param mask The ORed FlexCAN Message Buffer mask. |
AnnaBridge | 161:aa5281ff4a02 | 845 | */ |
AnnaBridge | 161:aa5281ff4a02 | 846 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 847 | static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint64_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 848 | #else |
AnnaBridge | 161:aa5281ff4a02 | 849 | static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 850 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 851 | { |
AnnaBridge | 161:aa5281ff4a02 | 852 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 853 | base->IFLAG1 = (uint32_t)(mask & 0xFFFFFFFFU); |
AnnaBridge | 161:aa5281ff4a02 | 854 | base->IFLAG2 = (uint32_t)(mask >> 32); |
AnnaBridge | 161:aa5281ff4a02 | 855 | #else |
AnnaBridge | 161:aa5281ff4a02 | 856 | base->IFLAG1 = mask; |
AnnaBridge | 161:aa5281ff4a02 | 857 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 858 | } |
AnnaBridge | 161:aa5281ff4a02 | 859 | |
AnnaBridge | 161:aa5281ff4a02 | 860 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 861 | |
AnnaBridge | 161:aa5281ff4a02 | 862 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 863 | * @name Interrupts |
AnnaBridge | 161:aa5281ff4a02 | 864 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 865 | */ |
AnnaBridge | 161:aa5281ff4a02 | 866 | |
AnnaBridge | 161:aa5281ff4a02 | 867 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 868 | * @brief Enables FlexCAN interrupts according to the provided mask. |
AnnaBridge | 161:aa5281ff4a02 | 869 | * |
AnnaBridge | 161:aa5281ff4a02 | 870 | * This function enables the FlexCAN interrupts according to the provided mask. The mask |
AnnaBridge | 161:aa5281ff4a02 | 871 | * is a logical OR of enumeration members, see @ref _flexcan_interrupt_enable. |
AnnaBridge | 161:aa5281ff4a02 | 872 | * |
AnnaBridge | 161:aa5281ff4a02 | 873 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 874 | * @param mask The interrupts to enable. Logical OR of @ref _flexcan_interrupt_enable. |
AnnaBridge | 161:aa5281ff4a02 | 875 | */ |
AnnaBridge | 161:aa5281ff4a02 | 876 | static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 877 | { |
AnnaBridge | 161:aa5281ff4a02 | 878 | /* Solve Wake Up Interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 879 | if (mask & kFLEXCAN_WakeUpInterruptEnable) |
AnnaBridge | 161:aa5281ff4a02 | 880 | { |
AnnaBridge | 161:aa5281ff4a02 | 881 | base->MCR |= CAN_MCR_WAKMSK_MASK; |
AnnaBridge | 161:aa5281ff4a02 | 882 | } |
AnnaBridge | 161:aa5281ff4a02 | 883 | |
AnnaBridge | 161:aa5281ff4a02 | 884 | /* Solve others. */ |
AnnaBridge | 161:aa5281ff4a02 | 885 | base->CTRL1 |= (mask & (~((uint32_t)kFLEXCAN_WakeUpInterruptEnable))); |
AnnaBridge | 161:aa5281ff4a02 | 886 | } |
AnnaBridge | 161:aa5281ff4a02 | 887 | |
AnnaBridge | 161:aa5281ff4a02 | 888 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 889 | * @brief Disables FlexCAN interrupts according to the provided mask. |
AnnaBridge | 161:aa5281ff4a02 | 890 | * |
AnnaBridge | 161:aa5281ff4a02 | 891 | * This function disables the FlexCAN interrupts according to the provided mask. The mask |
AnnaBridge | 161:aa5281ff4a02 | 892 | * is a logical OR of enumeration members, see @ref _flexcan_interrupt_enable. |
AnnaBridge | 161:aa5281ff4a02 | 893 | * |
AnnaBridge | 161:aa5281ff4a02 | 894 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 895 | * @param mask The interrupts to disable. Logical OR of @ref _flexcan_interrupt_enable. |
AnnaBridge | 161:aa5281ff4a02 | 896 | */ |
AnnaBridge | 161:aa5281ff4a02 | 897 | static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 898 | { |
AnnaBridge | 161:aa5281ff4a02 | 899 | /* Solve Wake Up Interrupt. */ |
AnnaBridge | 161:aa5281ff4a02 | 900 | if (mask & kFLEXCAN_WakeUpInterruptEnable) |
AnnaBridge | 161:aa5281ff4a02 | 901 | { |
AnnaBridge | 161:aa5281ff4a02 | 902 | base->MCR &= ~CAN_MCR_WAKMSK_MASK; |
AnnaBridge | 161:aa5281ff4a02 | 903 | } |
AnnaBridge | 161:aa5281ff4a02 | 904 | |
AnnaBridge | 161:aa5281ff4a02 | 905 | /* Solve others. */ |
AnnaBridge | 161:aa5281ff4a02 | 906 | base->CTRL1 &= ~(mask & (~((uint32_t)kFLEXCAN_WakeUpInterruptEnable))); |
AnnaBridge | 161:aa5281ff4a02 | 907 | } |
AnnaBridge | 161:aa5281ff4a02 | 908 | |
AnnaBridge | 161:aa5281ff4a02 | 909 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 910 | * @brief Enables FlexCAN Message Buffer interrupts. |
AnnaBridge | 161:aa5281ff4a02 | 911 | * |
AnnaBridge | 161:aa5281ff4a02 | 912 | * This function enables the interrupts of given Message Buffers. |
AnnaBridge | 161:aa5281ff4a02 | 913 | * |
AnnaBridge | 161:aa5281ff4a02 | 914 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 915 | * @param mask The ORed FlexCAN Message Buffer mask. |
AnnaBridge | 161:aa5281ff4a02 | 916 | */ |
AnnaBridge | 161:aa5281ff4a02 | 917 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 918 | static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint64_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 919 | #else |
AnnaBridge | 161:aa5281ff4a02 | 920 | static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 921 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 922 | { |
AnnaBridge | 161:aa5281ff4a02 | 923 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 924 | base->IMASK1 |= (uint32_t)(mask & 0xFFFFFFFFU); |
AnnaBridge | 161:aa5281ff4a02 | 925 | base->IMASK2 |= (uint32_t)(mask >> 32); |
AnnaBridge | 161:aa5281ff4a02 | 926 | #else |
AnnaBridge | 161:aa5281ff4a02 | 927 | base->IMASK1 |= mask; |
AnnaBridge | 161:aa5281ff4a02 | 928 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 929 | } |
AnnaBridge | 161:aa5281ff4a02 | 930 | |
AnnaBridge | 161:aa5281ff4a02 | 931 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 932 | * @brief Disables FlexCAN Message Buffer interrupts. |
AnnaBridge | 161:aa5281ff4a02 | 933 | * |
AnnaBridge | 161:aa5281ff4a02 | 934 | * This function disables the interrupts of given Message Buffers. |
AnnaBridge | 161:aa5281ff4a02 | 935 | * |
AnnaBridge | 161:aa5281ff4a02 | 936 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 937 | * @param mask The ORed FlexCAN Message Buffer mask. |
AnnaBridge | 161:aa5281ff4a02 | 938 | */ |
AnnaBridge | 161:aa5281ff4a02 | 939 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 940 | static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint64_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 941 | #else |
AnnaBridge | 161:aa5281ff4a02 | 942 | static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint32_t mask) |
AnnaBridge | 161:aa5281ff4a02 | 943 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 944 | { |
AnnaBridge | 161:aa5281ff4a02 | 945 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0) |
AnnaBridge | 161:aa5281ff4a02 | 946 | base->IMASK1 &= ~((uint32_t)(mask & 0xFFFFFFFFU)); |
AnnaBridge | 161:aa5281ff4a02 | 947 | base->IMASK2 &= ~((uint32_t)(mask >> 32)); |
AnnaBridge | 161:aa5281ff4a02 | 948 | #else |
AnnaBridge | 161:aa5281ff4a02 | 949 | base->IMASK1 &= ~mask; |
AnnaBridge | 161:aa5281ff4a02 | 950 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 951 | } |
AnnaBridge | 161:aa5281ff4a02 | 952 | |
AnnaBridge | 161:aa5281ff4a02 | 953 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 954 | |
AnnaBridge | 161:aa5281ff4a02 | 955 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA) && FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA) |
AnnaBridge | 161:aa5281ff4a02 | 956 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 957 | * @name DMA Control |
AnnaBridge | 161:aa5281ff4a02 | 958 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 959 | */ |
AnnaBridge | 161:aa5281ff4a02 | 960 | |
AnnaBridge | 161:aa5281ff4a02 | 961 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 962 | * @brief Enables or disables the FlexCAN Rx FIFO DMA request. |
AnnaBridge | 161:aa5281ff4a02 | 963 | * |
AnnaBridge | 161:aa5281ff4a02 | 964 | * This function enables or disables the DMA feature of FlexCAN build-in Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 965 | * |
AnnaBridge | 161:aa5281ff4a02 | 966 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 967 | * @param enable true to enable, false to disable. |
AnnaBridge | 161:aa5281ff4a02 | 968 | */ |
AnnaBridge | 161:aa5281ff4a02 | 969 | void FLEXCAN_EnableRxFifoDMA(CAN_Type *base, bool enable); |
AnnaBridge | 161:aa5281ff4a02 | 970 | |
AnnaBridge | 161:aa5281ff4a02 | 971 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 972 | * @brief Gets the Rx FIFO Head address. |
AnnaBridge | 161:aa5281ff4a02 | 973 | * |
AnnaBridge | 161:aa5281ff4a02 | 974 | * This function returns the FlexCAN Rx FIFO Head address, which is mainly used for the DMA/eDMA use case. |
AnnaBridge | 161:aa5281ff4a02 | 975 | * |
AnnaBridge | 161:aa5281ff4a02 | 976 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 977 | * @return FlexCAN Rx FIFO Head address. |
AnnaBridge | 161:aa5281ff4a02 | 978 | */ |
AnnaBridge | 161:aa5281ff4a02 | 979 | static inline uint32_t FLEXCAN_GetRxFifoHeadAddr(CAN_Type *base) |
AnnaBridge | 161:aa5281ff4a02 | 980 | { |
AnnaBridge | 161:aa5281ff4a02 | 981 | return (uint32_t) & (base->MB[0].CS); |
AnnaBridge | 161:aa5281ff4a02 | 982 | } |
AnnaBridge | 161:aa5281ff4a02 | 983 | |
AnnaBridge | 161:aa5281ff4a02 | 984 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 985 | #endif /* FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA */ |
AnnaBridge | 161:aa5281ff4a02 | 986 | |
AnnaBridge | 161:aa5281ff4a02 | 987 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 988 | * @name Bus Operations |
AnnaBridge | 161:aa5281ff4a02 | 989 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 990 | */ |
AnnaBridge | 161:aa5281ff4a02 | 991 | |
AnnaBridge | 161:aa5281ff4a02 | 992 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 993 | * @brief Enables or disables the FlexCAN module operation. |
AnnaBridge | 161:aa5281ff4a02 | 994 | * |
AnnaBridge | 161:aa5281ff4a02 | 995 | * This function enables or disables the FlexCAN module. |
AnnaBridge | 161:aa5281ff4a02 | 996 | * |
AnnaBridge | 161:aa5281ff4a02 | 997 | * @param base FlexCAN base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 998 | * @param enable true to enable, false to disable. |
AnnaBridge | 161:aa5281ff4a02 | 999 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1000 | static inline void FLEXCAN_Enable(CAN_Type *base, bool enable) |
AnnaBridge | 161:aa5281ff4a02 | 1001 | { |
AnnaBridge | 161:aa5281ff4a02 | 1002 | if (enable) |
AnnaBridge | 161:aa5281ff4a02 | 1003 | { |
AnnaBridge | 161:aa5281ff4a02 | 1004 | base->MCR &= ~CAN_MCR_MDIS_MASK; |
AnnaBridge | 161:aa5281ff4a02 | 1005 | |
AnnaBridge | 161:aa5281ff4a02 | 1006 | /* Wait FlexCAN exit from low-power mode. */ |
AnnaBridge | 161:aa5281ff4a02 | 1007 | while (base->MCR & CAN_MCR_LPMACK_MASK) |
AnnaBridge | 161:aa5281ff4a02 | 1008 | { |
AnnaBridge | 161:aa5281ff4a02 | 1009 | } |
AnnaBridge | 161:aa5281ff4a02 | 1010 | } |
AnnaBridge | 161:aa5281ff4a02 | 1011 | else |
AnnaBridge | 161:aa5281ff4a02 | 1012 | { |
AnnaBridge | 161:aa5281ff4a02 | 1013 | base->MCR |= CAN_MCR_MDIS_MASK; |
AnnaBridge | 161:aa5281ff4a02 | 1014 | |
AnnaBridge | 161:aa5281ff4a02 | 1015 | /* Wait FlexCAN enter low-power mode. */ |
AnnaBridge | 161:aa5281ff4a02 | 1016 | while (!(base->MCR & CAN_MCR_LPMACK_MASK)) |
AnnaBridge | 161:aa5281ff4a02 | 1017 | { |
AnnaBridge | 161:aa5281ff4a02 | 1018 | } |
AnnaBridge | 161:aa5281ff4a02 | 1019 | } |
AnnaBridge | 161:aa5281ff4a02 | 1020 | } |
AnnaBridge | 161:aa5281ff4a02 | 1021 | |
AnnaBridge | 161:aa5281ff4a02 | 1022 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1023 | * @brief Writes a FlexCAN Message to the Transmit Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1024 | * |
AnnaBridge | 161:aa5281ff4a02 | 1025 | * This function writes a CAN Message to the specified Transmit Message Buffer |
AnnaBridge | 161:aa5281ff4a02 | 1026 | * and changes the Message Buffer state to start CAN Message transmit. After |
AnnaBridge | 161:aa5281ff4a02 | 1027 | * that the function returns immediately. |
AnnaBridge | 161:aa5281ff4a02 | 1028 | * |
AnnaBridge | 161:aa5281ff4a02 | 1029 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1030 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1031 | * @param txFrame Pointer to CAN message frame to be sent. |
AnnaBridge | 161:aa5281ff4a02 | 1032 | * @retval kStatus_Success - Write Tx Message Buffer Successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1033 | * @retval kStatus_Fail - Tx Message Buffer is currently in use. |
AnnaBridge | 161:aa5281ff4a02 | 1034 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1035 | status_t FLEXCAN_WriteTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_frame_t *txFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1036 | |
AnnaBridge | 161:aa5281ff4a02 | 1037 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1038 | * @brief Reads a FlexCAN Message from Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1039 | * |
AnnaBridge | 161:aa5281ff4a02 | 1040 | * This function reads a CAN message from a specified Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1041 | * The function fills a receive CAN message frame structure with |
AnnaBridge | 161:aa5281ff4a02 | 1042 | * just received data and activates the Message Buffer again. |
AnnaBridge | 161:aa5281ff4a02 | 1043 | * The function returns immediately. |
AnnaBridge | 161:aa5281ff4a02 | 1044 | * |
AnnaBridge | 161:aa5281ff4a02 | 1045 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1046 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1047 | * @param rxFrame Pointer to CAN message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1048 | * @retval kStatus_Success - Rx Message Buffer is full and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1049 | * @retval kStatus_FLEXCAN_RxOverflow - Rx Message Buffer is already overflowed and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1050 | * @retval kStatus_Fail - Rx Message Buffer is empty. |
AnnaBridge | 161:aa5281ff4a02 | 1051 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1052 | status_t FLEXCAN_ReadRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1053 | |
AnnaBridge | 161:aa5281ff4a02 | 1054 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 1055 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1056 | * @brief Writes a FlexCAN FD Message to the Transmit Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1057 | * |
AnnaBridge | 161:aa5281ff4a02 | 1058 | * This function writes a CAN FD Message to the specified Transmit Message Buffer |
AnnaBridge | 161:aa5281ff4a02 | 1059 | * and changes the Message Buffer state to start CAN FD Message transmit. After |
AnnaBridge | 161:aa5281ff4a02 | 1060 | * that the function returns immediately. |
AnnaBridge | 161:aa5281ff4a02 | 1061 | * |
AnnaBridge | 161:aa5281ff4a02 | 1062 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1063 | * @param mbIdx The FlexCAN FD Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1064 | * @param txFrame Pointer to CAN FD message frame to be sent. |
AnnaBridge | 161:aa5281ff4a02 | 1065 | * @retval kStatus_Success - Write Tx Message Buffer Successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1066 | * @retval kStatus_Fail - Tx Message Buffer is currently in use. |
AnnaBridge | 161:aa5281ff4a02 | 1067 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1068 | status_t FLEXCAN_WriteFDTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_fd_frame_t *txFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1069 | |
AnnaBridge | 161:aa5281ff4a02 | 1070 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1071 | * @brief Reads a FlexCAN FD Message from Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1072 | * |
AnnaBridge | 161:aa5281ff4a02 | 1073 | * This function reads a CAN FD message from a specified Receive Message Buffer. |
AnnaBridge | 161:aa5281ff4a02 | 1074 | * The function fills a receive CAN FD message frame structure with |
AnnaBridge | 161:aa5281ff4a02 | 1075 | * just received data and activates the Message Buffer again. |
AnnaBridge | 161:aa5281ff4a02 | 1076 | * The function returns immediately. |
AnnaBridge | 161:aa5281ff4a02 | 1077 | * |
AnnaBridge | 161:aa5281ff4a02 | 1078 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1079 | * @param mbIdx The FlexCAN FD Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1080 | * @param rxFrame Pointer to CAN FD message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1081 | * @retval kStatus_Success - Rx Message Buffer is full and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1082 | * @retval kStatus_FLEXCAN_RxOverflow - Rx Message Buffer is already overflowed and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1083 | * @retval kStatus_Fail - Rx Message Buffer is empty. |
AnnaBridge | 161:aa5281ff4a02 | 1084 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1085 | status_t FLEXCAN_ReadFDRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1086 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 1087 | |
AnnaBridge | 161:aa5281ff4a02 | 1088 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1089 | * @brief Reads a FlexCAN Message from Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 1090 | * |
AnnaBridge | 161:aa5281ff4a02 | 1091 | * This function reads a CAN message from the FlexCAN build-in Rx FIFO. |
AnnaBridge | 161:aa5281ff4a02 | 1092 | * |
AnnaBridge | 161:aa5281ff4a02 | 1093 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1094 | * @param rxFrame Pointer to CAN message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1095 | * @retval kStatus_Success - Read Message from Rx FIFO successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1096 | * @retval kStatus_Fail - Rx FIFO is not enabled. |
AnnaBridge | 161:aa5281ff4a02 | 1097 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1098 | status_t FLEXCAN_ReadRxFifo(CAN_Type *base, flexcan_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1099 | |
AnnaBridge | 161:aa5281ff4a02 | 1100 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 1101 | |
AnnaBridge | 161:aa5281ff4a02 | 1102 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1103 | * @name Transactional |
AnnaBridge | 161:aa5281ff4a02 | 1104 | * @{ |
AnnaBridge | 161:aa5281ff4a02 | 1105 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1106 | |
AnnaBridge | 161:aa5281ff4a02 | 1107 | #if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) |
AnnaBridge | 161:aa5281ff4a02 | 1108 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1109 | * @brief Performs a polling send transaction on the CAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 1110 | * |
AnnaBridge | 161:aa5281ff4a02 | 1111 | * Note that a transfer handle does not need to be created before calling this API. |
AnnaBridge | 161:aa5281ff4a02 | 1112 | * |
AnnaBridge | 161:aa5281ff4a02 | 1113 | * @param base FlexCAN peripheral base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1114 | * @param mbIdx The FlexCAN FD Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1115 | * @param txFrame Pointer to CAN FD message frame to be sent. |
AnnaBridge | 161:aa5281ff4a02 | 1116 | * @retval kStatus_Success - Write Tx Message Buffer Successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1117 | * @retval kStatus_Fail - Tx Message Buffer is currently in use. |
AnnaBridge | 161:aa5281ff4a02 | 1118 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1119 | status_t FLEXCAN_TransferFDSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *txFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1120 | |
AnnaBridge | 161:aa5281ff4a02 | 1121 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1122 | * @brief Performs a polling receive transaction on the CAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 1123 | * |
AnnaBridge | 161:aa5281ff4a02 | 1124 | * Note that a transfer handle does not need to be created before calling this API. |
AnnaBridge | 161:aa5281ff4a02 | 1125 | * |
AnnaBridge | 161:aa5281ff4a02 | 1126 | * @param base FlexCAN peripheral base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1127 | * @param mbIdx The FlexCAN FD Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1128 | * @param rxFrame Pointer to CAN FD message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1129 | * @retval kStatus_Success - Rx Message Buffer is full and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1130 | * @retval kStatus_FLEXCAN_RxOverflow - Rx Message Buffer is already overflowed and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1131 | * @retval kStatus_Fail - Rx Message Buffer is empty. |
AnnaBridge | 161:aa5281ff4a02 | 1132 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1133 | status_t FLEXCAN_TransferFDReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1134 | |
AnnaBridge | 161:aa5281ff4a02 | 1135 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1136 | * @brief Sends a message using IRQ. |
AnnaBridge | 161:aa5281ff4a02 | 1137 | * |
AnnaBridge | 161:aa5281ff4a02 | 1138 | * This function sends a message using IRQ. This is a non-blocking function, which returns |
AnnaBridge | 161:aa5281ff4a02 | 1139 | * right away. When messages have been sent out, the send callback function is called. |
AnnaBridge | 161:aa5281ff4a02 | 1140 | * |
AnnaBridge | 161:aa5281ff4a02 | 1141 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1142 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1143 | * @param xfer FlexCAN FD Message Buffer transfer structure. See the #flexcan_mb_transfer_t. |
AnnaBridge | 161:aa5281ff4a02 | 1144 | * @retval kStatus_Success Start Tx Message Buffer sending process successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1145 | * @retval kStatus_Fail Write Tx Message Buffer failed. |
AnnaBridge | 161:aa5281ff4a02 | 1146 | * @retval kStatus_FLEXCAN_TxBusy Tx Message Buffer is in use. |
AnnaBridge | 161:aa5281ff4a02 | 1147 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1148 | status_t FLEXCAN_TransferFDSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer); |
AnnaBridge | 161:aa5281ff4a02 | 1149 | |
AnnaBridge | 161:aa5281ff4a02 | 1150 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1151 | * @brief Receives a message using IRQ. |
AnnaBridge | 161:aa5281ff4a02 | 1152 | * |
AnnaBridge | 161:aa5281ff4a02 | 1153 | * This function receives a message using IRQ. This is non-blocking function, which returns |
AnnaBridge | 161:aa5281ff4a02 | 1154 | * right away. When the message has been received, the receive callback function is called. |
AnnaBridge | 161:aa5281ff4a02 | 1155 | * |
AnnaBridge | 161:aa5281ff4a02 | 1156 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1157 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1158 | * @param xfer FlexCAN FD Message Buffer transfer structure. See the #flexcan_mb_transfer_t. |
AnnaBridge | 161:aa5281ff4a02 | 1159 | * @retval kStatus_Success - Start Rx Message Buffer receiving process successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1160 | * @retval kStatus_FLEXCAN_RxBusy - Rx Message Buffer is in use. |
AnnaBridge | 161:aa5281ff4a02 | 1161 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1162 | status_t FLEXCAN_TransferFDReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer); |
AnnaBridge | 161:aa5281ff4a02 | 1163 | |
AnnaBridge | 161:aa5281ff4a02 | 1164 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1165 | * @brief Aborts the interrupt driven message send process. |
AnnaBridge | 161:aa5281ff4a02 | 1166 | * |
AnnaBridge | 161:aa5281ff4a02 | 1167 | * This function aborts the interrupt driven message send process. |
AnnaBridge | 161:aa5281ff4a02 | 1168 | * |
AnnaBridge | 161:aa5281ff4a02 | 1169 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1170 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1171 | * @param mbIdx The FlexCAN FD Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1172 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1173 | void FLEXCAN_TransferFDAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx); |
AnnaBridge | 161:aa5281ff4a02 | 1174 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 1175 | |
AnnaBridge | 161:aa5281ff4a02 | 1176 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1177 | * @brief Performs a polling send transaction on the CAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 1178 | * |
AnnaBridge | 161:aa5281ff4a02 | 1179 | * Note that a transfer handle does not need to be created before calling this API. |
AnnaBridge | 161:aa5281ff4a02 | 1180 | * |
AnnaBridge | 161:aa5281ff4a02 | 1181 | * @param base FlexCAN peripheral base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1182 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1183 | * @param txFrame Pointer to CAN message frame to be sent. |
AnnaBridge | 161:aa5281ff4a02 | 1184 | * @retval kStatus_Success - Write Tx Message Buffer Successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1185 | * @retval kStatus_Fail - Tx Message Buffer is currently in use. |
AnnaBridge | 161:aa5281ff4a02 | 1186 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1187 | status_t FLEXCAN_TransferSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *txFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1188 | |
AnnaBridge | 161:aa5281ff4a02 | 1189 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1190 | * @brief Performs a polling receive transaction on the CAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 1191 | * |
AnnaBridge | 161:aa5281ff4a02 | 1192 | * Note that a transfer handle does not need to be created before calling this API. |
AnnaBridge | 161:aa5281ff4a02 | 1193 | * |
AnnaBridge | 161:aa5281ff4a02 | 1194 | * @param base FlexCAN peripheral base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1195 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1196 | * @param rxFrame Pointer to CAN message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1197 | * @retval kStatus_Success - Rx Message Buffer is full and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1198 | * @retval kStatus_FLEXCAN_RxOverflow - Rx Message Buffer is already overflowed and has been read successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1199 | * @retval kStatus_Fail - Rx Message Buffer is empty. |
AnnaBridge | 161:aa5281ff4a02 | 1200 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1201 | status_t FLEXCAN_TransferReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1202 | |
AnnaBridge | 161:aa5281ff4a02 | 1203 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1204 | * @brief Performs a polling receive transaction from Rx FIFO on the CAN bus. |
AnnaBridge | 161:aa5281ff4a02 | 1205 | * |
AnnaBridge | 161:aa5281ff4a02 | 1206 | * Note that a transfer handle does not need to be created before calling this API. |
AnnaBridge | 161:aa5281ff4a02 | 1207 | * |
AnnaBridge | 161:aa5281ff4a02 | 1208 | * @param base FlexCAN peripheral base pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1209 | * @param rxFrame Pointer to CAN message frame structure for reception. |
AnnaBridge | 161:aa5281ff4a02 | 1210 | * @retval kStatus_Success - Read Message from Rx FIFO successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1211 | * @retval kStatus_Fail - Rx FIFO is not enabled. |
AnnaBridge | 161:aa5281ff4a02 | 1212 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1213 | status_t FLEXCAN_TransferReceiveFifoBlocking(CAN_Type *base, flexcan_frame_t *rxFrame); |
AnnaBridge | 161:aa5281ff4a02 | 1214 | |
AnnaBridge | 161:aa5281ff4a02 | 1215 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1216 | * @brief Initializes the FlexCAN handle. |
AnnaBridge | 161:aa5281ff4a02 | 1217 | * |
AnnaBridge | 161:aa5281ff4a02 | 1218 | * This function initializes the FlexCAN handle, which can be used for other FlexCAN |
AnnaBridge | 161:aa5281ff4a02 | 1219 | * transactional APIs. Usually, for a specified FlexCAN instance, |
AnnaBridge | 161:aa5281ff4a02 | 1220 | * call this API once to get the initialized handle. |
AnnaBridge | 161:aa5281ff4a02 | 1221 | * |
AnnaBridge | 161:aa5281ff4a02 | 1222 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1223 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1224 | * @param callback The callback function. |
AnnaBridge | 161:aa5281ff4a02 | 1225 | * @param userData The parameter of the callback function. |
AnnaBridge | 161:aa5281ff4a02 | 1226 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1227 | void FLEXCAN_TransferCreateHandle(CAN_Type *base, |
AnnaBridge | 161:aa5281ff4a02 | 1228 | flexcan_handle_t *handle, |
AnnaBridge | 161:aa5281ff4a02 | 1229 | flexcan_transfer_callback_t callback, |
AnnaBridge | 161:aa5281ff4a02 | 1230 | void *userData); |
AnnaBridge | 161:aa5281ff4a02 | 1231 | |
AnnaBridge | 161:aa5281ff4a02 | 1232 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1233 | * @brief Sends a message using IRQ. |
AnnaBridge | 161:aa5281ff4a02 | 1234 | * |
AnnaBridge | 161:aa5281ff4a02 | 1235 | * This function sends a message using IRQ. This is a non-blocking function, which returns |
AnnaBridge | 161:aa5281ff4a02 | 1236 | * right away. When messages have been sent out, the send callback function is called. |
AnnaBridge | 161:aa5281ff4a02 | 1237 | * |
AnnaBridge | 161:aa5281ff4a02 | 1238 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1239 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1240 | * @param xfer FlexCAN Message Buffer transfer structure. See the #flexcan_mb_transfer_t. |
AnnaBridge | 161:aa5281ff4a02 | 1241 | * @retval kStatus_Success Start Tx Message Buffer sending process successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1242 | * @retval kStatus_Fail Write Tx Message Buffer failed. |
AnnaBridge | 161:aa5281ff4a02 | 1243 | * @retval kStatus_FLEXCAN_TxBusy Tx Message Buffer is in use. |
AnnaBridge | 161:aa5281ff4a02 | 1244 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1245 | status_t FLEXCAN_TransferSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer); |
AnnaBridge | 161:aa5281ff4a02 | 1246 | |
AnnaBridge | 161:aa5281ff4a02 | 1247 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1248 | * @brief Receives a message using IRQ. |
AnnaBridge | 161:aa5281ff4a02 | 1249 | * |
AnnaBridge | 161:aa5281ff4a02 | 1250 | * This function receives a message using IRQ. This is non-blocking function, which returns |
AnnaBridge | 161:aa5281ff4a02 | 1251 | * right away. When the message has been received, the receive callback function is called. |
AnnaBridge | 161:aa5281ff4a02 | 1252 | * |
AnnaBridge | 161:aa5281ff4a02 | 1253 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1254 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1255 | * @param xfer FlexCAN Message Buffer transfer structure. See the #flexcan_mb_transfer_t. |
AnnaBridge | 161:aa5281ff4a02 | 1256 | * @retval kStatus_Success - Start Rx Message Buffer receiving process successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1257 | * @retval kStatus_FLEXCAN_RxBusy - Rx Message Buffer is in use. |
AnnaBridge | 161:aa5281ff4a02 | 1258 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1259 | status_t FLEXCAN_TransferReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer); |
AnnaBridge | 161:aa5281ff4a02 | 1260 | |
AnnaBridge | 161:aa5281ff4a02 | 1261 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1262 | * @brief Receives a message from Rx FIFO using IRQ. |
AnnaBridge | 161:aa5281ff4a02 | 1263 | * |
AnnaBridge | 161:aa5281ff4a02 | 1264 | * This function receives a message using IRQ. This is a non-blocking function, which returns |
AnnaBridge | 161:aa5281ff4a02 | 1265 | * right away. When all messages have been received, the receive callback function is called. |
AnnaBridge | 161:aa5281ff4a02 | 1266 | * |
AnnaBridge | 161:aa5281ff4a02 | 1267 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1268 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1269 | * @param xfer FlexCAN Rx FIFO transfer structure. See the @ref flexcan_fifo_transfer_t. |
AnnaBridge | 161:aa5281ff4a02 | 1270 | * @retval kStatus_Success - Start Rx FIFO receiving process successfully. |
AnnaBridge | 161:aa5281ff4a02 | 1271 | * @retval kStatus_FLEXCAN_RxFifoBusy - Rx FIFO is currently in use. |
AnnaBridge | 161:aa5281ff4a02 | 1272 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1273 | status_t FLEXCAN_TransferReceiveFifoNonBlocking(CAN_Type *base, |
AnnaBridge | 161:aa5281ff4a02 | 1274 | flexcan_handle_t *handle, |
AnnaBridge | 161:aa5281ff4a02 | 1275 | flexcan_fifo_transfer_t *xfer); |
AnnaBridge | 161:aa5281ff4a02 | 1276 | |
AnnaBridge | 161:aa5281ff4a02 | 1277 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1278 | * @brief Aborts the interrupt driven message send process. |
AnnaBridge | 161:aa5281ff4a02 | 1279 | * |
AnnaBridge | 161:aa5281ff4a02 | 1280 | * This function aborts the interrupt driven message send process. |
AnnaBridge | 161:aa5281ff4a02 | 1281 | * |
AnnaBridge | 161:aa5281ff4a02 | 1282 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1283 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1284 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1285 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1286 | void FLEXCAN_TransferAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx); |
AnnaBridge | 161:aa5281ff4a02 | 1287 | |
AnnaBridge | 161:aa5281ff4a02 | 1288 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1289 | * @brief Aborts the interrupt driven message receive process. |
AnnaBridge | 161:aa5281ff4a02 | 1290 | * |
AnnaBridge | 161:aa5281ff4a02 | 1291 | * This function aborts the interrupt driven message receive process. |
AnnaBridge | 161:aa5281ff4a02 | 1292 | * |
AnnaBridge | 161:aa5281ff4a02 | 1293 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1294 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1295 | * @param mbIdx The FlexCAN Message Buffer index. |
AnnaBridge | 161:aa5281ff4a02 | 1296 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1297 | void FLEXCAN_TransferAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx); |
AnnaBridge | 161:aa5281ff4a02 | 1298 | |
AnnaBridge | 161:aa5281ff4a02 | 1299 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1300 | * @brief Aborts the interrupt driven message receive from Rx FIFO process. |
AnnaBridge | 161:aa5281ff4a02 | 1301 | * |
AnnaBridge | 161:aa5281ff4a02 | 1302 | * This function aborts the interrupt driven message receive from Rx FIFO process. |
AnnaBridge | 161:aa5281ff4a02 | 1303 | * |
AnnaBridge | 161:aa5281ff4a02 | 1304 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1305 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1306 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1307 | void FLEXCAN_TransferAbortReceiveFifo(CAN_Type *base, flexcan_handle_t *handle); |
AnnaBridge | 161:aa5281ff4a02 | 1308 | |
AnnaBridge | 161:aa5281ff4a02 | 1309 | /*! |
AnnaBridge | 161:aa5281ff4a02 | 1310 | * @brief FlexCAN IRQ handle function. |
AnnaBridge | 161:aa5281ff4a02 | 1311 | * |
AnnaBridge | 161:aa5281ff4a02 | 1312 | * This function handles the FlexCAN Error, the Message Buffer, and the Rx FIFO IRQ request. |
AnnaBridge | 161:aa5281ff4a02 | 1313 | * |
AnnaBridge | 161:aa5281ff4a02 | 1314 | * @param base FlexCAN peripheral base address. |
AnnaBridge | 161:aa5281ff4a02 | 1315 | * @param handle FlexCAN handle pointer. |
AnnaBridge | 161:aa5281ff4a02 | 1316 | */ |
AnnaBridge | 161:aa5281ff4a02 | 1317 | void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle); |
AnnaBridge | 161:aa5281ff4a02 | 1318 | |
AnnaBridge | 161:aa5281ff4a02 | 1319 | /* @} */ |
AnnaBridge | 161:aa5281ff4a02 | 1320 | |
AnnaBridge | 161:aa5281ff4a02 | 1321 | #if defined(__cplusplus) |
AnnaBridge | 161:aa5281ff4a02 | 1322 | } |
AnnaBridge | 161:aa5281ff4a02 | 1323 | #endif |
AnnaBridge | 161:aa5281ff4a02 | 1324 | |
AnnaBridge | 161:aa5281ff4a02 | 1325 | /*! @}*/ |
AnnaBridge | 161:aa5281ff4a02 | 1326 | |
AnnaBridge | 161:aa5281ff4a02 | 1327 | #endif /* _FSL_FLEXCAN_H_ */ |