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.

[参考译文] TMS320F280049C:F280049调试问题。

Guru**** 2523990 points
Other Parts Discussed in Thread: C2000WARE, SFRA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1036277/tms320f280049c-f280049-debug-problem

器件型号:TMS320F280049C
主题中讨论的其他器件:C2000WARESFRA

您好。工程师 k Ω

我们公司正在进行一个基于 F280049C 的项目。 在调试过程中、我发现系统程序可以在 ADC 中断期间正常运行、 但是、ADC 中断后主循环中的其他函数无法正常运行、因此当 ADC 中断后出现问题时、我单步运行、这种情况并不是固定的、例如我上传的三张图片。 我希望您能帮助我评估和查看问题所在。

谢谢。

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

    您好!

    从照片上看,它没有告诉我任何东西。 您可以在 C2000ware ADC 示例中重新创建问题吗? 否则、您可以提供我们可以复制的项目的净尺寸版本、然后我们可以查看。

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

    感谢您的关注和回复。

    我没有使用 ADC 采样程序、这种情况在我编写的程序中不容易重现。

    本段是我的 ADC 中断函数:

    #ifdef control_Running_ON_CPU
    #pragma CODE_SECTION (ISR1、"isrcodefuncs");
    #pragma INTERRUPT (ISR1、HPI)
    中断空 ISR1 (空)

    采样 Vout 后、ADC 每隔 ePWM 周期触发一次// ISR。
    // ADC 应在周期中足够早的采样以便 ISR 写入
    //进行影子加载之前更新的驱动值。
    //
    //DEVICE_DELAY_US (1);
    TOP_updateSupplyMode();
    TOP_runIsr();

    #endif

    目前遇到的问题的逻辑非常简单、即在调试在线调试过程中、程序突然进入一个非常奇怪的状态。 在线调试可以看到 ADC 中断功能可以正常运行。 当程序指针从中断中跳出时、调试系统将出现在上面显示的界面中、可以发现主循环中的所有函数都不会运行。

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

    您好、Ford、

    您能否检查项目中是否使用了正确的链接器 cmd 文件? 此外、请尝试运行 C2000Ware 下提供的任何 ADC 示例、以排除应用代码以外的其他问题。

    谢谢
    Vasudha

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

    感谢你的答复。
    经过两天的调查后、我发现上述问题与 eCAP 有关。 由于 F280049的 PWM 接口已被我们占用、我使用 eCAP 的 APWM 模式来控制风扇的速度、然后发现当 ECAP_setAPWMShadowImage Compare (ECAP1_base、1200)设置为1200 (ECAP_O_CAP1为4000)时、调试中将暂停。 ,函数指针跳转到 void Interrupt_illegalOperationHandler (void)以显示非法步骤。

    当然、我知道无法为 eCAP 影子寄存器设置值来导致此类问题、只有当值介于1200-1450之间时才会出现此问题。 所以我继续研究并发现 SFRA 库的使用是相关的。 在我屏蔽了主循环任务为1毫秒的 SFRA_GUI_runSerialHostComms (x)函数之后、将不会发生调试中断。 目前,问题只在这里出现。 我还阅读了 SFRA_USER_guide 以解释 SFRA_GUI_runSerialHostComms (x)是为了保持 SFRA GUI 连接处于活动状态、需要将其置于10毫秒的任务中。 我还不知道我是否将1毫秒的任务用于导致上述情况、所以我仍在调查。

    我希望您能帮我分析是否还有其他原因。 为什么在1毫秒任务中调用 SFRA_GUI_runSerialHostComms (x)函数、然后使用 eCAP 将值1200分配给 ECAP_O_CAP4。 将会出现问题。 这两者有什么影响?

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

    你好!

    无法上传公司项目计划、但我使用您的官方示例重现问题。 希望大家能给我解释一下。

    我以 C2000Ware_DigitalPower_SDK_3_01_00_00/solutions/TIDM_dc_dc_buck 为例。 我只将 eCAP 函数添加到 BUCK_main.c 文件中。 问题的发生就像我回答的另一个问题一样。 在以下两个最终程序中出现问题:

    1 μ A、

    //
    // ISR1()中断函数
    //
    #ifdef BUCK_CONTRAL_Running_ON_CPU
    #pragma CODE_SECTION (ISR1、"isrcodefuncs");
    #pragma INTERRUPT (ISR1、HPI)
    中断空 ISR1 (空)

    //
    采样 Vout 后、ADC 每隔 ePWM 周期触发一次// ISR。
    // ADC 应在周期中足够早的采样以便 ISR 发送到 writee2e.ti.com/.../buck_5F00_F28004x.rar
    //进行影子加载之前更新的驱动值。
    //
    BUCK_runIsr();
    ECAP_setAPWMShadowImage 比较(ECAP1_BASE、1200);

    #endif

    2、μ A

    空 A2 (空)

    //
    // SFRA GUI 的服务 SCI 链接
    //
    BUCK_SFRA_GUI_RUN_comms (&BUCK_sfra);

    //
    //下次 CpuTimer0递减到0时执行任务 A3
    //
    A_Task_ptr =&A3;

    如果 ECAP_setAPWMShadowImage Compare (ECAP1_base、1200);和 BUCK_SFRA_GUI_RUN_comms (&BUCK_sfra)同时存在、则调试中将出现 void Interrupt_illegalOperationHandler (void)问题、单独屏蔽其中一个函数、问题不会再次出现。

    我还根据您的官方示例上传了修改后的程序。 希望您能帮我解决这个问题、谢谢!

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

    您好!

    执行 ECAP_setAPWMShadowImage Compare (ECAP1_base、1200)后、您是否能够查看 PWM 输出?

    此致、

    Nirav

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

    e2e.ti.com/.../2273.buck_5F00_F28004x.rar

    你(们)好

    这应该是可能的、但现在调试中将出现非法的软件中断。 这是我修改的官方例行程序。 还有我提到的问题。 您可以下载并查看。

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

    您好!

    让我们花几天时间来了解这一点、还需要与 SFRA 专家进行讨论。

    此致、

    Nirav

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

    您好、Ford、

    我正在尝试重复您的问题、但我不清楚这些步骤。 我获取了您的代码并进行了编译、但我看到 BUCK_CONTRAL_Running_ON_CPU 未定义、这意味着不调用您的 ECAP 函数。 可能项目导入不正确、syscfg 文件存在问题。

    #ifdef BUCK_CONTROL_RUNNING_ON_CPU
    #pragma CODE_SECTION(ISR1,"isrcodefuncs");
    #pragma INTERRUPT(ISR1, HPI)
    interrupt void ISR1(void)
    {
        //
        // ISR is triggered by the ADC every EPWM cycle after Vout is sampled.
        // ADC should sample early enough in the cycle for the ISR to write
        // the updated actuation values before the shadow loads take place.
        //
        BUCK_runIsr();
        ECAP_setAPWMShadowCompare(ECAP1_BASE, 1200);
    }
    
    #endif

    我还尝试 直接从 SDK 版本导入工程、并在突出显示的位置添加 ECAP 函数。 但在这里、我不清楚如何重现您的问题。 我只需运行程序并等待出现故障、还是必须暂停/恢复才能看到问题?  

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

    您好!

    首先、这是您的 C2000Ware\C2000Ware_DigitalPower_SDK_3_01_00_00_setup\C2000Ware_DigitalPower_SDK_3_01_00_00\solutions 提供的官方示例。 在我重新定义 BUCK_CONTRAL_Running_ON_CPU 之后、让中断返回正常状态、然后仍然出现运行问题。 同时、ECAP_setAPWMShadowImage Compare (ECAP1_base、1200);不一定要将中断置于中断上才能导致问题、1毫秒的任务也会导致问题。

    其次,我的英文描述可能不是很标准,这可能不能让你看到问题的位置。我在下面提供了图示步骤,你可以尝试一下。

    1、调试运行程序

    2、点击"继续"按钮

    3、程序运行一段时间后,图片中的问题将出现。

    如果禁用 ECAP_setAPWMShadowImage Compare (ECAP1_base、1200)和 BUCK_SFRA_GUI_RUN_comms (&BUCK_sfra)的其中一个函数、则问题不会再次出现。

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

    我忘记回答另一个问题。 尽管 BUCK_CONTRAL_Running_ON_CPU 未在程序代码中定义、但它在"属性/预定义符号"中定义。

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

    您好、再说一次、

    我尝试了所有您概述的相同步骤、但我仍然无法重复您看到的问题。 在下面、您可以看到我添加 ECAP 函数调用的位置。 每次我"恢复"和"暂停"程序时、CCS 都会显示代码在源代码中停止。  

    //
    // ISR1() interrupt function
    //
    #ifdef BUCK_CONTROL_RUNNING_ON_CPU
    #pragma CODE_SECTION(ISR1,"isrcodefuncs");
    #pragma INTERRUPT(ISR1, HPI)
    interrupt void ISR1(void)
    {
        //
        // ISR is triggered by the ADC every EPWM cycle after Vout is sampled.
        // ADC should sample early enough in the cycle for the ISR to write
        // the updated actuation values before the shadow loads take place.
        //
        BUCK_runIsr();
        ECAP_setAPWMShadowCompare(ECAP1_BASE, 1200);
    }
    
    #endif

    您是否在 TI EVM 上运行示例代码? 我在 F280049C LaunchPad 上运行它。 我直接从 SDK 导入了 BUCK_F28004x 项目、并进行了 ECAP 修改。  

    回到最初的问题、正如您可能已经知道的、停止和启动代码执行是具有侵入性的。 如果您还没有使用 CCS 实时调试模式、我建议您使用该模式。  

    https://www.youtube.com/watch?v=gVDRo9m-4ng

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

    你好!

    我发现了这个问题、因为它在我们项目中的最小系统板上运行,在您昨天回答我之后、我尝试在 f280049c launchpad 上运行、 但我没有看到问题,在昨天的测试之后、我发现最小的系统板布局应该有问题。

    再次感谢您的回复、我发现了问题、谢谢!