NetBurner 3.5.8
PDF Version
FlexcanInterruptTransfer/src/fsl_flexcan.h
1#ifndef DOXYGEN_SHOULD_SKIP_THIS
2
3/*
4 * Copyright (c) 2015, Freescale Semiconductor, Inc.
5 * Copyright 2016-2023 NXP
6 * All rights reserved.
7 *
8 * SPDX-License-Identifier: BSD-3-Clause
9 */
10#ifndef FSL_FLEXCAN_H_
11#define FSL_FLEXCAN_H_
12
13#include "fsl_common.h"
14#include <MIMXRT1061_features.h>
15
21/******************************************************************************
22 * Definitions
23 *****************************************************************************/
24
28#define FSL_FLEXCAN_DRIVER_VERSION (MAKE_VERSION(2, 11, 6))
31#if !(defined(FLEXCAN_WAIT_TIMEOUT) && FLEXCAN_WAIT_TIMEOUT)
32/* Define to 1000 means keep waiting 1000 times until the flag is assert/deassert. */
33#define FLEXCAN_WAIT_TIMEOUT (1000U)
34#endif
35
37#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
38#define DLC_LENGTH_DECODE(dlc) (((dlc) <= 8U) ? (dlc) : (((dlc) <= 12U) ? (((dlc)-6U) * 4U) : (((dlc)-11U) * 16U)))
39#endif
40
42#define FLEXCAN_ID_STD(id) \
43 (((uint32_t)(((uint32_t)(id)) << CAN_ID_STD_SHIFT)) & CAN_ID_STD_MASK)
44#define FLEXCAN_ID_EXT(id) \
45 (((uint32_t)(((uint32_t)(id)) << CAN_ID_EXT_SHIFT)) & \
46 (CAN_ID_EXT_MASK | CAN_ID_STD_MASK))
49#define FLEXCAN_RX_MB_STD_MASK(id, rtr, ide) \
50 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
51 FLEXCAN_ID_STD(id))
52#define FLEXCAN_RX_MB_EXT_MASK(id, rtr, ide) \
53 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
54 FLEXCAN_ID_EXT(id))
57#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide) \
58 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
59 (FLEXCAN_ID_STD(id) << 1))
60#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH(id, rtr, ide) \
61 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
62 (((uint32_t)(id)&0x7FF) << 19))
63#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW(id, rtr, ide) \
64 (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \
65 (((uint32_t)(id)&0x7FF) << 3))
66#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH(id) \
67 (((uint32_t)(id)&0x7F8) << 21)
68#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH(id) \
69 (((uint32_t)(id)&0x7F8) << 13)
70#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW(id) \
71 (((uint32_t)(id)&0x7F8) << 5)
72#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW(id) \
73 (((uint32_t)(id)&0x7F8) >> 3)
74#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide) \
75 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
76 (FLEXCAN_ID_EXT(id) << 1))
77#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH(id, rtr, ide) \
78 ( \
79 ((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
80 ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) \
81 << 1))
82#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW(id, rtr, ide) \
83 (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \
84 ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) >> \
85 15))
86#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH(id) \
87 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) << 3)
88#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH(id) \
89 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \
90 5)
91#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW(id) \
92 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \
93 13)
94#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id) \
95 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> 21)
98#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_A(id, rtr, ide) \
99 FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide)
100#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_HIGH(id, rtr, ide) \
101 FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH( \
102 id, rtr, ide)
103#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_LOW(id, rtr, ide) \
104 FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW( \
105 id, rtr, ide)
106#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_HIGH(id) \
107 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH( \
108 id)
109#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_HIGH(id) \
110 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH( \
111 id)
112#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_LOW(id) \
113 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW( \
114 id)
115#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_LOW(id) \
116 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW( \
117 id)
118#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_A(id, rtr, ide) \
119 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide)
120#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_HIGH(id, rtr, ide) \
121 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH( \
122 id, rtr, ide)
123#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_LOW(id, rtr, ide) \
124 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW( \
125 id, rtr, ide)
126#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_HIGH(id) \
127 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH( \
128 id)
129#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_HIGH(id) \
130 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH( \
131 id)
132#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_LOW(id) \
133 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW( \
134 id)
135#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_LOW(id) \
136 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id)
138#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
140#define ENHANCED_RX_FIFO_FSCH(x) (((uint32_t)(((uint32_t)(x)) << 30)) & 0xC0000000U)
141#define RTR_STD_HIGH(x) (((uint32_t)(((uint32_t)(x)) << 27)) & 0x08000000U)
142#define RTR_STD_LOW(x) (((uint32_t)(((uint32_t)(x)) << 11)) & 0x00000800U)
143#define RTR_EXT(x) (((uint32_t)(((uint32_t)(x)) << 29)) & 0x40000000U)
144#define ID_STD_LOW(id) (((uint32_t)id) & 0x7FFU)
145#define ID_STD_HIGH(id) (((uint32_t)(((uint32_t)(id)) << 16)) & 0x07FF0000U)
146#define ID_EXT(id) (((uint32_t)id) & 0x1FFFFFFFU)
147
149#define FLEXCAN_ENHANCED_RX_FIFO_STD_MASK_AND_FILTER(id, rtr, id_mask, rtr_mask) \
150 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_STD_HIGH(rtr) | ID_STD_HIGH(id) | RTR_STD_LOW(rtr_mask) | ID_STD_LOW(id_mask))
152#define FLEXCAN_ENHANCED_RX_FIFO_STD_FILTER_WITH_RANGE(id_upper, rtr, id_lower, rtr_mask) \
153 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_STD_HIGH(rtr) | ID_STD_HIGH(id_upper) | RTR_STD_LOW(rtr_mask) | \
154 ID_STD_LOW(id_lower))
156#define FLEXCAN_ENHANCED_RX_FIFO_STD_TWO_FILTERS(id1, rtr1, id2, rtr2) \
157 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_STD_HIGH(rtr1) | ID_STD_HIGH(id1) | RTR_STD_LOW(rtr2) | ID_STD_LOW(id2))
159#define FLEXCAN_ENHANCED_RX_FIFO_EXT_MASK_AND_FILTER_LOW(id, rtr) \
160 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_EXT(rtr) | ID_EXT(id))
162#define FLEXCAN_ENHANCED_RX_FIFO_EXT_MASK_AND_FILTER_HIGH(id_mask, rtr_mask) \
163 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_EXT(rtr_mask) | ID_EXT(id_mask))
165#define FLEXCAN_ENHANCED_RX_FIFO_EXT_FILTER_WITH_RANGE_LOW(id_upper, rtr) \
166 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_EXT(rtr) | ID_EXT(id_upper))
168#define FLEXCAN_ENHANCED_RX_FIFO_EXT_FILTER_WITH_RANGE_HIGH(id_lower, rtr_mask) \
169 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_EXT(rtr_mask) | ID_EXT(id_lower))
171#define FLEXCAN_ENHANCED_RX_FIFO_EXT_TWO_FILTERS_LOW(id2, rtr2) \
172 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_EXT(rtr2) | ID_EXT(id2))
174#define FLEXCAN_ENHANCED_RX_FIFO_EXT_TWO_FILTERS_HIGH(id1, rtr1) \
175 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_EXT(rtr1) | ID_EXT(id1))
176#endif
177
178#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
180#define FLEXCAN_PN_STD_MASK(id, rtr) \
181 ((uint32_t)((uint32_t)(rtr) << CAN_FLT_ID1_FLT_RTR_SHIFT) | \
182 FLEXCAN_ID_STD(id))
183#define FLEXCAN_PN_EXT_MASK(id, rtr) \
184 ((uint32_t)CAN_FLT_ID1_FLT_IDE_MASK | (uint32_t)((uint32_t)(rtr) << CAN_FLT_ID1_FLT_RTR_SHIFT) | \
185 FLEXCAN_ID_EXT(id))
186#endif
187
189#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
190#define FLEXCAN_PN_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0x3000000000000U)
191#define FLEXCAN_PN_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0x00030000U)
192#define FLEXCAN_PN_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 16)) & 0x300000000U)
193#define FLEXCAN_PN_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 16)) & 0x00030000U)
194#endif
195#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
196#define FLEXCAN_EFIFO_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0xF000000000000000U)
197#define FLEXCAN_EFIFO_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0xF0000000U)
198#define FLEXCAN_EFIFO_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0xF003000000000000U)
199#define FLEXCAN_EFIFO_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0xF0030000U)
200#endif
201#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
202#define FLEXCAN_MECR_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 16)) & 0xD00000000U)
203#define FLEXCAN_MECR_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 16)) & 0x000D0000U)
204#define FLEXCAN_MECR_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 34)) & 0x34003400000000U)
205#define FLEXCAN_MECR_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 34)) & 0x000D000DU)
206#endif
207
208#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
209#define FLEXCAN_ERROR_AND_STATUS_INIT_FLAG \
210 ((uint32_t)kFLEXCAN_ErrorOverrunFlag | (uint32_t)kFLEXCAN_FDErrorIntFlag | (uint32_t)kFLEXCAN_BusoffDoneIntFlag | \
211 (uint32_t)kFLEXCAN_TxWarningIntFlag | (uint32_t)kFLEXCAN_RxWarningIntFlag | (uint32_t)kFLEXCAN_BusOffIntFlag | \
212 (uint32_t)kFLEXCAN_ErrorIntFlag | FLEXCAN_MEMORY_ERROR_INIT_FLAG)
213#else
214#define FLEXCAN_ERROR_AND_STATUS_INIT_FLAG \
215 ((uint32_t)kFLEXCAN_TxWarningIntFlag | (uint32_t)kFLEXCAN_RxWarningIntFlag | (uint32_t)kFLEXCAN_BusOffIntFlag | \
216 (uint32_t)kFLEXCAN_ErrorIntFlag | FLEXCAN_MEMORY_ERROR_INIT_FLAG)
217#endif
218#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
219#define FLEXCAN_WAKE_UP_FLAG \
220 ((uint32_t)kFLEXCAN_WakeUpIntFlag | (uint64_t)kFLEXCAN_PNMatchIntFlag | (uint64_t)kFLEXCAN_PNTimeoutIntFlag)
221#else
222#define FLEXCAN_WAKE_UP_FLAG ((uint32_t)kFLEXCAN_WakeUpIntFlag)
223#endif
224#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
225#define FLEXCAN_MEMORY_ERROR_INIT_FLAG ((uint64_t)kFLEXCAN_AllMemoryErrorFlag)
226#else
227#define FLEXCAN_MEMORY_ERROR_INIT_FLAG (0U)
228#endif
229
230#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
231#define FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG \
232 ((uint64_t)kFLEXCAN_ERxFifoUnderflowIntFlag | (uint64_t)kFLEXCAN_ERxFifoOverflowIntFlag | \
233 (uint64_t)kFLEXCAN_ERxFifoWatermarkIntFlag | (uint64_t)kFLEXCAN_ERxFifoDataAvlIntFlag)
234#endif
236#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
237#define E_RX_FIFO(base) ((uintptr_t)(base) + 0x2000U)
238#else
239#define FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG (0U)
240#endif
242enum
243{
244 kStatus_FLEXCAN_TxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 0),
245 kStatus_FLEXCAN_TxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 1),
246 kStatus_FLEXCAN_TxSwitchToRx = MAKE_STATUS(
247 kStatusGroup_FLEXCAN, 2),
248 kStatus_FLEXCAN_RxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 3),
249 kStatus_FLEXCAN_RxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 4),
250 kStatus_FLEXCAN_RxOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 5),
251 kStatus_FLEXCAN_RxFifoBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 6),
252 kStatus_FLEXCAN_RxFifoIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 7),
253 kStatus_FLEXCAN_RxFifoOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 8),
254 kStatus_FLEXCAN_RxFifoWarning = MAKE_STATUS(kStatusGroup_FLEXCAN, 9),
256 MAKE_STATUS(kStatusGroup_FLEXCAN, 10),
257 kStatus_FLEXCAN_ErrorStatus = MAKE_STATUS(kStatusGroup_FLEXCAN, 11),
258 kStatus_FLEXCAN_WakeUp = MAKE_STATUS(kStatusGroup_FLEXCAN, 12),
259 kStatus_FLEXCAN_UnHandled = MAKE_STATUS(kStatusGroup_FLEXCAN, 13),
260 kStatus_FLEXCAN_RxRemote = MAKE_STATUS(kStatusGroup_FLEXCAN, 14),
261#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
262 kStatus_FLEXCAN_RxFifoUnderflow =
263 MAKE_STATUS(kStatusGroup_FLEXCAN, 15),
264#endif
265};
266
268typedef enum _flexcan_frame_format
269{
273
275typedef enum _flexcan_frame_type
276{
280
285typedef enum _flexcan_clock_source
286{
287 kFLEXCAN_ClkSrcOsc = 0x0U,
288 kFLEXCAN_ClkSrcPeri = 0x1U,
289 kFLEXCAN_ClkSrc0 = 0x0U,
290 kFLEXCAN_ClkSrc1 = 0x1U,
292
294typedef enum _flexcan_wake_up_source
295{
299
302{
305 0x1U,
307 0x2U,
310
311#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
315typedef enum _flexcan_mb_size
316{
317 kFLEXCAN_8BperMB = 0x0U,
318 kFLEXCAN_16BperMB = 0x1U,
319 kFLEXCAN_32BperMB = 0x2U,
320 kFLEXCAN_64BperMB = 0x3U,
321} flexcan_mb_size_t;
322
331enum _flexcan_fd_frame_length
332{
333 kFLEXCAN_0BperFrame = 0x0U,
334 kFLEXCAN_1BperFrame,
335 kFLEXCAN_2BperFrame,
336 kFLEXCAN_3BperFrame,
337 kFLEXCAN_4BperFrame,
338 kFLEXCAN_5BperFrame,
339 kFLEXCAN_6BperFrame,
340 kFLEXCAN_7BperFrame,
341 kFLEXCAN_8BperFrame,
342 kFLEXCAN_12BperFrame,
343 kFLEXCAN_16BperFrame,
344 kFLEXCAN_20BperFrame,
345 kFLEXCAN_24BperFrame,
346 kFLEXCAN_32BperFrame,
347 kFLEXCAN_48BperFrame,
348 kFLEXCAN_64BperFrame,
349};
350#endif
351
352#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
354typedef enum _flexcan_efifo_dma_per_read_length
355{
356 kFLEXCAN_1WordPerRead = 0x0U,
357 kFLEXCAN_2WordPerRead,
358 kFLEXCAN_3WordPerRead,
359 kFLEXCAN_4WordPerRead,
360 kFLEXCAN_5WordPerRead,
361 kFLEXCAN_6WordPerRead,
362 kFLEXCAN_7WordPerRead,
363 kFLEXCAN_8WordPerRead,
364 kFLEXCAN_9WordPerRead,
365 kFLEXCAN_10WordPerRead,
366 kFLEXCAN_11WordPerRead,
367 kFLEXCAN_12WordPerRead,
368 kFLEXCAN_13WordPerRead,
369 kFLEXCAN_14WordPerRead,
370 kFLEXCAN_15WordPerRead,
371 kFLEXCAN_16WordPerRead,
372 kFLEXCAN_17WordPerRead,
373 kFLEXCAN_18WordPerRead,
374 kFLEXCAN_19WordPerRead
375} flexcan_efifo_dma_per_read_length_t;
376#endif
377
385typedef enum _flexcan_rx_fifo_priority
386{
390
398{
399 kFLEXCAN_BusOffInterruptEnable = CAN_CTRL1_BOFFMSK_MASK,
400 kFLEXCAN_ErrorInterruptEnable = CAN_CTRL1_ERRMSK_MASK,
401 kFLEXCAN_TxWarningInterruptEnable = CAN_CTRL1_TWRNMSK_MASK,
402 kFLEXCAN_RxWarningInterruptEnable = CAN_CTRL1_RWRNMSK_MASK,
403 kFLEXCAN_WakeUpInterruptEnable = CAN_MCR_WAKMSK_MASK,
404#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
405 kFLEXCAN_FDErrorInterruptEnable = CAN_CTRL2_ERRMSK_FAST_MASK,
406#endif
407#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
409 kFLEXCAN_PNMatchWakeUpInterruptEnable = FLEXCAN_PN_INT_MASK(CAN_CTRL1_PN_WTOF_MSK_MASK),
411 kFLEXCAN_PNTimeoutWakeUpInterruptEnable = FLEXCAN_PN_INT_MASK(CAN_CTRL1_PN_WUMF_MSK_MASK),
412#endif
413#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
415 kFLEXCAN_ERxFifoUnderflowInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFUFWIE_MASK),
417 kFLEXCAN_ERxFifoOverflowInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFOVFIE_MASK),
419 kFLEXCAN_ERxFifoWatermarkInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFWMIIE_MASK),
421 kFLEXCAN_ERxFifoDataAvlInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFDAIE_MASK),
422#endif
423#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
425 kFLEXCAN_HostAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_HANCEI_MSK_MASK),
427 kFLEXCAN_FlexCanAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_FANCEI_MSK_MASK),
429 kFLEXCAN_HostOrFlexCanCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_CEI_MSK_MASK),
430#endif
431};
432
441{
442#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
443 kFLEXCAN_ErrorOverrunFlag = CAN_ESR1_ERROVR_MASK,
444 kFLEXCAN_FDErrorIntFlag = CAN_ESR1_ERRINT_FAST_MASK,
445 kFLEXCAN_BusoffDoneIntFlag = CAN_ESR1_BOFFDONEINT_MASK,
446#endif
447 kFLEXCAN_SynchFlag = CAN_ESR1_SYNCH_MASK,
448 kFLEXCAN_TxWarningIntFlag = CAN_ESR1_TWRNINT_MASK,
449 kFLEXCAN_RxWarningIntFlag = CAN_ESR1_RWRNINT_MASK,
450 kFLEXCAN_IdleFlag = CAN_ESR1_IDLE_MASK,
451 kFLEXCAN_FaultConfinementFlag = CAN_ESR1_FLTCONF_MASK,
452 kFLEXCAN_TransmittingFlag = CAN_ESR1_TX_MASK,
453 kFLEXCAN_ReceivingFlag = CAN_ESR1_RX_MASK,
454 kFLEXCAN_BusOffIntFlag = CAN_ESR1_BOFFINT_MASK,
455 kFLEXCAN_ErrorIntFlag = CAN_ESR1_ERRINT_MASK,
456 kFLEXCAN_WakeUpIntFlag = CAN_ESR1_WAKINT_MASK,
457 kFLEXCAN_ErrorFlag =
458 (uint32_t)(
459#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
460 CAN_ESR1_STFERR_FAST_MASK | CAN_ESR1_FRMERR_FAST_MASK | CAN_ESR1_CRCERR_FAST_MASK |
461 CAN_ESR1_BIT0ERR_FAST_MASK | CAN_ESR1_BIT1ERR_FAST_MASK | CAN_ESR1_ERROVR_MASK |
462#endif
463 CAN_ESR1_TXWRN_MASK | CAN_ESR1_RXWRN_MASK | CAN_ESR1_BIT1ERR_MASK | CAN_ESR1_BIT0ERR_MASK |
464 CAN_ESR1_ACKERR_MASK | CAN_ESR1_CRCERR_MASK | CAN_ESR1_FRMERR_MASK | CAN_ESR1_STFERR_MASK),
465#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
466 kFLEXCAN_PNMatchIntFlag = FLEXCAN_PN_STATUS_MASK(CAN_WU_MTC_WUMF_MASK),
467 kFLEXCAN_PNTimeoutIntFlag = FLEXCAN_PN_STATUS_MASK(CAN_WU_MTC_WTOF_MASK),
468#endif
469#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
470 kFLEXCAN_ERxFifoUnderflowIntFlag =
471 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFUFW_MASK),
472 kFLEXCAN_ERxFifoOverflowIntFlag =
473 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFOVF_MASK),
474 kFLEXCAN_ERxFifoWatermarkIntFlag =
475 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFWMI_MASK),
476 kFLEXCAN_ERxFifoDataAvlIntFlag =
477 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFDA_MASK),
478 kFLEXCAN_ERxFifoEmptyFlag = FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFE_MASK),
479 kFLEXCAN_ERxFifoFullFlag = FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFF_MASK),
480#endif
481#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
483 kFLEXCAN_HostAccessNonCorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_HANCEIF_MASK),
485 kFLEXCAN_FlexCanAccessNonCorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_FANCEIF_MASK),
487 kFLEXCAN_CorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_CEIF_MASK),
489 kFLEXCAN_HostAccessNonCorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_HANCEIOF_MASK),
491 kFLEXCAN_FlexCanAccessNonCorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_FANCEIOF_MASK),
493 kFLEXCAN_CorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_CEIOF_MASK),
495 kFLEXCAN_AllMemoryErrorFlag =
496 (kFLEXCAN_HostAccessNonCorrectableErrorIntFlag | kFLEXCAN_FlexCanAccessNonCorrectableErrorIntFlag |
497 kFLEXCAN_CorrectableErrorIntFlag | kFLEXCAN_HostAccessNonCorrectableErrorOverrunFlag |
498 kFLEXCAN_FlexCanAccessNonCorrectableErrorOverrunFlag | kFLEXCAN_CorrectableErrorOverrunFlag)
499#endif
500};
501
510{
511#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
512 kFLEXCAN_FDStuffingError = CAN_ESR1_STFERR_FAST_MASK,
513 kFLEXCAN_FDFormError = CAN_ESR1_FRMERR_FAST_MASK,
514 kFLEXCAN_FDCrcError = CAN_ESR1_CRCERR_FAST_MASK,
515 kFLEXCAN_FDBit0Error = CAN_ESR1_BIT0ERR_FAST_MASK,
516 kFLEXCAN_FDBit1Error = (int)CAN_ESR1_BIT1ERR_FAST_MASK,
517#endif
518 kFLEXCAN_TxErrorWarningFlag = CAN_ESR1_TXWRN_MASK,
519 kFLEXCAN_RxErrorWarningFlag = CAN_ESR1_RXWRN_MASK,
520 kFLEXCAN_StuffingError = CAN_ESR1_STFERR_MASK,
521 kFLEXCAN_FormError = CAN_ESR1_FRMERR_MASK,
522 kFLEXCAN_CrcError = CAN_ESR1_CRCERR_MASK,
523 kFLEXCAN_AckError = CAN_ESR1_ACKERR_MASK,
524 kFLEXCAN_Bit0Error = CAN_ESR1_BIT0ERR_MASK,
525 kFLEXCAN_Bit1Error = CAN_ESR1_BIT1ERR_MASK,
526};
527
536enum
537{
538 kFLEXCAN_RxFifoOverflowFlag = CAN_IFLAG1_BUF7I_MASK,
539 kFLEXCAN_RxFifoWarningFlag = CAN_IFLAG1_BUF6I_MASK,
540 kFLEXCAN_RxFifoFrameAvlFlag = CAN_IFLAG1_BUF5I_MASK,
541};
542
543#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
547typedef enum _flexcan_memory_error_type
548{
549 kFLEXCAN_CorrectableError = 0U,
550 kFLEXCAN_NonCorrectableError
551} flexcan_memory_error_type_t;
552
556typedef enum _flexcan_memory_access_type
557{
558 kFLEXCAN_MoveOutFlexCanAccess = 0U,
559 kFLEXCAN_MoveInAccess,
560 kFLEXCAN_TxArbitrationAccess,
561 kFLEXCAN_RxMatchingAccess,
562 kFLEXCAN_MoveOutHostAccess
563} flexcan_memory_access_type_t;
564
568typedef enum _flexcan_byte_error_syndrome
569{
570 kFLEXCAN_NoError = 0U,
571 kFLEXCAN_ParityBits0Error = 1U,
572 kFLEXCAN_ParityBits1Error = 2U,
573 kFLEXCAN_ParityBits2Error = 4U,
574 kFLEXCAN_ParityBits3Error = 8U,
575 kFLEXCAN_ParityBits4Error = 16U,
576 kFLEXCAN_DataBits0Error = 28U,
577 kFLEXCAN_DataBits1Error = 22U,
578 kFLEXCAN_DataBits2Error = 19U,
579 kFLEXCAN_DataBits3Error = 25U,
580 kFLEXCAN_DataBits4Error = 26U,
581 kFLEXCAN_DataBits5Error = 7U,
582 kFLEXCAN_DataBits6Error = 21U,
583 kFLEXCAN_DataBits7Error = 14U,
584 kFLEXCAN_AllZeroError = 6U,
585 kFLEXCAN_AllOneError = 31U,
586 kFLEXCAN_NonCorrectableErrors
587} flexcan_byte_error_syndrome_t;
588
596typedef struct _flexcan_memory_error_report_status
597{
598 flexcan_memory_error_type_t errorType;
599 flexcan_memory_access_type_t accessType;
600 uint16_t accessAddress;
601 uint32_t errorData;
602 struct
603 {
604 bool byteIsRead;
606 flexcan_byte_error_syndrome_t bitAffected;
607 } byteStatus[4];
608} flexcan_memory_error_report_status_t;
609#endif
610
611#if defined(__CC_ARM)
612#pragma anon_unions
613#endif
615typedef struct _flexcan_frame
616{
617 struct
618 {
619 uint32_t timestamp : 16;
620 uint32_t length : 4;
621 uint32_t type : 1;
622 uint32_t format : 1;
623 uint32_t : 1;
624 uint32_t idhit : 9;
625 };
626 struct
627 {
628 uint32_t id : 29;
629 uint32_t : 3;
630 };
631 union
632 {
633 struct
634 {
635 uint32_t dataWord0;
636 uint32_t dataWord1;
637 };
638 struct
639 {
640 uint8_t dataByte3;
641 uint8_t dataByte2;
642 uint8_t dataByte1;
643 uint8_t dataByte0;
644 uint8_t dataByte7;
645 uint8_t dataByte6;
646 uint8_t dataByte5;
647 uint8_t dataByte4;
648 };
649 };
651
652#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
658typedef struct _flexcan_fd_frame
659{
660 struct
661 {
662 uint32_t timestamp : 16;
663 uint32_t length : 4;
667 uint32_t type : 1;
668 uint32_t format : 1;
669 uint32_t srr : 1;
670 uint32_t : 6;
671 uint32_t esi : 1;
672 uint32_t brs : 1;
673 uint32_t edl : 1;
674 };
675 struct
676 {
677 uint32_t id : 29;
678 uint32_t : 3;
679 };
680 union
681 {
682 struct
683 {
684 uint32_t dataWord[16];
685 };
686 /* Note: the maximum databyte* below is actually 64, user can add them if needed,
687 or just use dataWord[*] instead. */
688 struct
689 {
690 uint8_t dataByte3;
691 uint8_t dataByte2;
692 uint8_t dataByte1;
693 uint8_t dataByte0;
694 uint8_t dataByte7;
695 uint8_t dataByte6;
696 uint8_t dataByte5;
697 uint8_t dataByte4;
698 };
699 };
700#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
704 uint32_t idhit;
706#endif
707} flexcan_fd_frame_t;
708#endif
709
711typedef struct _flexcan_timing_config
712{
713 uint16_t preDivider;
714 uint8_t rJumpwidth;
715 uint8_t phaseSeg1;
716 uint8_t phaseSeg2;
717 uint8_t propSeg;
718#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
719 uint16_t fpreDivider;
720 uint8_t frJumpwidth;
721 uint8_t fphaseSeg1;
722 uint8_t fphaseSeg2;
723 uint8_t fpropSeg;
724#endif
726
731typedef struct _flexcan_config
732{
733 union
734 {
735 struct
736 {
737 uint32_t baudRate;
738#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
739 uint32_t baudRateFD;
740#endif
741 };
742 struct
743 {
744 uint32_t bitRate;
745#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
746 uint32_t bitRateFD;
747#endif
748 };
749 };
752 uint8_t maxMbNum;
753 bool enableLoopBack;
754 bool enableTimerSync;
755 bool enableSelfWakeup;
756 bool enableIndividMask;
759#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SUPV_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SUPV_SUPPORT)
762#endif
763#if (defined(FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT)
764 bool enableDoze;
765#endif
766#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
767 bool enablePretendedeNetworking;
768#endif
769#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
770 bool enableMemoryErrorControl;
771 bool enableNonCorrectableErrorEnterFreeze;
773#endif
774#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG)
775 bool enableTransceiverDelayMeasure;
778#endif
779 flexcan_timing_config_t timingConfig; /* Protocol timing . */
781
791typedef struct _flexcan_rx_mb_config
792{
793 uint32_t id;
798
799#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
801typedef enum _flexcan_pn_match_source
802{
803 kFLEXCAN_PNMatSrcID = 0U,
804 kFLEXCAN_PNMatSrcIDAndData,
805} flexcan_pn_match_source_t;
806
808typedef enum _flexcan_pn_match_mode
809{
810 kFLEXCAN_PNMatModeEqual = 0x0U,
811 kFLEXCAN_PNMatModeGreater,
813 kFLEXCAN_PNMatModeSmaller,
815 kFLEXCAN_PNMatModeRange,
817} flexcan_pn_match_mode_t;
818
825typedef struct _flexcan_pn_config
826{
827 bool enableTimeout;
828 uint16_t timeoutValue;
830 bool enableMatch;
831 flexcan_pn_match_source_t matchSrc;
832 uint8_t matchNum;
834 flexcan_pn_match_mode_t idMatchMode;
835 flexcan_pn_match_mode_t dataMatchMode;
836 uint32_t idLower;
838 uint32_t idUpper;
840 uint8_t lengthLower;
842 uint8_t lengthUpper;
844 union
845 {
849 struct
850 {
851 uint32_t lowerWord0;
852 uint32_t lowerWord1;
853 };
854 struct
855 {
856 uint8_t lowerByte3;
857 uint8_t lowerByte2;
858 uint8_t lowerByte1;
859 uint8_t lowerByte0;
860 uint8_t lowerByte7;
861 uint8_t lowerByte6;
862 uint8_t lowerByte5;
863 uint8_t lowerByte4;
864 };
865 };
866 union
867 {
870 struct
871 {
872 uint32_t upperWord0;
873 uint32_t upperWord1;
874 };
875 struct
876 {
877 uint8_t upperByte3;
878 uint8_t upperByte2;
879 uint8_t upperByte1;
880 uint8_t upperByte0;
881 uint8_t upperByte7;
882 uint8_t upperByte6;
883 uint8_t upperByte5;
884 uint8_t upperByte4;
885 };
886 };
887} flexcan_pn_config_t;
888#endif
889
891typedef struct _flexcan_rx_fifo_config
892{
893 uint32_t *idFilterTable;
894 uint8_t idFilterNum;
898
899#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
901typedef struct _flexcan_enhanced_rx_fifo_std_id_filter
902{
903 uint32_t filterType : 2;
904 uint32_t : 2;
905 uint32_t rtr1 : 1;
909 uint32_t std1 : 11;
910 uint32_t : 4;
911 uint32_t rtr2 : 1;
912 uint32_t std2 : 11;
913} flexcan_enhanced_rx_fifo_std_id_filter_t;
914
916typedef struct _flexcan_enhanced_rx_fifo_ext_id_filter
917{
918 uint32_t filterType : 2;
919 uint32_t rtr1 : 1;
923 uint32_t std1 : 29;
924 uint32_t : 2;
925 uint32_t rtr2 : 1;
926 uint32_t std2 : 29;
927} flexcan_enhanced_rx_fifo_ext_id_filter_t;
929typedef struct _flexcan_enhanced_rx_fifo_config
930{
931 uint32_t *idFilterTable;
936 uint8_t idFilterPairNum;
939 uint8_t extendIdFilterNum;
942 uint8_t fifoWatermark;
944 flexcan_efifo_dma_per_read_length_t dmaPerReadLength;
947} flexcan_enhanced_rx_fifo_config_t;
948#endif
949
951typedef struct _flexcan_mb_transfer
952{
953#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
954 flexcan_fd_frame_t *framefd;
955#endif
957 uint8_t mbIdx;
959
961typedef struct _flexcan_fifo_transfer
962{
963#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
964 flexcan_fd_frame_t *framefd;
965#endif
967 size_t frameNum;
969
971typedef struct _flexcan_handle flexcan_handle_t;
972
983#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
984 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
985#define FLEXCAN_CALLBACK(x) \
986 void(x)(CAN_Type * base, flexcan_handle_t * handle, status_t status, uint64_t result, void *userData)
987typedef void (*flexcan_transfer_callback_t)(
988 CAN_Type *base, flexcan_handle_t *handle, status_t status, uint64_t result, void *userData);
989#else
990#define FLEXCAN_CALLBACK(x) \
991 void(x)(CAN_Type * base, flexcan_handle_t * handle, status_t status, uint32_t result, void *userData)
992typedef void (*flexcan_transfer_callback_t)(
993 CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData);
994#endif
995
997struct _flexcan_handle
998{
999 flexcan_transfer_callback_t callback;
1000 void *userData;
1002 *volatile mbFrameBuf[CAN_WORD1_COUNT];
1003#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1004 flexcan_fd_frame_t
1005 *volatile mbFDFrameBuf[CAN_WORD1_COUNT];
1006#endif
1008#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1009 flexcan_fd_frame_t *volatile rxFifoFDFrameBuf;
1010#endif
1011 size_t rxFifoFrameNum;
1012 size_t rxFifoTransferTotalNum;
1013 volatile uint8_t mbState[CAN_WORD1_COUNT];
1014 volatile uint8_t rxFifoState;
1015 volatile uint32_t timestamp[CAN_WORD1_COUNT];
1016};
1017
1018/******************************************************************************
1019 * API
1020 *****************************************************************************/
1021
1022#if defined(__cplusplus)
1023extern "C" {
1024#endif
1025
1031#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1044bool FLEXCAN_IsInstanceHasFDMode(CAN_Type *base);
1045#endif
1046
1054void FLEXCAN_EnterFreezeMode(CAN_Type *base);
1055
1063void FLEXCAN_ExitFreezeMode(CAN_Type *base);
1064
1071uint32_t FLEXCAN_GetInstance(CAN_Type *base);
1072
1087bool FLEXCAN_CalculateImprovedTimingValues(CAN_Type *base,
1088 uint32_t bitRate,
1089 uint32_t sourceClock_Hz,
1090 flexcan_timing_config_t *pTimingConfig);
1091
1117void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz);
1118
1119#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1136bool FLEXCAN_FDCalculateImprovedTimingValues(CAN_Type *base,
1137 uint32_t bitRate,
1138 uint32_t bitRateFD,
1139 uint32_t sourceClock_Hz,
1140 flexcan_timing_config_t *pTimingConfig);
1170void FLEXCAN_FDInit(
1171 CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz, flexcan_mb_size_t dataSize, bool brs);
1172#endif
1173
1182void FLEXCAN_Deinit(CAN_Type *base);
1183
1206
1225void FLEXCAN_SetTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig);
1226
1240status_t FLEXCAN_SetBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRate_Bps);
1241
1242#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1256void FLEXCAN_SetFDTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig);
1257
1270status_t FLEXCAN_SetFDBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRateN_Bps, uint32_t bitRateD_Bps);
1271#endif
1272
1282void FLEXCAN_SetRxMbGlobalMask(CAN_Type *base, uint32_t mask);
1283
1292void FLEXCAN_SetRxFifoGlobalMask(CAN_Type *base, uint32_t mask);
1293
1308void FLEXCAN_SetRxIndividualMask(CAN_Type *base, uint8_t maskIdx, uint32_t mask);
1309
1322void FLEXCAN_SetTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable);
1323
1324#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1337void FLEXCAN_SetFDTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable);
1338#endif
1339
1353void FLEXCAN_SetRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable);
1354
1355#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1369void FLEXCAN_SetFDRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable);
1370#endif
1371
1385void FLEXCAN_SetRxFifoConfig(CAN_Type *base, const flexcan_rx_fifo_config_t *pRxFifoConfig, bool enable);
1386
1387#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1402void FLEXCAN_SetEnhancedRxFifoConfig(CAN_Type *base, const flexcan_enhanced_rx_fifo_config_t *pConfig, bool enable);
1403#endif
1404
1405#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1414void FLEXCAN_SetPNConfig(CAN_Type *base, const flexcan_pn_config_t *pConfig);
1415#endif
1433#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1434 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1435 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1436static inline uint64_t FLEXCAN_GetStatusFlags(CAN_Type *base)
1437{
1438 uint64_t tempflag = (uint64_t)base->ESR1;
1439#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1440 /* Get PN Wake Up status. */
1441 tempflag |= FLEXCAN_PN_STATUS_MASK(base->WU_MTC);
1442#endif
1443#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1444 /* Get Enhanced Rx FIFO status. */
1445 tempflag |= FLEXCAN_EFIFO_STATUS_MASK(base->ERFSR);
1446#endif
1447#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1448 /* Get Memory Error status. */
1449 tempflag |= FLEXCAN_MECR_STATUS_MASK(base->ERRSR);
1450#endif
1451 return tempflag;
1452}
1453#else
1454static inline uint32_t FLEXCAN_GetStatusFlags(CAN_Type *base)
1455{
1456 return base->ESR1;
1457}
1458#endif
1468#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1469 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1470 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1471static inline void FLEXCAN_ClearStatusFlags(CAN_Type *base, uint64_t mask)
1472{
1473#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1474 /* Clear PN Wake Up status. */
1475 base->WU_MTC = FLEXCAN_PN_STATUS_UNMASK(mask);
1476#endif
1477#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1478 /* Clear Enhanced Rx FIFO status. */
1479 base->ERFSR = FLEXCAN_EFIFO_STATUS_UNMASK(mask);
1480#endif
1481#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1482 /* Clear Memory Error status. */
1483 base->ERRSR = FLEXCAN_MECR_STATUS_UNMASK(mask);
1484#endif
1485 base->ESR1 = (uint32_t)(mask & 0xFFFFFFFFU);
1486}
1487#else
1488static inline void FLEXCAN_ClearStatusFlags(CAN_Type *base, uint32_t mask)
1489{
1490 /* Write 1 to clear status flag. */
1491 base->ESR1 = mask;
1492}
1493#endif
1504static inline void FLEXCAN_GetBusErrCount(CAN_Type *base, uint8_t *txErrBuf, uint8_t *rxErrBuf)
1505{
1506 if (NULL != txErrBuf)
1507 {
1508 *txErrBuf = (uint8_t)((base->ECR & CAN_ECR_TXERRCNT_MASK) >> CAN_ECR_TXERRCNT_SHIFT);
1509 }
1510
1511 if (NULL != rxErrBuf)
1512 {
1513 *rxErrBuf = (uint8_t)((base->ECR & CAN_ECR_RXERRCNT_MASK) >> CAN_ECR_RXERRCNT_SHIFT);
1514 }
1515}
1516
1526#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1527static inline uint64_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint64_t mask)
1528#else
1529static inline uint32_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint32_t mask)
1530#endif
1531{
1532#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1533 uint64_t tempflag = (uint64_t)base->IFLAG1;
1534 return (tempflag | (((uint64_t)base->IFLAG2) << 32)) & mask;
1535#else
1536 return (base->IFLAG1 & mask);
1537#endif
1538}
1539
1540#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1550static inline uint64_t FLEXCAN_GetHigh64MbStatusFlags(CAN_Type *base, uint64_t mask)
1551{
1552 uint64_t tempflag = 0U;
1553#if defined(CAN_IFLAG3_BUF95TO64_MASK)
1554 tempflag |= (uint64_t)base->IFLAG3;
1555#endif
1556#if defined(CAN_IFLAG4_BUF127TO96_MASK)
1557 tempflag |= (uint64_t)base->IFLAG4;
1558#endif
1559 return (tempflag & mask);
1560}
1561#endif
1562
1571#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1572static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint64_t mask)
1573#else
1574static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint32_t mask)
1575#endif
1576{
1577#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1578 base->IFLAG1 = (uint32_t)(mask & 0xFFFFFFFFU);
1579 base->IFLAG2 = (uint32_t)(mask >> 32);
1580#else
1581 base->IFLAG1 = mask;
1582#endif
1583}
1584
1585#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1594static inline void FLEXCAN_ClearHigh64MbStatusFlags(CAN_Type *base, uint64_t mask)
1595{
1596#if defined(CAN_IFLAG3_BUF95TO64_MASK)
1597 base->IFLAG3 = (uint32_t)(mask & 0xFFFFFFFFU);
1598#endif
1599#if defined(CAN_IFLAG4_BUF127TO96_MASK)
1600 base->IFLAG4 = (uint32_t)(mask >> 32U);
1601#endif
1602}
1603#endif
1604
1605#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1614void FLEXCAN_GetMemoryErrorReportStatus(CAN_Type *base, flexcan_memory_error_report_status_t *errorStatus);
1615#endif
1616
1617#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1627static inline uint8_t FLEXCAN_GetPNMatchCount(CAN_Type *base)
1628{
1629 return (uint8_t)((base->WU_MTC & CAN_WU_MTC_MCOUNTER_MASK) >> CAN_WU_MTC_MCOUNTER_SHIFT);
1630}
1631#endif
1632
1633#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1642static inline uint32_t FLEXCAN_GetEnhancedFifoDataCount(CAN_Type *base)
1643{
1644 return (base->ERFSR & CAN_ERFSR_ERFEL_MASK);
1645}
1646#endif
1663#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1664 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1665 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1666static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint64_t mask)
1667#else
1668static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint32_t mask)
1669#endif
1670{
1671 uint32_t primask = DisableGlobalIRQ();
1672
1673 /* Solve Self Wake Up interrupt. */
1674 base->MCR |= (uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1675
1676#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1677 if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))
1678 {
1679 /* Solve CAN FD frames data phase error interrupt. */
1680 base->CTRL2 |= (uint32_t)(mask & (uint32_t)kFLEXCAN_FDErrorInterruptEnable);
1681 }
1682#endif
1683
1684#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1685 /* Solve PN Wake Up interrupt. */
1686 base->CTRL1_PN |= FLEXCAN_PN_INT_UNMASK(mask);
1687#endif
1688
1689#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1690 /* Solve Enhanced Rx FIFO interrupt. */
1691 base->ERFIER |= FLEXCAN_EFIFO_INT_UNMASK(mask);
1692#endif
1693
1694#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1695 /* Solve Memory Error interrupt. */
1696 base->MECR |= FLEXCAN_MECR_INT_UNMASK(mask);
1697#endif
1698
1699 /* Solve interrupt enable bits in CTRL1 register. */
1700 base->CTRL1 |=
1701 (uint32_t)(mask & ((uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
1703
1704 EnableGlobalIRQ(primask);
1705}
1706
1716#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1717 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1718static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint64_t mask)
1719#else
1720static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint32_t mask)
1721#endif
1722{
1723 uint32_t primask = DisableGlobalIRQ();
1724
1725 /* Solve Wake Up Interrupt. */
1726 base->MCR &= ~(uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1727
1728#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1729 if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))
1730 {
1731 /* Solve CAN FD frames data phase error interrupt. */
1732 base->CTRL2 &= ~(uint32_t)(mask & (uint32_t)kFLEXCAN_FDErrorInterruptEnable);
1733 }
1734#endif
1735
1736#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1737 /* Solve PN Wake Up Interrupt. */
1738 base->CTRL1_PN &= ~FLEXCAN_PN_STATUS_UNMASK(mask);
1739#endif
1740
1741#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1742 /* Solve Enhanced Rx FIFO interrupt. */
1743 base->ERFIER &= ~FLEXCAN_EFIFO_INT_UNMASK(mask);
1744#endif
1745
1746#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1747 /* Solve Memory Error Interrupt. */
1748 base->MECR &= ~FLEXCAN_MECR_STATUS_UNMASK(mask);
1749#endif
1750
1751 /* Solve interrupt enable bits in CTRL1 register. */
1752 base->CTRL1 &=
1753 ~(uint32_t)(mask & ((uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
1755
1756 EnableGlobalIRQ(primask);
1757}
1758
1767#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1768static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint64_t mask)
1769#else
1770static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint32_t mask)
1771#endif
1772{
1773 uint32_t primask = DisableGlobalIRQ();
1774
1775#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1776 base->IMASK1 |= (uint32_t)(mask & 0xFFFFFFFFU);
1777 base->IMASK2 |= (uint32_t)(mask >> 32);
1778#else
1779 base->IMASK1 |= mask;
1780#endif
1781 EnableGlobalIRQ(primask);
1782}
1783
1784#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1793static inline void FLEXCAN_EnableHigh64MbInterrupts(CAN_Type *base, uint64_t mask)
1794{
1795 uint32_t primask = DisableGlobalIRQ();
1796
1797#if defined(CAN_IMASK3_BUF95TO64M_MASK)
1798 base->IMASK3 |= (uint32_t)(mask & 0xFFFFFFFFU);
1799#endif
1800#if defined(CAN_IMASK4_BUF127TO96_MASK)
1801 base->IMASK4 |= (uint32_t)(mask >> 32U);
1802#endif
1803 EnableGlobalIRQ(primask);
1804}
1805#endif
1806
1815#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1816static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint64_t mask)
1817#else
1818static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint32_t mask)
1819#endif
1820{
1821 uint32_t primask = DisableGlobalIRQ();
1822
1823#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1824 base->IMASK1 &= ~((uint32_t)(mask & 0xFFFFFFFFU));
1825 base->IMASK2 &= ~((uint32_t)(mask >> 32));
1826#else
1827 base->IMASK1 &= ~mask;
1828#endif
1829 EnableGlobalIRQ(primask);
1830}
1831
1832#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1841static inline void FLEXCAN_DisableHigh64MbInterrupts(CAN_Type *base, uint64_t mask)
1842{
1843 uint32_t primask = DisableGlobalIRQ();
1844
1845#if defined(CAN_IMASK3_BUF95TO64M_MASK)
1846 base->IMASK3 &= ~((uint32_t)(mask & 0xFFFFFFFFU));
1847#endif
1848#if defined(CAN_IMASK4_BUF127TO96_MASK)
1849 base->IMASK4 &= ~((uint32_t)(mask >> 32U));
1850#endif
1851 EnableGlobalIRQ(primask);
1852}
1853#endif
1854
1857#if (defined(FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA) && FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA)
1871void FLEXCAN_EnableRxFifoDMA(CAN_Type *base, bool enable);
1872
1881static inline uintptr_t FLEXCAN_GetRxFifoHeadAddr(CAN_Type *base)
1882{
1883 return (uintptr_t) & (base->MB[0].CS);
1884}
1885
1887#endif /* FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA */
1888
1902static inline void FLEXCAN_Enable(CAN_Type *base, bool enable)
1903{
1904 if (enable)
1905 {
1906 base->MCR &= ~CAN_MCR_MDIS_MASK;
1907
1908 /* Wait FlexCAN exit from low-power mode. */
1909 while (0U != (base->MCR & CAN_MCR_LPMACK_MASK))
1910 {
1911 }
1912 }
1913 else
1914 {
1915 base->MCR |= CAN_MCR_MDIS_MASK;
1916
1917 /* Wait FlexCAN enter low-power mode. */
1918 while (0U == (base->MCR & CAN_MCR_LPMACK_MASK))
1919 {
1920 }
1921 }
1922}
1923
1937status_t FLEXCAN_WriteTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_frame_t *pTxFrame);
1938
1954status_t FLEXCAN_ReadRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
1955
1956#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1970status_t FLEXCAN_WriteFDTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_fd_frame_t *pTxFrame);
1971
1987status_t FLEXCAN_ReadFDRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
1988#endif
1989
2000status_t FLEXCAN_ReadRxFifo(CAN_Type *base, flexcan_frame_t *pRxFrame);
2001
2002#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2013status_t FLEXCAN_ReadEnhancedRxFifo(CAN_Type *base, flexcan_fd_frame_t *pRxFrame);
2014#endif
2015
2016#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
2030status_t FLEXCAN_ReadPNWakeUpMB(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
2031#endif
2039#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
2051status_t FLEXCAN_TransferFDSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pTxFrame);
2052
2065status_t FLEXCAN_TransferFDReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
2066
2080status_t FLEXCAN_TransferFDSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2081
2094status_t FLEXCAN_TransferFDReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2095
2105void FLEXCAN_TransferFDAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2106
2116void FLEXCAN_TransferFDAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2117#endif
2118
2130status_t FLEXCAN_TransferSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pTxFrame);
2131
2144status_t FLEXCAN_TransferReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
2145
2156status_t FLEXCAN_TransferReceiveFifoBlocking(CAN_Type *base, flexcan_frame_t *pRxFrame);
2157
2158#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2169status_t FLEXCAN_TransferReceiveEnhancedFifoBlocking(CAN_Type *base, flexcan_fd_frame_t *pRxFrame);
2170#endif
2171
2184void FLEXCAN_TransferCreateHandle(CAN_Type *base,
2185 flexcan_handle_t *handle,
2186 flexcan_transfer_callback_t callback,
2187 void *userData);
2188
2202status_t FLEXCAN_TransferSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2203
2216status_t FLEXCAN_TransferReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2217
2230status_t FLEXCAN_TransferReceiveFifoNonBlocking(CAN_Type *base,
2231 flexcan_handle_t *handle,
2232 flexcan_fifo_transfer_t *pFifoXfer);
2233
2244status_t FLEXCAN_TransferGetReceiveFifoCount(CAN_Type *base, flexcan_handle_t *handle, size_t *count);
2245
2246#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2259status_t FLEXCAN_TransferReceiveEnhancedFifoNonBlocking(CAN_Type *base,
2260 flexcan_handle_t *handle,
2261 flexcan_fifo_transfer_t *pFifoXfer);
2262
2273static inline status_t FLEXCAN_TransferGetReceiveEnhancedFifoCount(CAN_Type *base,
2274 flexcan_handle_t *handle,
2275 size_t *count)
2276{
2277 return FLEXCAN_TransferGetReceiveFifoCount(base, handle, count);
2278}
2279#endif
2280
2299uint32_t FLEXCAN_GetTimeStamp(flexcan_handle_t *handle, uint8_t mbIdx);
2300
2310void FLEXCAN_TransferAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2311
2321void FLEXCAN_TransferAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2322
2331void FLEXCAN_TransferAbortReceiveFifo(CAN_Type *base, flexcan_handle_t *handle);
2332
2333#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2342void FLEXCAN_TransferAbortReceiveEnhancedFifo(CAN_Type *base, flexcan_handle_t *handle);
2343#endif
2344
2353void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle);
2354
2357#if defined(__cplusplus)
2358}
2359#endif
2360
2363#endif /* FSL_FLEXCAN_H_ */
2364
2365
2366#endif // DOXYGEN_SHOULD_SKIP_THIS
void FLEXCAN_Deinit(CAN_Type *base)
De-initializes a FlexCAN instance.
void FLEXCAN_ExitFreezeMode(CAN_Type *base)
Exit FlexCAN Freeze Mode.
status_t FLEXCAN_TransferReceiveFifoNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_fifo_transfer_t *pFifoXfer)
Receives a message from Rx FIFO using IRQ.
status_t FLEXCAN_TransferSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pTxFrame)
Performs a polling send transaction on the CAN bus.
void FLEXCAN_SetRxFifoConfig(CAN_Type *base, const flexcan_rx_fifo_config_t *pRxFifoConfig, bool enable)
Configures the FlexCAN Legacy Rx FIFO.
status_t FLEXCAN_TransferSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer)
Sends a message using IRQ.
void FLEXCAN_EnterFreezeMode(CAN_Type *base)
Enter FlexCAN Freeze Mode.
_flexcan_frame_format
FlexCAN frame format.
Definition FlexcanLoopback/src/fsl_flexcan.h:268
_flexcan_interrupt_enable
FlexCAN interrupt enable enumerations.
Definition FlexcanLoopback/src/fsl_flexcan.h:397
void FLEXCAN_GetDefaultConfig(flexcan_config_t *pConfig)
Gets the default configuration structure.
void FLEXCAN_SetRxIndividualMask(CAN_Type *base, uint8_t maskIdx, uint32_t mask)
Sets the FlexCAN receive individual mask.
void FLEXCAN_SetRxMbGlobalMask(CAN_Type *base, uint32_t mask)
Sets the FlexCAN receive message buffer global mask.
status_t FLEXCAN_ReadRxFifo(CAN_Type *base, flexcan_frame_t *pRxFrame)
Reads a FlexCAN Message from Legacy Rx FIFO.
bool FLEXCAN_CalculateImprovedTimingValues(CAN_Type *base, uint32_t bitRate, uint32_t sourceClock_Hz, flexcan_timing_config_t *pTimingConfig)
Calculates the improved timing values by specific bit Rates for classical CAN.
_flexcan_clock_source
FlexCAN clock source.
Definition FlexcanLoopback/src/fsl_flexcan.h:285
enum _flexcan_rx_fifo_filter_type flexcan_rx_fifo_filter_type_t
FlexCAN Rx Fifo Filter type.
void FLEXCAN_SetTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig)
Sets the FlexCAN classical CAN protocol timing characteristic.
uint32_t FLEXCAN_GetInstance(CAN_Type *base)
Get the FlexCAN instance from peripheral base address.
enum _flexcan_wake_up_source flexcan_wake_up_source_t
FlexCAN wake up source.
enum _flexcan_frame_format flexcan_frame_format_t
FlexCAN frame format.
status_t FLEXCAN_TransferReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame)
Performs a polling receive transaction on the CAN bus.
status_t FLEXCAN_TransferReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer)
Receives a message using IRQ.
void FLEXCAN_SetRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable)
Configures a FlexCAN Receive Message Buffer.
void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle)
FlexCAN IRQ handle function.
void FLEXCAN_TransferAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx)
Aborts the interrupt driven message receive process.
status_t FLEXCAN_WriteTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_frame_t *pTxFrame)
Writes a FlexCAN Message to the Transmit Message Buffer.
status_t FLEXCAN_TransferReceiveFifoBlocking(CAN_Type *base, flexcan_frame_t *pRxFrame)
Performs a polling receive transaction from Legacy Rx FIFO on the CAN bus.
struct _flexcan_rx_mb_config flexcan_rx_mb_config_t
FlexCAN Receive Message Buffer configuration structure.
enum _flexcan_clock_source flexcan_clock_source_t
FlexCAN clock source.
void FLEXCAN_TransferAbortReceiveFifo(CAN_Type *base, flexcan_handle_t *handle)
Aborts the interrupt driven message receive from Rx FIFO process.
_flexcan_rx_fifo_filter_type
FlexCAN Rx Fifo Filter type.
Definition FlexcanLoopback/src/fsl_flexcan.h:301
struct _flexcan_config flexcan_config_t
FlexCAN module configuration structure.
void FLEXCAN_TransferAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx)
Aborts the interrupt driven message send process.
_flexcan_wake_up_source
FlexCAN wake up source.
Definition FlexcanLoopback/src/fsl_flexcan.h:294
struct _flexcan_timing_config flexcan_timing_config_t
FlexCAN protocol timing characteristic configuration structure.
_flexcan_frame_type
FlexCAN frame type.
Definition FlexcanLoopback/src/fsl_flexcan.h:275
enum _flexcan_frame_type flexcan_frame_type_t
FlexCAN frame type.
void FLEXCAN_TransferCreateHandle(CAN_Type *base, flexcan_handle_t *handle, flexcan_transfer_callback_t callback, void *userData)
Initializes the FlexCAN handle.
struct _flexcan_frame flexcan_frame_t
FlexCAN message frame structure.
void FLEXCAN_SetRxFifoGlobalMask(CAN_Type *base, uint32_t mask)
Sets the FlexCAN receive FIFO global mask.
status_t FLEXCAN_ReadRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame)
Reads a FlexCAN Message from Receive Message Buffer.
struct _flexcan_fifo_transfer flexcan_fifo_transfer_t
FlexCAN Rx FIFO transfer.
struct _flexcan_rx_fifo_config flexcan_rx_fifo_config_t
FlexCAN Legacy Rx FIFO configuration structure.
status_t FLEXCAN_TransferGetReceiveFifoCount(CAN_Type *base, flexcan_handle_t *handle, size_t *count)
Gets the Legacy Rx Fifo transfer status during a interrupt non-blocking receive.
void FLEXCAN_SetTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable)
Configures a FlexCAN transmit message buffer.
uint32_t FLEXCAN_GetTimeStamp(flexcan_handle_t *handle, uint8_t mbIdx)
Gets the detail index of Mailbox's Timestamp by handle.
_flexcan_error_flags
FlexCAN error status flags.
Definition FlexcanLoopback/src/fsl_flexcan.h:509
enum _flexcan_rx_fifo_priority flexcan_rx_fifo_priority_t
FlexCAN Enhanced/Legacy Rx FIFO priority.
void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz)
Initializes a FlexCAN instance.
struct _flexcan_mb_transfer flexcan_mb_transfer_t
FlexCAN Message Buffer transfer.
status_t FLEXCAN_SetBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRate_Bps)
Set bit rate of FlexCAN classical CAN frame or CAN FD frame nominal phase.
_flexcan_rx_fifo_priority
FlexCAN Enhanced/Legacy Rx FIFO priority.
Definition FlexcanLoopback/src/fsl_flexcan.h:385
_flexcan_flags
FlexCAN status flags.
Definition FlexcanLoopback/src/fsl_flexcan.h:440
@ kFLEXCAN_FrameFormatExtend
Definition FlexcanLoopback/src/fsl_flexcan.h:270
@ kFLEXCAN_FrameFormatStandard
Definition FlexcanLoopback/src/fsl_flexcan.h:269
@ kFLEXCAN_ErrorInterruptEnable
Definition FlexcanLoopback/src/fsl_flexcan.h:399
@ kFLEXCAN_RxWarningInterruptEnable
Definition FlexcanLoopback/src/fsl_flexcan.h:401
@ kFLEXCAN_TxWarningInterruptEnable
Definition FlexcanLoopback/src/fsl_flexcan.h:400
@ kFLEXCAN_WakeUpInterruptEnable
Definition FlexcanLoopback/src/fsl_flexcan.h:402
@ kFLEXCAN_BusOffInterruptEnable
Definition FlexcanLoopback/src/fsl_flexcan.h:398
@ kStatus_FLEXCAN_TxBusy
Definition FlexcanLoopback/src/fsl_flexcan.h:243
@ kStatus_FLEXCAN_ErrorStatus
Definition FlexcanLoopback/src/fsl_flexcan.h:256
@ kStatus_FLEXCAN_TxSwitchToRx
Definition FlexcanLoopback/src/fsl_flexcan.h:245
@ kStatus_FLEXCAN_RxFifoOverflow
Definition FlexcanLoopback/src/fsl_flexcan.h:252
@ kStatus_FLEXCAN_RxFifoDisabled
Definition FlexcanLoopback/src/fsl_flexcan.h:254
@ kStatus_FLEXCAN_RxFifoWarning
Definition FlexcanLoopback/src/fsl_flexcan.h:253
@ kStatus_FLEXCAN_RxBusy
Definition FlexcanLoopback/src/fsl_flexcan.h:247
@ kStatus_FLEXCAN_RxFifoIdle
Definition FlexcanLoopback/src/fsl_flexcan.h:251
@ kStatus_FLEXCAN_RxFifoBusy
Definition FlexcanLoopback/src/fsl_flexcan.h:250
@ kStatus_FLEXCAN_UnHandled
Definition FlexcanLoopback/src/fsl_flexcan.h:258
@ kStatus_FLEXCAN_RxOverflow
Definition FlexcanLoopback/src/fsl_flexcan.h:249
@ kStatus_FLEXCAN_TxIdle
Definition FlexcanLoopback/src/fsl_flexcan.h:244
@ kStatus_FLEXCAN_RxRemote
Definition FlexcanLoopback/src/fsl_flexcan.h:259
@ kStatus_FLEXCAN_WakeUp
Definition FlexcanLoopback/src/fsl_flexcan.h:257
@ kStatus_FLEXCAN_RxIdle
Definition FlexcanLoopback/src/fsl_flexcan.h:248
@ kFLEXCAN_ClkSrc0
Definition FlexcanLoopback/src/fsl_flexcan.h:288
@ kFLEXCAN_ClkSrc1
Definition FlexcanLoopback/src/fsl_flexcan.h:289
@ kFLEXCAN_ClkSrcPeri
Definition FlexcanLoopback/src/fsl_flexcan.h:287
@ kFLEXCAN_ClkSrcOsc
Definition FlexcanLoopback/src/fsl_flexcan.h:286
@ kFLEXCAN_RxFifoFrameAvlFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:539
@ kFLEXCAN_RxFifoWarningFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:538
@ kFLEXCAN_RxFifoOverflowFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:537
@ kFLEXCAN_RxFifoFilterTypeB
Definition FlexcanLoopback/src/fsl_flexcan.h:303
@ kFLEXCAN_RxFifoFilterTypeA
Definition FlexcanLoopback/src/fsl_flexcan.h:302
@ kFLEXCAN_RxFifoFilterTypeD
Definition FlexcanLoopback/src/fsl_flexcan.h:307
@ kFLEXCAN_RxFifoFilterTypeC
Definition FlexcanLoopback/src/fsl_flexcan.h:305
@ kFLEXCAN_WakeupSrcFiltered
Definition FlexcanLoopback/src/fsl_flexcan.h:296
@ kFLEXCAN_WakeupSrcUnfiltered
Definition FlexcanLoopback/src/fsl_flexcan.h:295
@ kFLEXCAN_FrameTypeData
Definition FlexcanLoopback/src/fsl_flexcan.h:276
@ kFLEXCAN_FrameTypeRemote
Definition FlexcanLoopback/src/fsl_flexcan.h:277
@ kFLEXCAN_AckError
Definition FlexcanLoopback/src/fsl_flexcan.h:522
@ kFLEXCAN_FormError
Definition FlexcanLoopback/src/fsl_flexcan.h:520
@ kFLEXCAN_CrcError
Definition FlexcanLoopback/src/fsl_flexcan.h:521
@ kFLEXCAN_Bit1Error
Definition FlexcanLoopback/src/fsl_flexcan.h:524
@ kFLEXCAN_RxErrorWarningFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:518
@ kFLEXCAN_TxErrorWarningFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:517
@ kFLEXCAN_StuffingError
Definition FlexcanLoopback/src/fsl_flexcan.h:519
@ kFLEXCAN_Bit0Error
Definition FlexcanLoopback/src/fsl_flexcan.h:523
@ kFLEXCAN_RxFifoPrioLow
Definition FlexcanLoopback/src/fsl_flexcan.h:386
@ kFLEXCAN_RxFifoPrioHigh
Definition FlexcanLoopback/src/fsl_flexcan.h:387
@ kFLEXCAN_TransmittingFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:451
@ kFLEXCAN_RxWarningIntFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:448
@ kFLEXCAN_ReceivingFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:452
@ kFLEXCAN_FaultConfinementFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:450
@ kFLEXCAN_SynchFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:446
@ kFLEXCAN_IdleFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:449
@ kFLEXCAN_BusOffIntFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:453
@ kFLEXCAN_WakeUpIntFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:455
@ kFLEXCAN_TxWarningIntFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:447
@ kFLEXCAN_ErrorIntFlag
Definition FlexcanLoopback/src/fsl_flexcan.h:454
FlexCAN module configuration structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:731
bool enableTimerSync
Definition FlexcanLoopback/src/fsl_flexcan.h:753
uint8_t maxMbNum
Definition FlexcanLoopback/src/fsl_flexcan.h:751
uint32_t bitRate
Definition FlexcanLoopback/src/fsl_flexcan.h:743
bool enableListenOnlyMode
Definition FlexcanLoopback/src/fsl_flexcan.h:757
bool enableSelfWakeup
Definition FlexcanLoopback/src/fsl_flexcan.h:754
uint32_t baudRate
Definition FlexcanLoopback/src/fsl_flexcan.h:736
flexcan_wake_up_source_t wakeupSrc
Definition FlexcanLoopback/src/fsl_flexcan.h:750
bool disableSelfReception
Definition FlexcanLoopback/src/fsl_flexcan.h:756
flexcan_clock_source_t clkSrc
Definition FlexcanLoopback/src/fsl_flexcan.h:749
bool enableLoopBack
Definition FlexcanLoopback/src/fsl_flexcan.h:752
bool enableSupervisorMode
Definition FlexcanLoopback/src/fsl_flexcan.h:759
bool enableIndividMask
Definition FlexcanLoopback/src/fsl_flexcan.h:755
FlexCAN Rx FIFO transfer.
Definition FlexcanLoopback/src/fsl_flexcan.h:961
size_t frameNum
Definition FlexcanLoopback/src/fsl_flexcan.h:966
flexcan_frame_t * frame
Definition FlexcanLoopback/src/fsl_flexcan.h:965
FlexCAN message frame structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:615
uint8_t dataByte4
Definition FlexcanLoopback/src/fsl_flexcan.h:646
uint8_t dataByte0
Definition FlexcanLoopback/src/fsl_flexcan.h:642
uint32_t timestamp
Definition FlexcanLoopback/src/fsl_flexcan.h:618
uint32_t dataWord0
Definition FlexcanLoopback/src/fsl_flexcan.h:634
uint8_t dataByte1
Definition FlexcanLoopback/src/fsl_flexcan.h:641
uint8_t dataByte3
Definition FlexcanLoopback/src/fsl_flexcan.h:639
uint8_t dataByte5
Definition FlexcanLoopback/src/fsl_flexcan.h:645
uint32_t idhit
Definition FlexcanLoopback/src/fsl_flexcan.h:623
uint32_t length
Definition FlexcanLoopback/src/fsl_flexcan.h:619
uint32_t type
Definition FlexcanLoopback/src/fsl_flexcan.h:620
uint8_t dataByte2
Definition FlexcanLoopback/src/fsl_flexcan.h:640
uint8_t dataByte6
Definition FlexcanLoopback/src/fsl_flexcan.h:644
uint8_t dataByte7
Definition FlexcanLoopback/src/fsl_flexcan.h:643
uint32_t format
Definition FlexcanLoopback/src/fsl_flexcan.h:621
uint32_t id
Definition FlexcanLoopback/src/fsl_flexcan.h:627
uint32_t dataWord1
Definition FlexcanLoopback/src/fsl_flexcan.h:635
FlexCAN handle structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:997
flexcan_frame_t *volatile mbFrameBuf[CAN_WORD1_COUNT]
Definition FlexcanLoopback/src/fsl_flexcan.h:1001
size_t rxFifoFrameNum
Definition FlexcanLoopback/src/fsl_flexcan.h:1010
size_t rxFifoTransferTotalNum
Definition FlexcanLoopback/src/fsl_flexcan.h:1011
void * userData
Definition FlexcanLoopback/src/fsl_flexcan.h:999
volatile uint8_t mbState[CAN_WORD1_COUNT]
Definition FlexcanLoopback/src/fsl_flexcan.h:1012
flexcan_transfer_callback_t callback
Definition FlexcanLoopback/src/fsl_flexcan.h:998
volatile uint8_t rxFifoState
Definition FlexcanLoopback/src/fsl_flexcan.h:1013
volatile uint32_t timestamp[CAN_WORD1_COUNT]
Definition FlexcanLoopback/src/fsl_flexcan.h:1014
flexcan_frame_t *volatile rxFifoFrameBuf
Definition FlexcanLoopback/src/fsl_flexcan.h:1006
FlexCAN Message Buffer transfer.
Definition FlexcanLoopback/src/fsl_flexcan.h:951
flexcan_frame_t * frame
Definition FlexcanLoopback/src/fsl_flexcan.h:955
uint8_t mbIdx
Definition FlexcanLoopback/src/fsl_flexcan.h:956
FlexCAN Legacy Rx FIFO configuration structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:891
flexcan_rx_fifo_filter_type_t idFilterType
Definition FlexcanLoopback/src/fsl_flexcan.h:894
flexcan_rx_fifo_priority_t priority
Definition FlexcanLoopback/src/fsl_flexcan.h:895
uint8_t idFilterNum
Definition FlexcanLoopback/src/fsl_flexcan.h:893
uint32_t * idFilterTable
Definition FlexcanLoopback/src/fsl_flexcan.h:892
FlexCAN Receive Message Buffer configuration structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:791
flexcan_frame_type_t type
Definition FlexcanLoopback/src/fsl_flexcan.h:795
uint32_t id
Definition FlexcanLoopback/src/fsl_flexcan.h:792
flexcan_frame_format_t format
Definition FlexcanLoopback/src/fsl_flexcan.h:794
FlexCAN protocol timing characteristic configuration structure.
Definition FlexcanLoopback/src/fsl_flexcan.h:711
uint16_t preDivider
Definition FlexcanLoopback/src/fsl_flexcan.h:712
uint8_t propSeg
Definition FlexcanLoopback/src/fsl_flexcan.h:716
uint8_t phaseSeg1
Definition FlexcanLoopback/src/fsl_flexcan.h:714
uint8_t phaseSeg2
Definition FlexcanLoopback/src/fsl_flexcan.h:715
uint8_t rJumpwidth
Definition FlexcanLoopback/src/fsl_flexcan.h:713