シングルショット モードのグローバル タイマーで、end-of-count の割り込みリクエストが 1 回ではなく 2 回生成される可能性があります。これは自動インクリメント モードを使用すると回避できます。コンパレータ レジスタ値をインクリメントした後にグローバル タイマーのフラグを消去すると、この問題はソフトウェアで回避できます。
影響: | 深刻な問題ではありません。この問題により、システムで間違った割り込みリクエストが生成されます。 |
回避策: | シングルショット モードではなく、自動インクリメントを使用します。または割り込みサービス ルーチンで特別なシーケンスを実行します。詳細は「回避策の詳細」セクションを参照してください。 |
対象となる構成 | シングルショット モードの PS グローバル タイマー (GT) を使用するシステム |
対象となるデバイス リビジョン: | (Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。 |
グローバル タイマー (GT) は、プログラムされている値に達すると、プロセッサに割り込みリクエストが生成されるようにプログラムされています。この問題のため、グローバル タイマーで自動インクリメント機能が使用されないようにプログラムされていると、割り込みリクエストが 1 回でなく 2 回生成される可能性があります。
グローバル タイマー制御レジスタは次の設定でプログラムされています。
ビット 3 = | 1b0 | GT はシングルショット モードでプログラムされています。 |
ビット 2 = | 1b1 | GT IRQ 生成がイネーブルになります。 |
ビット 1 = | 1b1 | コンパレータ レジスタでの GT 値比較がイネーブルになります。 |
ビット 0 = | 1b1 | GT カウントがイネーブルになります。 |
これらの設定で、グローバル タイマー値がコンパレータ レジスタでプログラムされている値に達すると、プロセッサに対し IRQ が生成されます。割り込みハンドラーはこれを受けて次のシーケンスを実行します。
この状況で、この割り込みハンドラー シーケンスの終わりに、グローバル タイマーがプロセッサに対し 2 番目の (間違った) 割り込みリクエストを生成する可能性があります。
回避策の詳細
この問題は、シングルショット モードでグローバル タイマーがプログラムされている場合にのみ発生するため (自動インクリメント機能を使用しない場合など)、まず最初の回避策として、自動インクリメント機能を使用するようにグローバル タイマーをプログラムしてください。
このソリューションが可能でない場合は、2 番目の回避策として、不正なシーケンスを避けるため割り込みハンドラーを変更します。これは、コンパレータ レジスタ値をインクリメントした後にグローバル タイマー フラグを変更すると達成できます。割り込みハンドラーも正しいコード シーケンスは次のようになります。
Answer Number | アンサータイトル | 問題の発生したバージョン | 修正バージョン |
---|---|---|---|
47916 | Zynq-7000 AP SoC デバイス - シリコン リビジョン間の相違点 | N/A | N/A |
AR# 47545 | |
---|---|
日付 | 06/13/2018 |
ステータス | アクティブ |
種類 | デザイン アドバイザリ |
デバイス |