This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-TDA4VM:将 MCAN5 和 MCAN9 IRQ 路由到 MCU1_0

Guru**** 2429840 points
Other Parts Discussed in Thread: SK-TDA4VM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1540964/sk-tda4vm-routing-mcan5-and-mcan9-irq-to-mcu1_0

器件型号:SK-TDA4VM


工具/软件:

您好、

我在定制电路板上使用 SDK:RTOS-09_02_00_05、该定制电路板具有与 SK-TDA4VM 相同的原理图 (MCU_MCAN0、MCAN0、MCAN5 和 MCAN9)。 例如、我遵循 pdk_jacinto_09_02_00_30/packages/ti/csl/example/mcanEvmLoopback/mcan_evm_loopback_app_main_k3.c 源代码。

我要将 MCAN5 和 MCAN9 IR 路由到 MCU1_0 R5F 处理器。 要配置主 MCAN IRQ、我将使用以下代码:

static int32_t MCAN_CfgIrqRouterMain2Mcu(uint32_t devId, uint32_t offset, uint32_t intNum)
{
    int32_t retVal;
    struct tisci_msg_rm_irq_set_req     rmIrqReq;
    struct tisci_msg_rm_irq_set_resp    rmIrqResp;

    rmIrqReq.valid_params           = TISCI_MSG_VALUE_RM_DST_ID_VALID;
    rmIrqReq.valid_params          |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
    rmIrqReq.src_id                 = devId;
    rmIrqReq.global_event           = 0U;
    rmIrqReq.src_index              = 1U; /* mcanss_mcan_lvl_int Line 0 */
    rmIrqReq.dst_id                 = TISCI_DEV_MCU_R5FSS0_CORE0;
    rmIrqReq.dst_host_irq           = intNum;
    rmIrqReq.ia_id                  = 0U;
    rmIrqReq.vint                   = 0U;
    rmIrqReq.vint_status_bit_index  = 0U;
    rmIrqReq.secondary_host         = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;
    retVal = Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SCICLIENT_SERVICE_WAIT_FOREVER);
    if(CSL_PASS != retVal)
    {
        uart_write(DEBUG_UART, "Error in SciClient Interrupt Params Configuration!!!");
        snprintf(buffer, sizeof(buffer), "offset: %d \n", offset);
        uart_write(DEBUG_UART, buffer);
    }
    else
    {
        snprintf(buffer, sizeof(buffer), 
                "SciClient Interrupt Params Configuration passed for intNum: %08X \n", intNum);
        uart_write(DEBUG_UART, buffer);
    }
    return retVal;
}

对于注册中断、可以执行以下操作:

static int32_t MCAN_regiterISR(uint32_t intNum, void f(uintptr_t))
{
   int32_t configStatus = STW_SOK;
    OsalRegisterIntrParams_t    intrPrms;
    OsalInterruptRetCode_e      osalRetVal;
    HwiP_Handle                 hwiHandle = NULL;

    /* Enable CPU Interrupts and register ISR */
    Osal_RegisterInterrupt_initParams(&intrPrms);
    /* Populate the interrupt parameters */
    intrPrms.corepacConfig.arg              = (uintptr_t) NULL;
    intrPrms.corepacConfig.isrRoutine       = f;
    intrPrms.corepacConfig.priority         = 1U;
    intrPrms.corepacConfig.corepacEventNum  = 0U;
    intrPrms.corepacConfig.intVecNum        = intNum;

    /* Register interrupts */
    osalRetVal = Osal_RegisterInterrupt(&intrPrms, &hwiHandle);
    if(OSAL_INT_SUCCESS != osalRetVal)
    {
        configStatus = CSL_EFAIL;
        uart_write(DEBUG_UART, "Error in registering ISR!!!");
    }
    return configStatus;
}

我的目的是测试 MCAN5 和 MCAN9 之间的外部环回模式。 由于 rmIrqReq.src_id、我配置了 TISCI_DEV_MCAN5 和 TISCI_MCAN9 、并且 src_index =1、但我不知道 rmIrqReq.dst_host_IRQ 我应该配置什么?   对于这两者、dst_id 均为 TISCI_DEV_MCU_R5FSS0_CORE0。

