現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。
概要
GitHub上にIRQ通知ができないというIssueが作られ、それに答える形で公式スケッチが追加されましたので、中身を確認したいと思います。
スケッチ例(GitHub)
#include "M5StickC.h" static void clear_mpu6880IRQ() { uint8_t temp; // set int active is LOW M5.I2C.writeByte(0x68, 0x37, 0xc8); // disable irq M5.I2C.writeByte(0x68, 0x38, 0x00); // clear irq status M5.I2C.readByte(0x68, 0x39, &temp); } static void clear_200qIRQ() { M5.I2C.writeByte(0x6C, 0x13, 0xe0); } static void axp192_disableAllIRQ() { M5.I2C.writeByte(0x34, 0x40, 0x00); M5.I2C.writeByte(0x34, 0x41, 0x00); M5.I2C.writeByte(0x34, 0x42, 0x00); M5.I2C.writeByte(0x34, 0x43, 0x00); } static void axp192_clearAllIRQStatus() { M5.I2C.writeByte(0x34, 0x44, 0xff); M5.I2C.writeByte(0x34, 0x45, 0xff); M5.I2C.writeByte(0x34, 0x46, 0xff); M5.I2C.writeByte(0x34, 0x47, 0xff); M5.I2C.writeByte(0x34, 0x4d, 0xff); } static void axp192_enableBtnIRQ() { M5.I2C.writeByte(0x34, 0x42, 0x03); } static uint8_t axp192_getBtnIRQStatus() { uint8_t status; M5.I2C.readByte(0x34, 0x46, &status); // clear btn irq M5.I2C.writeByte(0x34, 0x46, 0xff); return status; } void setup() { M5.begin(); M5.Lcd.setRotation(3); Wire.begin(21, 22, 400000); clear_mpu6880IRQ(); clear_200qIRQ(); pinMode(35, INPUT); axp192_disableAllIRQ(); axp192_clearAllIRQStatus(); axp192_enableBtnIRQ(); } void loop() { delay(1000); M5.Lcd.setCursor(0, 0); uint8_t PinStatus = digitalRead(35); uint8_t IRQStatus = axp192_getBtnIRQStatus(); M5.Lcd.printf("pin 35 status: %d\r\n", PinStatus); M5.Lcd.printf("axp192 btn status: %d\r\n", IRQStatus); Serial.printf("pin 35 status: %d\r\n", PinStatus); Serial.printf("axp192 btn status: %d\r\n", IRQStatus); }
M5StickCの電源ボタンを押すと通知が発生するスケッチ例になります。
原理
GPIO35にいろいろなIRQ通知用の信号が接続されていますが、本体側の回路でプルアップがされていません。通常ですと使えないのですがIMU(SH200Q or MPU6880)はHIGH出力ができるので、プルアップのかわりに使っています。
IRQ通知があるときにはアクティブで、IRQ通知がないときにはネガティブになります。IMUの設定ではアクティブローに設定して、IRQ通知をすべてクリアしています。つまりネガティブ状態になり、HIGHが出力されている状態です。
この状態で、AXP192などがIRQ通知を行うとGPIO35がLOWに落ちますので、通知を確認することができます。
欠点として、誰がLOWに落としているかはこの時点ではわかりませんのでI2Cで個別に確認するか、一人しか通知を出さないようにしておく必要があります。
細かい原理
昔に調べた上記と同じ仕組みになっていました。まだライブラリには組み込まれていないので、直接I2Cで設定を入れる必要があります。
まとめ
実際のところあまりIRQ通知が必要なことは少ないので、本当に必要なとき以外は使わないほうがいいとは思います。
コメント