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.

[参考译文] BOOSTXL-BUCKCONV:代码中的 ISR 未执行

Guru**** 2559610 points
Other Parts Discussed in Thread: LAUNCHXL-F280025C, BOOSTXL-BUCKCONV, TIDM-DC-DC-BUCK, POWERSUITE, C2000WARE, SYSBIOS, SFRA, LAUNCHXL-F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/989054/boostxl-buckconv-isr-in-the-code-not-executing

器件型号:BOOSTXL-BUCKCONV
主题中讨论的其他器件:LAUNCHXL-F280025CTIDM-DC-DC-BUCKpowerSUITEC2000WARESYSBIOSSFRALAUNCHXL-F280049C

我修改  了 BOOSTXL-BUCKCONV (在 TIDM-DC-DC-BUCK 转换器中)基于 F28004x 的示例代码、使其在 LAUNCHXL-F280025C 上运行。  

我的问题是代码没有运行 ISR,就是 BUCK_main.c。 如下图所示、第159行中的断点显示了编译的代码中没有一部分的函数。

ISR 位于第159行下面、也不会进行编译。

请尽快帮助解决此问题。  

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

    Ajit、

    现在、我将假定您的工程已编译并加载、没有错误。  可能是在启用了优化后、编译器删除了该特定行、因此 Breakpoint Manager 无法找到要停止的确切指令块。

    尝试在 BUCK_runIsr 函数内的另一条指令上设置断点、和/或查看禁用优化是否能够避免此特定问题。

    Tommy

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

    您好、被叫方、

    感谢您的快速响应。 我想优化已关闭(请查看下面以确保正确)。

    我确实会遇到编译后错误、如下所示(左图)。 尽管我无法解决此问题、但代码在加载时不会出现错误(正确的图像)。

      

    我确实在 Buck_isr ()内放置了断点。 它显示的消息与下面的消息相同:  

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

    Ajit、

    您是否使用 BUCK 项目而不是 BUCK_nonpowerSUITE 项目来设定软件端口的基准? 编译后处理似乎正在寻找未传输到您的自定义编译的 powerSUITE 元素。

    我在构建选项中看到"-O3"、这应该是优化设置。  您可以在此处找到它:

    Tommy

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

    尊敬的 T Lee:

    优化关闭后、我至少可以放置断点、它不会给代码带来未编译的错误。 但是、代码看起来仍然不运行。 我观察了正在计数的 EPWM TB 计数器、但 观察窗口中的 BUCK_isrEnter_TICKs 为0。  

    为了启动项目、我导入了从 Resource Explorer 中投影的 BUCK_F28004x、并对其进行了编辑。

    是否有不同的非电源套件项目可用?  

    -Ajit

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

    Ajit、

    这至少是一个改进。

    我建议检查与表达式窗口中 ISR 中断触发相关的 PIEIERn 和 PIEIFRn 寄存器位、以查看它们是否已设置。 您还应该能够在运行时插入 PIEIFRn 位来模拟中断触发器、并查看 ISR 是否是在响应中执行的。

    如果这不起作用、可能是一些全局中断设置或矢量表映射。 如果正常工作、可能是模块级中断配置问题。

    非 powerSUITE 工程可直接从以下文件系统导入: ~\C2000Ware_DigitalPower_SDK_XXXX\solutions\TIDM_dc_dc_buck\f28004x\ccs\buck_nonpowerSUITE.projectspec

    我认为您当前项目不会出现任何功能问题;只是令人厌烦的警告。

    Tommy

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

    尊敬的 T Lee:

     INT_ADCC1 是 ISR 的触发源。 PIEIFR 位未设置为1。 我无法从 GUI 切换 PIEIFR 位。

    此外,由于我使用的是 INT_ADCC1,VECT 地址是否应为0x0D44?

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

    Ajit、

    根据 F28002x TRM 中的 CPU 中断矢量表、0xD26的地址映射到非法指令(ITRAP)中断、因此器件可能在某个时间到达那里。

    我从 PIEACK 中看到组1正在等待 ACK。 尝试通过 GUI 在断点时向该位写入1来清除它。

    还要检查 ADCC ADCINTFLG 和 ADCINTOVF 寄存器、查看是否存在溢出状态。  当 ADC 溢出时、它将停止发出触发信号。

    Tommy

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

    尊敬的 T Lee:

    链接器文件中是否可能存在错误?

    我在从基于 F28002x.Commented RAMLS5的示例中获得的链接器文件之一中进行了以下更改、并将地址包含在 RAMLS4_5中、并替换到其他任何位置

    /*本地共享 RAM (CPU、HIC、BGCRC)*/
    RAMLS4_5:origin = 0x0000A000、length = 0x00001000 //片上 RAM 块 LS4 *
    //RAMLS5:origin = 0x0000A800,length = 0x00000800 //片上 RAM 块 LS5 */
    RAMLS6_7:origin = 0x0000B000,length = 0x00001000 //片上 RAM 块 LS6 */
    // RAMLS7:origin = 0x0000B800,length = 0x00000800 //片上 RAM 块 LS7 */

    在最初的文件中、代码没有编译、但在 进行了上述修改后、代码现在会编译。 此外、PIE 矢量现在正确、开环 VMC 正常运行。  

    但 ISR 似乎仍不运行:收到相同的未关联代码消息。  

    我确实看到 ADCC_INT1的 ADCINTOVF 位被置位。  

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

    Ajit、

    在链接器中组合相邻段是有效的、这样做没有任何问题。  您是否已将 F28004x 示例中的所有链接器指令(如 GROUP、LOAD、库段等)移植到 F28002x?  编译器可能无法确定 ISR 的正确放置。

    Tommy

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

    尊敬的 T Lee:

    我使用  的是"两相交错式 LLC 谐振转换器"中的链接器文件、仅进行上述修改。

    以下是文件的内容。 很抱歉、我无法在此处附加任何文件、错误。

    存储器


    开始:origin = 0x00080000,length = 0x00000002
    BOOT_RSVD:origin = 0x00000002,length = 0x00000126
    BOOT_RSVD_SYSBIOS:origin = 0x00000128、length = 0x00000080
    复位:origin = 0x003FFFC0,length = 0x00000002

    /* RAM 块*/
    /*专用 RAM (仅 CPU)*/
    RAMM0:origin = 0x00000200,length = 0x00000200 //片上 RAM 块 M0 */
    RAMM1:origin = 0x00000400,length = 0x00000400 //片上 RAM 块 M1 */

    /*本地共享 RAM (CPU、HIC、BGCRC)*/
    RAMLS4_5:origin = 0x0000A000、length = 0x00001000 //片上 RAM 块 LS4 *
    //RAMLS5:origin = 0x0000A800,length = 0x00000800 //片上 RAM 块 LS5 */
    RAMLS6_7:origin = 0x0000B000,length = 0x00001000 //片上 RAM 块 LS6 */
    // RAMLS7:origin = 0x0000B800,length = 0x00000800 //片上 RAM 块 LS7 */

    /*全局共享 RAM (CPU、HIC、DMA)*/
    RAMGS0:origin = 0x0000C000,length = 0x00000800 //片上 RAM 块 GS0 */

    /*闪存扇区*/
    /*组0 */
    FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE //片上闪存*
    FLASH_BANK0_SEC1:origin = 0x081000、length = 0x001000 //片上闪存*
    FLASH_BANK0_sec2:origin = 0x082000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC3:origin = 0x083000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC4:origin = 0x084000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC5:origin = 0x085000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC6:origin = 0x086000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC7:origin = 0x087000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC8:origin = 0x088000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC9:origin = 0x089000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC11:origin = 0x08B000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC12:origin = 0x08C000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC13:origin = 0x08D000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC14:origin = 0x08E000、length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC15:origin = 0x08F000、length = 0x001000 //片上闪存*

    BootROM:origin = 0x003F0000,length = 0x00008000
    BootROM_EXT:origin = 0x003F8000,length = 0x00007FC0


    部分

    codestart:>开始
    .text:>> flash_BANK0_sec2 | flash_BANK0_SEC3 | flash_BANK0_SEC4 | flash_BANK0_SEC5
    .cinit:> flash_BANK0_SEC1
    init_array:> flash_BANK0_SEC1
    .switch:> FLASH_BANK0_SEC1
    .reset:> reset type = DSECT

    .data :> RAMM0
    .stack:> RAMM1

    .bss:> RAMLS4_5
    .sysmem:> RAMM0
    .const:> FLASH_BANK0_SEC5



    .TI.ramfunc

    l sfra_F32_TMU_eabi.lib

    ramfuncs
    isrcodefuncs
    Dclfuncs

    LOAD = FLASH_BANK0_SEC6、
    运行= RAMLS6_7、
    Load_start (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    run_size (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐(4)

    SFRA_F32_Data:> RAMLS4_5,ALIGN = 64

    FPUmathTables :> FLASH_BANK0_SEC6

    暂存区:>RAMLS4_5.
    controlVariables:> RAMLS4_5

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

    尊敬的 T Lee:

    这是关于 SFRA :我正在做 Lab1 SFRA 部分。 Start Sweep (开始扫描)按钮呈灰色显示、如下所示。 COM 端口已连接。 请您也就此提供帮助。  

    谢谢、

    Ajit

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

    Ajit、

    您是否能够确认 ISR 正在执行? 我建议您不要尝试使用 SFRA、直到您确定基本软件按预期运行。 SFRA 在系统上运行、因此存在多种故障源。

    关于"Code not associated (代码未关联)"消息、您可以检查在构建项目时生成的.map 文件、以查看 ISR 代码所在的位置。  然后、您可以使用"Disassembly"视图在该视图中设置断点。  在系统运行时、切换 ISR 中的 GPIO 并查找该活动也很有用。

    Tommy

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

    尊敬的 T Lee:

    很抱歉、我 之前忘记了这一点。 为了解决 ADCINTOVF 位设置问题、我在 它的末尾的 Buck_ISR 函数中包含了以下行(黄色标记)。

    完成此修改后、我现在可以看到 ISR 正在运行、BUCK_ISR_TICKs 更新值。  

    映射文件显示以下位置。  

       

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

    尊敬的 T Lee:

    理想情况下、清除这些中断标志的顺序是什么:PIE ACK、清除 ADCINTOVF 和 清除 ADCINTFLG。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="283871" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/989054/boostxl-buckconv-isr-in-the-code-not-executing/3656100 #3656100"]修改后、我现在可以看到 ISR 正在运行、BUCK_ISR_TICKs 更新值。  [/报价]

    听说您最终运行了 ISR、这一点很好。

    [引用 userid="283871" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/989054/boostxl-buckconv-isr-in-the-code-not-executing/3656650 #3656650"]Ideally、清除这些中断标志的顺序应该是什么:PIE ACK、清除 ADCINTOVF 和 清除 ADCINTFLG。  [/报价]

    由这些信号表示的硬件模块以并行方式运行、因此只要它们都在同一源的下一个中断再次生成之前被清除、服务顺序就无关紧要。

    我应该指出的是、ADCINTOVF 位被设计用来指示中断的实时处理中的故障。 如果系统突然重新启动并且未处理挂起的 ADC 中断、那么在初始化期间可能会设置一些位。 但是、您不应期望在正常运行期间看到任何有效的 ADCINTOVF 位。

    [引用 userid="283871" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/989054/boostxl-buckconv-isr-in-the-code-not-executing/3656029 #3656029">这是关于 SFRA :我正在做 Lab1 SFRA 部分。 Start Sweep (开始扫描)按钮呈灰色显示、如下所示。 COM 端口已连接。 请您也就此提供帮助。  [/报价]

    我对这种行为不是很熟悉。 您能否为本主题开始新主题? 引入 SFRA 专家将更容易。

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

    "我应该指出、ADCINTOVF 位被设计用来指示中断的实时处理中的故障。 如果系统突然重新启动并且未处理挂起的 ADC 中断、那么在初始化期间可能会设置一些位。 但是、您不应期望在正常运行期间看到任何有效的 ADCINTOVF 位。"

    在28004x 的原始代码中,在 main()开头初始化所有内容时,清除了所有上述3个 FLAG,但在 Buck_ISR 内部,ADCINTOVF 未被清除。 根据您刚才所说的话、这是否是一个问题?

    谢谢、

    Ajit

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

    Ajit、

    是的、我会担心系统问题。 在 ISR 中清除中断标志后立即记录 EPWM 计数器或添加 GPIO 切换、然后在清除标志之前检查 EPWM -> ADC SOC 是否可能被触发、这可能会有所帮助。

    我还回复了关于使用 F28002x 进行 BOOSTXL-BUCKCONV 评估的另一篇博文(从全新角度): https://e2e.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/990152/boostxl-buckconv-migrate-buck-application-from-f280049c-to-f28002x-family

    我认为在这里、使用原生 LAUNCHXL-F280049C 也是一个可行的建议。

    Tommy

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

    嗨、Tommy、

    非常感谢。 现在一切似乎都正常、我能够同时运行开环和闭环。  

    对于闭环 PCMC,在有源负载关闭的情况下,我看到 VOUT 如下所示。 这可能发生在电感器电流变为负值的情况下。

    在有源负载使能和持续负载(非负 IL)的情况下、这种方法非常好。  

    您能否确认 F280049x 中是否未发生这种情况?  

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

    Ajit、

    我很高兴听到您已启动并在运行。

    是的、在断续导通模式下运行时、PCMC 输出可能会变得不稳定。 TIDM-DC-DC-BUCK 指令要求启用 PCMC 实验室的持续负载。

    Tommy

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

    嗨、Tommy、

    它不是真正的不连续模式、它是电感器电流变为负值时的 CCM 运行模式。 这意味着环路的 TF 函数不会改变。 您是否知道为什么它会显示此行为? 这里唯一重要的是跳闸的电感器电流峰值为正值。  

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

    Ajit、

    我不是电力转换理论的专家、因此我建议在公共领域寻求信息或研究以进行分析。

    我的理解是、当电感器变为0A 或负时、转换器被视为处于 DCM、并且两种模式之间的传递函数不同、因此当转换器在 CCM 和 DCM 之间移动时、可能会出现不连续性。

    Tommy