0

関数 NVIC_EnableIRQ および NVIC_DisableIRQ は、特定の IRQ 番号で割り込みを有効および無効にするためのものです。その IRQ の現在の有効/無効ステータスを取得する機能がないのはなぜですか?

ユースケースは、続行する前にモジュールの割り込み (IRQ) を無効にする必要がある典型的な関数です。関数が完了すると、IRQ が再び有効になります。ただし、関数が呼び出された時点で IRQ が有効になっていたかどうかを最初に読み取る必要があります。

関数が CMSIS によって提供されていないことを考えると、上記のユース ケースにはなんらかの欠陥があると思います。しかし、私は方法がわかりません。

ヒントはありますか?

ありがとう

(CMSIS 4.1 を使用)

4

2 に答える 2

0

あなたのユースケースは、状況によっては理にかなっていると思います。

IRQ の有効状態を読み取る関数を自分で作成する必要があります。

有効状態の読み取りと実際の無効化の間に割り込みが有効状態を変更しないことを確認する必要があるだけです。この場合、関数の実行後に間違った有効状態を設定することになります。

すべての irq をグローバルに無効にするために使用できます__disable_irq();(Keil 構文):

bool isEnabled;
__disable_irq();
isEnabled = ReadIrqEnabledState(irqNr);
__enable_irq();

yourFunction();

if(isEnabled)
    NVIC_EnableIrq(irqNr);
else
    NVIC_DisableIrq(irqNr);
于 2015-12-16T07:46:02.747 に答える