1

Luminary LM3S8962 マイクロコントローラーとそれに含まれるライブラリ ガイドを使用していますが、これは、ネストされたベクター割り込みを持つ ARM Cortex-M3 に関連するはずです。

GPIO ポート全体に登録できる割り込みサービス ルーチン関数は 1 つだけです。GPIO ポートには通常 8 つのピンがあり、それぞれに割り込みを設定できます。ピンごとに、割り込みが「発生」したかどうか (保留中かどうか) をテストできますよね? ピンごとに、保留中の割り込みをクリアできますよね?

GPIO ポートのピンが ISR をトリガーする場合、プロセッサは ISR 内にあります。次に、ISR にいる間に同じポートの別のピンが割り込みをトリガーするとどうなるでしょうか? どのピンに保留中の割り込みがあるかをコードが検出すると仮定します。- この ISR は中断され、同じコードで新しい ISR が開始されますが、PinInterruptStatus レジスタは更新されていますか? (そうでないことを願っています) - この ISR は完了するまで実行され、その直後に他のピンの割り込みがすぐに実行されますか? (ARM Cortex M3 が割り込みのテールチェーンを実装していることは知っています) - または、すべてのピンがクリアされるまでループし、処理後にピンをクリアする while ループが必要ですか?

たぶんこれが役立ちます:

http://www.ti.com/lit/gpn/lm3s8962

4

2 に答える 2

3

コメントで述べたように: 一般に、ISR は再入可能性を防ぐための措置を講じる必要があります。PIC のようなものでは、これは ISR の「上部」で割り込みを無効にし、「下部」で割り込みを有効にするのと同じくらい簡単です。M3 の NVIC はもう少し複雑です。このホワイト ペーパー (http://www.arm.com/files/pdf/IntroToCortex-M3.pdf) の p.7 には、次のように記載されています。

NVIC は、割り込みのネスティング (スタッキング) をサポートしているため、より高い優先度を適用することで割り込みを早期に処理できます。また、割り込みの動的な再優先順位付けもサポートしています。優先度レベルは、実行時にソフトウェアによって変更できます。サービス中の割り込みは、割り込みサービス ルーチンが完了するまでそれ以上のアクティブ化がブロックされるため、偶発的な再エントリのリスクなしに優先度を変更できます。

上記の説明は、同じ割り込みの再入可能性の可能性に直接対処し、ISR に割り込む優先度の高い割り込みを処理するための優先順位付けの概念も紹介します。

http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/DUI0552A_cortex_m3_dgug.pdfという参考文献はかなり良いものです。p。4-9、割り込みを有効/無効にする手順が見つかります。ページ 4-6 に、割り込みクリア ペンディング レジスタの説明があります。これらを使用して、保留中の割り込みを特定できます。割り込みの有効化/無効化の制御に本当に慣れたい場合は、BASEPRI および BASEPRO_MAX レジスタを調べてください。

そうは言っても、あなたの質問がCortex-M3に関連しているというあなたの声明に同意するかどうかはわかりません. Keil (私のフレーバーの Cortex-M3) は、EXTI (外部割り込みコントローラー) が GPIO ピンの割り込みを処理すると述べています。興味深いことに、ARM のドキュメントでは「EXTI」について簡単に説明していますが、Keil STM32 のドキュメントのように「コントローラ」とは呼んでいません。「STM32 EXTI」で簡単にグーグル検索すると、多くのヒットが得られますが、「Luminary EXTI」で同様の検索を行ってもあまりヒットしません。それを考えると、この特定のコントローラーは、ARMがサードパーティに任せている周辺機器の1つであると推測しています。

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf . _ ここで言及されているいくつかの AFIO_EXTI レジスタがあります。これらにより、GPIO ラインを割り込みにマッピングできます。残念ながら、Luminary のドキュメントで同様のものを見つけることができません。

それで...これはどういう意味ですか?割り込みにはポートレベルの粒度しかないようです。したがって、ISR はどのピンが遷移したかを判断する必要があります (エッジを探していると仮定します)。幸運を!

于 2012-05-17T21:50:19.737 に答える
0

Cortex-M3 では、2 つの割り込みが (すべての GPIO ピンに対して) 同じ優先度である場合、前者は割り込まれません。後で来る割り込みは保留状態になります。

GPIO 割り込みが発生すると、対応するビットの Rising/Falling IO0IntEnR/IO0IntEnF (に応じて) の GPIO 割り込みステータスをチェックして、割り込みを引き起こすピンを見つけることができます。

于 2013-12-25T06:44:33.477 に答える