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.

[参考译文] 阻止中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/565677/blocking-interrupts

我有一个与中断函数共享的存储器。

 当我的函数读取存储器的该部分时、我需要阻止中断、以便中断不会中断我的读取操作(原子读取)

 我只需在很短的时间内阻止中断、在此过程中不会丢失任何中断。

 实现此目的的最佳方法是什么?

 我可以通过禁用 PIE IER 位来阻止它吗?

INTM=1的唯一更剧烈的方法是什么?  

谢谢。

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

    如果您只需要在非常短的间隔内阻止中断、最简单、最安全的方法是使用 INTM 位。  如果在执行读取操作时希望保持其他(无关)中断处于活动状态、则可以使用 IER 屏蔽内核中断。  

    您可以通过操作 PIEIERx 寄存器来实现它、但需要遵循严格的过程(请参阅器件用户指南中的 PIE 章节)。

    此致、

    Richard

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

    [引用用户="Richard Poley"]

    如果您只需要在非常短的间隔内阻止中断、最简单、最安全的方法是使用 INTM 位。  如果在执行读取操作时希望保持其他(无关)中断处于活动状态、则可以使用 IER 屏蔽内核中断。  

    您可以通过操作 PIEIERx 寄存器来实现它、但需要遵循严格的过程(请参阅器件用户指南中的 PIE 章节)。

    此致、

    Richard

    [/报价]

    禁用 PIEIERx 寄存器还涉及禁用 INTM、我认为这是实时系统中的一个坏主意。

    那么、这是一种实现它的保存方式吗?

    IER &=(~intNumber);

    读取 存储器

    IER |= intNumber;

    谢谢!

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

    是的、您可以操作 IER 寄存器以在存储器读取期间阻止所选的中断。

    此致、

    Richard