Microchip社の最新マイクロコントローラである ATtiny 817 の新機能を確認し、この機能豊富なソリューションをアプリケーションにどのように使用できるかを確認します。
新しいATtiny817の割り込み処理
著者: Arild Rodland、Microchip Technology Inc. のMCU08部門の製品マーケティング担当。
新しい AVR® マイクロコントローラ (MCU)では割り込み処理が非常にスマートになり、 Microchip の ATtiny817 はこれらの変更を活用した最初のAVRデバイスです。
さまざまなAVRファミリーに精通している人は、伝統的にtinyAVRの割り込み処理が® メガAVR® デバイスは非常に単純で、すべての割り込みには事前に定義された優先順位があり、最も低い割り込みベクター アドレスに最も高い優先順位が与えられます。より大きなXMEGAの場合® MCUファミリでは、割り込みシステムにはプログラマブル マルチレベル コントローラ (PMIC) が含まれており、ユーザーは割り込みを3つの優先レベルに割り当てることができるため、優先キューをカスタマイズできます。
ATtiny817の新しい割り込みコントローラは、これら2つを組み合わせたものです。それでは、それを見て何が新しいのか見てみましょう。
割り込み優先度
ATtiny817のデフォルト設定は、静的優先度を持つ割り込みベクター テーブルを使用してセットアップされ、最も低い割り込みベクター アドレスが最高の優先度を持ちます。図1を参照してください。これは他のtinyAVRと同じです。
図1: 静的優先度方式を使用した割り込み優先度
静的優先度には潜在的な問題がいくつかあります。まず、優先度の高い割り込みが多数ある場合、優先度の高い割り込みが優先度の低い割り込みを常にブロックする状況が発生する可能性があります。その結果、割り込み不足が発生します。つまり、すべての割り込みを処理する時間が足りず、優先度が最も低い割り込みにはまったくサービスが提供されないことになります。これを修正するために、ATtiny817では動的 (ラウンドロビン) 優先順位スキームが許可されます。このラウンドロビン方式を有効にすると、次に割り込みが発生したときに、最後に処理された割り込みの優先度が最も低くなります。図2を参照してください。
図2: 動的ラウンドロビン優先順位方式
2レベル割り込みコントローラ
ラウンドロビン優先順位方式は割り込み不足を解決しますが、割り込みベクター テーブルで定義されているよりも高い優先順位を周辺機器に与えたい場合はどうすればよいでしょうか。
設計チームは周辺機器間の優先順位を非常に合理的にハードワイヤードに設定しましたが、デフォルトの割り込み優先順位で定義されているものよりも高い優先順位を割り込みに与える必要がある人がいる可能性が常にあることは理解しています。
ATtiny817には、選択可能な割り込みベクターを他のすべてよりも優先させるオプションがあります。この機能を使用するには、必要なベクター アドレスをLVL1VECレジスタに書き込むだけで、この割り込みが優先されます。
コンパクトベクトルテーブル
tinyAVRには、Compact Vector Table (CVT) と呼ばれる新しい機能があります。この機能を使用すると、すべての割り込みが3つのベクターに切り捨てられます。1つはマスク不可能割り込み用 (ATtiny817の場合: CRCエラー割り込み)、もう1つはすべてのレベル0割り込み用 (ATtiny817の場合: すべての割り込みはデフォルトでレベル0)、もう1つはレベル1割り込み用 (ATtiny817の場合: 単一の割り込みには、そのベクター アドレスをLVL1VEGレジスタに入力することで、より高い優先順位を与えることができます)。
これは、少数の割り込みのみを使用する場合に便利な機能です。ベクター テーブルを3つのベクターに減らすと、割り込みテーブルが占めるフラッシュ位置が少なくなり、基本的にこのスペースがユーザー コードに使用できるようになります。ただし、この方法を使用する場合は、どの割り込みが実際にサービスを要求しているかを調べるために、割り込みハンドラーに追加のコードを追加する必要があることに注意してください。これにより、コードの記述と検証テストの両方に時間がかかり、設計が完了するまでに時間がかかります。このため、コンパクトなベクター テーブルは、少数の割り込みのみが使用される場合に最も役立ちます。
高度な機能: ラウンドロビンが有効になっていない場合、LVL0PRIレジスタは引き続きアクティブであり、最も優先度の低い割り込みの開始点を定義するため、必要に応じてベクター テーブル内の優先度を静的にシフトできます。たとえば、USARTに最高の優先度を与えるようにシフトすることができます。このレジスタのデフォルト値は0x00なので、リセット後は、予想どおり、最も低い割り込みベクターが最も高い優先順位を持ちます。
ベクターテーブルの優先順位の変更
最後に、データシートに明示的に記載されていないトリック/機能を紹介してこの記事を締めくくります。ラウンドロビン優先順位を使用する場合、最後に実行された割り込みのアドレスが含まれるLVL0PRIというレジスタがあります。これは、次に実行する割り込みを選択するときに、最も優先度の低い割り込みになります。この値を変更すると、どの割り込みの優先度が最低か最高かが直接影響を受けます。
ここに示されているように、新しいATtiny187 MCUは強力な割り込み管理機能を備えており、設計者は設計要件に合わせて割り込みの優先順位と応答時間を制御できます。ここで唯一の疑問は、これらの機能を活用するために何を作成するかということです。