#はじめに
前回TimerによるLチカを行いました。
ただ、ボタンの入力はポーリングで判断しておりましたが、割り込みで可能になりました。
#マニュアルを良く読む
gpio_set_irq_enabled_with_callback()関数をよく読むと、
Currently the GPIO parameter is ignored, and this callback will be called for any enabled GPIO IRQ on any pin.
Googleで翻訳すると、
現在、GPIOパラメーターは無視され、このコールバックは、任意のピンで有効になっているGPIOIRQに対して呼び出されます。
と記載されています。
「GPIOパラメータは無視され」と書いてあります。
#以前思うように動作しなかたロジック
gpio_set_irq_enabled_with_callback(15, 0x4u, false, callback_buttonL);
gpio_set_irq_enabled_with_callback(16, 0x4u, false, callback_buttonR);
gpio_set_irq_enabled(15, 0x4u, true);
gpio_set_irq_enabled(16, 0x4u, true);
上記を実行すると、GP15のボタンを押しても、callback_buttonR関数が呼ばれてしまいました。
#意図した動作となったロジック
gpio_set_irq_enabled_with_callback(15, 0x4u, false, callback_button);
gpio_set_irq_enabled(15, 0x4u, true);
gpio_set_irq_enabled(16, 0x4u, true);
callbackの関数は1つにして、GP15とGP16と指定しました。
callback_button関数は、下記のようにしました。
void callback_button(uint gpio, uint32_t events)
{
if(gpio == 15 && events == 4u){
' GP15の処理を記載
}
if(gpio == 16 && events == 4u){
' GP16の処理を記載
}
}
#まとめ
マニュアルは良く読むようにします。