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.

[参考译文] J721EXSOMXEVM:不同内核 (MCU3_0 - MAINRF 1_0) 上的 R5F mcspi 示例、回调不工作

Guru**** 2454880 points
Other Parts Discussed in Thread: TDA4VM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1549912/j721exsomxevm-r5f-mcspi-example-on-a-different-core-mcu3_0---mainrf-1_0-callbacks-not-working

器件型号:J721EXSOMXEVM
Thread:DRA829TDA4VM 中讨论的其他器件

工具/软件:

我们一直在 EVM 开发板上与 J721e 处理器的主域 MCU2_0 RF5 处理器配合使用。 在测试和试验过程中、我们使用 GESI 扩展板使 SPI6 成为从器件并使用回调接收 SPI 数据。

但是、当我们为主域 MCU3_0 处理器构建并在其上运行时、永远不会调用回调。 这就好像中断没有正常工作或没有正确映射。 下面您将看到我们正在进行的一些设置。

我们已经了解了 RTOS PDK 中的 mcspi 示例、我们可以看到的唯一区别是我们使用的是中的存储器设置

${pdk_source_DIR}/packages/ti/drv/ipc/examples/common/j721e/freertos/linker_r5f_{target_core}_freertos.lds
其中这些示例使用以下特殊示例、这些特殊示例仅针对 MCU2_0 和 MCU2_1 进行设置、因为这就是示例所用的设置。
${PDK_SOURCE_DIR}/packages/ti/drv/spi/example/mcspi_slavemode/j721e/linker_mcu_freertos.lds



    // Initialize the SPI driver
    SPI_init( );

    // Set up the SPI for transmit
    SPI_Params        spiTxParams;
    SPI_Params        spiRxParams;

    // Domain/instance
    uint32_t rxDomain = SPI_MCSPI_DOMAIN_MAIN;
    uint32_t txDomain = SPI_MCSPI_DOMAIN_MAIN;
    uint32_t rxInstance = MCSPI6_CONFIG_IDX;
    uint32_t txInstance = MCSPI3_CONFIG_IDX;

    MCSPI_socInit( );

    //
    // Initialize the SPI configuration for RX
    //
    SPI_HWAttrs spiCfgRx;
    SPI_socGetInitCfg(rxDomain, rxInstance, &spiCfgRx);
    spiCfgRx.enableIntr = BTRUE;
    spiCfgRx.edmaHandle = NULL;
    spiCfgRx.dmaMode = BFALSE;

    /* Set the SPI init configurations */
    spiCfgRx.chNum = RX_SPI_CHAN;
    spiCfgRx.chnCfg[RX_SPI_CHAN].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_1; // D0: MOSI; D1: MISO
    spiCfgRx.chnCfg[RX_SPI_CHAN].tcs = MCSPI_CS_TCS_0PNT5_CLK;
    spiCfgRx.chnCfg[RX_SPI_CHAN].trMode = MCSPI_RX_ONLY_MODE;
    spiCfgRx.chnCfg[RX_SPI_CHAN].enableFIFO = 1;
    MCSPI_configSocIntrPath(rxInstance, &spiCfgRx, BTRUE);
    SPI_socSetInitCfg(rxDomain, rxInstance, &spiCfgRx);

    UART_printf("SPI RX: Setup for domain: %d, instance: %d, channel: %d, intNum: %d\n", rxDomain, rxInstance, RX_SPI_CHAN, spiCfgRx.intNum);

    SPI_Params_init(&spiRxParams);
    spiRxParams.mode = SPI_SLAVE;
    spiRxParams.transferMode = SPI_MODE_CALLBACK; //SPI_MODE_BLOCKING;
    spiRxParams.transferCallbackFxn = SpiRxCallback;
    spiRxParams.transferTimeout = SemaphoreP_WAIT_FOREVER;
    spiRxParams.frameFormat = SPI_POL1_PHA0;
    spiRxParams.dataSize = 8; // 8 bytes
    spiRx = SPI_open(rxDomain, rxInstance, &spiRxParams);
    if ( NULL == spiRx )
    {
        UART_printf("Error initializing Rx SPI%d\n", rxInstance);
        return;
    }
    McSPISetSlaveChipSel(spiCfgRx.baseAddr, spiCfgRx.chNum, 1); // USE CS1
    UART_printf("Rx SPI%d opened successfully.\n", rxInstance);

