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.

[参考译文] TMS570LS3137:暂时禁用 HET 中断是否需要几个周期?

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/718903/tms570ls3137-does-it-take-a-few-cycles-to-temporarily-disable-the-het-interrupt

器件型号:TMS570LS3137

快速的问题是--"hetREG1->INTENAC =1;"语句是否立即挂起 HET 中断或者它需要几个周期、如果它需要几个周期、为什么?

在我的应用中、我将 HET 绑定到 FIQ 中断、并且我在这个 FIQ 中断和一个单独的 IRQ 中断之间有一些共享数据、所以我需要临时暂停 HET 中断以更新共享数据。 我的数据表明、在代码行"hetREG1->INTENAC = 1;"之后、中断仍然可以在接下来的几行代码中发生。 我的解决方案如下:

hetREG1->INTENAC = 1;
inline_NOP();
inline_NOP();
inline_NOP();
return();

这似乎在100%的时间内工作;禁用 HET 中断后的这3个 NOP 是否合理?如果是、原因是什么?

谢谢、

Jim

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

    对外设寄存器的写入被缓冲、这样在写入完成时 CPU 不被保持。 这就是您观察到的内容。

    您还可以添加一个循环来从 INTENA 寄存器读回、直到该位被实际清零。

    此致、
    Sunil
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sunil、
    感谢您的快速回复。 延迟是否已知小于几个(如3个)周期? 我需要此代码尽可能快、因此添加 while (reg-not-set)加边界是因为我们不希望无界、而循环会占用大量开销、如果已知循环少于3或4个周期、我只保留几个 NOP。
    谢谢、
    Jim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jim、

    写入寄存器的延迟可以是可变的。 确保写入 INTENA 寄存器完成的一种方法是在写入后从该寄存器中读取。 那么、您将不需要任何循环、只需进行一次读取即可。 这会导致您失去写入路径上缓冲的优势、因为现在从寄存器的读取将被"保持"、直到写入完成。

    此致、
    Sunil