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.

[参考译文] UCD3138064:启用 DCOMP 的 IRQ 和 FIQ (数字比较器)将导致 UCD3138模块化

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1087053/ucd3138064-enable-irq-and-fiq-of-dcomp-digital-comparator-will-cause-ucd3138-brick

部件号:UCD3138064
“线程”中讨论的其它部件:UCD3138

各位专家:

 当 FE0超过特定值时,我想使用 DCOMP 进行快速中断,当我尝试启用 IRQ 和 FIQ 时,UCD3138将是砖头。 (不能搜索 device_ID,也不能进入 ROM 模式。)

 以下代码是否有任何问题? 如果我去掉了红色的部分,那么运行起来还可以。 我尝试获得 FULTMUXINTSTAT,它显示所有零,所以我认为它不会滞留在无限中断服务例程中。

 ——您能否告诉我如何正确启用 DCOMP 快速中断? 或者,是否有任何文档(应用说明)正在使用 DCOMP 触发快速中断? 请帮帮我。 谢谢你。

静态无效 Interrup_Init(void)
  挥发性 U32温度;

  //Misc.AnalogRegs.CLKTRIM.Bit.HFC_LN_FILTER_EN =0;

  //禁用中断
  disable_interrupt ();
  disable_fast 中断();
    
  /*必须清除中断才能启用中断 */
  TEMP = FaultMuxRegs.FULTMUXINTSTAT.ALL; //读取时清除

  //配置 IRQ,PWM2为10kHz 计时器
  write_reqmask (CIMINT_All_PWM2_COMP | CIMINT_All_Fault_MUX | CIMINT_All_DIGI_COMP);
  //配置 FIQ
  write_firqpr (CIMINT_All_Fault_MUX | CIMINT_All_DIGI_COMP);
  //启用中断
  enable_fast_interrupt ();
  enable_interrupt ();
}
千斤顶
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jack,我们需要查看的代码不是使能代码,而是您为初始化 DCOMP 和处理中断而添加的代码。   

    首先,在测试任何代码更改时,您永远不需要对校验和进行编程。  这尤其适用于修改中断处理的代码。  这样,即使您阻止 PMBus 运行,您也可以重置零件并返回 ROM 模式。  硬件后门试图在启用中断前清除校验和可能很有用,但 如果我尽力的话,即使它也可能被破坏。   

    如果您陷入中断,最重要的两件事是:

    1.确保您清除中断原因-可能是这是从故障状态读取以清除该位

    2.禁用中断源-在本例中为 dcomp.  这样,如果 DCOMP 保持活动状态,中断就不会再发生。   

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

    伊恩,您好!

     感谢 您的提醒。 但是,当我发现代码无法运行 PMBus 处理程序时,通常我会在没有校验和的情况下启动编程固件。哈哈哈。

     对于 DCOMP,奇怪的是,即使我对所有 DCOMP 代码进行了注释,并且只启用 IRQ 和 FIQ (使用上面的代码),固件仍有问题。

     我还尝试不启用 IRQ 和 FIQ,并在打开的插槽板上使用内存调试器检查寄存器值。 我看不到任何 INT STAT 是“1”。 因此,我认为没有真正的 DCOMP 中断会导致问题的发生。 这是检查 DCOMP 中断是否停止固件的正确方法吗?

     -连接了从内存调试器导出的2个文件。 一个已初始化 DCOMP,另一个未初始化。 它们都不启用 IRQ 和 FIQ,并且在使用上述代码启用 DCOMP IRQ 和 FIQ 后,它们都将停止。 请帮助检查寄存器的值并提出我可能缺少的任何信息。 (仅限我认为需要的寄存器。 DCOMPCTRLn,FIQVEC,FULTMUXSTAT)

    A. DCOMP 已初始化。

    e2e.ti.com/.../DC_2D00_DC-PSFB-Firmware-v1.2.2.0-_4000_-Address-60d-Watchlist-Memory-_2800_DCOMP-initialized_29002800_no-DCOMP-IRQ-FIQ_2900_-.csv

    B. DCOMP 未初始化。

    e2e.ti.com/.../DC_2D00_DC-PSFB-Firmware-v1.2.2.0-_4000_-Address-60d-Watchlist-Memory-_2800_no-DCOMP-initial_29002800_no-DCOMP-IRQ-FIQ_2900_-.csv

     感谢所有的建议。

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

    杰克,我多挖了一点,我应该在一开始就这样做。 Digi_COMPP 用于 ADC-12上的数字比较器,而不是故障寄存器上的数字比较器。  您需要 DCOMP 寄存器的故障中断,而不是 DIGI_COMP。  我们真的应该给 ADC 数字比较器一个不同的名称。   

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

    伊恩,您好!

     哦,我看到了! 感谢你们的解释! 现在工作了,谢谢。