KW45B41Z-EVK: CAN Transmission

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

KW45B41Z-EVK: CAN Transmission

558件の閲覧回数
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 返信

538件の閲覧回数
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%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2178701%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81NXP%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E7%9A%86%E6%A7%98%E3%80%81%3CBR%20%2F%3E%3CBR%20%2F%3E%E7%8F%BE%E5%9C%A8%E3%80%81NXP%20KW45B41Z-EVK%20%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AB%E5%8F%96%E3%82%8A%E7%B5%84%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E7%A7%81%E3%81%AE%E7%9B%AE%E6%A8%99%E3%81%AF%E3%80%81BLE%20%E3%83%9C%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%20CAN%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82SDK%20%E3%81%AE%E4%BE%8B%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81CAN%20%E3%81%A8%E3%81%AE%E7%9B%B4%E6%8E%A5%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%AF%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3CBR%20%2F%3ECAN%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%A1%E3%81%AA%E3%81%BF%E3%81%AB%E7%A7%81%E3%81%AFTechnica%20CAN%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E6%97%A9%E6%80%A5%E3%81%AA%E3%81%94%E6%94%AF%E6%8F%B4%E3%82%92%E3%81%8A%E5%BE%85%E3%81%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3ESO%E3%80%81%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%20%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%96%8B%E7%99%BA%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E4%BB%A5%E4%B8%8B%E3%81%AB%E5%8F%82%E8%80%83%E7%94%A8%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CDIV%3E%23include%20%22fsl_debug_console.h%22%3C%2FDIV%3E%3CDIV%3E%23include%20%22fsl_flexcan.h%22%3C%2FDIV%3E%3CDIV%3E%23include%20%22board.h%22%3C%2FDIV%3E%3CDIV%3E%23include%20%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%E7%BE%A9%3C%2FDIV%3E%3CDIV%3E**********************************************************************************%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20MISRA_C-2012%20%E8%A6%8F%E5%89%87%2017.7%20%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%BE%E3%81%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%23USE_CANFD%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%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%23EXAMPLE_CAN_BIT_RATE%20(500000U)%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%BE%E3%81%99%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%23EXAMPLE_CAN_BIT_RATE_FD%20(2000000U)%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%BE%E3%81%99%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%23USE_PHY_TJA1152%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%20(1)%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%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%A7MB%3C%2FDIV%3E%3CDIV%3E*%202%208%20kFLEXCAN_8BperMB%2032(1%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2064(2%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2096(3%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%3C%2FDIV%3E%3CDIV%3E*%204%2010%20kFLEXCAN_16BperMB%2021(1%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2042(2%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2063(3%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%3C%2FDIV%3E%3CDIV%3E*%208%2013%20kFLEXCAN_32BperMB%2012(1%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2024(2%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2036(3%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%3C%2FDIV%3E%3CDIV%3E*%2016%2015%20kFLEXCAN_64BperMB%207(1%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2014(2%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%2021(3%20RAM%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)%3C%2FDIV%3E%3CDIV%3E*%3C%2FDIV%3E%3CDIV%3E*%20%E5%90%84%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E5%86%85%E3%81%AEDword%E3%80%81%E3%83%90%E3%82%A4%E3%83%88%E5%8D%98%E4%BD%8D%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E9%95%B7%E3%80%81%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AF%E6%8F%83%E3%81%88%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%80%81%3C%2FDIV%3E%3CDIV%3E*%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%81%AF%E5%90%84%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%E6%A7%8B%E6%88%90%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E5%88%B6%E9%99%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3E%23DWORD_IN_MB%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%20(16)%3C%2FDIV%3E%3CDIV%3E%23define%20DLC%20(15)%3C%2FDIV%3E%3CDIV%3E%23%E5%AE%9A%E7%BE%A9%20BYTES_IN_MB%20kFLEXCAN_64B%2FMB%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%23%E5%AE%9A%E7%BE%A9DLC%20(8)%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%2F****************************************************************************************%3C%2FDIV%3E%3CDIV%3E*%20%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%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%A4%89%E6%95%B0%3C%2FDIV%3E%3CDIV%3E**********************************************************************************%2F%3C%2FDIV%3E%3CDIV%3Eflexcan_handle_t%20flexcanHandle%3B%3C%2FDIV%3E%3CDIV%3E%E6%8F%AE%E7%99%BA%E6%80%A7%E3%83%96%E3%83%BC%E3%83%AB%20txComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3Eflexcan_mb_transfer_t%20txXfer%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3Eflexcan_fd_frame_t%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3Eflexcan_frame_t%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84const%20uint32_t%20kFlexcanTxId%20%3D%200x123U%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84const%20uint8_t%20kPayloadSize%20%3D%2064U%3B%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84const%20uint8_t%20kFrameLength%20%3D%20(uint8_t)DLC%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84const%20uint8_t%20kPayloadSize%20%3D%208U%3B%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84const%20uint8_t%20kFrameLength%20%3D%20(uint8_t)DLC%3B%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%E3%82%B3%E3%83%BC%E3%83%89%3C%2FDIV%3E%3CDIV%3E**********************************************************************************%2F%3C%2FDIV%3E%3CDIV%3E%2F*!%3C%2FDIV%3E%3CDIV%3E*%20%40brief%20CAN%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B7%E3%83%BC%E3%83%90%E8%A8%AD%E5%AE%9A%E9%96%A2%E6%95%B0%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84void%20FLEXCAN_PHY_Config(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B7%E3%83%BC%E3%83%90%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%90%E3%82%A4%20%E3%83%94%E3%83%B3%E3%81%8C%E5%B8%B8%E3%81%AB%E9%A7%86%E5%8B%95%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3EGPIO_PortSet(EXAMPLE_STB_RGPIO%E3%80%811u%20%26lt%3B%26lt%3B%20EXAMPLE_STB_RGPIO_PIN)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_PHY_TJA1152)%20%26amp%3B%26amp%3B%20USE_PHY_TJA1152)%3C%2FDIV%3E%3CDIV%3E%2F*%20TJA1152%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20STB%3DH%E3%80%81%E6%A7%8B%E6%88%90%20CAN%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AF%20TXD%20%E3%83%94%E3%83%B3%E3%82%92%E4%BB%8B%E3%81%97%E3%81%A6%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20%E3%83%9B%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E6%9C%9F%E5%BE%85%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E6%A8%99%E6%BA%96%E8%AD%98%E5%88%A5%E5%AD%900x555%E3%82%92%E6%8C%81%E3%81%A4%E5%BE%93%E6%9D%A5%E3%81%AECAN%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AF%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%3C%2FDIV%3E%3CDIV%3E*%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6TJA1152%E3%81%8B%E3%82%89%E7%A2%BA%E8%AA%8D%E3%81%95%E3%82%8C%E3%82%8B%E3%81%BE%E3%81%A7%3C%2FDIV%3E%3CDIV%3E*%20%E8%87%AA%E5%8B%95%E3%83%93%E3%83%83%E3%83%88%E3%83%AC%E3%83%BC%E3%83%88%E6%A4%9C%E5%87%BA%E3%80%82%E5%85%AC%E7%A7%B0%E5%80%A4%E3%82%92%E7%B6%AD%E6%8C%81%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABframe.brs%20%3D%201U%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%AA%E3%81%84%E3%81%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3C%2FDIV%3E%3CDIV%3E*%20CANFD%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%E3%83%87%E3%83%BC%E3%82%BF%20%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%AE%E3%83%93%E3%83%83%E3%83%88%20%E3%83%AC%E3%83%BC%E3%83%88%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0ID%3D%20FLEXCAN_ID_STD(0x555)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%20%3D%20(uint8_t)kFLEXCAN_FrameFormatStandard%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97%3D%20(uint8_t)kFLEXCAN_FrameTypeData%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E9%95%B7%E3%81%95%20%3D%200U%3B%3C%2FDIV%3E%3CDIV%3EtxXfer.mbIdx%20%3D%20(uint8_t)TX_MESSAGE_BUFFER_NUM%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3EtxXfer.framefd%20%3D%20%26amp%3Bframe%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3EtxXfer.frame%20%3D%20%26amp%3Bframe%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3Ewhile%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%7D%3B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%82%B9%E3%83%97%E3%83%BC%E3%83%95%E3%82%A3%E3%83%B3%E3%82%B0%E9%98%B2%E6%AD%A2%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%200x321%20%E3%81%A8%200x123%20%E3%82%92%E9%80%81%E4%BF%A1%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0ID%3D%20FLEXCAN_ID_EXT(0x18DA00F1)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%20%3D%20(uint8_t)kFLEXCAN_FrameFormatExtend%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97%3D%20(uint8_t)kFLEXCAN_FrameTypeData%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E9%95%B7%E3%81%95%20%3D%206U%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%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%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_3(0x21)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%5B1%5D%3D%20CAN_WORD_DATA_BYTE_4(0x11)%20%7C%20CAN_WORD_DATA_BYTE_5(0x23)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.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%3C%2FDIV%3E%3CDIV%3ECAN_WORD0_DATA_BYTE_3(0x21)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0x11)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x23)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3Ewhile%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%7D%3B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8ID%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%80%82%20*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20%E5%86%8D%E6%A7%8B%E6%88%90%E3%81%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E3%81%AE%E3%81%BF%E5%8F%97%E3%81%91%E5%85%A5%E3%82%8C%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82CONFIG_ID%20%E3%82%92%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E5%80%A4%200x18DA00F1%20%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E9%95%B7%E3%81%95%20%3D%205U%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%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%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_3(0x00)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%5B1%5D%3D%20CAN_WORD_DATA_BYTE_4(0xF1)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.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%3C%2FDIV%3E%3CDIV%3ECAN_WORD0_DATA_BYTE_3(0x00)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0xF1)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3Ewhile%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%7D%3B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E8%A8%AD%E5%AE%9A%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92%E7%B5%82%E4%BA%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%20%E6%8F%AE%E7%99%BA%E6%80%A7%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E3%81%BF%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E9%95%B7%E3%81%95%20%3D%208U%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%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%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_3(0x04)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AF%E3%83%BC%E3%83%89%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%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_7(0x08)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.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%3C%2FDIV%3E%3CDIV%3ECAN_WORD0_DATA_BYTE_3(0x04)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.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%3C%2FDIV%3E%3CDIV%3ECAN_WORD1_DATA_BYTE_7(0x08)%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3Ewhile%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%7D%3B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22TJA1152%20%E3%82%92%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F!%5Cr%5Cn%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20TJA1152%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E7%B5%82%E4%BA%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B7%E3%83%BC%E3%83%90%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%90%E3%82%A4%E3%82%92%E8%A7%A3%E9%99%A4%E3%81%97%E3%81%A6%E3%80%81CANH%2FCANL%20%E3%81%8C%E9%A7%86%E5%8B%95%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3EGPIO_PortClear(EXAMPLE_STB_RGPIO%E3%80%811u%20%26lt%3B%26lt%3B%20EXAMPLE_STB_RGPIO_PIN)%3B%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%20FlexCAN%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E9%96%A2%E6%95%B0%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3E%E9%9D%99%E7%9A%84FLEXCAN_CALLBACK(flexcan_callback)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELOG_INFO(%22%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%3A%20%25d%20%5Cn%22%2C%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%EF%BC%88%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%EF%BC%89%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3EkStatus_FLEXCAN_TxIdle%E3%81%AE%E5%A0%B4%E5%90%88%3A%3C%2FDIV%3E%3CDIV%3Eif%20(TX_MESSAGE_BUFFER_NUM%20%3D%3D%20%E7%B5%90%E6%9E%9C)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20true%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%E5%A3%8A%E3%81%99%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%EF%BC%9A%3C%2FDIV%3E%3CDIV%3E%E5%A3%8A%E3%81%99%3B%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%E3%83%A1%E3%82%A4%E3%83%B3%E9%96%A2%E6%95%B0%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3Eint%20main(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3Eflexcan_config_t%20flexcanConfig%3B%3C%2FDIV%3E%3CDIV%3Euint8_t%20%E9%80%81%E4%BF%A1%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%20%3D%200U%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3EBOARD_InitHardware()%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22*********%20FLEXCAN%20%E9%80%A3%E7%B6%9A%20TX%20%E4%BE%8B%20*********%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E5%BD%A2%E5%BC%8F%3A%20%E6%A8%99%E6%BA%96%20(11%20%E3%83%93%E3%83%83%E3%83%88%20ID)%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97%3A%20BRS%E4%BB%98%E3%81%8DCAN%20FD%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E5%85%AC%E7%A7%B0%2F%E3%83%87%E3%83%BC%E3%82%BF%20%E3%83%93%E3%83%83%E3%83%88%20%E3%83%AC%E3%83%BC%E3%83%88%3A%20%25u%20%2F%20%25u%20bps%5Cr%5Cn%22%2C%20EXAMPLE_CAN_BIT_RATE%2C%20EXAMPLE_CAN_BIT_RATE_FD)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%E9%95%B7%20%3A%20%25u%20%E3%83%90%E3%82%A4%E3%83%88%5Cr%5Cn%22%2C%20kPayloadSize)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97%3A%20%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AFCAN%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E3%83%93%E3%83%83%E3%83%88%E3%83%AC%E3%83%BC%E3%83%88%3A%20%25u%20bps%5Cr%5Cn%22%2C%20EXAMPLE_CAN_BIT_RATE)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%E9%95%B7%20%3A%20%25u%20%E3%83%90%E3%82%A4%E3%83%88%5Cr%5Cn%22%2C%20kPayloadSize)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%20%25d%20%E3%81%8C%20Tx%20%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%5Cr%5Cn%22%2C%20TX_MESSAGE_BUFFER_NUM)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%83%A2%E3%83%BC%E3%83%89%3A%20%E6%9C%89%E5%8A%B9%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%20%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%3A%20%E9%80%A3%E7%B6%9A%E9%80%81%E4%BF%A1%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22************************************************%5Cr%5Cn%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22ID%200x%253x%5Cr%5Cn%5Cr%5Cn%E3%81%A7%E9%80%A3%E7%B6%9ACAN%E9%80%81%E4%BF%A1%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%97%E3%81%BE%E3%81%99%22%2C%20kFlexcanTxId)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20FlexCAN%20%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E6%A7%8B%E6%88%90%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%2F*%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.clkSrc%3D%20kFLEXCAN_ClkSrc0%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.%E3%83%93%E3%83%83%E3%83%88%E3%83%AC%E3%83%BC%E3%83%88%3D%201000000U%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.bitRateFD%3D%202000000U%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.maxMbNum%3D%2016%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.enableLoopBack%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.enableSelfWakeup%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.enableIndividMask%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.disableSelfReception%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.enableListenOnlyMode%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%20flexcanConfig.enableDoze%3D%20%E5%81%BD%3B%3C%2FDIV%3E%3CDIV%3E*%2F%3C%2FDIV%3E%3CDIV%3EFLEXCAN_GetDefaultConfig(%26amp%3BflexcanConfig)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.bitRate%20%3D%20EXAMPLE_CAN_BIT_RATE%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.disableSelfReception%20%3D%20true%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3EflexcanConfig.bitRateFD%20%3D%20EXAMPLE_CAN_BIT_RATE_FD%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%23%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88(EXAMPLE_CAN_CLK_SOURCE)%3C%2FDIV%3E%3CDIV%3EflexcanConfig.clksrc%3DEXAMPLE_CAN_CLK_SOURCE%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E7%89%B9%E5%88%A5%E3%81%AA%E9%87%8F%E5%AD%90%E8%A8%AD%E5%AE%9A%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(SET_CAN_QUANTUM)%20%26amp%3B%26amp%3B%20SET_CAN_QUANTUM)%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.phaseSeg1%20%3D%20PSEG1%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.phaseSeg2%20%3D%20PSEG2%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.propSeg%3D%20%E3%83%97%E3%83%AD%E3%83%97%E3%82%BB%E3%82%B0%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)%20%26amp%3B%26amp%3B%20FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.fphaseSeg1%20%3D%20FPSEG1%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.fphaseSeg2%20%3D%20FPSEG2%3B%3C%2FDIV%3E%3CDIV%3EflexcanConfig.timingConfig.fpropSeg%3D%20FPROPSEG%3B%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(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_IMPROVED_TIMING_CONFIG)%20%26amp%3B%26amp%3B%20USE_IMPROVED_TIMING_CONFIG)%3C%2FDIV%3E%3CDIV%3Eflexcan_timing_config_t%20%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A%3B%3C%2FDIV%3E%3CDIV%3Ememset(%26amp%3Btiming_config%2C%200%2C%20sizeof(flexcan_timing_config_t))%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3Eif%20(FLEXCAN_FDCalculateImprovedTimingValues(EXAMPLE_CAN%2C%20flexcanConfig.bitRate%2CflexcanConfig.bitRateFD%E3%80%81%3C%2FDIV%3E%3CDIV%3EEXAMPLE_CAN_CLK_FREQ%E3%80%81%26amp%3Btiming_config))%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E6%94%B9%E5%96%84%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%A7%8B%E6%88%90%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%BE%E3%81%99*%2F%3C%2FDIV%3E%3CDIV%3Ememcpy(%26amp%3B(flexcanConfig.timingConfig)%2C%20%26amp%3Btiming_config%2C%20sizeof(flexcan_timing_config_t))%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%E6%94%B9%E5%96%84%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%A7%8B%E6%88%90%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E8%A8%AD%E5%AE%9A%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%5Cr%5Cn%22)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3Eif%20(FLEXCAN_CalculateImprovedTimingValues(EXAMPLE_CAN%2C%20flexcanConfig.bitRate%2CEXAMPLE_CAN_CLK_FREQ%E3%80%81%26amp%3Btiming_config))%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E6%94%B9%E5%96%84%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%A7%8B%E6%88%90%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%BE%E3%81%99*%2F%3C%2FDIV%3E%3CDIV%3Ememcpy(%26amp%3B(flexcanConfig.timingConfig)%2C%20%26amp%3Btiming_config%2C%20sizeof(flexcan_timing_config_t))%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3ELOG_INFO(%22%E6%94%B9%E5%96%84%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%A7%8B%E6%88%90%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E8%A8%AD%E5%AE%9A%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%5Cr%5Cn%22)%3B%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(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3EFLEXCAN_FDInit(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanConfig%E3%80%81EXAMPLE_CAN_CLK_FREQ%E3%80%81BYTES_IN_MB%E3%80%81true)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3EFLEXCAN_Init(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanConfig%E3%80%81EXAMPLE_CAN_CLK_FREQ)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20FlexCAN%20%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AB%E6%A7%8B%E9%80%A0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E9%96%A2%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3EFLEXCAN_TransferCreateHandle(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81flexcan_callback%E3%80%81NULL)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20Tx%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3EFLEXCAN_SetFDTxMbConfig(EXAMPLE_CAN%E3%80%81TX_MESSAGE_BUFFER_NUM%E3%80%81true)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3EFLEXCAN_SetTxMbConfig(EXAMPLE_CAN%E3%80%81TX_MESSAGE_BUFFER_NUM%E3%80%81true)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20CAN%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B7%E3%83%BC%E3%83%90%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%20*%2F%3C%2FDIV%3E%3CDIV%3EFLEXCAN_PHY_Config()%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%88%E7%9C%9F%EF%BC%89%E3%81%AE%E9%96%93%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0ID%20%3D%20FLEXCAN_ID_STD(kFlexcanTxId)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%20%3D%20(uint8_t)kFLEXCAN_FrameFormatStandard%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.%E3%82%BF%E3%82%A4%E3%83%97%20%3D%20(uint8_t)kFLEXCAN_FrameTypeData%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E9%95%B7%E3%81%95%20%3D%20kFrameLength%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.brs%20%3D%201U%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.edl%20%3D%201U%3B%3C%2FDIV%3E%3CDIV%3E(uint8_t%20wordIdx%20%3D%200U%3B%20wordIdx%20%26lt%3B%20DWORD_IN_MB%3B%20wordIdx%2B%2B)%20%E3%81%AE%E5%A0%B4%E5%90%88%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3Euint8_t%20%E3%83%99%E3%83%BC%E3%82%B9%E5%80%A4%20%3D%20(uint8_t)(wordIdx%20*%204U)%3B%3C%2FDIV%3E%3CDIV%3Eframe.dataWord%5BwordIdx%5D%20%3D%20CAN_WORD_DATA_BYTE_0((uint32_t)txCounter%20%2B%20baseValue)%20%7C%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_1(0x55U%20%2B%20%E3%83%99%E3%83%BC%E3%82%B9%E5%80%A4)%20%7C%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_2(0xAAU%20%2B%20%E3%83%99%E3%83%BC%E3%82%B9%E5%80%A4)%20%7C%3C%2FDIV%3E%3CDIV%3ECAN_WORD_DATA_BYTE_3(0xFFU%20-%20%E3%83%99%E3%83%BC%E3%82%B9%E5%80%A4)%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.dataWord0%20%3D%20CAN_WORD0_DATA_BYTE_0(txCounter)%20%7C%20CAN_WORD0_DATA_BYTE_1(0x55U)%20%7C%3C%2FDIV%3E%3CDIV%3ECAN_WORD0_DATA_BYTE_2(0xAAU)%20%7C%20CAN_WORD0_DATA_BYTE_3(0xFFU)%3B%3C%2FDIV%3E%3CDIV%3E%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0.dataWord1%20%3D%20CAN_WORD1_DATA_BYTE_4(0x11U)%20%7C%20CAN_WORD1_DATA_BYTE_5(0x22U)%20%7C%3C%2FDIV%3E%3CDIV%3ECAN_WORD1_DATA_BYTE_6(0x33U)%20%7C%20CAN_WORD1_DATA_BYTE_7(0x44U)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3EtxXfer.mbIdx%20%3D%20(uint8_t)TX_MESSAGE_BUFFER_NUM%3B%3C%2FDIV%3E%3CDIV%3E%23if%20(%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF(USE_CANFD)%20%26amp%3B%26amp%3B%20USE_CANFD)%3C%2FDIV%3E%3CDIV%3EtxXfer.framefd%20%3D%20%26amp%3Bframe%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%EF%BC%83%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3C%2FDIV%3E%3CDIV%3EtxXfer.frame%20%3D%20%26amp%3Bframe%3B%3C%2FDIV%3E%3CDIV%3E(void)FLEXCAN_TransferSendNonBlocking(EXAMPLE_CAN%E3%80%81%26amp%3BflexcanHandle%E3%80%81%26amp%3BtxXfer)%3B%3C%2FDIV%3E%3CDIV%3E%23endif%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3Ewhile%20(!txComplete)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%7D%3B%3C%2FDIV%3E%3CDIV%3EtxComplete%20%3D%20false%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3EtxCounter%2B%2B%3B%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E8%AA%BF%E5%AD%90%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E3%81%84%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E3%80%82%E3%80%8CCAN%20%E3%81%A8%E3%81%AE%E7%9B%B4%E6%8E%A5%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%AA%E3%81%84%E3%80%8D%E3%81%A8%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%3F%3C%2FP%3E%0A%3CP%3EJ10%20%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E3%82%92%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%A2%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%B6%E3%83%BC%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%83%9C%E3%83%BC%E3%83%89%E4%B8%8A%E3%81%AE%20flexcan_interrupt_transfer%20%E3%81%AE%E4%BE%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E3%81%8A%E5%8B%A7%E3%82%81%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E7%B5%90%E6%9E%9C%E3%82%92%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%83%AA%E3%82%AB%E3%83%AB%E3%83%89%3C%2FP%3E%3C%2FLINGO-BODY%3E