割り込み / 外部割り込み / InterruptIn

参考: InterruptIn - API references and tutorials | Mbed OS 6 Documentation

ISRの中でMbed BusOutインスタンスをインクリメントしようとするとmutexエラーが出てしまうため、ISRはフラグを立てるだけにした。このへんのしくみはわからない。

下のプログラムは、タクトスイッチを押すたびに1だけインクリメントしてそれをLEDに表示する。ディバウンスしていないので時々数字が飛ぶ。
f:id:ti-nspire:20200909082013p:plain:h315

#include "mbed.h"

InterruptIn IntIn(PC_3, PullUp); // InterruptInクラスを(PinName, 入力回路)でインスタンス化する。
BusOut      led(PA_10, PB_3, PB_5, PB_4);
bool        triggered(false);

// これがISR。
void at_falling(){
    triggered = true;
}

int main(){
    IntIn.fall(&at_falling); // fall時に割り込んで、at_falling函数を実行する。
        
    uint8_t i = 0;
    while(1){
        if(triggered){
            triggered = false;
            led = ~i;
            i++;
        }
    }

    return 0;
}