割り込み動作を堪能 (C/C++) ーRaspberry Pi Picoへの道3ー
前回は Raspberry Pi Pico のWindowsでのC/C++環境構築 を行いました。
当初はRaspberry Pi Picoの公式ドキュメントをしっかり読んできちんと理解しようと意気込んでいたのですが。。。
SDKの資料を読んでもよくわかりませんでした。 😥 特にCMakeLists.txtのこととか
Pico C/C++ SDK
Raspberry Pi PicoのキモであろうPIOについても.pioファイルに謎の記述しないといけないなど使いこなせる気が全くしませんでした。
Raspberry Pi Pico をぶん投げてやろうかとも思いましたが、いつも通りサンプルコードをゴリゴリ
いじってやりたいことを達成していく いつものスタイルにもどします。
ソフトウェア難しすぎ。
目次
割り込み動作
まずはGPIOによる割り込み動作の実現を目指します。
以下にC言語のサンプルコードがありました。
https://github.com/raspberrypi/pico-examples/blob/master/gpio/hello_gpio_irq/hello_gpio_irq.c
サンプルコードを参考にGPIOに接続されたボタンを押すと、割り込みでシリアル出力するコードを作成しています。
構成
GPIO2ピンをプルアップしてタクトスイッチを接続しました。
Cコード
サンプルコードを参考にGPIO2がLOWレベルに落ちた時に割り込んでシリアル出力するコードを作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> #include "pico/stdlib.h" #include "hardware/gpio.h" #include "pico/binary_info.h" void gpio_callback() { puts("interrupt!!\n"); } int main() { stdio_init_all(); gpio_set_irq_enabled_with_callback(2, GPIO_IRQ_EDGE_FALL, true, &gpio_callback); while (1) { } } |
動作
本来はボタンを押したときに1回シリアル出力してほしいのですがチャタリングのように複数回出力されるときがあります。
これはRaspberry Pi Pico の動作が高速のためにボタンを押して信号が落ちきる前にしきい値付近で複数回判定してしまうために起きます。ESP32でも同様の動作となります。
おわりに
Raspberry Pi Picoの公式ドキュメントをしっかり読んで理解を深めるのはあきらめました。
いきなり頓挫してしまいましたが、サンプルコードを勉強してなんとか Raspberry Pi Picoをもちいてバーサライタ製作を実現したいと思っています。
噂ではSPIが非常に高速とのことなので非常に楽しみです。
今回は割り込み動作を試してみました。
次回は、Raspberry Pi Pico のGPIOが内部でプルアップ/プルダウンできるのかの調査と割り込みボタンのチャタリング対応を実施したいと思います。
それでは次の道でお会いしましょう!
追記
GPIOプルアップ (21/2/11)
Raspberry Pi Pico
GPIOのプルアップはこれでできた。
gpio_pull_up(uint gpio)https://t.co/5BelhkNdvl#RaspberryPiPico #PiPico #ラズパイ— HomeMadeGarbage (@H0meMadeGarbage) February 11, 2021