ソフトウェア割込み(SWI)を管理する SwiManager クラスのデモ・プログラム
Dependencies: mbed PushButton SwiManager
main.cpp@0:30022cf02315, 2020-04-24 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Apr 24 10:30:41 2020 +0000
- Revision:
- 0:30022cf02315
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:30022cf02315 | 1 | //------------------------------------------------------------------------- |
MikamiUitOpen | 0:30022cf02315 | 2 | // SwiManager クラスのデモ・プログラム |
MikamiUitOpen | 0:30022cf02315 | 3 | // SWI には CAN2_TX_IRQn を使用 |
MikamiUitOpen | 0:30022cf02315 | 4 | // |
MikamiUitOpen | 0:30022cf02315 | 5 | // マイコン・ボードの青色の押しボタン SW 押下の割込みを受け付けると, |
MikamiUitOpen | 0:30022cf02315 | 6 | // TeraTerm に表示される数値がインクリメントする |
MikamiUitOpen | 0:30022cf02315 | 7 | // |
MikamiUitOpen | 0:30022cf02315 | 8 | // EXTI15_10_IRQn の優先順位により動作が異なる |
MikamiUitOpen | 0:30022cf02315 | 9 | // 優先順位 = 0 : LED1 が点灯中でも押しボタン SW の割込みを受け付ける |
MikamiUitOpen | 0:30022cf02315 | 10 | // 優先順位 < 0 : LED1 が点灯中には押しボタン SW の割込みを受け付けず, |
MikamiUitOpen | 0:30022cf02315 | 11 | // 消灯してから PbIsr() が実行される |
MikamiUitOpen | 0:30022cf02315 | 12 | // |
MikamiUitOpen | 0:30022cf02315 | 13 | // 2020/04/24, Copyright (c) 2020 MIKAMI, Naoki |
MikamiUitOpen | 0:30022cf02315 | 14 | //------------------------------------------------------------------------- |
MikamiUitOpen | 0:30022cf02315 | 15 | |
MikamiUitOpen | 0:30022cf02315 | 16 | #include "SwiManager.hpp" |
MikamiUitOpen | 0:30022cf02315 | 17 | #include "PushButton.hpp" |
MikamiUitOpen | 0:30022cf02315 | 18 | using namespace Mikami; |
MikamiUitOpen | 0:30022cf02315 | 19 | #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため |
MikamiUitOpen | 0:30022cf02315 | 20 | |
MikamiUitOpen | 0:30022cf02315 | 21 | DigitalOut led_(LED1); // マイコンボードの LED |
MikamiUitOpen | 0:30022cf02315 | 22 | |
MikamiUitOpen | 0:30022cf02315 | 23 | void SwiIsr(); |
MikamiUitOpen | 0:30022cf02315 | 24 | |
MikamiUitOpen | 0:30022cf02315 | 25 | SwiManager swi1_(CAN2_TX_IRQn, (uint32_t)SwiIsr, 1); // 割込み優先順位:1 |
MikamiUitOpen | 0:30022cf02315 | 26 | |
MikamiUitOpen | 0:30022cf02315 | 27 | // PushButton に対応する割込みサービス・ルーチン |
MikamiUitOpen | 0:30022cf02315 | 28 | void PbIsr() |
MikamiUitOpen | 0:30022cf02315 | 29 | { |
MikamiUitOpen | 0:30022cf02315 | 30 | static int count = 0; |
MikamiUitOpen | 0:30022cf02315 | 31 | printf("%d\r\n", count++); |
MikamiUitOpen | 0:30022cf02315 | 32 | } |
MikamiUitOpen | 0:30022cf02315 | 33 | |
MikamiUitOpen | 0:30022cf02315 | 34 | // ソフトウェア割込みに対する割込みサービス・ルーチン |
MikamiUitOpen | 0:30022cf02315 | 35 | void SwiIsr() |
MikamiUitOpen | 0:30022cf02315 | 36 | { |
MikamiUitOpen | 0:30022cf02315 | 37 | led_ = 1; // LED 点灯 |
MikamiUitOpen | 0:30022cf02315 | 38 | wait(2); |
MikamiUitOpen | 0:30022cf02315 | 39 | led_ = 0; // LED 消灯 |
MikamiUitOpen | 0:30022cf02315 | 40 | } |
MikamiUitOpen | 0:30022cf02315 | 41 | |
MikamiUitOpen | 0:30022cf02315 | 42 | // Ticker に対する割込みサービス・ルーチン |
MikamiUitOpen | 0:30022cf02315 | 43 | void TickerIsr() { swi1_.Invoke(); } |
MikamiUitOpen | 0:30022cf02315 | 44 | |
MikamiUitOpen | 0:30022cf02315 | 45 | int main() |
MikamiUitOpen | 0:30022cf02315 | 46 | { |
MikamiUitOpen | 0:30022cf02315 | 47 | printf("\r\n\nSwiManager の 使用例\r\n"); |
MikamiUitOpen | 0:30022cf02315 | 48 | printf("マイコン・ボードの LED はプログラム開始 3 秒後から点滅を始めます\r\n"); |
MikamiUitOpen | 0:30022cf02315 | 49 | |
MikamiUitOpen | 0:30022cf02315 | 50 | // チャタリング防止機能付きの外部入力 |
MikamiUitOpen | 0:30022cf02315 | 51 | PushButton sw(USER_BUTTON, PullNone, PushButton::FALL, &PbIsr, 0.5); |
MikamiUitOpen | 0:30022cf02315 | 52 | NVIC_SetPriority(EXTI15_10_IRQn, 0); // 割込み優先順位の設定 |
MikamiUitOpen | 0:30022cf02315 | 53 | // NVIC_SetPriority(EXTI15_10_IRQn, 2); // 割込み優先順位の設定 |
MikamiUitOpen | 0:30022cf02315 | 54 | |
MikamiUitOpen | 0:30022cf02315 | 55 | printf("割込み優先順位\r\n"); |
MikamiUitOpen | 0:30022cf02315 | 56 | printf(" EXTI15_10_IRQn: %d\r\n", NVIC_GetPriority(EXTI15_10_IRQn)); |
MikamiUitOpen | 0:30022cf02315 | 57 | printf(" swi1_ : %d\r\n", swi1_.GetPriority()); |
MikamiUitOpen | 0:30022cf02315 | 58 | |
MikamiUitOpen | 0:30022cf02315 | 59 | Ticker timer; |
MikamiUitOpen | 0:30022cf02315 | 60 | timer.attach(&TickerIsr, 3); |
MikamiUitOpen | 0:30022cf02315 | 61 | |
MikamiUitOpen | 0:30022cf02315 | 62 | swi1_.Enable(); |
MikamiUitOpen | 0:30022cf02315 | 63 | while (true) {} |
MikamiUitOpen | 0:30022cf02315 | 64 | } |