此致、
Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    as rmIrqReq.src_id 我正在配置 TISCI_MCAN5 和 TISCI_DEV_MCAN9 以及 src_index =1

    MCAN5 和 MCAN9 两个外设都连接到 MAIN2MCU LVL 中断路由器。

    从 MAIN2MCU LVL 中断路由器、转到 MCU1_0 和 MCU1_1 内核

    https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/j721e/interrupt_cfg.html#main2mcu-lvl-intrtr0-interrupt-router-output-destinations

    因此、对于您的 IRQ 号码、您可以选择并使用 160-223 任意号码。

    唯一的限制是您不应重新注册相同的 IRQ 编号、否则会导致失败。请使用 2 个介于 160-223 之间的不同 IRQ 编号、并确保该编号不在其他地方使用。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    谢谢、非常有帮助。 我还有一个问题:在发送消息时、在MCAN_selectIntrLine()函数中、第三个参数是否应该设置为我在 160–223 范围内配置的中断行号?

    #define MCAN5_INT0         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_2
    
    /* Select Interrupt Line for Tx CAN instance */
    MCAN_selectIntrLine(baseAddrTx,
                        MCAN_INTR_MASK_ALL,
                        MCAN5_INT0);


    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    还有一个问题:在MCAN_selectIntrLine()函数中发送消息时、第三个参数是否应该设置为我在 160–223
    范围内配置的中断行号

    编号 此行号不是 IRQ 号。

    这里的行号表示 MCAN 中存在的多条中断线、即 0 和 1。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    感谢您的澄清。 当前、中断被触发、但MCAN_INTR_SRC_TRANS_COMPLETE中断状态寄存器中的位没有设置。该MCAN_IR寄存器保存该值0x0B800000、它对应于正在设置的以下位: EWE、BOE、WDIE 和 PEDE

    值得注意的是、在尝试发送 MCAN 消息后会立即发出中断。

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我将在 2 天后离开办公室。请预计响应会延迟。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tamas、

    CAN 控制器已进入总线关闭状态。 当总线上发生过多的错误(例如显性/隐性错误,接线故障,接地问题或终端问题)时、通常会发生这种情况。

    但我在这里还有一 个观察结果、即检测到协议违反。 仅当有 组帧、CRC、填充错误等时才会发生这种情况。

    MCAN 无法成功发送消息。 错误和协议违规会阻止成功传输、从而导致总线关闭、因此 不会设置传输完成中断。

    系统将保持总线关闭状态、直到通过软件或硬件复位清除为止、具体取决于 MCAN 配置。

    CAN 总线或连接可能存在物理故障或误配置比特率。

    还可以检查物理层:

    确保总线接线正确、端接电阻器正确并且线路未悬空或短路。

    确认比特率匹配:MCAN 和所有其他节点都必须使用相同的比特率设置。

    确保 MCAN 初始化序列和时序正确。 验证采样点和其他时序参数。

    我们最近发布了 CAN 调试指南、您可以参阅 https://www.ti.com/lit/an/spradp4/spradp4.pdf

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    仅当您有 组帧、CRC、填充错误等时才会发生这种情况。

    好的、在 mcan_evm_loopback_app_main_k3.c 中、我没有看到任何有关 CRC 的设置。 当我尝试创建自己的 txMsg 时、可能会出现一些问题。 我将以以下方式创建它:

    txMsg->id = (uint32_t)((uint32_t)(0x4U) << 18U);
    txMsg->rtr = 0U; /* Transmit Data Frame */
    txMsg->xtd = 0U; /* Transmit Standard Frame */
    txMsg->esi = 0U; /* Transmit with no error state indicator */
    txMsg->dlc = 0x1U; /* Data Length Code - This should be modified !!! */
    txMsg->brs = 0U; /* No Bit Rate Switch */
    txMsg->fdf = 0U; /* No FD Frame */
    txMsg->efc = 1U; /* FIFO Event Store */
    txMsg->mm = 0xAAU; /* Message Marker */
    txMsg->data[0] = 1;
    
    

    这是正确的吗? 目前、我只想发送 1 个字节以查看通信是否正常工作。

    确保总线接线、端接电阻器正确、并且没有悬空或短路线路。

    是的、我已经检查了这一个、Tx 和 Rx 连接到 TCAN1046 并上拉、收发器处于活动状态:

    确认比特率匹配:MCAN 和所有其他节点都必须使用相同的比特率设置。

    MCAN5 和 MCAN9 均设置为相同的比特率配置:

            bitTimes.nomRatePrescalar   = 0x7U;
            bitTimes.nomTimeSeg1        = 0x5U;
            bitTimes.nomTimeSeg2        = 0x2U;
            bitTimes.nomSynchJumpWidth  = 0x0U;
            bitTimes.dataRatePrescalar  = 0x1U;
            bitTimes.dataTimeSeg1       = 0x3U;
            bitTimes.dataTimeSeg2       = 0x2U;
            bitTimes.dataSynchJumpWidth = 0x0U;
     

    确保 MCAN 初始化序列和时序正确。 验证采样点和其他时序参数。

    每次配置和初始化后、我都会检查 mcan PDK 函数的返回值、并且没有设置错误。

    我们最近发布了 CAN 调试指南、您可以参考

    感谢您的指导。 我已经查看了列出的所有问题、但很遗憾、我仍然找不到有效的解决方案。

    我怀疑问题可能与消息配置有关—错误或缺少设置。 此外、我还没有找到任何有关如何处理 CRC 计算的具体示例、这可能是相关的。

    另一个细节:我测试了通信 轮询模式 ,在这种情况下,它的工作—两个 MCAN5 MCAN9 发送自己的消息。 然而、我尚未实现任何类型的 ACK 处理或重新传输逻辑。 这两者连接在外部环回中。

    我希望这些附加信息有助于澄清我的情况并指导进一步的故障排除。

    此致、
    Tamas   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、在 mcan_evm_loopback_app_main_k3.c 中、我没有看到任何有关 CRC 的设置。 当我尝试创建自己的 txMsg 时、可能会出现一些问题。 [/报价]

    您只能共享半个帧。 为什么不能使用示例中存在的默认帧格式?

    您的格式也没有正确对齐、如下所示

    此致

    Tarun Mukesh  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我相信您只在中断注册和使用方面有问题。

    /*启用 MCAN 中断*/
    MCAN_enableIntr (baseAddrMCAN_INTR_MASK1U);
    MCAN_selectIntrLine (baseAddr、MCAN_INTR_MASK、MCAN_INTR_LINE_NUM_0);
    MCAN_enableIntrLine (baseAddr、MCAN_INTR_LINE_NUM_0、1U);
    尝试使用中断行号 0 。
    在中断路由器代码 MCAN_CfgIrqRouterMain2Mcu 中、您使用的是  第 0 行   rmIrqReq.src_index        = 1U;/* mcanss_mcan_lvl_int 行 0 */  
    但在配置中、您使用的是第 1 行、这是错误的。
    此 MCAN5_INT0、MCAN5_INT1、MCAN9_INT0、MCAN9_INT1 的值是多少?
    此 API 静态 int32_t MCAN_CfgIrqRouterMain2Mcu (uint32_t DevID、uint32_t offset、uint32_t intNum) 中偏移的用途是什么? 但根本没有在 API 中使用。
    此致
    Tarun Mukesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    此 MCAN5_INT0、MCAN5_INT1、MCAN9_INT0、MCAN9_INT1 的值是什么?

    以下是相关值:

    #define MCAN0_INT0         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_0
    #define MCAN0_INT1         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_1
    #define MCAN5_INT0         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_2
    #define MCAN5_INT1         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_3
    #define MCAN9_INT0         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_4
    #define MCAN9_INT1         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_5

    ]此 API 静态 int32_t MCAN_CfgIrqRouterMain2Mcu (uint32_t DevID、uint32_t offset、uint32_t intNum) 中的偏移用途是什么? 完全不在 API 中使用。

    我对中断路由逻辑有点陌生、我认为首先必须配置中断的源和目标、然后需要为该输入线路注册 ISR。 我是对的吗?

    [引述 userid=“547969" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1540964/sk-tda4vm-routing-mcan5-and-mcan9-irq-to-mcu1_0/5936120
    MCAN_enableIntr (baseAddrMCAN_INTR_MASK1U);
    MCAN_selectIntrLine (baseAddr、MCAN_INTR_MASK、MCAN_INTR_LINE_NUM_0);
    MCAN_enableIntrLine (baseAddr、MCAN_INTR_LINE_NUM_0、1U);
    [/报价]

    因此、当我为偏移指数配置路由 Main2Mcu 时、我需要设置为 0? 为什么一个器件需要两个中断(在某些情况下为 3)?

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tamas、

    [报价 userid=“600131" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1540964/sk-tda4vm-routing-mcan5-and-mcan9-irq-to-mcu1_0/5936205

    我对中断路由逻辑有点陌生、我认为首先必须配置中断的源和目标、然后需要为该输入线路注册 ISR。 我是对的吗?

    [/报价]

    有关更多详细信息、请参阅 TRM 文档中的 MCAN 部分 www.ti.com/.../spruil1

    我对中断路由逻辑有点陌生、我认为首先必须配置中断的源和目标、然后我需要为该输入行注册 ISR。 我是对的吗?

    这是正确的、但您的配置、路由不匹配。

    中断源和目标不同、中断线路不同。

    如上所述、在 MCAN 中、我们有 2 条中断线路可以使用 0 和 1。 此相应的中断线路将具有源索引

    rmIrqReq.src_index = 1U;/* mcanss_mcan_lvl_int 行 0 */

    为此、您必须使用

    MCAN_selectIntrLine (baseAddr 、MCAN_INTR_MASK、MCAN_INTR_LINE_NUM_0);

    以上方法正确。

    但您正在使用的是

    rmIrqReq.src_index = 1U;/* mcanss_mcan_lvl_int 行 0 */

    为此、您必须使用

    MCAN_selectIntrLine (baseAddr 、MCAN_INTR_MASK、MCAN_INTR_LINE_NUM_1);

    这是不对的。

    ]此 API 静态 int32_t MCAN_CfgIrqRouterMain2Mcu (uint32_t DevID、uint32_t offset、uint32_t intNum) 中的偏移用途是什么? 完全不在 API 中使用。

    在整个 API 定义中、 除了打印偏移参数的用途之外、不使用偏移参数。 我建议您了解中断路由是如何完全工作的、然后继续开发、否则很难确定问题。

    您可以采用与 MCAN0 相同的方式执行此操作。  

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun

    MCAN_selectIntrLine (baseAddr 、MCAN_INTR_MASK、MCAN_INTR_LINE_NUM_1);

    我使用此特定中断行号的主要原因是MCAN_selectIntrLine(baseAddr, MCAN_INTR_MASK, MCAN_INTR_LINE_NUM_1)、当我将其设置为时、中断会执行 不会 呼叫后触发MCAN_writeMsgRam

    要逐步阐明设置:

    1. IRQ 路由器配置
      我按如下方式配置 IRQ 路由器 (Main2MCU):

      • src_idTISCI_DEV_MCAN0

      • src_index1

      • dts_idTISCI_DEV_MCU_R5FSS0_CORE0

      • dst_host_irq:() MCAN5_INT0CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_2

    2. ISR 注册
      我为注册 ISRMCAN5_INT0。 回调函数执行以下操作:


        uint32_t intrStatus;
        gMcanModAddr = CAN_obj[2].BaseAddr;
        uart_write(DEBUG_UART, "--------------------------------\n");
        snprintf(buffer, sizeof(buffer), "Address: %8X\n", gMcanModAddr);
        uart_write(DEBUG_UART, buffer);
    
        intrStatus = MCAN_getIntrStatus(gMcanModAddr);
        MCAN_clearIntrStatus(gMcanModAddr, intrStatus);
        if (MCAN_INTR_SRC_TRANS_COMPLETE ==
            (intrStatus & MCAN_INTR_SRC_TRANS_COMPLETE))
        {
            McanIsrIntr5Flag = 0U;
        }
    
        if (MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG ==
            (intrStatus & MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG))
        {
            McanIsrIntr5Flag = 0U;
            McanIsrIntr5Flag_lpbk = 0U;
        }

    我加入了调试打印以验证是否收到中断。

    不过 、控制台上没有显示任何输出、这表明没有触发中断。

    MCAN 初始化
    正确配置和初始化 MCAN。

    4、邮件传输
    我将从 MCAN5 发送一条消息到 MCAN9。

    MCAN_enableIntr (baseAddrTxMCAN_INTR_MASK、(uint32_t) true);
    MCAN_enableIntr (baseAddrTxMCAN_INTR_SRC_RES_ADDR_ACCESS、(uint32_t) false);
    MCAN_selectIntrLine (baseAddrTxMCAN_INTR_MASK、MCAN_INTR_LINE_NUM_0);
    MCAN_enableIntrLine (baseAddrTxMCAN_INTR_LINE_NUM_0、1U);

    顺便说一下、如何管理 ACK? 我在示例代码中没有看到传输了任何 ACK。

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    同时、还需要补充一点:我现在是在发送消息后收到中断、但 MCAN_IR 寄存器仍会显示已设置的 BO 和 EW 状态位。

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    [报价 userid=“600131" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1540964/sk-tda4vm-routing-mcan5-and-mcan9-irq-to-mcu1_0/5936406

    顺便说一下、如何管理 ACK? 我在示例代码中没有看到传输了任何 ACK。

    [/报价]

    ACK 不会被传输、它由接收器侧的 CAN 控制器发送。 这就是 CAN 的协议机制。

    与此同时、只需添加一件事:我现在正在发送消息后收到中断、但 MCAN_IR 寄存器仍会显示设置的 BO 和 EW 状态位。

    您在发送消息后收到中断意味着中断路由已成功完成、但系统中有一些错误正在驱动至总线关闭。

    如果出现错误、MCAN_IR 将设置一次、除非您向其写入 0 或复位、否则不会被清除。 MCAN_PSR 和 MCAN_ECR 的状态是什么?

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    如果 出现错误、则会设置一次 MCAN_IR、除非您向其写入 0 或进行重置、否则不会将其清除。 MCAN_PSR 和 MCAN_ECR 的状态是什么?

    MCAN_PSR: 0x0000076D 和 MCAN_ECR: 0x00110088

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MCAN_PSR: 0x0000076D 和 MCAN_ECR:0x00110088
     

    PSR 寄存器显示为位 0 错误、TEC 计数为 136、未达到 255、用于总线关闭。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    PSR 寄存器显示为位 0 错误、TEC 计数为 136、总线关闭时未达到 255。

    是的、我看到了。

    但是、LEC 具有 5h ->表示 Bit0Error。  

    您之前说过:

    ACK 不会被传输、它是由 CAN 控制器在接收器端发送的。 这就是 CAN 的协议机制。

    如何检查接收器是否正在发回 ACK?

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    ACK 本身是 CAN 帧格式的一部分。  

    如何检查接收器是否发回 ACK?

    如果接收器成功接收到消息、它会用显性 (0) 位覆盖隐性位。  如果您的接收器正确接收、发送器将监视此 ACK 时隙、将自动完成此操作。  如果它检测到隐性位(意味着未确认接收器)、则会标记 ACK 错误。  

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    PSR 寄存器显示为位 0 错误、TEC 计数为 136、总线关闭时未达到 255。

    需要澄清的是、在发送消息后、我是否应该阅读这些寄存器?

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    在总线关闭状态或重新传输消息之前、您需要读取这些寄存器。  

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    因此、我在以下位置读出寄存器值:

    1. MCAN_enableIntrLine (TX & Rx) 之后和 MCAN_txBufTransIntrEnable (TX) 之前

    2.在 MCAN_txBufAddReq 之后和 while (McanIsrIntr5Flag) 之前

    在这两种情况下、寄存器中的值相同:
    MCAN_ECR:  0x00000000
    MCAN_PSR:  0x0000070F

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    对不起,我在过去两天生病了,不能在这里回复。

    在这两种情况下、寄存器中的以下值相同:
    MCAN_ECR:  0x00000000
    MCAN_PSR:  0x0000070F

    此阶段没有错误、LEC 和 DLEC 为 7、此时节点实际上处于空闲状态。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tarun、

    抱歉、我在过去 2 天生病了

    哦,我希望你现在感觉更好了!

    我设法做到了 部分解决我的问题 、但我不能完全确定什么变化实际上解决了这一问题。 我对我的代码进行了几次更新、也许您可以帮助我诊断哪个代码很关键。

    我所做的更改:

    1. 手动引脚多路复用配置
    尽管 MCAN5 和 MCAN9 引脚已在中配置J721E_pinmux_data.c、但我添加了以下手动引脚多路复用行:

    /* Pinmux for MAIN_MCAN5 */
    *(volatile unsigned int *)(0x0011c04c) = 0x60006;
    *(volatile unsigned int *)(0x0011c050) = 0x60006;
    
    /* Pinmux for MAIN_MCAN9 */
    *(volatile unsigned int *)(0x0011c0cc) = 0x60006;
    *(volatile unsigned int *)(0x0011c0d0) = 0x60006;
        

    2. MCAN 环回使能调用
    以前我省略了下面一行。 但添加后、MCAN5 和 MCAN9 之间的通信开始工作:

    MCAN_lpbkModeEnable(baseAddr, MCAN_LPBK_MODE_INTERNAL, (uint32_t) FALSE);

     是这个调用 必填 是什么?

    新问题:MCU_MCAN0 <-> MAIN_MCAN0 通信失败

    我尝试了同样的测试 MCU_MCAN0 MAIN_MCAN0 是的 通过电线进行物理连接 、但通信无法正常工作。 所有四个 CAN 外设使用的代码相同。

    对于中断、我使用:  

    #define MCU_MCAN0_INT0     CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN0_MCANSS_MCAN_LVL_INT_0
    #define MCU_MCAN0_INT1     CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN0_MCANSS_MCAN_LVL_INT_1
    #define MCAN0_INT0         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_0
    #define MCAN0_INT1         CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTRTR0_OUTL_1

    我还需要吗 手动配置 pinmux 指定 MCU_MCAN0 MAIN_MCAN0 就像我对 MCAN5 和 MCAN9 所做的那样?

    此致、
    Tamas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现了这个问题! 引脚配置本身正确、但出于某种原因、它未按预期应用或运行、导致 TX 和 RX 引脚无法正常工作。 非常感谢您的帮助!

    此致、
    Tamas