AR# 47545

Zynq-7000 SoC、タイマー - グローバル タイマーで同じイベントに対し割り込みが 2 回送信される

説明

シングルショット モードのグローバル タイマーで、end-of-count の割り込みリクエストが 1 回ではなく 2 回生成される可能性があります。これは自動インクリメント モードを使用すると回避できます。コンパレータ レジスタ値をインクリメントした後にグローバル タイマーのフラグを消去すると、この問題はソフトウェアで回避できます。

ソリューション

影響:深刻な問題ではありません。この問題により、システムで間違った割り込みリクエストが生成されます。
回避策:シングルショット モードではなく、自動インクリメントを使用します。または割り込みサービス ルーチンで特別なシーケンスを実行します。詳細は「回避策の詳細」セクションを参照してください。
対象となる構成シングルショット モードの PS グローバル タイマー (GT) を使用するシステム
対象となるデバイス リビジョン:(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。


グローバル タイマー (GT) は、プログラムされている値に達すると、プロセッサに割り込みリクエストが生成されるようにプログラムされています。この問題のため、グローバル タイマーで自動インクリメント機能が使用されないようにプログラムされていると、割り込みリクエストが 1 回でなく 2 回生成される可能性があります。

グローバル タイマー制御レジスタは次の設定でプログラムされています。

ビット 3 =1b0GT はシングルショット モードでプログラムされています。
ビット 2 =1b1GT IRQ 生成がイネーブルになります。
ビット 1 =1b1コンパレータ レジスタでの GT 値比較がイネーブルになります。
ビット 0 =1b1GT カウントがイネーブルになります。


これらの設定で、グローバル タイマー値がコンパレータ レジスタでプログラムされている値に達すると、プロセッサに対し IRQ が生成されます。割り込みハンドラーはこれを受けて次のシーケンスを実行します。

  • ICCIAR (割り込み認識) レジスタの読み出し
  • グローバル タイマー フラグの消去
  • コンパレータの値を高い値に設定するため変更
  • ICCEOIR (割り込みの終わり) レジスタの書き込み

この状況で、この割り込みハンドラー シーケンスの終わりに、グローバル タイマーがプロセッサに対し 2 番目の (間違った) 割り込みリクエストを生成する可能性があります。

回避策の詳細

この問題は、シングルショット モードでグローバル タイマーがプログラムされている場合にのみ発生するため (自動インクリメント機能を使用しない場合など)、まず最初の回避策として、自動インクリメント機能を使用するようにグローバル タイマーをプログラムしてください。

このソリューションが可能でない場合は、2 番目の回避策として、不正なシーケンスを避けるため割り込みハンドラーを変更します。これは、コンパレータ レジスタ値をインクリメントした後にグローバル タイマー フラグを変更すると達成できます。割り込みハンドラーも正しいコード シーケンスは次のようになります。

  • ICCIAR (割り込み認識) レジスタの読み出し
  • コンパレータの値を高い値に設定するため変更
  • グローバル タイマー フラグの消去
  • 割り込みハンドラーのディストリビュータで割り込み 27 (グローバル タイマー割り込み) の保留ステータス情報を消去
  • ICCEOIR (割り込みの終わり) レジスタの書き込み

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 47545
日付 06/13/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス