AVRの割り込み要求の保留

  • 投稿日:
  • 更新日:2015/02/09
  • by
  • カテゴリ: ,

AVRでは、割り込み処理中にも割り込み"要求"自体が禁止されていなければ、外部からの割り込みに対して要求が発生するようです。 コメントにもあるように、その割り込みは保留(pending)され、現在処理中の割り込み処理が終了した後で処理されるようなのです。 このあたりが情報源です。

概念として、「割り込み要求(ハードウェアで処理される)」と「割り込み許可」は独立して動作しているということのようです。

そのため、割り込み処理中の別の割り込み要求を完全に禁止したければ、割り込み要求ビットをクリアしておく必要があります。

具体的には、今回はINT1の処理中のINT0割り込みを禁止したいので、INT1の処理内でステータスデータを出力する部分で、

GIFR = _BV(INTF0);

とします。

ステータスデータを出力する前にクリアしてしまうと、データを取りこぼすことがあり、出力後にクリアするとステータスデータを2度読んでしまうことがあります。 なんとも厄介ですが、これで一応正常に動作しているように見えます。


追記: と思ったのですが、まだ時々ずれる(ステータスデータを2度読む)ことがあります。 一体どうせいっちゅうねん...。


さて次は、いよいよファイルデータのオープンと読み込みです。 SRAM容量の関係で、読み込み処理をオンデマンドで行う必要があります。 そのため、inの連続で処理するためには、処理時間を一定にすることが必要で、以前の実装(1セクタを一気に読む)では通用しません。


こちらもよく読まれています