ソフトウェア割込み(SWI)を管理する SwiManager クラスのデモ・プログラム
Dependencies: mbed PushButton SwiManager
main.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2020-04-24
- Revision:
- 0:30022cf02315
File content as of revision 0:30022cf02315:
//------------------------------------------------------------------------- // SwiManager クラスのデモ・プログラム // SWI には CAN2_TX_IRQn を使用 // // マイコン・ボードの青色の押しボタン SW 押下の割込みを受け付けると, // TeraTerm に表示される数値がインクリメントする // // EXTI15_10_IRQn の優先順位により動作が異なる // 優先順位 = 0 : LED1 が点灯中でも押しボタン SW の割込みを受け付ける // 優先順位 < 0 : LED1 が点灯中には押しボタン SW の割込みを受け付けず, // 消灯してから PbIsr() が実行される // // 2020/04/24, Copyright (c) 2020 MIKAMI, Naoki //------------------------------------------------------------------------- #include "SwiManager.hpp" #include "PushButton.hpp" using namespace Mikami; #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため DigitalOut led_(LED1); // マイコンボードの LED void SwiIsr(); SwiManager swi1_(CAN2_TX_IRQn, (uint32_t)SwiIsr, 1); // 割込み優先順位:1 // PushButton に対応する割込みサービス・ルーチン void PbIsr() { static int count = 0; printf("%d\r\n", count++); } // ソフトウェア割込みに対する割込みサービス・ルーチン void SwiIsr() { led_ = 1; // LED 点灯 wait(2); led_ = 0; // LED 消灯 } // Ticker に対する割込みサービス・ルーチン void TickerIsr() { swi1_.Invoke(); } int main() { printf("\r\n\nSwiManager の 使用例\r\n"); printf("マイコン・ボードの LED はプログラム開始 3 秒後から点滅を始めます\r\n"); // チャタリング防止機能付きの外部入力 PushButton sw(USER_BUTTON, PullNone, PushButton::FALL, &PbIsr, 0.5); NVIC_SetPriority(EXTI15_10_IRQn, 0); // 割込み優先順位の設定 // NVIC_SetPriority(EXTI15_10_IRQn, 2); // 割込み優先順位の設定 printf("割込み優先順位\r\n"); printf(" EXTI15_10_IRQn: %d\r\n", NVIC_GetPriority(EXTI15_10_IRQn)); printf(" swi1_ : %d\r\n", swi1_.GetPriority()); Ticker timer; timer.attach(&TickerIsr, 3); swi1_.Enable(); while (true) {} }