KW45B41Z-EVK: CAN Transmission

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

KW45B41Z-EVK: CAN Transmission

595 次查看
priyanshua1
Contributor II

Hello NXP Support,

Currently I am working on NXP KW45B41Z-EVK board. My goal is to transmit CAN Frames from the BLE board. I have tried using SDK examples, but that dosen't provide direct interface with CAN.
I am not able transmit CAN frames. FYI I am using Technica CAN Capture Module.
Looking forward for your prompt assitance.
So, I have developed a custom application, below is the code for your reference:

#include "fsl_debug_console.h"
#include "fsl_flexcan.h"
#include "board.h"
#include "app.h"
 
/*******************************************************************************
 * Definitions
 ******************************************************************************/
/* Fix MISRA_C-2012 Rule 17.7. */
#define LOG_INFO (void)PRINTF
 
#ifndef USE_CANFD
#define USE_CANFD (1)
#endif
 
#ifndef EXAMPLE_CAN_BIT_RATE
#define EXAMPLE_CAN_BIT_RATE (500000U)
#endif
 
#ifndef EXAMPLE_CAN_BIT_RATE_FD
#define EXAMPLE_CAN_BIT_RATE_FD (2000000U)
#endif
#define USE_PHY_TJA1152 (1)
#if (defined(USE_CANFD) && USE_CANFD)
/*
 *    DWORD_IN_MB    DLC    BYTES_IN_MB             Maximum MBs
 *    2              8      kFLEXCAN_8BperMB    32(1 RAM block)  64(2 RAM block)  96(3 RAM block)
 *    4              10     kFLEXCAN_16BperMB   21(1 RAM block)  42(2 RAM block)  63(3 RAM block)
 *    8              13     kFLEXCAN_32BperMB   12(1 RAM block)  24(2 RAM block)  36(3 RAM block)
 *    16             15     kFLEXCAN_64BperMB   7(1 RAM block)   14(2 RAM block)  21(3 RAM block)
 *
 * Dword in each message buffer, Length of data in bytes, Payload size must align,
 * and the Message Buffers are limited corresponding to each payload configuration:
 */
#define DWORD_IN_MB (16)
#define DLC         (15)
#define BYTES_IN_MB kFLEXCAN_64BperMB
#else
#define DLC (8)
#endif
/*******************************************************************************
 * Prototypes
 ******************************************************************************/
 
/*******************************************************************************
 * Variables
 ******************************************************************************/
flexcan_handle_t flexcanHandle;
volatile bool txComplete = false;
flexcan_mb_transfer_t txXfer;
#if (defined(USE_CANFD) && USE_CANFD)
flexcan_fd_frame_t frame;
#else
flexcan_frame_t frame;
#endif
static const uint32_t kFlexcanTxId = 0x123U;
#if (defined(USE_CANFD) && USE_CANFD)
static const uint8_t kPayloadSize = 64U;
static const uint8_t kFrameLength = (uint8_t)DLC;
#else
static const uint8_t kPayloadSize = 8U;
static const uint8_t kFrameLength = (uint8_t)DLC;
#endif
 
/*******************************************************************************
 * Code
 ******************************************************************************/
/*!
 * @brief CAN transceiver configuration function
 */
