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.

[参考译文] F29H850TU:未触发 CAN 中断。

Guru**** 2914580 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1640163/f29h850tu-can-interrupt-is-not-getting-triggered

器件型号: F29H850TU
主题: SysConfig 中讨论的其他器件

您好团队:

我已在 Sysconfig 中配置 CAN 中断。刚刚尝试从 CAN 接收和发送数据 、但未触发中断。 在 ISR 中、只切换 LED。

 image.png image.png

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

    您好、能否指定示例名称。

    您还能告诉我们您使用的是 LaunchPad 还是控制卡吗? 您是否已 根据确定项目的构建配置。

    此致

    库纳尔  

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

    您好 Kunal、

    我正在使用 mcan_ex6_TRANSMIT_syscfg 示例、并出于接收目的进行了一些修改。

    使用 LaunchPad 并相应地完成构建配置。

    ...

    谢谢!!

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

    轮询传送和接收工作正常、中断传送和接收不工作。

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

    尊敬的 Sayali:

    我看到该示例开箱即用后不支持 LaunchPad 选项。

    我只看到的构建配置  

    闪存和 RAM(它们对应于控制卡,可能需要进行其他更改。)

    通常、例如让 LaunchPad 支持包装盒的输出、我们会看到 LaunchPad 配置、如下所示  


    您是否尝试过以下操作:  

    *在 syscfg 中 需要进行迁移时、请将电路板更改为 launchpad 、并在 syscfg 中的 mcan 配置中选择适当的 pinmux、任何其他可能需要修复的选项 (您可以参阅 sysfg 中的 launchpad 图或原理图)  

    如果这样可以解决您的问题、请告诉我。

    此致

    库纳尔。

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

    您好 Kunal、

    我已根据您的建议进行了以下更改

    显示以下警告。 仍然  只看到了闪存和 RAM 的构建配置。

     

    谢谢!!

    Sayali

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

    您好、是、开箱即用时不存在的构建配置。  更改 syscfg 后、该配置等效于 LaunchPad config。 您现在可以选择“RAM“或“Flash“构建配置中的任何一个,然后尝试运行。 请告诉我这是否解决了问题。 然后将分配给 CAN 团队的某个人。

    此致

    库纳尔。

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

    您好 Kunal、

    执行建议的更改后、未触发中断。

    请查看中断问题。

    谢谢

    Sayali

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

    尊敬的 Sayali:  

    将此线程分配给 mcan 团队的某个人。  

    意味着虽然只是为了确定,你能检查你是否已经添加了这个部分 的代码在你的程序中启用中断。

      //
      //在 CPU 中启用 PIPE 全局中断(用于 INT 和 RTINT)和 INT 使能。
      //
      ENINT;
      INTERRUPT_enableGlobal()
     
    这应该出现在 board_init () 之后
    此致
    库纳尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Kunal、

    是、它添加了。

    谢谢!!

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

    您好、  

    我也看到了

     

    在这只选择了“启用 MCAN 中断行 0 “,但未选中寄存器中断行 0 处理程序,您可以“检查该“选项并尝试。  

    (如果要注册两者,可以尝试在启用中断线路选项中启用两个线路中断)


    此外、如果您在 ISR 中使用任何变量、最好将其保持为易失性。

    我已请求重新分配来自 mcan 团队的人员、请期待延迟。

    此致

    库纳尔。

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

    您好 Kunal、

    我已经尝试过此更改。

    谢谢!!

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

    尊敬的 Sayali:  

    如果可能、您可以共享正在使用的 SYSCFG 文件吗? 我可以验证 pinmux 和 CAN 时钟应力是否正确。  

    此致、
    Pranav Siddappa.

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

    您好 Pranav、

    请在下面找到 SYSCFG 文件。

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "F29H85x" --part "F29H850TU9RFS" --package "144RFS" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
     * @v2CliArgs --device "F29H850TU" --package "144RFS" --variant "TMS320F29H850TU9" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
     * @versions {"tool":"1.26.0+4407"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const clocktree = scripting.addModule("/driverlib/clocktree.js");
    const gpio      = scripting.addModule("/driverlib/gpio.js", {}, false);
    const gpio1     = gpio.addInstance();
    const gpio2     = gpio.addInstance();
    const jtag      = scripting.addModule("/driverlib/jtag.js");
    const mcan      = scripting.addModule("/driverlib/mcan.js", {}, false);
    const mcan1     = mcan.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    const divider8       = system.clockTree["MCANACLKDIV"];
    divider8.divideValue = 10;
    
    const divider15       = system.clockTree["PLL_REFDIV"];
    divider15.divideValue = 1;
    
    const multiplier1         = system.clockTree["PLL_IMULT"];
    multiplier1.multiplyValue = 40;
    
    const mux7       = system.clockTree["OSCCLKSRCSEL"];
    mux7.inputSelect = "INTOSC2";
    
    gpio1.$name           = "myGPIO0";
    gpio1.direction       = "GPIO_DIR_MODE_OUT";
    gpio1.gpioPin.$assign = "GPIO19";
    
    gpio2.$name           = "myGPIO1";
    gpio2.gpioPin.$assign = "GPIO15";
    
    jtag.JTAG.$assign        = "JTAG";
    jtag.JTAG.tdoPin.$assign = "GPIO223/TDO";
    jtag.JTAG.tdiPin.$assign = "GPIO222/TDI";
    
    mcan1.$name                   = "myMCAN0";
    mcan1.additionalCoreConfig    = true;
    mcan1.stdFiltsUsed            = [0];
    mcan1.loopbackMode            = false;
    mcan1.dataRatePrescalar       = 0;
    mcan1.fdMode                  = false;
    mcan1.brsEnable               = false;
    mcan1.nomTimeSeg1             = 9;
    mcan1.nomTimeSeg2             = 8;
    mcan1.nomSynchJumpWidth       = 8;
    mcan1.nomRatePrescalar        = 3;
    mcan1.stdFilts                = 1;
    mcan1.enableInterrupt         = true;
    mcan1.interruptLine0Flag      = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
    mcan1.registerInterruptLine1  = true;
    mcan1.interruptLine1Flag      = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
    mcan1.txEventFIFOWaterMark    = 1;
    mcan1.rxFIFO1waterMark        = 1;
    mcan1.rxFIFO0waterMark        = 1;
    mcan1.interruptFlags          = ["MCAN_INTR_MASK_ALL"];
    mcan1.interruptLine           = ["MCAN_INTR_LINE_NUM_1"];
    mcan1.mcan.$assign            = "MCANA";
    mcan1.mcan.mcan_rxPin.$assign = "GPIO65";
    mcan1.mcan.mcan_txPin.$assign = "GPIO64";
    mcan1.periphClock.$name       = "driverlib_perClock0";
    mcan1.periphConfig.$name      = "driverlib_perConfig0";
    mcan1.stdFilt0.$name          = "stdFilt0";
    mcan1.stdFilt0.sfid1          = 4;
    mcan1.stdFilt0.sfec           = "MCAN_STDFILTEC_PRI_FIFO1";

    谢谢!!

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

    尊敬的 Sayali:

    您能否确认预期的标称比特率为 250kbps、数据比特率为 2Mbps? 您是使用这些比特率配置进行传输和接收吗?

    此致、  
    Pranav Siddappa.  

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

    您好 Pranav、

    是的、正确。 PCAN-View 中配置的比特率相同。

    谢谢!!

    Sayali

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

    尊敬的 Sayali:  

    您能否使用下面的文件进行检查? 如果收到任何警告、您可以继续抑制警告。  
    e2e.ti.com/.../untitled.syscfg

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    出现如下错误。

    谢谢!!

    Sayali

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

    您好 Pranav、

    我已解决该错误并尝试刷写代码。 但仍然没有触发中断。

    谢谢!!

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

    尊敬的 Sayali:  

    我看不到任何其他可能妨碍此应用程序工作的问题。 最后、您能否分享整个项目?  
    我将尝试在我这边运行它、并逐行调试它。  

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    请在下面找到 ISR 和 syscfg 文件。

    void INT_myMCAN0_1_ISR()
    {
         timer++;
         GPIO_togglePin(myGPIO0);
             uint32_t intrStatus;
        MCAN_RxNewDataStatus newData;
    
      intrStatus = MCAN_getIntrStatus(myMCAN0_BASE);
    
        MCAN_writeMsgRam(myMCAN0_BASE, MCAN_MEM_TYPE_BUF, 1U, &txMsg);
    
        MCAN_txBufAddReq(myMCAN0_BASE, 1U);
    
        while(MCAN_getTxBufReqPend(myMCAN0_BASE))
        {
        }
    
      MCAN_clearIntrStatus(myMCAN0_BASE, intrStatus);
    
      MCAN_clearInterrupt(myMCAN0_BASE, 1);
    }

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "F29H85x" --part "F29H850TU9RFS" --package "144RFS" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
     * @v2CliArgs --device "F29H850TU" --package "144RFS" --variant "TMS320F29H850TU9" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
     * @versions {"tool":"1.26.0+4407"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const clocktree = scripting.addModule("/driverlib/clocktree.js");
    const gpio      = scripting.addModule("/driverlib/gpio.js", {}, false);
    const gpio1     = gpio.addInstance();
    const gpio2     = gpio.addInstance();
    const jtag      = scripting.addModule("/driverlib/jtag.js");
    const mcan      = scripting.addModule("/driverlib/mcan.js", {}, false);
    const mcan1     = mcan.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    const divider4       = system.clockTree["EPWMCLKDIV"];
    divider4.divideValue = 1;
    
    const divider8       = system.clockTree["MCANACLKDIV"];
    divider8.divideValue = 10;
    
    const divider15       = system.clockTree["PLL_REFDIV"];
    divider15.divideValue = 1;
    
    const multiplier1         = system.clockTree["PLL_IMULT"];
    multiplier1.multiplyValue = 40;
    
    const mux7       = system.clockTree["OSCCLKSRCSEL"];
    mux7.inputSelect = "INTOSC2";
    
    gpio1.$name     = "myGPIO0";
    gpio1.direction = "GPIO_DIR_MODE_OUT";
    
    gpio2.$name = "myGPIO1";
    
    jtag.JTAG.$assign        = "JTAG";
    jtag.JTAG.tdoPin.$assign = "GPIO223/TDO";
    jtag.JTAG.tdiPin.$assign = "GPIO222/TDI";
    
    mcan1.$name                   = "myMCAN0";
    mcan1.additionalCoreConfig    = true;
    mcan1.stdFiltsUsed            = [0];
    mcan1.loopbackMode            = false;
    mcan1.dataRatePrescalar       = 0;
    mcan1.fdMode                  = false;
    mcan1.brsEnable               = false;
    mcan1.nomTimeSeg1             = 9;
    mcan1.nomTimeSeg2             = 8;
    mcan1.nomSynchJumpWidth       = 8;
    mcan1.nomRatePrescalar        = 3;
    mcan1.stdFilts                = 1;
    mcan1.enableInterrupt         = true;
    mcan1.interruptLine0Flag      = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
    mcan1.registerInterruptLine1  = true;
    mcan1.interruptLine1Flag      = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
    mcan1.txEventFIFOWaterMark    = 1;
    mcan1.rxFIFO1waterMark        = 1;
    mcan1.rxFIFO0waterMark        = 1;
    mcan1.interruptFlags          = ["MCAN_INTR_MASK_ALL"];
    mcan1.interruptLine           = ["MCAN_INTR_LINE_NUM_1"];
    mcan1.mcan.$assign            = "MCANA";
    mcan1.mcan.mcan_rxPin.$assign = "GPIO65";
    mcan1.mcan.mcan_txPin.$assign = "GPIO64";
    mcan1.periphClock.$name       = "driverlib_perClock0";
    mcan1.periphConfig.$name      = "driverlib_perConfig0";
    mcan1.stdFilt0.$name          = "stdFilt0";
    mcan1.stdFilt0.sfid1          = 4;
    mcan1.stdFilt0.sfec           = "MCAN_STDFILTEC_PRI_FIFO1";
    
    /**
     * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
     * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
     * re-solve from scratch.
     */
    gpio1.gpioPin.$suggestSolution = "GPIO15";
    gpio2.gpioPin.$suggestSolution = "GPIO16";
    

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

    尊敬的 Sayali:  

    您能否确认此 ISR 用于 RX? 如果无法分享整个项目、您能向我介绍一下您在这里要实现的目标吗? 我想了解 ISR 预计被触发的流程。  

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    在此程序中、目标是验证是否正确触发中断服务例程 (ISR)。 确认 ISR 功能后、相同的逻辑将集成到主应用程序代码中。

    在当前实现中、使用  LINE1 中断。   Rx FIFO1 新消息中断、和 TX 事件新消息中断 已启用。 在 ISR 内、单个 LED 被切换以指示中断执行、数据传输作为中断处理例程的一部分执行。

    请查看并确认是否 需要进行任何其他板级配置或硬件更改、以确保正确触发和执行中断。

    谢谢!!

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

    尊敬的 Sayali:  

    由于 ISR 未被触发、因此消息的接收方式存在问题。 可能存在以下问题:

    • 您是否可以重新检查消息的 ID?
    • 您能否确认收发器是否正确连接?
    • 此外、还应尝试通过示波器跟踪发送到 CAN 节点的信号、以检查消息是否实际发出
    • CAN 模式与元件大小不匹配。 元素大小为 64 字节、未启用 CAN FD 模式。 确认要使用的模式。

    最后、应尝试通过寄存器窗口监控 RXBUF、以确认消息是否实际到达。  
    我很难在没有整个项目应用程序的情况下重新创建。 如果你能把它作为一个整体分享,我可能能够证明更多的洞察力。  

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    问题仍然存在,我已经检查了数据正在发送和接收正确,但中断没有被触发。

    谢谢!!

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

    尊敬的 Sayali:  

    是否有可能共享整个应用程序?

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    您是否可以建议如何共享整个项目? 我无法共享 zip 文件。

    此致、

    Sayali

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

    您好 Pranav、

    我想分享的另一个意见如下。

    在不进行任何修改的情况下运行示例 mcan_ex1_loopback_interrupts 时、我会观察到该 msgCount 值设置为 1。 此外、我还可以在 RX 缓冲区中看到接收到的消息。

    但是、将电路板切换到 144RFS 后、不会再次触发中断。 我也没有在该电路板上观察到预期的中断行为。

    是否需要更改 144RFS 封装的电路板、请建议。

    此致、

    Sayali

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

    尊敬的 Sayali:  

    mcan_ex1_loopback_interrupts 示例使用 Launchpad 上不存在的 CANB 实例。 您可以将实例更改为 Cana/Cancc 以及专用引脚、它就能正常工作。  
    以下是我执行的步骤:  

    • 将配置更改为 LaunchPad:

    • 更改 CAN 实例:
       
    • 编译并运行该应用并检查 msgCount 变量:


    以下是 LaunchPad 引脚排列:
    e2e.ti.com/.../F29H85X-LP-Pinout.pdf

    如果您正在观察 Interrupt0 ISR、则您的观察是正确的、因为它未启用。 因此不会触发。 您可以观察到中断 ISR。  


    此致、  
    Pranav Siddappa.