NetBurner 3.5.6
PDF Version
FlexcanLoopback/src/fsl_flexcan.h
1/*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2023 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8#ifndef FSL_FLEXCAN_H_
9#define FSL_FLEXCAN_H_
10
11#include "fsl_common.h"
12#include <MIMXRT1061_features.h>
13
20/******************************************************************************
21 * Definitions
22 *****************************************************************************/
23
27#define FSL_FLEXCAN_DRIVER_VERSION (MAKE_VERSION(2, 11, 6))
30#if !(defined(FLEXCAN_WAIT_TIMEOUT) && FLEXCAN_WAIT_TIMEOUT)
31/* Define to 1000 means keep waiting 1000 times until the flag is assert/deassert. */
32#define FLEXCAN_WAIT_TIMEOUT (1000U)
33#endif
34
36#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
37#define DLC_LENGTH_DECODE(dlc) (((dlc) <= 8U) ? (dlc) : (((dlc) <= 12U) ? (((dlc)-6U) * 4U) : (((dlc)-11U) * 16U)))
38#endif
39
41#define FLEXCAN_ID_STD(id) \
42 (((uint32_t)(((uint32_t)(id)) << CAN_ID_STD_SHIFT)) & CAN_ID_STD_MASK)
43#define FLEXCAN_ID_EXT(id) \
44 (((uint32_t)(((uint32_t)(id)) << CAN_ID_EXT_SHIFT)) & \
45 (CAN_ID_EXT_MASK | CAN_ID_STD_MASK))
48#define FLEXCAN_RX_MB_STD_MASK(id, rtr, ide) \
49 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
50 FLEXCAN_ID_STD(id))
51#define FLEXCAN_RX_MB_EXT_MASK(id, rtr, ide) \
52 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
53 FLEXCAN_ID_EXT(id))
56#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide) \
57 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
58 (FLEXCAN_ID_STD(id) << 1))
59#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH(id, rtr, ide) \
60 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
61 (((uint32_t)(id)&0x7FF) << 19))
62#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW(id, rtr, ide) \
63 (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \
64 (((uint32_t)(id)&0x7FF) << 3))
65#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH(id) \
66 (((uint32_t)(id)&0x7F8) << 21)
67#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH(id) \
68 (((uint32_t)(id)&0x7F8) << 13)
69#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW(id) \
70 (((uint32_t)(id)&0x7F8) << 5)
71#define FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW(id) \
72 (((uint32_t)(id)&0x7F8) >> 3)
73#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide) \
74 (((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
75 (FLEXCAN_ID_EXT(id) << 1))
76#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH(id, rtr, ide) \
77 ( \
78 ((uint32_t)((uint32_t)(rtr) << 31) | (uint32_t)((uint32_t)(ide) << 30)) | \
79 ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) \
80 << 1))
81#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW(id, rtr, ide) \
82 (((uint32_t)((uint32_t)(rtr) << 15) | (uint32_t)((uint32_t)(ide) << 14)) | \
83 ((FLEXCAN_ID_EXT(id) & 0x1FFF8000) >> \
84 15))
85#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH(id) \
86 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) << 3)
87#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH(id) \
88 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \
89 5)
90#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW(id) \
91 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> \
92 13)
93#define FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id) \
94 ((FLEXCAN_ID_EXT(id) & 0x1FE00000) >> 21)
97#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_A(id, rtr, ide) \
98 FLEXCAN_RX_FIFO_STD_MASK_TYPE_A(id, rtr, ide)
99#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_HIGH(id, rtr, ide) \
100 FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_HIGH( \
101 id, rtr, ide)
102#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_B_LOW(id, rtr, ide) \
103 FLEXCAN_RX_FIFO_STD_MASK_TYPE_B_LOW( \
104 id, rtr, ide)
105#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_HIGH(id) \
106 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_HIGH( \
107 id)
108#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_HIGH(id) \
109 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_HIGH( \
110 id)
111#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_MID_LOW(id) \
112 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_MID_LOW( \
113 id)
114#define FLEXCAN_RX_FIFO_STD_FILTER_TYPE_C_LOW(id) \
115 FLEXCAN_RX_FIFO_STD_MASK_TYPE_C_LOW( \
116 id)
117#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_A(id, rtr, ide) \
118 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_A(id, rtr, ide)
119#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_HIGH(id, rtr, ide) \
120 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_HIGH( \
121 id, rtr, ide)
122#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_B_LOW(id, rtr, ide) \
123 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_B_LOW( \
124 id, rtr, ide)
125#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_HIGH(id) \
126 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_HIGH( \
127 id)
128#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_HIGH(id) \
129 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_HIGH( \
130 id)
131#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_MID_LOW(id) \
132 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_MID_LOW( \
133 id)
134#define FLEXCAN_RX_FIFO_EXT_FILTER_TYPE_C_LOW(id) \
135 FLEXCAN_RX_FIFO_EXT_MASK_TYPE_C_LOW(id)
137#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
139#define ENHANCED_RX_FIFO_FSCH(x) (((uint32_t)(((uint32_t)(x)) << 30)) & 0xC0000000U)
140#define RTR_STD_HIGH(x) (((uint32_t)(((uint32_t)(x)) << 27)) & 0x08000000U)
141#define RTR_STD_LOW(x) (((uint32_t)(((uint32_t)(x)) << 11)) & 0x00000800U)
142#define RTR_EXT(x) (((uint32_t)(((uint32_t)(x)) << 29)) & 0x40000000U)
143#define ID_STD_LOW(id) (((uint32_t)id) & 0x7FFU)
144#define ID_STD_HIGH(id) (((uint32_t)(((uint32_t)(id)) << 16)) & 0x07FF0000U)
145#define ID_EXT(id) (((uint32_t)id) & 0x1FFFFFFFU)
146
148#define FLEXCAN_ENHANCED_RX_FIFO_STD_MASK_AND_FILTER(id, rtr, id_mask, rtr_mask) \
149 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_STD_HIGH(rtr) | ID_STD_HIGH(id) | RTR_STD_LOW(rtr_mask) | ID_STD_LOW(id_mask))
151#define FLEXCAN_ENHANCED_RX_FIFO_STD_FILTER_WITH_RANGE(id_upper, rtr, id_lower, rtr_mask) \
152 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_STD_HIGH(rtr) | ID_STD_HIGH(id_upper) | RTR_STD_LOW(rtr_mask) | \
153 ID_STD_LOW(id_lower))
155#define FLEXCAN_ENHANCED_RX_FIFO_STD_TWO_FILTERS(id1, rtr1, id2, rtr2) \
156 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_STD_HIGH(rtr1) | ID_STD_HIGH(id1) | RTR_STD_LOW(rtr2) | ID_STD_LOW(id2))
158#define FLEXCAN_ENHANCED_RX_FIFO_EXT_MASK_AND_FILTER_LOW(id, rtr) \
159 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_EXT(rtr) | ID_EXT(id))
161#define FLEXCAN_ENHANCED_RX_FIFO_EXT_MASK_AND_FILTER_HIGH(id_mask, rtr_mask) \
162 (ENHANCED_RX_FIFO_FSCH(0x0) | RTR_EXT(rtr_mask) | ID_EXT(id_mask))
164#define FLEXCAN_ENHANCED_RX_FIFO_EXT_FILTER_WITH_RANGE_LOW(id_upper, rtr) \
165 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_EXT(rtr) | ID_EXT(id_upper))
167#define FLEXCAN_ENHANCED_RX_FIFO_EXT_FILTER_WITH_RANGE_HIGH(id_lower, rtr_mask) \
168 (ENHANCED_RX_FIFO_FSCH(0x1) | RTR_EXT(rtr_mask) | ID_EXT(id_lower))
170#define FLEXCAN_ENHANCED_RX_FIFO_EXT_TWO_FILTERS_LOW(id2, rtr2) \
171 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_EXT(rtr2) | ID_EXT(id2))
173#define FLEXCAN_ENHANCED_RX_FIFO_EXT_TWO_FILTERS_HIGH(id1, rtr1) \
174 (ENHANCED_RX_FIFO_FSCH(0x2) | RTR_EXT(rtr1) | ID_EXT(id1))
175#endif
176
177#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
179#define FLEXCAN_PN_STD_MASK(id, rtr) \
180 ((uint32_t)((uint32_t)(rtr) << CAN_FLT_ID1_FLT_RTR_SHIFT) | \
181 FLEXCAN_ID_STD(id))
182#define FLEXCAN_PN_EXT_MASK(id, rtr) \
183 ((uint32_t)CAN_FLT_ID1_FLT_IDE_MASK | (uint32_t)((uint32_t)(rtr) << CAN_FLT_ID1_FLT_RTR_SHIFT) | \
184 FLEXCAN_ID_EXT(id))
185#endif
186
188#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
189#define FLEXCAN_PN_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0x3000000000000U)
190#define FLEXCAN_PN_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0x00030000U)
191#define FLEXCAN_PN_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 16)) & 0x300000000U)
192#define FLEXCAN_PN_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 16)) & 0x00030000U)
193#endif
194#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
195#define FLEXCAN_EFIFO_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0xF000000000000000U)
196#define FLEXCAN_EFIFO_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0xF0000000U)
197#define FLEXCAN_EFIFO_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 32)) & 0xF003000000000000U)
198#define FLEXCAN_EFIFO_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 32)) & 0xF0030000U)
199#endif
200#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
201#define FLEXCAN_MECR_INT_MASK(x) (((uint64_t)(((uint64_t)(x)) << 16)) & 0xD00000000U)
202#define FLEXCAN_MECR_INT_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 16)) & 0x000D0000U)
203#define FLEXCAN_MECR_STATUS_MASK(x) (((uint64_t)(((uint64_t)(x)) << 34)) & 0x34003400000000U)
204#define FLEXCAN_MECR_STATUS_UNMASK(x) (((uint32_t)(((uint64_t)(x)) >> 34)) & 0x000D000DU)
205#endif
206
207#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
208#define FLEXCAN_ERROR_AND_STATUS_INIT_FLAG \
209 ((uint32_t)kFLEXCAN_ErrorOverrunFlag | (uint32_t)kFLEXCAN_FDErrorIntFlag | (uint32_t)kFLEXCAN_BusoffDoneIntFlag | \
210 (uint32_t)kFLEXCAN_TxWarningIntFlag | (uint32_t)kFLEXCAN_RxWarningIntFlag | (uint32_t)kFLEXCAN_BusOffIntFlag | \
211 (uint32_t)kFLEXCAN_ErrorIntFlag | FLEXCAN_MEMORY_ERROR_INIT_FLAG)
212#else
213#define FLEXCAN_ERROR_AND_STATUS_INIT_FLAG \
214 ((uint32_t)kFLEXCAN_TxWarningIntFlag | (uint32_t)kFLEXCAN_RxWarningIntFlag | (uint32_t)kFLEXCAN_BusOffIntFlag | \
215 (uint32_t)kFLEXCAN_ErrorIntFlag | FLEXCAN_MEMORY_ERROR_INIT_FLAG)
216#endif
217#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
218#define FLEXCAN_WAKE_UP_FLAG \
219 ((uint32_t)kFLEXCAN_WakeUpIntFlag | (uint64_t)kFLEXCAN_PNMatchIntFlag | (uint64_t)kFLEXCAN_PNTimeoutIntFlag)
220#else
221#define FLEXCAN_WAKE_UP_FLAG ((uint32_t)kFLEXCAN_WakeUpIntFlag)
222#endif
223#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
224#define FLEXCAN_MEMORY_ERROR_INIT_FLAG ((uint64_t)kFLEXCAN_AllMemoryErrorFlag)
225#else
226#define FLEXCAN_MEMORY_ERROR_INIT_FLAG (0U)
227#endif
228
229#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
230#define FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG \
231 ((uint64_t)kFLEXCAN_ERxFifoUnderflowIntFlag | (uint64_t)kFLEXCAN_ERxFifoOverflowIntFlag | \
232 (uint64_t)kFLEXCAN_ERxFifoWatermarkIntFlag | (uint64_t)kFLEXCAN_ERxFifoDataAvlIntFlag)
233#endif
235#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
236#define E_RX_FIFO(base) ((uintptr_t)(base) + 0x2000U)
237#else
238#define FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG (0U)
239#endif
241enum
242{
243 kStatus_FLEXCAN_TxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 0),
244 kStatus_FLEXCAN_TxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 1),
245 kStatus_FLEXCAN_TxSwitchToRx = MAKE_STATUS(
246 kStatusGroup_FLEXCAN, 2),
247 kStatus_FLEXCAN_RxBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 3),
248 kStatus_FLEXCAN_RxIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 4),
249 kStatus_FLEXCAN_RxOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 5),
250 kStatus_FLEXCAN_RxFifoBusy = MAKE_STATUS(kStatusGroup_FLEXCAN, 6),
251 kStatus_FLEXCAN_RxFifoIdle = MAKE_STATUS(kStatusGroup_FLEXCAN, 7),
252 kStatus_FLEXCAN_RxFifoOverflow = MAKE_STATUS(kStatusGroup_FLEXCAN, 8),
253 kStatus_FLEXCAN_RxFifoWarning = MAKE_STATUS(kStatusGroup_FLEXCAN, 9),
255 MAKE_STATUS(kStatusGroup_FLEXCAN, 10),
256 kStatus_FLEXCAN_ErrorStatus = MAKE_STATUS(kStatusGroup_FLEXCAN, 11),
257 kStatus_FLEXCAN_WakeUp = MAKE_STATUS(kStatusGroup_FLEXCAN, 12),
258 kStatus_FLEXCAN_UnHandled = MAKE_STATUS(kStatusGroup_FLEXCAN, 13),
259 kStatus_FLEXCAN_RxRemote = MAKE_STATUS(kStatusGroup_FLEXCAN, 14),
260#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
261 kStatus_FLEXCAN_RxFifoUnderflow =
262 MAKE_STATUS(kStatusGroup_FLEXCAN, 15),
263#endif
264};
265
272
279
291
298
309
310#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
314typedef enum _flexcan_mb_size
315{
316 kFLEXCAN_8BperMB = 0x0U,
317 kFLEXCAN_16BperMB = 0x1U,
318 kFLEXCAN_32BperMB = 0x2U,
319 kFLEXCAN_64BperMB = 0x3U,
320} flexcan_mb_size_t;
321
330enum _flexcan_fd_frame_length
331{
332 kFLEXCAN_0BperFrame = 0x0U,
333 kFLEXCAN_1BperFrame,
334 kFLEXCAN_2BperFrame,
335 kFLEXCAN_3BperFrame,
336 kFLEXCAN_4BperFrame,
337 kFLEXCAN_5BperFrame,
338 kFLEXCAN_6BperFrame,
339 kFLEXCAN_7BperFrame,
340 kFLEXCAN_8BperFrame,
341 kFLEXCAN_12BperFrame,
342 kFLEXCAN_16BperFrame,
343 kFLEXCAN_20BperFrame,
344 kFLEXCAN_24BperFrame,
345 kFLEXCAN_32BperFrame,
346 kFLEXCAN_48BperFrame,
347 kFLEXCAN_64BperFrame,
348};
349#endif
350
351#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
353typedef enum _flexcan_efifo_dma_per_read_length
354{
355 kFLEXCAN_1WordPerRead = 0x0U,
356 kFLEXCAN_2WordPerRead,
357 kFLEXCAN_3WordPerRead,
358 kFLEXCAN_4WordPerRead,
359 kFLEXCAN_5WordPerRead,
360 kFLEXCAN_6WordPerRead,
361 kFLEXCAN_7WordPerRead,
362 kFLEXCAN_8WordPerRead,
363 kFLEXCAN_9WordPerRead,
364 kFLEXCAN_10WordPerRead,
365 kFLEXCAN_11WordPerRead,
366 kFLEXCAN_12WordPerRead,
367 kFLEXCAN_13WordPerRead,
368 kFLEXCAN_14WordPerRead,
369 kFLEXCAN_15WordPerRead,
370 kFLEXCAN_16WordPerRead,
371 kFLEXCAN_17WordPerRead,
372 kFLEXCAN_18WordPerRead,
373 kFLEXCAN_19WordPerRead
374} flexcan_efifo_dma_per_read_length_t;
375#endif
376
389
397{
398 kFLEXCAN_BusOffInterruptEnable = CAN_CTRL1_BOFFMSK_MASK,
399 kFLEXCAN_ErrorInterruptEnable = CAN_CTRL1_ERRMSK_MASK,
400 kFLEXCAN_TxWarningInterruptEnable = CAN_CTRL1_TWRNMSK_MASK,
401 kFLEXCAN_RxWarningInterruptEnable = CAN_CTRL1_RWRNMSK_MASK,
402 kFLEXCAN_WakeUpInterruptEnable = CAN_MCR_WAKMSK_MASK,
403#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
404 kFLEXCAN_FDErrorInterruptEnable = CAN_CTRL2_ERRMSK_FAST_MASK,
405#endif
406#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
408 kFLEXCAN_PNMatchWakeUpInterruptEnable = FLEXCAN_PN_INT_MASK(CAN_CTRL1_PN_WTOF_MSK_MASK),
410 kFLEXCAN_PNTimeoutWakeUpInterruptEnable = FLEXCAN_PN_INT_MASK(CAN_CTRL1_PN_WUMF_MSK_MASK),
411#endif
412#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
414 kFLEXCAN_ERxFifoUnderflowInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFUFWIE_MASK),
416 kFLEXCAN_ERxFifoOverflowInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFOVFIE_MASK),
418 kFLEXCAN_ERxFifoWatermarkInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFWMIIE_MASK),
420 kFLEXCAN_ERxFifoDataAvlInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFDAIE_MASK),
421#endif
422#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
424 kFLEXCAN_HostAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_HANCEI_MSK_MASK),
426 kFLEXCAN_FlexCanAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_FANCEI_MSK_MASK),
428 kFLEXCAN_HostOrFlexCanCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_CEI_MSK_MASK),
429#endif
430};
431
440{
441#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
442 kFLEXCAN_ErrorOverrunFlag = CAN_ESR1_ERROVR_MASK,
443 kFLEXCAN_FDErrorIntFlag = CAN_ESR1_ERRINT_FAST_MASK,
444 kFLEXCAN_BusoffDoneIntFlag = CAN_ESR1_BOFFDONEINT_MASK,
445#endif
446 kFLEXCAN_SynchFlag = CAN_ESR1_SYNCH_MASK,
447 kFLEXCAN_TxWarningIntFlag = CAN_ESR1_TWRNINT_MASK,
448 kFLEXCAN_RxWarningIntFlag = CAN_ESR1_RWRNINT_MASK,
449 kFLEXCAN_IdleFlag = CAN_ESR1_IDLE_MASK,
450 kFLEXCAN_FaultConfinementFlag = CAN_ESR1_FLTCONF_MASK,
451 kFLEXCAN_TransmittingFlag = CAN_ESR1_TX_MASK,
452 kFLEXCAN_ReceivingFlag = CAN_ESR1_RX_MASK,
453 kFLEXCAN_BusOffIntFlag = CAN_ESR1_BOFFINT_MASK,
454 kFLEXCAN_ErrorIntFlag = CAN_ESR1_ERRINT_MASK,
455 kFLEXCAN_WakeUpIntFlag = CAN_ESR1_WAKINT_MASK,
456 kFLEXCAN_ErrorFlag =
457 (uint32_t)(
458#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
459 CAN_ESR1_STFERR_FAST_MASK | CAN_ESR1_FRMERR_FAST_MASK | CAN_ESR1_CRCERR_FAST_MASK |
460 CAN_ESR1_BIT0ERR_FAST_MASK | CAN_ESR1_BIT1ERR_FAST_MASK | CAN_ESR1_ERROVR_MASK |
461#endif
462 CAN_ESR1_TXWRN_MASK | CAN_ESR1_RXWRN_MASK | CAN_ESR1_BIT1ERR_MASK | CAN_ESR1_BIT0ERR_MASK |
463 CAN_ESR1_ACKERR_MASK | CAN_ESR1_CRCERR_MASK | CAN_ESR1_FRMERR_MASK | CAN_ESR1_STFERR_MASK),
464#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
465 kFLEXCAN_PNMatchIntFlag = FLEXCAN_PN_STATUS_MASK(CAN_WU_MTC_WUMF_MASK),
466 kFLEXCAN_PNTimeoutIntFlag = FLEXCAN_PN_STATUS_MASK(CAN_WU_MTC_WTOF_MASK),
467#endif
468#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
469 kFLEXCAN_ERxFifoUnderflowIntFlag =
470 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFUFW_MASK),
471 kFLEXCAN_ERxFifoOverflowIntFlag =
472 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFOVF_MASK),
473 kFLEXCAN_ERxFifoWatermarkIntFlag =
474 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFWMI_MASK),
475 kFLEXCAN_ERxFifoDataAvlIntFlag =
476 FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFDA_MASK),
477 kFLEXCAN_ERxFifoEmptyFlag = FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFE_MASK),
478 kFLEXCAN_ERxFifoFullFlag = FLEXCAN_EFIFO_STATUS_MASK(CAN_ERFSR_ERFF_MASK),
479#endif
480#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
482 kFLEXCAN_HostAccessNonCorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_HANCEIF_MASK),
484 kFLEXCAN_FlexCanAccessNonCorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_FANCEIF_MASK),
486 kFLEXCAN_CorrectableErrorIntFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_CEIF_MASK),
488 kFLEXCAN_HostAccessNonCorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_HANCEIOF_MASK),
490 kFLEXCAN_FlexCanAccessNonCorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_FANCEIOF_MASK),
492 kFLEXCAN_CorrectableErrorOverrunFlag = FLEXCAN_MECR_INT_MASK(CAN_ERRSR_CEIOF_MASK),
494 kFLEXCAN_AllMemoryErrorFlag =
495 (kFLEXCAN_HostAccessNonCorrectableErrorIntFlag | kFLEXCAN_FlexCanAccessNonCorrectableErrorIntFlag |
496 kFLEXCAN_CorrectableErrorIntFlag | kFLEXCAN_HostAccessNonCorrectableErrorOverrunFlag |
497 kFLEXCAN_FlexCanAccessNonCorrectableErrorOverrunFlag | kFLEXCAN_CorrectableErrorOverrunFlag)
498#endif
499};
500
509{
510#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
511 kFLEXCAN_FDStuffingError = CAN_ESR1_STFERR_FAST_MASK,
512 kFLEXCAN_FDFormError = CAN_ESR1_FRMERR_FAST_MASK,
513 kFLEXCAN_FDCrcError = CAN_ESR1_CRCERR_FAST_MASK,
514 kFLEXCAN_FDBit0Error = CAN_ESR1_BIT0ERR_FAST_MASK,
515 kFLEXCAN_FDBit1Error = (int)CAN_ESR1_BIT1ERR_FAST_MASK,
516#endif
517 kFLEXCAN_TxErrorWarningFlag = CAN_ESR1_TXWRN_MASK,
518 kFLEXCAN_RxErrorWarningFlag = CAN_ESR1_RXWRN_MASK,
519 kFLEXCAN_StuffingError = CAN_ESR1_STFERR_MASK,
520 kFLEXCAN_FormError = CAN_ESR1_FRMERR_MASK,
521 kFLEXCAN_CrcError = CAN_ESR1_CRCERR_MASK,
522 kFLEXCAN_AckError = CAN_ESR1_ACKERR_MASK,
523 kFLEXCAN_Bit0Error = CAN_ESR1_BIT0ERR_MASK,
524 kFLEXCAN_Bit1Error = CAN_ESR1_BIT1ERR_MASK,
525};
526
535enum
536{
537 kFLEXCAN_RxFifoOverflowFlag = CAN_IFLAG1_BUF7I_MASK,
538 kFLEXCAN_RxFifoWarningFlag = CAN_IFLAG1_BUF6I_MASK,
539 kFLEXCAN_RxFifoFrameAvlFlag = CAN_IFLAG1_BUF5I_MASK,
540};
541
542#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
546typedef enum _flexcan_memory_error_type
547{
548 kFLEXCAN_CorrectableError = 0U,
549 kFLEXCAN_NonCorrectableError
550} flexcan_memory_error_type_t;
551
555typedef enum _flexcan_memory_access_type
556{
557 kFLEXCAN_MoveOutFlexCanAccess = 0U,
558 kFLEXCAN_MoveInAccess,
559 kFLEXCAN_TxArbitrationAccess,
560 kFLEXCAN_RxMatchingAccess,
561 kFLEXCAN_MoveOutHostAccess
562} flexcan_memory_access_type_t;
563
567typedef enum _flexcan_byte_error_syndrome
568{
569 kFLEXCAN_NoError = 0U,
570 kFLEXCAN_ParityBits0Error = 1U,
571 kFLEXCAN_ParityBits1Error = 2U,
572 kFLEXCAN_ParityBits2Error = 4U,
573 kFLEXCAN_ParityBits3Error = 8U,
574 kFLEXCAN_ParityBits4Error = 16U,
575 kFLEXCAN_DataBits0Error = 28U,
576 kFLEXCAN_DataBits1Error = 22U,
577 kFLEXCAN_DataBits2Error = 19U,
578 kFLEXCAN_DataBits3Error = 25U,
579 kFLEXCAN_DataBits4Error = 26U,
580 kFLEXCAN_DataBits5Error = 7U,
581 kFLEXCAN_DataBits6Error = 21U,
582 kFLEXCAN_DataBits7Error = 14U,
583 kFLEXCAN_AllZeroError = 6U,
584 kFLEXCAN_AllOneError = 31U,
585 kFLEXCAN_NonCorrectableErrors
586} flexcan_byte_error_syndrome_t;
587
595typedef struct _flexcan_memory_error_report_status
596{
597 flexcan_memory_error_type_t errorType;
598 flexcan_memory_access_type_t accessType;
599 uint16_t accessAddress;
600 uint32_t errorData;
601 struct
602 {
603 bool byteIsRead;
605 flexcan_byte_error_syndrome_t bitAffected;
606 } byteStatus[4];
607} flexcan_memory_error_report_status_t;
608#endif
609
610#if defined(__CC_ARM)
611#pragma anon_unions
612#endif
614typedef struct _flexcan_frame
615{
616 struct
617 {
618 uint32_t timestamp : 16;
619 uint32_t length : 4;
620 uint32_t type : 1;
621 uint32_t format : 1;
622 uint32_t : 1;
623 uint32_t idhit : 9;
624 };
625 struct
626 {
627 uint32_t id : 29;
628 uint32_t : 3;
629 };
630 union
631 {
632 struct
633 {
634 uint32_t dataWord0;
635 uint32_t dataWord1;
636 };
637 struct
638 {
639 uint8_t dataByte3;
640 uint8_t dataByte2;
641 uint8_t dataByte1;
642 uint8_t dataByte0;
643 uint8_t dataByte7;
644 uint8_t dataByte6;
645 uint8_t dataByte5;
646 uint8_t dataByte4;
647 };
648 };
650
651#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
657typedef struct _flexcan_fd_frame
658{
659 struct
660 {
661 uint32_t timestamp : 16;
662 uint32_t length : 4;
666 uint32_t type : 1;
667 uint32_t format : 1;
668 uint32_t srr : 1;
669 uint32_t : 6;
670 uint32_t esi : 1;
671 uint32_t brs : 1;
672 uint32_t edl : 1;
673 };
674 struct
675 {
676 uint32_t id : 29;
677 uint32_t : 3;
678 };
679 union
680 {
681 struct
682 {
683 uint32_t dataWord[16];
684 };
685 /* Note: the maximum databyte* below is actually 64, user can add them if needed,
686 or just use dataWord[*] instead. */
687 struct
688 {
689 uint8_t dataByte3;
690 uint8_t dataByte2;
691 uint8_t dataByte1;
692 uint8_t dataByte0;
693 uint8_t dataByte7;
694 uint8_t dataByte6;
695 uint8_t dataByte5;
696 uint8_t dataByte4;
697 };
698 };
699#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
703 uint32_t idhit;
705#endif
706} flexcan_fd_frame_t;
707#endif
708
711{
712 uint16_t preDivider;
713 uint8_t rJumpwidth;
714 uint8_t phaseSeg1;
715 uint8_t phaseSeg2;
716 uint8_t propSeg;
717#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
718 uint16_t fpreDivider;
719 uint8_t frJumpwidth;
720 uint8_t fphaseSeg1;
721 uint8_t fphaseSeg2;
722 uint8_t fpropSeg;
723#endif
725
730typedef struct _flexcan_config
731{
732 union
733 {
734 struct
735 {
736 uint32_t baudRate;
737#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
738 uint32_t baudRateFD;
739#endif
740 };
741 struct
742 {
743 uint32_t bitRate;
744#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
745 uint32_t bitRateFD;
746#endif
747 };
748 };
751 uint8_t maxMbNum;
758#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SUPV_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SUPV_SUPPORT)
761#endif
762#if (defined(FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_DOZE_MODE_SUPPORT)
763 bool enableDoze;
764#endif
765#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
766 bool enablePretendedeNetworking;
767#endif
768#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
769 bool enableMemoryErrorControl;
770 bool enableNonCorrectableErrorEnterFreeze;
772#endif
773#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG)
774 bool enableTransceiverDelayMeasure;
777#endif
778 flexcan_timing_config_t timingConfig; /* Protocol timing . */
780
797
798#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
800typedef enum _flexcan_pn_match_source
801{
802 kFLEXCAN_PNMatSrcID = 0U,
803 kFLEXCAN_PNMatSrcIDAndData,
804} flexcan_pn_match_source_t;
805
807typedef enum _flexcan_pn_match_mode
808{
809 kFLEXCAN_PNMatModeEqual = 0x0U,
810 kFLEXCAN_PNMatModeGreater,
812 kFLEXCAN_PNMatModeSmaller,
814 kFLEXCAN_PNMatModeRange,
816} flexcan_pn_match_mode_t;
817
824typedef struct _flexcan_pn_config
825{
826 bool enableTimeout;
827 uint16_t timeoutValue;
829 bool enableMatch;
830 flexcan_pn_match_source_t matchSrc;
831 uint8_t matchNum;
833 flexcan_pn_match_mode_t idMatchMode;
834 flexcan_pn_match_mode_t dataMatchMode;
835 uint32_t idLower;
837 uint32_t idUpper;
839 uint8_t lengthLower;
841 uint8_t lengthUpper;
843 union
844 {
848 struct
849 {
850 uint32_t lowerWord0;
851 uint32_t lowerWord1;
852 };
853 struct
854 {
855 uint8_t lowerByte3;
856 uint8_t lowerByte2;
857 uint8_t lowerByte1;
858 uint8_t lowerByte0;
859 uint8_t lowerByte7;
860 uint8_t lowerByte6;
861 uint8_t lowerByte5;
862 uint8_t lowerByte4;
863 };
864 };
865 union
866 {
869 struct
870 {
871 uint32_t upperWord0;
872 uint32_t upperWord1;
873 };
874 struct
875 {
876 uint8_t upperByte3;
877 uint8_t upperByte2;
878 uint8_t upperByte1;
879 uint8_t upperByte0;
880 uint8_t upperByte7;
881 uint8_t upperByte6;
882 uint8_t upperByte5;
883 uint8_t upperByte4;
884 };
885 };
886} flexcan_pn_config_t;
887#endif
888
897
898#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
900typedef struct _flexcan_enhanced_rx_fifo_std_id_filter
901{
902 uint32_t filterType : 2;
903 uint32_t : 2;
904 uint32_t rtr1 : 1;
908 uint32_t std1 : 11;
909 uint32_t : 4;
910 uint32_t rtr2 : 1;
911 uint32_t std2 : 11;
912} flexcan_enhanced_rx_fifo_std_id_filter_t;
913
915typedef struct _flexcan_enhanced_rx_fifo_ext_id_filter
916{
917 uint32_t filterType : 2;
918 uint32_t rtr1 : 1;
922 uint32_t std1 : 29;
923 uint32_t : 2;
924 uint32_t rtr2 : 1;
925 uint32_t std2 : 29;
926} flexcan_enhanced_rx_fifo_ext_id_filter_t;
928typedef struct _flexcan_enhanced_rx_fifo_config
929{
930 uint32_t *idFilterTable;
935 uint8_t idFilterPairNum;
938 uint8_t extendIdFilterNum;
941 uint8_t fifoWatermark;
943 flexcan_efifo_dma_per_read_length_t dmaPerReadLength;
946} flexcan_enhanced_rx_fifo_config_t;
947#endif
948
951{
952#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
953 flexcan_fd_frame_t *framefd;
954#endif
956 uint8_t mbIdx;
958
961{
962#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
963 flexcan_fd_frame_t *framefd;
964#endif
966 size_t frameNum;
968
971
982#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
983 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
984#define FLEXCAN_CALLBACK(x) \
985 void(x)(CAN_Type * base, flexcan_handle_t * handle, status_t status, uint64_t result, void *userData)
986typedef void (*flexcan_transfer_callback_t)(
987 CAN_Type *base, flexcan_handle_t *handle, status_t status, uint64_t result, void *userData);
988#else
989#define FLEXCAN_CALLBACK(x) \
990 void(x)(CAN_Type * base, flexcan_handle_t * handle, status_t status, uint32_t result, void *userData)
991typedef void (*flexcan_transfer_callback_t)(
992 CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData);
993#endif
994
997{
998 flexcan_transfer_callback_t callback;
999 void *userData;
1001 *volatile mbFrameBuf[CAN_WORD1_COUNT];
1002#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1003 flexcan_fd_frame_t
1004 *volatile mbFDFrameBuf[CAN_WORD1_COUNT];
1005#endif
1007#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1008 flexcan_fd_frame_t *volatile rxFifoFDFrameBuf;
1009#endif
1012 volatile uint8_t mbState[CAN_WORD1_COUNT];
1013 volatile uint8_t rxFifoState;
1014 volatile uint32_t timestamp[CAN_WORD1_COUNT];
1015};
1016
1017/******************************************************************************
1018 * API
1019 *****************************************************************************/
1020
1021#if defined(__cplusplus)
1022extern "C" {
1023#endif
1024
1030#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1043bool FLEXCAN_IsInstanceHasFDMode(CAN_Type *base);
1044#endif
1045
1053void FLEXCAN_EnterFreezeMode(CAN_Type *base);
1054
1062void FLEXCAN_ExitFreezeMode(CAN_Type *base);
1063
1070uint32_t FLEXCAN_GetInstance(CAN_Type *base);
1071
1087 uint32_t bitRate,
1088 uint32_t sourceClock_Hz,
1089 flexcan_timing_config_t *pTimingConfig);
1090
1116void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz);
1117
1118#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1135bool FLEXCAN_FDCalculateImprovedTimingValues(CAN_Type *base,
1136 uint32_t bitRate,
1137 uint32_t bitRateFD,
1138 uint32_t sourceClock_Hz,
1139 flexcan_timing_config_t *pTimingConfig);
1169void FLEXCAN_FDInit(
1170 CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz, flexcan_mb_size_t dataSize, bool brs);
1171#endif
1172
1181void FLEXCAN_Deinit(CAN_Type *base);
1182
1205
1224void FLEXCAN_SetTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig);
1225
1239status_t FLEXCAN_SetBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRate_Bps);
1240
1241#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1255void FLEXCAN_SetFDTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig);
1256
1269status_t FLEXCAN_SetFDBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRateN_Bps, uint32_t bitRateD_Bps);
1270#endif
1271
1281void FLEXCAN_SetRxMbGlobalMask(CAN_Type *base, uint32_t mask);
1282
1291void FLEXCAN_SetRxFifoGlobalMask(CAN_Type *base, uint32_t mask);
1292
1307void FLEXCAN_SetRxIndividualMask(CAN_Type *base, uint8_t maskIdx, uint32_t mask);
1308
1321void FLEXCAN_SetTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable);
1322
1323#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1336void FLEXCAN_SetFDTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable);
1337#endif
1338
1352void FLEXCAN_SetRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable);
1353
1354#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1368void FLEXCAN_SetFDRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable);
1369#endif
1370
1384void FLEXCAN_SetRxFifoConfig(CAN_Type *base, const flexcan_rx_fifo_config_t *pRxFifoConfig, bool enable);
1385
1386#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1401void FLEXCAN_SetEnhancedRxFifoConfig(CAN_Type *base, const flexcan_enhanced_rx_fifo_config_t *pConfig, bool enable);
1402#endif
1403
1404#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1413void FLEXCAN_SetPNConfig(CAN_Type *base, const flexcan_pn_config_t *pConfig);
1414#endif
1432#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1433 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1434 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1435static inline uint64_t FLEXCAN_GetStatusFlags(CAN_Type *base)
1436{
1437 uint64_t tempflag = (uint64_t)base->ESR1;
1438#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1439 /* Get PN Wake Up status. */
1440 tempflag |= FLEXCAN_PN_STATUS_MASK(base->WU_MTC);
1441#endif
1442#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1443 /* Get Enhanced Rx FIFO status. */
1444 tempflag |= FLEXCAN_EFIFO_STATUS_MASK(base->ERFSR);
1445#endif
1446#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1447 /* Get Memory Error status. */
1448 tempflag |= FLEXCAN_MECR_STATUS_MASK(base->ERRSR);
1449#endif
1450 return tempflag;
1451}
1452#else
1453static inline uint32_t FLEXCAN_GetStatusFlags(CAN_Type *base)
1454{
1455 return base->ESR1;
1456}
1457#endif
1467#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1468 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1469 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1470static inline void FLEXCAN_ClearStatusFlags(CAN_Type *base, uint64_t mask)
1471{
1472#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1473 /* Clear PN Wake Up status. */
1474 base->WU_MTC = FLEXCAN_PN_STATUS_UNMASK(mask);
1475#endif
1476#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1477 /* Clear Enhanced Rx FIFO status. */
1478 base->ERFSR = FLEXCAN_EFIFO_STATUS_UNMASK(mask);
1479#endif
1480#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1481 /* Clear Memory Error status. */
1482 base->ERRSR = FLEXCAN_MECR_STATUS_UNMASK(mask);
1483#endif
1484 base->ESR1 = (uint32_t)(mask & 0xFFFFFFFFU);
1485}
1486#else
1487static inline void FLEXCAN_ClearStatusFlags(CAN_Type *base, uint32_t mask)
1488{
1489 /* Write 1 to clear status flag. */
1490 base->ESR1 = mask;
1491}
1492#endif
1503static inline void FLEXCAN_GetBusErrCount(CAN_Type *base, uint8_t *txErrBuf, uint8_t *rxErrBuf)
1504{
1505 if (NULL != txErrBuf)
1506 {
1507 *txErrBuf = (uint8_t)((base->ECR & CAN_ECR_TXERRCNT_MASK) >> CAN_ECR_TXERRCNT_SHIFT);
1508 }
1509
1510 if (NULL != rxErrBuf)
1511 {
1512 *rxErrBuf = (uint8_t)((base->ECR & CAN_ECR_RXERRCNT_MASK) >> CAN_ECR_RXERRCNT_SHIFT);
1513 }
1514}
1515
1525#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1526static inline uint64_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint64_t mask)
1527#else
1528static inline uint32_t FLEXCAN_GetMbStatusFlags(CAN_Type *base, uint32_t mask)
1529#endif
1530{
1531#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1532 uint64_t tempflag = (uint64_t)base->IFLAG1;
1533 return (tempflag | (((uint64_t)base->IFLAG2) << 32)) & mask;
1534#else
1535 return (base->IFLAG1 & mask);
1536#endif
1537}
1538
1539#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1549static inline uint64_t FLEXCAN_GetHigh64MbStatusFlags(CAN_Type *base, uint64_t mask)
1550{
1551 uint64_t tempflag = 0U;
1552#if defined(CAN_IFLAG3_BUF95TO64_MASK)
1553 tempflag |= (uint64_t)base->IFLAG3;
1554#endif
1555#if defined(CAN_IFLAG4_BUF127TO96_MASK)
1556 tempflag |= (uint64_t)base->IFLAG4;
1557#endif
1558 return (tempflag & mask);
1559}
1560#endif
1561
1570#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1571static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint64_t mask)
1572#else
1573static inline void FLEXCAN_ClearMbStatusFlags(CAN_Type *base, uint32_t mask)
1574#endif
1575{
1576#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1577 base->IFLAG1 = (uint32_t)(mask & 0xFFFFFFFFU);
1578 base->IFLAG2 = (uint32_t)(mask >> 32);
1579#else
1580 base->IFLAG1 = mask;
1581#endif
1582}
1583
1584#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1593static inline void FLEXCAN_ClearHigh64MbStatusFlags(CAN_Type *base, uint64_t mask)
1594{
1595#if defined(CAN_IFLAG3_BUF95TO64_MASK)
1596 base->IFLAG3 = (uint32_t)(mask & 0xFFFFFFFFU);
1597#endif
1598#if defined(CAN_IFLAG4_BUF127TO96_MASK)
1599 base->IFLAG4 = (uint32_t)(mask >> 32U);
1600#endif
1601}
1602#endif
1603
1604#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1613void FLEXCAN_GetMemoryErrorReportStatus(CAN_Type *base, flexcan_memory_error_report_status_t *errorStatus);
1614#endif
1615
1616#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1626static inline uint8_t FLEXCAN_GetPNMatchCount(CAN_Type *base)
1627{
1628 return (uint8_t)((base->WU_MTC & CAN_WU_MTC_MCOUNTER_MASK) >> CAN_WU_MTC_MCOUNTER_SHIFT);
1629}
1630#endif
1631
1632#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1641static inline uint32_t FLEXCAN_GetEnhancedFifoDataCount(CAN_Type *base)
1642{
1643 return (base->ERFSR & CAN_ERFSR_ERFEL_MASK);
1644}
1645#endif
1662#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1663 (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) || \
1664 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1665static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint64_t mask)
1666#else
1667static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint32_t mask)
1668#endif
1669{
1670 uint32_t primask = DisableGlobalIRQ();
1671
1672 /* Solve Self Wake Up interrupt. */
1673 base->MCR |= (uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1674
1675#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1676 if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))
1677 {
1678 /* Solve CAN FD frames data phase error interrupt. */
1679 base->CTRL2 |= (uint32_t)(mask & (uint32_t)kFLEXCAN_FDErrorInterruptEnable);
1680 }
1681#endif
1682
1683#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1684 /* Solve PN Wake Up interrupt. */
1685 base->CTRL1_PN |= FLEXCAN_PN_INT_UNMASK(mask);
1686#endif
1687
1688#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1689 /* Solve Enhanced Rx FIFO interrupt. */
1690 base->ERFIER |= FLEXCAN_EFIFO_INT_UNMASK(mask);
1691#endif
1692
1693#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1694 /* Solve Memory Error interrupt. */
1695 base->MECR |= FLEXCAN_MECR_INT_UNMASK(mask);
1696#endif
1697
1698 /* Solve interrupt enable bits in CTRL1 register. */
1699 base->CTRL1 |=
1700 (uint32_t)(mask & ((uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
1702
1703 EnableGlobalIRQ(primask);
1704}
1705
1715#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE) || \
1716 (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1717static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint64_t mask)
1718#else
1719static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint32_t mask)
1720#endif
1721{
1722 uint32_t primask = DisableGlobalIRQ();
1723
1724 /* Solve Wake Up Interrupt. */
1725 base->MCR &= ~(uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1726
1727#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1728 if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))
1729 {
1730 /* Solve CAN FD frames data phase error interrupt. */
1731 base->CTRL2 &= ~(uint32_t)(mask & (uint32_t)kFLEXCAN_FDErrorInterruptEnable);
1732 }
1733#endif
1734
1735#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
1736 /* Solve PN Wake Up Interrupt. */
1737 base->CTRL1_PN &= ~FLEXCAN_PN_STATUS_UNMASK(mask);
1738#endif
1739
1740#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
1741 /* Solve Enhanced Rx FIFO interrupt. */
1742 base->ERFIER &= ~FLEXCAN_EFIFO_INT_UNMASK(mask);
1743#endif
1744
1745#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
1746 /* Solve Memory Error Interrupt. */
1747 base->MECR &= ~FLEXCAN_MECR_STATUS_UNMASK(mask);
1748#endif
1749
1750 /* Solve interrupt enable bits in CTRL1 register. */
1751 base->CTRL1 &=
1752 ~(uint32_t)(mask & ((uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
1754
1755 EnableGlobalIRQ(primask);
1756}
1757
1766#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1767static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint64_t mask)
1768#else
1769static inline void FLEXCAN_EnableMbInterrupts(CAN_Type *base, uint32_t mask)
1770#endif
1771{
1772 uint32_t primask = DisableGlobalIRQ();
1773
1774#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1775 base->IMASK1 |= (uint32_t)(mask & 0xFFFFFFFFU);
1776 base->IMASK2 |= (uint32_t)(mask >> 32);
1777#else
1778 base->IMASK1 |= mask;
1779#endif
1780 EnableGlobalIRQ(primask);
1781}
1782
1783#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1792static inline void FLEXCAN_EnableHigh64MbInterrupts(CAN_Type *base, uint64_t mask)
1793{
1794 uint32_t primask = DisableGlobalIRQ();
1795
1796#if defined(CAN_IMASK3_BUF95TO64M_MASK)
1797 base->IMASK3 |= (uint32_t)(mask & 0xFFFFFFFFU);
1798#endif
1799#if defined(CAN_IMASK4_BUF127TO96_MASK)
1800 base->IMASK4 |= (uint32_t)(mask >> 32U);
1801#endif
1802 EnableGlobalIRQ(primask);
1803}
1804#endif
1805
1814#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1815static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint64_t mask)
1816#else
1817static inline void FLEXCAN_DisableMbInterrupts(CAN_Type *base, uint32_t mask)
1818#endif
1819{
1820 uint32_t primask = DisableGlobalIRQ();
1821
1822#if (defined(FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER)) && (FSL_FEATURE_FLEXCAN_HAS_EXTENDED_FLAG_REGISTER > 0)
1823 base->IMASK1 &= ~((uint32_t)(mask & 0xFFFFFFFFU));
1824 base->IMASK2 &= ~((uint32_t)(mask >> 32));
1825#else
1826 base->IMASK1 &= ~mask;
1827#endif
1828 EnableGlobalIRQ(primask);
1829}
1830
1831#if (defined(FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB) && FSL_FEATURE_FLEXCAN_HAS_MORE_THAN_64_MB)
1840static inline void FLEXCAN_DisableHigh64MbInterrupts(CAN_Type *base, uint64_t mask)
1841{
1842 uint32_t primask = DisableGlobalIRQ();
1843
1844#if defined(CAN_IMASK3_BUF95TO64M_MASK)
1845 base->IMASK3 &= ~((uint32_t)(mask & 0xFFFFFFFFU));
1846#endif
1847#if defined(CAN_IMASK4_BUF127TO96_MASK)
1848 base->IMASK4 &= ~((uint32_t)(mask >> 32U));
1849#endif
1850 EnableGlobalIRQ(primask);
1851}
1852#endif
1853
1856#if (defined(FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA) && FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA)
1870void FLEXCAN_EnableRxFifoDMA(CAN_Type *base, bool enable);
1871
1880static inline uintptr_t FLEXCAN_GetRxFifoHeadAddr(CAN_Type *base)
1881{
1882 return (uintptr_t) & (base->MB[0].CS);
1883}
1884
1886#endif /* FSL_FEATURE_FLEXCAN_HAS_RX_FIFO_DMA */
1887
1901static inline void FLEXCAN_Enable(CAN_Type *base, bool enable)
1902{
1903 if (enable)
1904 {
1905 base->MCR &= ~CAN_MCR_MDIS_MASK;
1906
1907 /* Wait FlexCAN exit from low-power mode. */
1908 while (0U != (base->MCR & CAN_MCR_LPMACK_MASK))
1909 {
1910 }
1911 }
1912 else
1913 {
1914 base->MCR |= CAN_MCR_MDIS_MASK;
1915
1916 /* Wait FlexCAN enter low-power mode. */
1917 while (0U == (base->MCR & CAN_MCR_LPMACK_MASK))
1918 {
1919 }
1920 }
1921}
1922
1936status_t FLEXCAN_WriteTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_frame_t *pTxFrame);
1937
1953status_t FLEXCAN_ReadRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
1954
1955#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
1969status_t FLEXCAN_WriteFDTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_fd_frame_t *pTxFrame);
1970
1986status_t FLEXCAN_ReadFDRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
1987#endif
1988
1999status_t FLEXCAN_ReadRxFifo(CAN_Type *base, flexcan_frame_t *pRxFrame);
2000
2001#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2012status_t FLEXCAN_ReadEnhancedRxFifo(CAN_Type *base, flexcan_fd_frame_t *pRxFrame);
2013#endif
2014
2015#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
2029status_t FLEXCAN_ReadPNWakeUpMB(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
2030#endif
2038#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
2050status_t FLEXCAN_TransferFDSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pTxFrame);
2051
2064status_t FLEXCAN_TransferFDReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
2065
2079status_t FLEXCAN_TransferFDSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2080
2093status_t FLEXCAN_TransferFDReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
2094
2104void FLEXCAN_TransferFDAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2105
2115void FLEXCAN_TransferFDAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2116#endif
2117
2129status_t FLEXCAN_TransferSendBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pTxFrame);
2130
2143status_t FLEXCAN_TransferReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_frame_t *pRxFrame);
2144
2155status_t FLEXCAN_TransferReceiveFifoBlocking(CAN_Type *base, flexcan_frame_t *pRxFrame);
2156
2157#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2168status_t FLEXCAN_TransferReceiveEnhancedFifoBlocking(CAN_Type *base, flexcan_fd_frame_t *pRxFrame);
2169#endif
2170
2184 flexcan_handle_t *handle,
2185 flexcan_transfer_callback_t callback,
2186 void *userData);
2187
2202
2216
2230 flexcan_handle_t *handle,
2231 flexcan_fifo_transfer_t *pFifoXfer);
2232
2243status_t FLEXCAN_TransferGetReceiveFifoCount(CAN_Type *base, flexcan_handle_t *handle, size_t *count);
2244
2245#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2258status_t FLEXCAN_TransferReceiveEnhancedFifoNonBlocking(CAN_Type *base,
2259 flexcan_handle_t *handle,
2260 flexcan_fifo_transfer_t *pFifoXfer);
2261
2272static inline status_t FLEXCAN_TransferGetReceiveEnhancedFifoCount(CAN_Type *base,
2273 flexcan_handle_t *handle,
2274 size_t *count)
2275{
2276 return FLEXCAN_TransferGetReceiveFifoCount(base, handle, count);
2277}
2278#endif
2279
2298uint32_t FLEXCAN_GetTimeStamp(flexcan_handle_t *handle, uint8_t mbIdx);
2299
2309void FLEXCAN_TransferAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2310
2320void FLEXCAN_TransferAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
2321
2331
2332#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
2341void FLEXCAN_TransferAbortReceiveEnhancedFifo(CAN_Type *base, flexcan_handle_t *handle);
2342#endif
2343
2352void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle);
2353
2356#if defined(__cplusplus)
2357}
2358#endif
2359
2362#endif /* FSL_FLEXCAN_H_ */
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
@ 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
@ 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_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_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_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