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.

[参考译文] TMS570LC4357:在索引管理中断模式下访问 VIM RAM 矢量表、导致 VIM 比较错误(ESM 2.25)

Guru**** 2479895 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/686172/tms570lc4357-vim-ram-vector-table-accessed-in-index-managed-interrupt-mode-leading-to-vim-compare-error-esm-2-25

器件型号:TMS570LC4357

您好!

 2018年3月的 TRM SPNU563A 在第§19.5.3章中规定  

仅在使用矢量中断的情况下才需要对 VIM RAM 矢量表进行初始化、并且索引中断管理不需要初始化该表。

根据 TRM 和我们计划使用 IRQ 索引中断模式(SCTRL.VE-0)、我们特意跳过了 RAM VIM 初始化、并在 首次 发生未屏蔽的 IRQ 时遇到锁步 VIM 总线比较错误(ESM 2.25)(我们案例中的第一个实时周期的 RTI 比较)。

在分析后、我注意到、即使在系统控制寄存器 SCTLR.VE 位设置为零的情况下、仍可以访问该表来更新 IRQVECREG 和 FIQVECREG 以及 IRQINDEX、这可以解释比较错误、因为 VIM RAM 表在上电后处于未知状态。

在我看来、 如果 SCTLR.VE 设置为零、寄存器矢量模式被激活、从而导致访问 VIM RAM 表以更新 xxxVECREG 寄存器。

您能否确认 VIM RAM 应该被无条件地初始化以避免 VIM 总线比较错误?

如果已确认,以下位置可能需要更新:SPNU563A 末尾§19.4.2和§19.5.3

感谢您的支持、

此致、


弗朗克。

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

    V=0仅用于禁用硬件矢量中断(仅限 IRQ)、它不会禁用寄存器矢量中断。 在启用矢量中断(寄存器矢量中断或硬件矢量中断)之前、应用软件还必须启动中断矢量表(VIM RAM)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    我不确定如何理解您的答案以及如何启用寄存器矢量中断。

    在我看来、要么我们处于 SCTRL.VE = 0时的{IRQ 索引+寄存器矢量中断模式} 、要么处于 SCTLR.VE=1时的硬件矢量中断、  这意味着始终使用矢量表、并且 RAM VIM 应无条件初始化。

    请您澄清一下吗? 如果我将 SCTLR.VE 设置为0,我是否需要初始化 VIM RAM 矢量表?

    谢谢、

    弗朗克

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

    没有用于启用和禁用寄存器矢量中断的寄存器。 我的理解是、如果矢量中断未在应用中使用并且未启用 VIM RAM 的 ECC、则不需要 VIM RAM 初始化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    如在初始 POST 中所解释 的那样、在不 初始化 VIM RAM 的情况下、当保持在索引中断模式(STLR.VE = 0)时、不初始化 RAM VIM 会导致锁步 VIM 比较错误。

    我通过测试确认 、我在目标上观察到的不是我们从 TRM 中了解到的、即使系统控制寄存器 SCTLR.VE 位设置为零寄存器矢量中断模式是有效的、并且仍可访问表以更新 IRQVECREG 和 FIQVECREG (通过在 RAM 表中使用虚拟值对目标进行测试来确认)以及 IRQINDEX、这可以解释比较错误、因为 VIM RAM 表在加电后处于未知状态。

    您能与设计团队澄清吗?

    感谢您的支持、

    弗朗克  

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

    我将进行测试、然后与设计团队进行澄清。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Franck:

    我在索引模式下进行了简单测试。 我没有初始化 VIM RAM、并且没有使用 RTI 中断看到 ESM 2.25错误。

    这是用于测试的代码:
    SYS_intvecs.asm:
    //IRQ 和 FIQ
    b _irqDispatch
    b _fiqDispatch

    void _irqDispatch (void)(空)

    uint16 vec;
    vec = vimREG->IRQINDEX;
    开关(VEC)

    案例(3)://rtiCompare0
    rtiREG1->INTFLAG = 1U;
    rtiNotification (rtiREG1、rtiNOTIFICATION_COMPARE0);
    // rtiCompare0Interrupt();
    VEC=0;
    中断;
    默认值:
    中断;



    我无法重现此问题。 我稍后将执行更多测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Franck:

    与设计人员一起检查、并确认 VIM 比较器的输入是2个 VIM RAM 的地址。 即使 VIC 被禁用(从 CPU 侧)、地址仍被馈入比较器。 为了避免 VIM RAM 加电的随机状态引起的故障、必须初始化 VIM RAM。

    我将请求删除 TRM 中的句子:

    "仅当使用矢量中断时才需要进行初始化、索引中断管理不需要初始化表。"

    谢谢!

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

    您好 QJ、

    感谢调查并确认我将初始化 VIM RAM。

    此致、

    弗朗克。