Previous: 9.1.5. 割込みハンドラの作成 |
Up: 9. 外部割込み/イベントコントローラ(EXTI) |
Next: 9.3. ソフトウェア割り込み |
サンプルプログラム |
exti_interrupt_gpiox5 |
図 15?2 回路図
GPIOX5を利用して前項のサンプルと同じ処理を行うプログラムです。割込みハンドラの処理以外は前項のサンプルプログラムと同じ処理になっています。回路図は図 15?2です。
EXTIラインの0から4まではライン毎に割込みハンドラ関数が用意されています。ライン5以降は5から9までと10から15までが一つの割込みハンドラ関数にまとめられています。5から9までがEXTI9_5_IRQn関数、10から15までがEXTI15_10_IRQn関数です。
EXTIライン5以降はまとめられてしまっている都合上、割込みハンドラが呼び出されたときに、どのラインで割込みが発生したのかを確認する必要があります。割込みの発生原因を確認するためには、EXTI_GetITStatus関数(ライブラリ 15?5)を使用します。
ライブラリ 15?5 EXTI_GetITStatus関数
関数プロトタイプ |
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line ) |
|
動作 |
指定したEXTIラインの割込みが許可されているか、及び、割込みペンディングビットがセットされているかを確認します。 |
|
引数 |
EXTI_Line |
確認する対象のEXTIラインをEXTI_Linexで指定します。xには0から19までの数値が入ります。 |
戻り値 |
割込みの状態(SET又はRESET)。割込みが許可されており、且つ、割込みペンディングビットがセットされている場合のみSETになります。 |
割込みハンドラで使用する際には、以下のように、関数の冒頭で対象となるEXTIラインの割込み状態を確認すればよいでしょう。
void EXTI9_5_IRQHandler(void) { ? if(EXTI_GetITStatus(EXTI_Line5) != RESET) ??? { ????? ---------------- ??? } } |
Previous: 9.1.5. 割込みハンドラの作成 |
Up: 9. 外部割込み/イベントコントローラ(EXTI) |
Next: 9.3. ソフトウェア割り込み |