static void FLEXCAN_PHY_Config(void)
{
/* Always ensure the transceiver standby pin is driven. */
    GPIO_PortSet(EXAMPLE_STB_RGPIO, 1u << EXAMPLE_STB_RGPIO_PIN);
 
#if (defined(USE_PHY_TJA1152) && USE_PHY_TJA1152)
    /* Initialize TJA1152. */
    /* STB=H, configuration CAN messages are expected from the local host via TXD pin. */
 
    /* Classical CAN messages with standard identifier 0x555 must be transmitted 
     * by the local host controller until acknowledged by the TJA1152 for
     * automatic bit rate detection. Do not set frame.brs = 1U to keep nominal
     * bit rate in CANFD frame data phase. */
    frame.id     = FLEXCAN_ID_STD(0x555);
    frame.format = (uint8_t)kFLEXCAN_FrameFormatStandard;
    frame.type   = (uint8_t)kFLEXCAN_FrameTypeData;
    frame.length = 0U;
    txXfer.mbIdx = (uint8_t)TX_MESSAGE_BUFFER_NUM;
#if (defined(USE_CANFD) && USE_CANFD)
    txXfer.framefd = &frame;
    (void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#else
    txXfer.frame = &frame;
    (void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#endif
    while (!txComplete)
    {
    };
    txComplete = false;
 
    /* Configuration of spoofing protection. */
    /* Add 0x321 and 0x123 to Transmission Whitelist. */
    frame.id     = FLEXCAN_ID_EXT(0x18DA00F1);
    frame.format = (uint8_t)kFLEXCAN_FrameFormatExtend;
    frame.type   = (uint8_t)kFLEXCAN_FrameTypeData;
    frame.length = 6U;
#if (defined(USE_CANFD) && USE_CANFD)
    frame.dataWord[0] = CAN_WORD_DATA_BYTE_0(0x10) | CAN_WORD_DATA_BYTE_1(0x00) | CAN_WORD_DATA_BYTE_2(0x33) |
                        CAN_WORD_DATA_BYTE_3(0x21);
    frame.dataWord[1] = CAN_WORD_DATA_BYTE_4(0x11) | CAN_WORD_DATA_BYTE_5(0x23);
    (void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer); 
#else
    frame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x10) | CAN_WORD0_DATA_BYTE_1(0x00) | CAN_WORD0_DATA_BYTE_2(0x33) |
                      CAN_WORD0_DATA_BYTE_3(0x21);
    frame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x11) | CAN_WORD1_DATA_BYTE_5(0x23);
    (void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#endif
    while (!txComplete)
    {
    };
    txComplete = false;
 
    /* Configuration of command message ID. */
    /* Reconfiguration is only accepted locally. Keep CONFIG_ID as default value 0x18DA00F1. */
    frame.length = 5U;
#if (defined(USE_CANFD) && USE_CANFD)
    frame.dataWord[0] = CAN_WORD_DATA_BYTE_0(0x60) | CAN_WORD_DATA_BYTE_1(0x98) | CAN_WORD_DATA_BYTE_2(0xDA) |
                        CAN_WORD_DATA_BYTE_3(0x00);
    frame.dataWord[1] = CAN_WORD_DATA_BYTE_4(0xF1);
    (void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#else
    frame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x60) | CAN_WORD0_DATA_BYTE_1(0x98) | CAN_WORD0_DATA_BYTE_2(0xDA) |
                      CAN_WORD0_DATA_BYTE_3(0x00);
    frame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0xF1); 
    (void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#endif
    while (!txComplete)
    {
    };
    txComplete = false;
 
    /* Leaving configuration mode. */
    /* Configuration into volatile memory only. */
    frame.length = 8U;
 
#if (defined(USE_CANFD) && USE_CANFD)
    frame.dataWord[0] = CAN_WORD_DATA_BYTE_0(0x71) | CAN_WORD_DATA_BYTE_1(0x02) | CAN_WORD_DATA_BYTE_2(0x03) |
                        CAN_WORD_DATA_BYTE_3(0x04);
    frame.dataWord[1] = CAN_WORD_DATA_BYTE_4(0x05) | CAN_WORD_DATA_BYTE_5(0x06) | CAN_WORD_DATA_BYTE_6(0x07) |
                        CAN_WORD_DATA_BYTE_7(0x08);
    (void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#else
    frame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x71) | CAN_WORD0_DATA_BYTE_1(0x02) | CAN_WORD0_DATA_BYTE_2(0x03) |
                      CAN_WORD0_DATA_BYTE_3(0x04);
    frame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x05) | CAN_WORD1_DATA_BYTE_5(0x06) | CAN_WORD1_DATA_BYTE_6(0x07) |
                      CAN_WORD1_DATA_BYTE_7(0x08);
    (void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#endif
    while (!txComplete)
    {
    };
    txComplete = false;
 
    LOG_INFO("Initialize TJA1152 successfully!\r\n\r\n");
 
    /* Initialize TJA1152 end. */
#endif
 
    /* Release transceiver standby so CANH/CANL are driven. */
    GPIO_PortClear(EXAMPLE_STB_RGPIO, 1u << EXAMPLE_STB_RGPIO_PIN);
}
 
/*!
 * @brief FlexCAN Call Back function
 */
static FLEXCAN_CALLBACK(flexcan_callback)
{
LOG_INFO("status: %d \n", status);
    switch (status)
    {
        case kStatus_FLEXCAN_TxIdle:
            if (TX_MESSAGE_BUFFER_NUM == result)
            {
                txComplete = true;
            }
            break;
 
        default:
            break;
    }
}
 
/*!
 * @brief Main function
 */
int main(void)
{
    flexcan_config_t flexcanConfig;
    uint8_t txCounter = 0U;
 
    /* Initialize board hardware. */
    BOARD_InitHardware(); 
 
    LOG_INFO("********* FLEXCAN Continuous TX EXAMPLE *********\r\n");
    LOG_INFO("    Message format: Standard (11 bit id)\r\n");
#if (defined(USE_CANFD) && USE_CANFD)
    LOG_INFO("    Frame type   : CAN FD with BRS\r\n");
    LOG_INFO("    Nominal/Data bit rates: %u / %u bps\r\n", EXAMPLE_CAN_BIT_RATE, EXAMPLE_CAN_BIT_RATE_FD);
    LOG_INFO("    Payload length        : %u bytes\r\n", kPayloadSize);
#else
    LOG_INFO("    Frame type   : Classical CAN\r\n");
    LOG_INFO("    Bit rate     : %u bps\r\n", EXAMPLE_CAN_BIT_RATE);
    LOG_INFO("    Payload length        : %u bytes\r\n", kPayloadSize);
#endif
    LOG_INFO("    Message buffer %d used for Tx.\r\n", TX_MESSAGE_BUFFER_NUM);
    LOG_INFO("    Interrupt Mode: Enabled\r\n");
    LOG_INFO("    Operation Mode: Continuous transmit\r\n");
    LOG_INFO("*********************************************\r\n\r\n");
    LOG_INFO("Starting continuous CAN transmissions on ID 0x%3x\r\n\r\n", kFlexcanTxId);
 
    /* Get FlexCAN module default Configuration. */
    /*
     * flexcanConfig.clkSrc                 = kFLEXCAN_ClkSrc0;
     * flexcanConfig.bitRate                = 1000000U;
     * flexcanConfig.bitRateFD              = 2000000U;
     * flexcanConfig.maxMbNum               = 16;
     * flexcanConfig.enableLoopBack         = false;
     * flexcanConfig.enableSelfWakeup       = false;
     * flexcanConfig.enableIndividMask      = false;
     * flexcanConfig.disableSelfReception   = false;
     * flexcanConfig.enableListenOnlyMode   = false;
     * flexcanConfig.enableDoze             = false;
     */
    FLEXCAN_GetDefaultConfig(&flexcanConfig);
 
    flexcanConfig.bitRate              = EXAMPLE_CAN_BIT_RATE;
    flexcanConfig.disableSelfReception = true;
#if (defined(USE_CANFD) && USE_CANFD)
    flexcanConfig.bitRateFD = EXAMPLE_CAN_BIT_RATE_FD;
#endif
 
#if defined(EXAMPLE_CAN_CLK_SOURCE)
    flexcanConfig.clksrc=EXAMPLE_CAN_CLK_SOURCE;
#endif
 
    /* If special quantum setting is needed, set the timing parameters. */
#if (defined(SET_CAN_QUANTUM) && SET_CAN_QUANTUM)
    flexcanConfig.timingConfig.phaseSeg1 = PSEG1;
    flexcanConfig.timingConfig.phaseSeg2 = PSEG2;
    flexcanConfig.timingConfig.propSeg   = PROPSEG;
#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
    flexcanConfig.timingConfig.fphaseSeg1 = FPSEG1;
    flexcanConfig.timingConfig.fphaseSeg2 = FPSEG2;
    flexcanConfig.timingConfig.fpropSeg   = FPROPSEG;
#endif
#endif
 
#if (defined(USE_IMPROVED_TIMING_CONFIG) && USE_IMPROVED_TIMING_CONFIG)
    flexcan_timing_config_t timing_config;
    memset(&timing_config, 0, sizeof(flexcan_timing_config_t));
#if (defined(USE_CANFD) && USE_CANFD)
    if (FLEXCAN_FDCalculateImprovedTimingValues(EXAMPLE_CAN, flexcanConfig.bitRate, flexcanConfig.bitRateFD,
                                                EXAMPLE_CAN_CLK_FREQ, &timing_config))
    {
        /* Update the improved timing configuration*/
        memcpy(&(flexcanConfig.timingConfig), &timing_config, sizeof(flexcan_timing_config_t));
    }
    else
    {
        LOG_INFO("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
    }
#else
    if (FLEXCAN_CalculateImprovedTimingValues(EXAMPLE_CAN, flexcanConfig.bitRate, EXAMPLE_CAN_CLK_FREQ, &timing_config))
    {
        /* Update the improved timing configuration*/
        memcpy(&(flexcanConfig.timingConfig), &timing_config, sizeof(flexcan_timing_config_t));
    }
    else
    {
        LOG_INFO("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
    }
#endif
#endif
 
#if (defined(USE_CANFD) && USE_CANFD)
    FLEXCAN_FDInit(EXAMPLE_CAN, &flexcanConfig, EXAMPLE_CAN_CLK_FREQ, BYTES_IN_MB, true);
#else
    FLEXCAN_Init(EXAMPLE_CAN, &flexcanConfig, EXAMPLE_CAN_CLK_FREQ);
#endif
 
    /* Create FlexCAN handle structure and set call back function. */
    FLEXCAN_TransferCreateHandle(EXAMPLE_CAN, &flexcanHandle, flexcan_callback, NULL);
 
    /* Setup Tx Message Buffer. */
#if (defined(USE_CANFD) && USE_CANFD)
    FLEXCAN_SetFDTxMbConfig(EXAMPLE_CAN, TX_MESSAGE_BUFFER_NUM, true);
#else
    FLEXCAN_SetTxMbConfig(EXAMPLE_CAN, TX_MESSAGE_BUFFER_NUM, true);
#endif
 
    /* Configure CAN transceiver */
    FLEXCAN_PHY_Config();
 
    while (true)
    {
        frame.id     = FLEXCAN_ID_STD(kFlexcanTxId);
        frame.format = (uint8_t)kFLEXCAN_FrameFormatStandard;
        frame.type   = (uint8_t)kFLEXCAN_FrameTypeData;
        frame.length = kFrameLength;
#if (defined(USE_CANFD) && USE_CANFD)
        frame.brs = 1U;
        frame.edl = 1U;
        for (uint8_t wordIdx = 0U; wordIdx < DWORD_IN_MB; wordIdx++)
        {
            uint8_t baseValue = (uint8_t)(wordIdx * 4U);
            frame.dataWord[wordIdx] = CAN_WORD_DATA_BYTE_0((uint32_t)txCounter + baseValue) |
                                      CAN_WORD_DATA_BYTE_1(0x55U + baseValue) |
                                      CAN_WORD_DATA_BYTE_2(0xAAU + baseValue) |
                                      CAN_WORD_DATA_BYTE_3(0xFFU - baseValue);
        }
#else
        frame.dataWord0 = CAN_WORD0_DATA_BYTE_0(txCounter) | CAN_WORD0_DATA_BYTE_1(0x55U) |
                          CAN_WORD0_DATA_BYTE_2(0xAAU) | CAN_WORD0_DATA_BYTE_3(0xFFU);
        frame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x11U) | CAN_WORD1_DATA_BYTE_5(0x22U) |
                          CAN_WORD1_DATA_BYTE_6(0x33U) | CAN_WORD1_DATA_BYTE_7(0x44U);
#endif
 
        txXfer.mbIdx = (uint8_t)TX_MESSAGE_BUFFER_NUM;
#if (defined(USE_CANFD) && USE_CANFD)
        txXfer.framefd = &frame;
        (void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#else
        txXfer.frame = &frame;
        (void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer);
#endif
 
        while (!txComplete)
        {
        };
        txComplete = false;
 
        txCounter++;
    }
}

 

0 项奖励
回复
1 回复

575 次查看
Ricardo_Zamora
NXP TechSupport
NXP TechSupport

Hello,

 

Hope you are doing well. Could you please clarify what do you mean with "dosen't provide direct interface with CAN"?

Could you try checking the J10 connector with an oscilloscope or analyzer.

I would recommend checking the flexcan_interrupt_transfer example on your board.

Please let me know your findings.

 

Best Regards,

Ricardo

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2178701%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EKW45B41Z-EVK%3A%20CAN%20%E5%8F%98%E9%80%9F%E5%99%A8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2178701%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%81%A9%E6%99%BA%E6%B5%A6%E6%94%AF%E6%8C%81%E4%BA%BA%E5%91%98%E4%BD%A0%E5%A5%BD%EF%BC%8C%3CBR%20%2F%3E%3CBR%20%2F%3E%E7%9B%AE%E5%89%8D%E6%88%91%E6%AD%A3%E5%9C%A8%E5%BC%80%E5%8F%91%E6%81%A9%E6%99%BA%E6%B5%A6%20KW45B41Z-EVK%20%E6%9D%BF%E3%80%82%E6%88%91%E7%9A%84%E7%9B%AE%E6%A0%87%E6%98%AF%E4%BB%8E%20BLE%20%E6%9D%BF%E4%B8%8A%E4%BC%A0%E8%BE%93%20CAN%20%E5%B8%A7%E3%80%82%E6%88%91%E6%9B%BE%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20SDK%20%E7%A4%BA%E4%BE%8B%EF%BC%8C%E4%BD%86%E5%AE%83%E4%B8%8D%E8%83%BD%E6%8F%90%E4%BE%9B%20CAN%20%E7%9A%84%E7%9B%B4%E6%8E%A5%E6%8E%A5%E5%8F%A3%E3%80%82%3CBR%20%2F%3E%E6%88%91%E6%97%A0%E6%B3%95%E4%BC%A0%E8%BE%93%20CAN%20%E5%B8%A7%E3%80%82%E4%BB%85%E4%BE%9B%E5%8F%82%E8%80%83%EF%BC%8C%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%20Technica%20CAN%20%E6%8D%95%E8%8E%B7%E6%A8%A1%E5%9D%97%E3%80%82%3CBR%20%2F%3E%E6%9C%9F%E5%BE%85%E6%82%A8%E7%9A%84%E5%8F%8A%E6%97%B6%E5%B8%AE%E5%8A%A9%E3%80%82%3CBR%20%2F%3E%E6%89%80%E4%BB%A5%EF%BC%8C%E6%88%91%E5%BC%80%E5%8F%91%E4%BA%86%E4%B8%80%E4%B8%AA%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%8C%E4%BB%A5%E4%B8%8B%E6%98%AF%E4%BB%A3%E7%A0%81%E4%BE%9B%E4%BD%A0%E5%8F%82%E8%80%83%EF%BC%9A%3C%2FP%3E%3CDIV%3E%23include%22fsl_debug_console.h%22%3C%2FDIV%3E%3CDIV%3E%23include%22fsl_flexcan.h%22%3C%2FDIV%3E%3CDIV%3E%23include%20%22board.h%22%3C%2FDIV%3E%3CDIV%3E%23include%22app.h%22%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*******************************************************************************%3C%2FDIV%3E%3CDIV%3E*%20%E5%AE%9A%E4%B9%89%3C%2FDIV%3E%3CDIV%3E******************************************************************************%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20%E4%BF%AE%E6%AD%A3%20MISRA_C-2012%20%E7%AC%AC%2017.7%20%E6%9D%A1%E8%A7%84%E5%88%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23define%20LOG_INFO%20(void)PRINTF%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23ifndef%20USE_CANFD%3C%2FDIV%3E%3CDIV%3E%23define%20USE_CANFD%20(1)%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23ifndef%20EXAMPLE_CAN_BIT_RATE%3C%2FDIV%3E%3CDIV%3E%23define%20EXAMPLE_CAN_BIT_RATE%20(500000U)%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23ifndef%20EXAMPLE_CAN_BIT_RATE_FD%3C%2FDIV%3E%3CDIV%3E%23define%20EXAMPLE_CAN_BIT_RATE_FD%20(2000000U)%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%23define%20USE_PHY_TJA1152%20(1)%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%2F*%3C%2FDIV%3E%3CDIV%3E*%20DWORD_IN_MB%20DLC%20BYTES_IN_MB%20%E6%9C%80%E5%A4%A7%20MB%20%E6%95%B0%3C%2FDIV%3E%3CDIV%3E*%202%208%20kFLEXCAN_8BperMB%2032%EF%BC%881%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2064%EF%BC%882%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2096%EF%BC%883%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%3C%2FDIV%3E%3CDIV%3E*%204%2010%20kFLEXCAN_16BperMB%2021%EF%BC%881%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2042%EF%BC%882%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2063%EF%BC%883%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%3C%2FDIV%3E%3CDIV%3E*%208%2013%20kFLEXCAN_32BperMB%2012%EF%BC%881%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2024%EF%BC%882%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2036%EF%BC%883%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%3C%2FDIV%3E%3CDIV%3E*%2016%2015%20kFLEXCAN_64BperMB%207%EF%BC%881%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2014%EF%BC%882%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%2021%EF%BC%883%20%E4%B8%AA%20RAM%20%E5%9D%97%EF%BC%89%3C%2FDIV%3E%3CDIV%3E*%3C%2FDIV%3E%3CDIV%3E*%20%E6%AF%8F%E4%B8%AA%E6%B6%88%E6%81%AF%E7%BC%93%E5%86%B2%E5%8C%BA%E4%B8%AD%E7%9A%84%20Dword%EF%BC%8C%E4%BB%A5%E5%AD%97%E8%8A%82%E4%B8%BA%E5%8D%95%E4%BD%8D%E7%9A%84%E6%95%B0%E6%8D%AE%E9%95%BF%E5%BA%A6%EF%BC%8C%E6%9C%89%E6%95%88%E8%B4%9F%E8%BD%BD%E5%A4%A7%E5%B0%8F%E5%BF%85%E9%A1%BB%E4%B8%80%E8%87%B4%EF%BC%8C%3C%2FDIV%3E%3CDIV%3E*%20%E4%BF%A1%E6%81%AF%E7%BC%93%E5%86%B2%E5%8C%BA%E7%9A%84%E9%99%90%E5%88%B6%E4%B8%8E%E6%AF%8F%E4%B8%AA%E6%9C%89%E6%95%88%E8%BD%BD%E8%8D%B7%E9%85%8D%E7%BD%AE%E7%9B%B8%E5%AF%B9%E5%BA%94%EF%BC%9A%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3E%23define%20DWORD_IN_MB%20(16)%3C%2FDIV%3E%3CDIV%3E%23define%20DLC%20(15)%3C%2FDIV%3E%3CDIV%3E%23define%20BYTES_IN_MB%20kFLEXCAN_64BperMB%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%23define%20DLC%20(8)%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%2F*******************************************************************************%3C%2FDIV%3E%3CDIV%3E*%20%E5%8E%9F%E5%9E%8B%3C%2FDIV%3E%3CDIV%3E******************************************************************************%2F%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*******************************************************************************%3C%2FDIV%3E%3CDIV%3E*%20%E5%8F%98%E9%87%8F%3C%2FDIV%3E%3CDIV%3E******************************************************************************%2F%3C%2FDIV%3E%3CDIV%3Eflexcan_handle_t%20flexcanHandle%EF%BC%9B%3C%2FDIV%3E%3CDIV%3Evolatile%20bool%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3Eflexcan_mb_transfer_t%20txXfer%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3Eflexcan_fd_frame_t%20frame%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3Eflexcan_frame_t%20frame%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3Estatic%20const%20uint32_t%20kFlexcanTxId%20%3D%200x123U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3Estatic%20const%20uint8_t%20kPayloadSize%20%3D%2064U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3Estatic%20const%20uint8_t%20kFrameLength%20%3D%20(uint8_t)DLC%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3Estatic%20const%20uint8_t%20kPayloadSize%20%3D%208U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3Estatic%20const%20uint8_t%20kFrameLength%20%3D%20(uint8_t)DLC%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*******************************************************************************%3C%2FDIV%3E%3CDIV%3E*%20%E4%BB%A3%E7%A0%81%3C%2FDIV%3E%3CDIV%3E******************************************************************************%2F%3C%2FDIV%3E%3CDIV%3E%2F*!%3C%2FDIV%3E%3CDIV%3E*%20CAN%20%E6%94%B6%E5%8F%91%E5%99%A8%E7%AE%80%E8%A6%81%E9%85%8D%E7%BD%AE%E5%8A%9F%E8%83%BD%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3Estatic%20void%20FLEXCAN_PHY_Config(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E5%A7%8B%E7%BB%88%E7%A1%AE%E4%BF%9D%E6%94%B6%E5%8F%91%E5%99%A8%E5%BE%85%E6%9C%BA%E5%BC%95%E8%84%9A%E5%A4%84%E4%BA%8E%E9%A9%B1%E5%8A%A8%E7%8A%B6%E6%80%81%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20GPIO_PortSet(EXAMPLE_STB_RGPIO%2C%201u%26lt%3B%26lt%3B%20EXAMPLE_STB_RGPIO_PIN)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_PHY_TJA1152)%26amp%3B%26amp%3B%20USE_PHY_TJA1152)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20TJA1152%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20STB%3DH%EF%BC%8C%E9%85%8D%E7%BD%AE%20CAN%20%E4%BF%A1%E6%81%AF%E5%B0%86%E9%80%9A%E8%BF%87%20TXD%20%E5%BC%95%E8%84%9A%E4%BB%8E%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E5%8F%91%E9%80%81%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%BF%85%E9%A1%BB%E4%BC%A0%E8%BE%93%E5%B8%A6%E6%9C%89%E6%A0%87%E5%87%86%E6%A0%87%E8%AF%86%E7%AC%A6%200x555%20%E7%9A%84%E7%BB%8F%E5%85%B8%20CAN%20%E6%8A%A5%E6%96%87%20%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%E5%9C%A8%20TJA1152%20%E7%A2%BA%E8%AA%8D%E4%B9%8B%E5%89%8D%EF%BC%8C%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%A9%9F%E6%8E%A7%E5%88%B6%E5%99%A8%E5%B0%87%20*%20%E5%84%B2%E5%AD%98%E5%9C%A8%20TJA1152%20%E4%B8%AD%E3%80%82%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20%E8%87%AA%E5%8A%A8%E6%A3%80%E6%B5%8B%E6%AF%94%E7%89%B9%E7%8E%87%E3%80%82%E4%B8%8D%E8%A6%81%E8%AE%BE%E7%BD%AE%20frame.brs%20%3D%201U%EF%BC%8C%E4%BB%A5%E4%BF%9D%E6%8C%81%E6%A0%87%E7%A7%B0%E5%80%BC%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20CANFD%20%E5%B8%A7%E6%95%B0%E6%8D%AE%E9%98%B6%E6%AE%B5%E7%9A%84%E6%AF%94%E7%89%B9%E7%8E%87%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.id%20%20%20%20%20%3D%20FLEXCAN_ID_STD%EF%BC%880x555%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.format%20%3D%20(uint8_t)kFLEXCAN_FrameFormatStandard%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.type%20%20%20%3D%20(uint8_t)kFLEXCAN_FrameTypeData%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.length%20%3D%200U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txXfer.mbIdx%20%3D%20(uint8_t)TX_MESSAGE_BUFFER_NUM%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txXfer.framefd%20%3D%26amp%3Bframe%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txXfer.frame%20%3D%26amp%3Bframe%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%20%20%20%20while%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%7D%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E9%85%8D%E7%BD%AE%E6%AC%BA%E9%AA%97%E4%BF%9D%E6%8A%A4%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%9C%A8%E4%BC%A0%E8%BE%93%E7%99%BD%E5%90%8D%E5%8D%95%E4%B8%AD%E6%B7%BB%E5%8A%A0%200x321%20%E5%92%8C%200x123%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.id%20%20%20%20%20%3D%20FLEXCAN_ID_EXT%EF%BC%880x18DA00F1%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.format%20%3D%20(uint8_t)kFLEXCAN_FrameFormatExtend%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.type%20%20%20%3D%20(uint8_t)kFLEXCAN_FrameTypeData%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.length%20%3D%206U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B0%5D%3D%20CAN_WORD_DATA_BYTE_0(0x10)%20%7C%20CAN_WORD_DATA_BYTE_1(0x00)%20%7C%20CAN_WORD_DATA_BYTE_2(0x33)%20%7C%20CAN_WORD_DATA_1(0x00)%20%7C%20CAN_WORD_DATA_BYTE_2(0x33)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_3(0x21)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B1%5D%3D%20CAN_WORD_DATA_BYTE_4(0x11)%20%7C%20CAN_WORD_DATA_BYTE_5(0x23)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%20%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord0%20%3D%20CAN_WORD0_DATA_BYTE_0(0x10)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x00)%20%7C%20CAN_WORD0_DATA_BYTE_2(0x33)%20%7C%20CAN_WORD0_DATA_BYTE_2(0x33)%20%7C%20CAN_WORD0_DATA_BYTE_2(0x33)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD0_DATA_BYTE_3(0x21)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0x11)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x23)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%20%20%20%20while%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%7D%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E9%85%8D%E7%BD%AE%E5%91%BD%E4%BB%A4%E4%BF%A1%E6%81%AF%20ID%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%8F%AA%E6%8E%A5%E5%8F%97%E6%9C%AC%E5%9C%B0%E9%87%8D%E6%96%B0%E9%85%8D%E7%BD%AE%E3%80%82%E4%BF%9D%E6%8C%81%20CONFIG_ID%20%E4%B8%BA%E9%BB%98%E8%AE%A4%E5%80%BC%200x18DA00F1%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.length%20%3D%205U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B0%5D%3D%20CAN_WORD_DATA_BYTE_0(0x60)%20%7C%20CAN_WORD_DATA_BYTE_1(0x98)%20%7C%20CAN_WORD_DATA_BYTE_2(0xDA)%20%7C%20CAN_WORD_DATA_1(0x98)%20%7C%20CAN_WORD_DATA_BYTE_2(0xDA)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_3(0x00)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B1%5D%3D%20CAN_WORD_DATA_BYTE_4(0xF1)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord0%20%3D%20CAN_WORD0_DATA_BYTE_0(0x60)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x98)%20%7C%20CAN_WORD0_DATA_BYTE_2(0xDA)%20%7C%20CAN_WORD0_DATA_BYTE_2(0xDA)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD0_DATA_BYTE_3(0x00)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0xF1)%EF%BC%9B%20%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%20%20%20%20while%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%7D%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E7%A6%BB%E5%BC%80%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%BC%8F%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20%E4%BB%85%E9%85%8D%E7%BD%AE%E5%88%B0%E6%98%93%E5%A4%B1%E6%80%A7%E5%AD%98%E5%82%A8%E5%99%A8%E4%B8%AD%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.length%20%3D%208U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B0%5D%3D%20CAN_WORD_DATA_BYTE_0(0x71)%20%7C%20CAN_WORD_DATA_BYTE_1(0x02)%20%7C%20CAN_WORD_DATA_BYTE_2(0x03)%20%7C%20CAN_WORD_DATA_2(0x03)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_3(0x04)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord%5B1%5D%3D%20CAN_WORD_DATA_BYTE_4(0x05)%20%7C%20CAN_WORD_DATA_BYTE_5(0x06)%20%7C%20CAN_WORD_DATA_BYTE_6(0x07)%20%7C%20CAN_WORD_DATA_BYTE_5(0x06)%20%7C%20CAN_WORD_DATA_BYTE_6(0x07)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_7(0x08)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord0%20%3D%20CAN_WORD0_DATA_BYTE_0(0x71)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x02)%20%7C%20CAN_WORD0_DATA_BYTE_2(0x03)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x03)%20%7C%20CAN_WORD0_DATA_BYTE_2(0x03)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD0_DATA_BYTE_3(0x04)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20frame.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0x05)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x06)%20%7C%20CAN_WORD1_DATA_BYTE_6(0x07)%20%7C%20CAN_WORD1_DATA_6(0x07)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD1_DATA_BYTE_7(0x08)%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%20%20%20%20while%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%7D%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22Initialize%20TJA1152%20successfully!%5Cr%5Cn%5Crn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20TJA1152%20%E7%BB%93%E6%9D%9F%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E7%89%88%E6%9C%AC%E6%94%B6%E5%8F%91%E5%99%A8%E5%BE%85%E6%9C%BA%E7%8A%B6%E6%80%81%E4%BB%A5%E9%A9%B1%E5%8A%A8%20CANH%2FCANL%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20GPIO_PortClear(EXAMPLE_STB_RGPIO%2C%201u%26lt%3B%26lt%3B%20EXAMPLE_STB_RGPIO_PIN)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*!%3C%2FDIV%3E%3CDIV%3E*%20%E7%AE%80%E7%9F%AD%E7%9A%84%20FlexCAN%20%E5%9B%9E%E7%94%B5%E5%8A%9F%E8%83%BD%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3Estatic%20FLEXCAN_CALLBACK(flexcan_callback)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELOG_INFO(%22status%3A%25d%5Cn%22%2C%20status)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E5%BC%80%E5%85%B3%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%E6%83%85%E5%86%B5%20kStatus_FLEXCAN_TxIdle%EF%BC%9A%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%E5%A6%82%E6%9E%9C%20(TX_MESSAGE_BUFFER_NUM%20%3D%3D%20result)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20txComplete%20%3D%20true%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%E6%89%93%E7%A0%B4%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%E9%BB%98%E8%AE%A4%EF%BC%9A%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%E6%89%93%E7%A0%B4%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*!%3C%2FDIV%3E%3CDIV%3E*%20%40brief%20%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3Eint%20main(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcan_config_t%20flexcanConfig%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20uint8_t%20txCounter%20%3D%200U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%E6%9D%BF%E7%A1%AC%E4%BB%B6%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20BOARD_InitHardware()%EF%BC%9B%20%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22*********%20FLEXCAN%20Continuous%20TX%20EXAMPLE%20*********%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Message%20format%EF%BC%9AStandard%20(11%20bit%20id)%2Fr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Frame%20type%20%3A%20CAN%20FD%20with%20BRS%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Nominal%2FData%20bit%20rates%3A%25u%20%2F%25u%20bps%5Cr%5Cn%22%2C%20EXAMPLE_CAN_BIT_RATE%2C%20EXAMPLE_CAN_BIT_RATE_FD)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3ELOG_INFO%20(%22%20%E6%9C%89%E6%95%88%E8%B4%9F%E8%BD%BD%E9%95%BF%E5%BA%A6%EF%BC%9A%25u%20%E5%AD%97%E8%8A%82%5C%20r%5Cn%20%22%2C%20KPayloadSize)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Frame%20type%20%3A%20Classical%20CAN%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Bit%20rate%20%3A%25u%20bps%5Cr%5Cn%22%2C%20EXAMPLE_CAN_BIT_RATE)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3ELOG_INFO%20(%22%20%E6%9C%89%E6%95%88%E8%B4%9F%E8%BD%BD%E9%95%BF%E5%BA%A6%EF%BC%9A%25u%20%E5%AD%97%E8%8A%82%5C%20r%5Cn%20%22%2C%20KPayloadSize)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Message%20buffer%25d%20used%20for%20Tx.%5Cr%5Cn%22%2C%20TX_MESSAGE_BUFFER_NUM)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Interrupt%20Mode%3A%20Enabled%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22%20Operation%20Mode%3A%20Continuous%20transmit%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22*********************************************%5Cr%5Cn%5Cr%5Cn%22)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20LOG_INFO(%22Starting%20continuous%20CAN%20transmissions%20on%20ID%200x%253x%5Cr%5Cn%5Cr%5Cn%22%2C%20kFlexcanTxId)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E8%8E%B7%E5%8F%96%20FlexCAN%20%E6%A8%A1%E5%9D%97%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.clkSrc%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20kFLEXCAN_ClkSrc0%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.bitRate%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%201000000U%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.bitRateFD%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%202000000U%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.maxMbNum%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2016%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.enableLoopBack%20%20%20%20%20%20%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.enableSelfWakeup%20%20%20%20%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.enableIndividMask%20%20%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.disableSelfReception%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.enableListenOnlyMode%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%20flexcanConfig.enableDoze%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_GetDefaultConfig(%26amp%3BflexcanConfig)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.bitRate%20%3D%20EXAMPLE_CAN_BIT_RATE%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.disableSelfReception%20%3D%20true%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.bitRateFD%20%3D%20EXAMPLE_CAN_BIT_RATE_FD%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20defined(EXAMPLE_CAN_CLK_SOURCE)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.clksrc%3DEXAMPLE_CAN_CLK_SOURCE%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E7%89%B9%E6%AE%8A%E7%9A%84%E9%87%8F%E5%AD%90%E8%AE%BE%E7%BD%AE%EF%BC%8C%E8%AF%B7%E8%AE%BE%E7%BD%AE%E5%AE%9A%E6%97%B6%E5%8F%82%E6%95%B0%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(SET_CAN_QUANTUM)%26amp%3B%26amp%3B%20SET_CAN_QUANTUM)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.phaseSeg1%20%3D%20PSEG1%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.phaseSeg2%20%3D%20PSEG2%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.propSeg%20%20%20%3D%20PROPSEG%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)%26amp%3B%26amp%3B%20FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.fphaseSeg1%20%3D%20FPSEG1%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.fphaseSeg2%20%3D%20FPSEG2%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcanConfig.timingConfig.fpropSeg%20%20%20%3D%20FPROPSEG%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_IMPROVED_TIMING_CONFIG)%26amp%3B%26amp%3B%20USE_IMPROVED_TIMING_CONFIG)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20flexcan_timing_config_t%20timing_config%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20memset(%26amp%3Btiming_config%2C%200%2C%20sizeof(flexcan_timing_config_t))%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E5%A6%82%E6%9E%9C%EF%BC%88FLEXCAN_FDCalculateImprovedTimingValues(EXAMPLE_CAN%2C%20flexcanConfig.bitRate%E3%80%81flexcanConfig.bitRateFD%E3%80%81%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EXAMPLE_CAN_CLK_FREQ%2C%26amp%3Btiming_config))%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%2F*%20%E6%9B%B4%E6%96%B0%E6%94%B9%E8%BF%9B%E5%90%8E%E7%9A%84%E5%AE%9A%E6%97%B6%E9%85%8D%E7%BD%AE*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20memcpy(%26amp%3B(flexcanConfig.timingConfig)%2C%26amp%3Btiming_config%2C%20sizeof(flexcan_timing_config_t))%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E4%B8%8D%E7%84%B6%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20LOG_INFO(%22%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%B9%E8%BF%9B%E7%9A%84%E5%AE%9A%E6%97%B6%E9%85%8D%E7%BD%AE%E3%80%82%E5%8F%AA%E6%98%AF%E4%BD%BF%E7%94%A8%E4%BA%86%E9%BB%98%E8%AE%A4%E7%9A%84%20configuration%5Cr%5Cn%5Cr%5Cn%22%20%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E5%A6%82%E6%9E%9C%EF%BC%88FLEXCAN_CalculateImprovedTimingValues(EXAMPLE_CAN%2C%20flexcanConfig.bitRate%E3%80%81EXAMPLE_CAN_CLK_FREQ%2C%26amp%3Btiming_config))%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%2F*%20%E6%9B%B4%E6%96%B0%E6%94%B9%E8%BF%9B%E5%90%8E%E7%9A%84%E5%AE%9A%E6%97%B6%E9%85%8D%E7%BD%AE*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20memcpy(%26amp%3B(flexcanConfig.timingConfig)%2C%26amp%3Btiming_config%2C%20sizeof(flexcan_timing_config_t))%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E4%B8%8D%E7%84%B6%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20LOG_INFO(%22%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%B9%E8%BF%9B%E7%9A%84%E5%AE%9A%E6%97%B6%E9%85%8D%E7%BD%AE%E3%80%82%E5%8F%AA%E6%98%AF%E4%BD%BF%E7%94%A8%E4%BA%86%E9%BB%98%E8%AE%A4%E7%9A%84%20configuration%5Cr%5Cn%5Cr%5Cn%22%20%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_FDInit(EXAMPLE_CAN%2C%26amp%3BflexcanConfig%2C%20EXAMPLE_CAN_CLK_FREQ%2C%20BYTES_IN_MB%2C%20true)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_Init%EF%BC%88EXAMPLE_CAN%EF%BC%8C%26amp%3BflexcanConfig%EF%BC%8CEXAMPLE_CAN_CLK_FREQ%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E5%88%9B%E5%BB%BA%20FlexCAN%20%E5%8F%A5%E6%9F%84%E7%BB%93%E6%9E%84%E5%B9%B6%E8%AE%BE%E7%BD%AE%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_TransferCreateHandle(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%20flexcan_callback%2C%20NULL)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E8%AE%BE%E7%BD%AE%20Tx%20%E4%BF%A1%E6%81%AF%E7%BC%93%E5%86%B2%E5%8C%BA%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_SetFDTxMbConfig(EXAMPLE_CAN%2C%20TX_MESSAGE_BUFFER_NUM%2C%20true)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_SetTxMbConfig(EXAMPLE_CAN%2C%20TX_MESSAGE_BUFFER_NUM%2C%20true)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%2F*%20%E9%85%8D%E7%BD%AE%20CAN%20%E6%94%B6%E5%8F%91%E5%99%A8%20*%2F%3C%2FDIV%3E%3CDIV%3E%20%20%20%20FLEXCAN_PHY_Config()%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E5%BD%93%EF%BC%88true%EF%BC%89%E6%97%B6%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.id%20%3D%20FLEXCAN_ID_STD(kFlexcanTxId)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.format%20%3D%20(uint8_t)kFLEXCAN_FrameFormatStandard%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.type%20%3D%20(uint8_t)kFLEXCAN_FrameTypeData%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.length%20%3D%20kFrameLength%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.brs%20%3D%201U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.edl%20%3D%201U%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20for%20(uint8_t%20wordIdx%20%3D%200U%3B%20wordIdx%26lt%3B%20DWORD_IN_MB%3B%20wordIdx%2B%2B)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20uint8_t%20baseValue%20%3D%20(uint8_t)(wordIdx%20*%204U)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20frame.dataWord%5BwordIdx%5D%20%3D%20CAN_WORD_DATA_BYTE_0((uint32_t)txCounter%20%2B%20baseValue)%7C%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_1(0x55U%20%2B%20baseValue)%20%7C%20CAN_WORD_DATA_BYTE_1(0x55U%20%2B%20baseValue)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_2(0xAAU%20%2B%20baseValue)%20%7C%20CAN_WORD_DATA_BYTE_2(0xAAU%20%2B%20baseValue)%20%7C%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD_DATA_BYTE_3(0xFFU%20-%20baseValue)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.dataWord0%20%3D%20CAN_WORD0_DATA_BYTE_0(txCounter)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x55U)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x55U)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x55U)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD0_DATA_BYTE_2(0xAAU)%20%7C%20CAN_WORD0_DATA_BYTE_3(0xFFU)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20frame.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0x11U)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x22U)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x22U)%20%7C%20CAN_WORD1_DATA_5(0x22U)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CAN_WORD1_DATA_BYTE_6(0x33U)%20%7C%20CAN_WORD1_DATA_BYTE_7(0x44U)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20txXfer.mbIdx%20%3D%20(uint8_t)TX_MESSAGE_BUFFER_NUM%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23if%20(defined(USE_CANFD)%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20txXfer.framefd%20%3D%26amp%3Bframe%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23else%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20txXfer.frame%20%3D%26amp%3Bframe%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%2C%26amp%3BflexcanHandle%2C%26amp%3BtxXfer)%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20while%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%7B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20%7D%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20txComplete%20%3D%20false%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%20%20%20%20txCounter%2B%2B%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2178872%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20KW45B41Z-EVK%3A%20CAN%20Transmission%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2178872%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E5%B8%8C%E6%9C%9B%E4%BD%A0%E4%B8%80%E5%88%87%E9%A1%BA%E5%88%A9%E3%80%82%E8%AF%B7%E8%AF%B4%E6%98%8E%22%E4%B8%8D%E6%8F%90%E4%BE%9B%E4%B8%8E%20CAN%22%20%E7%9A%84%E7%9B%B4%E6%8E%A5%E6%8E%A5%E5%8F%A3%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E8%83%BD%E5%90%A6%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%E7%A4%BA%E6%B3%A2%E5%99%A8%E6%88%96%E5%88%86%E6%9E%90%E4%BB%AA%E6%A3%80%E6%9F%A5%20J10%20%E8%BF%9E%E6%8E%A5%E5%99%A8%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%88%91%E5%BB%BA%E8%AE%AE%E4%BD%A0%E7%9C%8B%E7%9C%8B%E4%BD%A0%E7%9A%84%E6%9D%BF%E4%B8%8A%E7%9A%84%20flexcan_interrupt_transfer%20%E7%A4%BA%E4%BE%8B%E3%80%82%3C%2FP%3E%0A%3CP%3E%E8%AF%B7%E5%91%8A%E8%AF%89%E6%88%91%E6%82%A8%E7%9A%84%E5%8F%91%E7%8E%B0%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%0A%3CP%3E%E9%87%8C%E5%8D%A1%E5%A4%9A%3C%2FP%3E%3C%2FLINGO-BODY%3E