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


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.
您好。工程师 k Ω
我们公司正在进行一个基于 F280049C 的项目。 在调试过程中、我发现系统程序可以在 ADC 中断期间正常运行、 但是、ADC 中断后主循环中的其他函数无法正常运行、因此当 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 中断功能可以正常运行。 当程序指针从中断中跳出时、调试系统将出现在上面显示的界面中、可以发现主循环中的所有函数都不会运行。
感谢你的答复。
经过两天的调查后、我发现上述问题与 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)问题、单独屏蔽其中一个函数、问题不会再次出现。
我还根据您的官方示例上传了修改后的程序。 希望您能帮我解决这个问题、谢谢!
e2e.ti.com/.../2273.buck_5F00_F28004x.rar
你(们)好
这应该是可能的、但现在调试中将出现非法的软件中断。 这是我修改的官方例行程序。 还有我提到的问题。 您可以下载并查看。
您好、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)的其中一个函数、则问题不会再次出现。
您好、再说一次、
我尝试了所有您概述的相同步骤、但我仍然无法重复您看到的问题。 在下面、您可以看到我添加 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 实时调试模式、我建议您使用该模式。