10.112 __disable_fiq コンパイラ組み込み関数

このコンパイラ組み込み関数は、FIQ 割り込みをディセーブルにします。

通常、このコンパイラ組み込み関数は、CPSR で F ビットを設定することによって、FIQ 割り込みをディセーブルします。ただし、v7-M の場合は、フォールトマスクレジスタ(FAULTMASK)が設定されます。v6-M では、FIQ 割り込みがサポートされていません。

構文

int __disable_fiq( void );
void __disable_fiq( void );

使用法

int __disable_fiq( void ); は、高速割り込みを無効にし、それ以前に FIQ 割り込みマスクが PSR に持っていた値を返します。
void __disable_fiq( void ); は高速割り込みをディセーブルにします。

戻り値

int __disable_fiq( void ); は、FIQ 割り込みが無効にされる以前に FIQ 割り込みマスクが PSR に持っていた値を返します。

制約条件

--cpu=7 でコンパイルする場合は、 int __disable_fiq( void ); はサポートされません。これは、一般的な ARMv7 アーキテクチャと ARMv7 A、R、M の各プロファイルとの例外処理モデルの違いによるものです。つまり、--cpu=7 でコンパイルする場合、コンパイラは、すべての ARMv7 プロセッサで動作する命令シーケンスを生成することはできないため、 int __disable_fiq( void ); はサポートされません。 void __disable_fiq( void ); 関数プロトタイプを --cpu=7 で使用することはできます。
__disable_fiq コンパイラ組み込み関数を実行できるのは、特権モード、つまり非ユーザモードの場合のみです。このコンパイラ組み込み関数をユーザモードで実行しても、CPSR 内の割り込みフラグが変更されることはありません。

void foo(void)
{
    int was_masked = __disable_fiq();
    /* ... */
    if (!was_masked)
        __enable_fiq();
}
関連する参考文書
10.116 __enable_fiq コンパイラ組み込み関数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.