割り込み処理

どうやら割り込みに入って出てくるまでに時間がかかる模様。

#include "mbed.h"

DigitalOut whileOut(p21);
DigitalOut intrOut(p22);
Ticker flipper;


void flip() {
    intrOut = !intrOut;
}

int main() {
    flipper.attach_us(&flip, 3);
    while(1) {
        whileOut = !whileOut;
    }
}

としたとき、main関数の最初、attach_usが4以下だと割り込み→次の割り込みの間のwhileOut = !whileOut;が呼び出されない。

  • 黄色Ch1:whileOut、
  • 緑Ch2:intrOut

flipper.attach_us(&flip, 1);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-1.png 割り込みが発生していない模様。

flipper.attach_us(&flip, 2);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-2.png whileループが実行されていない。

flipper.attach_us(&flip, 3);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-3.png 同じくwhileループが実行されていない。

flipper.attach_us(&flip, 4);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-4.png まだwhileループが実行されていない。 (ピンクは関係ありません)

flipper.attach_us(&flip, 5);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-5.png やっとwhileループが実行された。 (ピンクは関係ありません)

flipper.attach_us(&flip, 6);のとき

/media/uploads/takeshikodaira/_scaled_attach_us-6.png

こういう事??

/media/uploads/takeshikodaira/attach_us-6_comment.png

よく分かりませんが、割り込みを発生させてintrOut = !intrOut;を実行して戻ってくるまでに4.34us程度かかる、ということは言えそうです。


2 comments on 割り込み処理:

08 Jul 2011

これから割り込みを使ってエッジ間の時間を測定しようと思っていたので大変参考になりました。 ありがとうございます。

01 Sep 2012

今気づきました。スミマセン。お役に立てば幸いです。

Please log in to post comments.