我们的问题是、我们是否可以研究一些建议或步骤、以便了解在从一个 MCU 迁移到另一个 MCU 时为什么这样做不起作用?

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

    您好:

    您是否将中断路由更改为 MCU3_0 内核?

    如您所说、默认示例在 MCU2_0 内核上使用、如果您将其更改为 MCU3_0、您需要更改相应的链接器文件、存储器映射等。

    此致

    Tarun Mukesh

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

    如我在第一篇文章中所述、我们会使用与 mcub3_0 对应的 PDK 不同的链接器文件。  我不知道有任何特定于中断路由的文件。 您能告诉我在哪里可以找到这些资源吗?

    我们所说的代码中  

    MCSPI_configSockIntrPath (rxInstance、&spiCfgRx、BTRUE);
    SPI_sockSetInitCfg (rxDomain、rxInstance、&spiCfgRx);

    这是否不会映射所描述的中断?

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

    我会更新一下。

    我们尚未解决此问题、但通过手动停止处理器、并使用 JTAG 调试器手动将 199 个中断号写入 R5FSS0_INTRTR0 路由字段、我们确实使其临时工作。

    我们一直在研究非常令人困惑的技术参考手册 (SPRUIL J721e DRA829/TDA4VM/AM58P 处理器器件版本 1.1)。 在该手册中、第 9.4 节介绍了中断路由器和映射。

    我们无法从本文档中找出几个问题。

    - R5FSSX_COREX 中断映射和 R5FSSX_INTRTR0 映射之间有什么区别?

    -中断控制器如何知道中断针对哪个处理器?

    -如果配置了 R5FSS0_INTRTR0 或 R5FSS1_INTRTR0 是重要的,还是两者都做相同的事情?

    我在文档中找不到如 Code Composer Studio 所示的路由寄存器定义。 一个存在吗?

    我们欢迎您在这方面继续努力并提供意见。

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

    您好:

    让我在这里更清楚地说、

    您正在使用 MCU3_0 内核上的 MCSPI6 实例。 该 MCSPI6 不直接连接到内核 MCU3_0、两者之间有一个中断路由器

    流程如下所示:

    MCSPI6-->中断路由器-->内核

    对于 MCU3_0 内核中断路由器 、为 R5FSS1_INTRTR0_IN_194 至_199、内核中断号如下所示

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

    对于 MCU2_0、中断路由器为   R5FSS0_INTRTR0_IN_194 至_199

    根据您需要在相应中断路由器上获得中断的内核、还会进行选择。 对于 MCU3_0、中断路由器为 R5FSS1_INTRTR0、而不是 R5FSS0_INTRTR0   

    此致

    Tarun Mukesh

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

    Tarun、  

    感谢您提供此信息。 我们已经明白我们要经过一个中断路由器、我们也知道我们必须在 Enable 字段中映射正确的编号、在本例中为 199(不要与  9.4.3.6 节中的 R5FSS1_INTRTR0_IN_198 内部网络名称相混淆)。

    我们不清楚 SS0 代表 MCU2_X、SS1 代表 MCU3_X  这似乎是有意义的。  

    注意:

    注释。 我们现在在 MCU3_0 上运行了 SPI6 中断。 然而、我们 做了 0 代码更改。 在我们调试软件或硬件并查看寄存器之前、软件或硬件似乎没有接受写入它的值。 然后事情开始起作用。

    当我们尝试使回调在 MCU2_0 上正常工作时、我们又看到了这一点。  我们没有更改代码、只使用 JTAG 调试器查看寄存器、然后事情开始起作用。

    这似乎是一个令人不安的异常、我们现在已经看到过两次。

    注 2:

    我认为 TDVA4VM 技术参考手册中有错误。  各图 9.3.2.7 和 9.3.2.8 部分显示应该有 432 个 (0:431) 外设中断源。 但是、在第 9.4.3.6 节和第 9.4.3.7 节列出的表格中、仅列出 342 个 (0:341) 来源。 似乎他们可能已经得到了他们的 4 和 3 逆转。

    文档:SPRUIL:


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

    您好:

    这很奇怪的一点 1 你已经提到。

    让我来研究第 2 点的 TRM、并根据需要提交一个错误。

    此致

    Tarun Mukesh

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

    感谢你的帮助。 现在、我们对中断系统有了更好的了解。