コアに依存しないペリフェラル (CIP) はアプリケーションに何をもたらすのでしょうか?これらにより、ユーザーは、ソフトウェアに書き込まれた命令に基づいて、通常は中央処理装置によって実行される特定のタスクを自動化できます。CIPは、開発者が記述する必要のあるコードの量を削減すると同時に、応答性が高く低消費電力のシステムも作成します。Microchipのこのビデオでは、CIPとは何か、どのように利用されるか、そしてプロジェクトにどのようなメリットをもたらすかについて詳しく説明します。
皆さん、こんにちは。今回は、コアから独立した周辺機器を詳しく見ていくMarc McCombです。
PICとAVRの両方のマイクロコントローラ アーキテクチャに周辺機器が搭載されていることはご存知でしょう。これらの多くは、コアに依存しない周辺機器、略してCIPと呼ばれるものです。これらの周辺機器は、開発者がソフトウェアで記述した命令に基づいて、従来は中央処理装置またはコアによって実行されていた特定のタスクを自動化するために開発されました。
これらのコアから独立した周辺機器には、開発者が記述する必要のあるコードの量を削減すると同時に、応答性が高く消費電力の少ないシステムの作成に役立つなど、固有の利点があります。このビデオでは、コアから独立した周辺機器がアプリケーションに何をもたらすかについて、概要を説明したいと思います。
これを実行するには、I/Oポート ピンをハイとローに切り替えるという非常に基本的な例を使用します。つまり、基本的にはハートビート信号と呼ばれる方形波出力を作成します。ここで、このハートビート信号を実現するために、このフロー チャートを使用して示したループを実行するたびに、出力を高から低、または低から高に切り替えるコードをいくつか作成しました。
ここで、このアプリケーションに別のタスクを追加してみましょう。たとえば、マイクロコントローラの別のピンに接続されたプッシュ ボタンが押されるたびに、さらに別のピンで約2ミリ秒幅の出力パルスを駆動するとします。これは、ワンショットまたは単安定マルチバイブレータのようなものです。
ここで、基本的な周辺機器を備えたマイクロコントローラがある場合、割り込みを使用してこの追加タスクを実装する必要があります。これは次のようになります。ここでは、基本的なタイマー周辺機器と、プッシュ ボタンに接続された汎用入出力ポートを使用しています。これらの周辺機器のほとんどは、ほとんどの最新のマイクロコントローラに搭載されている一般的な割り込みを生成する機能を備えています。
最初に使用する割り込みは、関連するピンの電圧が変化したときにI/O周辺機器が生成できる割り込みです。したがって、プッシュ ボタンが押されると、プッシュ ボタンがここでハイに引き上げられ、割り込みがトリガーされるため、ピンの電圧は0ボルトに低下します。I/Oポート割り込みがトリガーされたことがコアに通知されると、コアはソフトウェア割り込み優先順位チェックを実行するか、マイクロコントローラに装備されている場合はハードウェア割り込み優先順位チェックを実行します。
これにより、このI/Oポート割り込みよりも優先される他の割り込みイベントが同時に発生していないことが確認されます。そうでない場合、コアはI/Oポート割り込みサービス ルーチンを呼び出します。サービス ルーチン内では、コアはタイマーをリセットし、特定の値でロードして、正確に2ミリ秒でオーバーフローできるように指示され、タイマーがカウントを開始します。
コアは出力ピンをハイに駆動するようにも指示されます。これにより、ワンショット信号の立ち上がりエッジが生成されます。ポート割り込みサービス ルーチンが終了すると、コアは以前の動作 (この場合はハートビート信号の切り替え) に戻ります。したがって、コアは、設定された2ミリ秒でタイマーがオーバーフローして割り込みがトリガーされるまでハートビート信号を切り替え続け、ハードウェアまたはソフトウェアでI/Oポート割り込みの優先順位付けが実装され、他の優先度の高い割り込みが保留中の場合、タイマー割り込みサービス ルーチンが呼び出されます。
コアは、コードからの指示に従ってタイマーをクリアして停止し、ワンショット信号を低く駆動します。したがって、このコードにはそれほど複雑な点はありませんが、割り込みイベントが発生し、認識され、優先順位が付けられ、最後に関連するハードウェア サービス ルーチンが実行されるまでのこれらのすべての手順には時間がかかり、その間、コアはハートビート信号を切り替えることができないことを覚えておく必要があります。
それではこれを実証してみましょう。私は実際にこのアプリケーションのコードを書いて、それをマイクロコントローラにダウンロードしました。2つの出力ピンにオシロスコープを接続しています。ここにある青い信号は、コアによって生成されるハートビート信号であり、ループを通過するたびにピンが切り替わります。プッシュ ボタンを押してポート割り込みをトリガーすると何が起こるか見てみましょう。ここでは、ワンショット パルスの立ち上がりエッジの直前と直後、およびワンショット パルスの立ち下がりエッジの前後の短い期間に、ハートビート信号にいくつかのパルスの欠落があることがわかります。
プッシュボタンはここのあたりで押されます。ワンショット パルスの最初のエッジまでのこの遅延は、割り込みレイテンシ (割り込みが実際に発生したことをコアが実際に検出するまでの時間) など、さまざまな要因の結果です。ただし、この遅延の大部分は、割り込みの優先順位と、割り込みサブルーチン内の実際の実行コードによるものです。
また、ワンショット パルスがハイになった後、コアが実際にハートビート信号の切り替えに戻るまでに遅延が発生することもわかります。ここでさらにいくつかのパルスが発生し、2ミリ秒後にタイマーが割り込みます。繰り返しになりますが、割り込みが発生したことをコアが実際に検出するまでのわずかな時間が経過すると、コアはハートビート信号の生成を停止し、優先順位付けを行ってからタイマー割り込みサービス ルーチンにジャンプし、最終的にここでワンショット ピンをローに駆動します。
つまり、これはソフトウェアでI/Oを切り替えるだけの基本的なアプリケーションです。しかし、ハートビート信号を切り替える代わりに、これがコアが検出する必要のある何らかの入力信号であると想像してみてください。つまり、静電容量式タッチセンサーのようなユーザー入力や、システムの過熱やユーザーへの潜在的な危険を検出する信号のような、より緊急性の高いものなどです。
つまり、コアが何らかの割り込みを実行できず、その信号を完全に見逃してしまう可能性があり、その結果、ユーザーに軽度の不快感を与えたり、システムに壊滅的な影響を与えたりする可能性があります。動作速度を上げて割り込みがコアによってより速く処理されるようにすることで、これを最小限に抑えることができますが、これにより電力消費も増加することを忘れないでください。より高速な操作では、心拍信号の中断は最小限に抑えられますが、完全に解消されるわけではありません。
また、アプリケーション設計者に、さまざまなソフトウェア ルーチンを記述してアプリケーションのベンチテストにもっと時間を費やすように依頼したり、状況を改善するために他のシステム コンポーネントを構成したりすることもできます。でも時間はお金ですよね?したがって、コードを記述したり、マイクロコントローラに接続されたセカンダリ システムのさまざまな構成を試したりするのにさらに多くの時間を費やす必要があると、コストのかかる作業になる可能性があります。
さて、ここではコアに依存しない周辺機器を使用した代替ソリューションを見てみましょう。こちらはATTINY817です。これは、他の周辺機器の中でも、タイマー/カウンター タイプB (略してTCB) と呼ばれるタイマーベースの周辺機器と、イベント システムと呼ばれる別の周辺機器を備えたAVRデバイスです。イベント システム ペリフェラルは、マイクロコントローラ上の別の場所で生成されたイベントを使用して、同じマイクロコントローラ上で発生する別のイベントをトリガーできます。
たとえば、コンパレータの入力ピンの1つに接続された電圧が所定のしきい値を超えると、コンパレータの出力が高くなるように設定できます。イベント システムを使用すると、このコンパレータ出力を使用して、別のピンの電圧のアナログからデジタルへの変換をトリガーできます。
または、ポート ピンに接続されたプッシュ ボタンが押されたときなど、外部信号の変化によってカウンターがカウントを開始する場合もあります。ATTINY817の16ビット タイマー/カウンター タイプBやTCB周辺機器などのカウンターには、トリガーされるとユーザーが定義した持続時間のパルスを出力するシングル ショット生成モードがあります。
そこで、これを使用してワンショット出力を生成します。私たちの設計では、プッシュ ボタンに接続されたポートI/Oは、イベント システムを使用してタイマー/カウンター タイプBにルーティングされ、そのピンの入力の変化によってこのシングル ショット出力がトリガーされるようになります。これらの機能をアプリケーションに実装すると、次のようになります。
したがって、ここでも、マイクロコントローラ コアは、I/Oピン上のハートビート信号を切り替えるために使用されます。ただし今回は、コアの割り込みを利用してワンショット パルスを駆動するのではなく、プッシュ ボタンに接続されたポート ピンの変更イベントをイベント システム経由でルーティングし、タイマー/カウンター タイプBに接続して、2ミリ秒の出力パルスをトリガーするようにします。
このブロック図からわかるように、プッシュ ボタンの押下の検出やワンショット出力の実行に関連するすべてのタスクは、周辺機能を使用してハードウェアで実行されるため、コアは実際にはそれらのタスクから解放されます。このアプリケーションを使用してATTINY817をプログラムしたので、波形を見てみましょう。
ここでも、コアによって制御されているトグルI/Oピンを示します。ただし、今回の違いは、入力に接続されたプッシュ ボタンを押したときに、コアが中断されることがないため、周辺機器によってハードウェアで処理される2ミリ秒の出力パルスがハートビート信号に影響を与えないことです。ソフトウェアではなく周辺機器を使用してハードウェアでタスクを処理するということは、コアがハートビートのコードを実行したり、低電力モードに移行したりするなど、他の処理を並行して実行できるようになることを意味します。
最も重要なのは、コアを拘束するソフトウェアと割り込みを排除することでシステムの応答性が向上しただけでなく、動作速度を低く抑えて電力消費を抑えることができたことです。最後にもう1つお見せしたいのは、出力パルスの幅が正確に2ミリ秒になるようにしたかったということです。
ただし、このアプリケーションのソフトウェア割り込みベースのバージョンを見てください。タイマーは正確に2ミリ秒で割り込みを生成するように構成していますが、割り込み遅延や割り込みサービス ルーチンに関連付けられたコードの実行にかかる時間などを考慮すると、出力パルスは実際には必要な時間よりも300マイクロ秒ほど長くなることがわかります。
ATTINY817周辺機器を使用した波形を見てみましょう。ご覧のとおり、このタスクはソフトウェアと割り込みによって本質的に生じるオーバーヘッドなしでハードウェアで処理されるため、出力は必要な2ミリ秒の幅になります。ここで紹介するハードウェア ペリフェラル バージョンは、PICおよびAVRマイクロコントローラを使用したアプリケーション開発を容易にするためにペリフェラルを非常に高いレベルで提供するMicrochip Technologyのグラフィカル プログラミング ツールを使用して、実際にかなり迅速に開発されました。
これらのツールとその他のツールについては、今後のビデオで説明します。その間、これらのトピックやその他のトピックに関する詳細については、次のサイトをご覧ください。 マイクロチップ。マーク・マコームです。ご視聴ありがとうございました。