2017-06-11 32 views
-1

私はSTM32F4を使用していますが、ソフトウェア割り込みを生成したいとします。 問題は、ソフトウェアによって、またはEXTIラインに接続されたピンによって割り込みが生成された場合、どのように割り込みハンドラで知ることができますか?EXTI Lineをソフトウェア割り込みに使用

+0

あなたが求めているものは不明です。ここに記載されているEXTI割り込みを起動していますか?http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/Cihhbccd.html? – Clifford

+0

ここには良い質問がありますが、おそらくSTM32に慣れていない人にとっては、あなたが求めていることを理解するためには少し研究が必要です。誰もがその努力をすることを期待してはいけません。あなたがしていることを説明するためのコードを含めるべきでしょう。それは疑問を投げかけることであり、議論が終わり、票を集めることですが、いくつかの説明を加えれば有用で興味深い質問になるかもしれません。 – Clifford

答えて

1

STM32F4にソフトウェア割り込みを生成するには、2つの方法があります。

  • ジェネリックのCortex-M4方法やソフトウェアトリガ割り込みレジスタへの書き込み(STIR)、または

  • EXTIソフトウェア割り込みイベントレジスタへの書き込みのSTM32 EXTI具体的な方法(EXTI_SWIER )

私はSTIRが書き込み専用レジスタであるため、割り込みが区別される第一の方法ではないと思います。ただし、EXTI_SWIERはr/wで、割り込みをトリガするために書き込まれたビットは、EXTI_PRの対応するビットが明示的に書き込まれるまでクリアされません。したがって、EXTI_SWIERを読み取るだけで割り込みがソフトウェアでトリガされるかどうかを判断することができます。 1つの割り込みを共有EXTIライン用

void EXTI0_IRQHandler(void) 
{ 
    // Detect SWI 
    bool is_swi = (EXTI->SWIER & 0x00000001u) != 0 ;  

    // Clear interrupt flag 
    EXTI_ClearITPendingBit(EXTI_Line0); 

    if (is_swi) 
    { 
     ... 
    } 
    else 
    { 
     ... 
    } 
} 

には、最初にPRレジスタをチェックすることにより、アクティブラインを決定しなければならない:

void EXTI15_10_IRQn(void) 
{ 
    for(uint32_t exti = 10; exti < 15; exti++) 
    { 
     bool is_swi = false ; 
     if(EXTI_GetFlagStatus(exti) == SET) 
     { 
      is_swi = (EXTI->SWIER & (0x1u << exti)) != 0 ; 

      // Clear interrupt flag 
      EXTI_ClearITPendingBit(exti) ; 

      if (is_swi) 
      { 
       ... 
      } 
      else 
      { 
       ... 
      } 
     } 
    } 
} 
+0

詳細な回答をいただきありがとうございます。申し訳ありませんが、その質問はあまり明確ではありませんでした。 –

+0

@ Samer.M:あなたを歓迎します。問題を解決するために質問を編集する必要があります。 – Clifford

関連する問題