ncs: GPIOTEってなんだっけ
2024/11/16
ncs で LED のドライバは作っていたがボタンのドライバを作っていなかった。
GPIO_INT_EDGE_TO_ACTIVE を指定しているがボタンを離したときにも通知が来ているから、やっぱりチャタリングはしているのかな?
などと考えていたが、LBS サービスはボタンの押下状態の変化を通知するので片方のエッジだけでは足りないので両エッジに変更した。
前回チャタリング処理を入れていたので、そのまま使った。
pressed の方がチャタリングと見なされたとしても released の方は検知してしまう。
まあ、これは前回の状態を覚えるようにしないとできないからよしとしよう。
ボタンが複数あっても同時にチャタリング処理ができるのは 1つだけなので、同時押ししたかったら改造がいる。
そこまでやるんだったら DK Buttons and LEDs を改造する方が早いか。
こういうキーボードとかマトリクスでキーを作ったりするのとかは組み込みの基本だと思うけど、私はそういうの弱いのよねぇ。
GPIOTE?
今回はボタンの押下検知に割込みを使ったが、そういえば nRF51822 でやっているときは割込み関連で GPIOTE というものがあったと思う。
あれはなんだっけ?
昔の私は資料を作っていたようだ。
- nRF51のGPIOTEについて - PPT - Free Download
- “TE” は Tasks and Events の略
- Task は、ピンに対して設定する機能(Set / Clear / Toggle)
- Event は ピンの入力で GPIO DETECT 関連
全然覚えていないし、当時もちゃんと分かっていなかったようなので検索。
割り込みをトリガとして別のハードウェア機能を立ち上げたりするのをソフトウェアで書かずに Event と Task をつなげることで自動的にやってくれるということのようだ。
Zephyr の API でのやり方が DevZone に載っていた。
Devicetree でハードウェアを管理しているとソフトウェアで全部やってしまいそうになるが、
こういう手段もあることを覚えておくと使う機会があるかもしれない。