62982


最近SPRESENSE SDKで開発を始めた者です。

GPIO入力による割込みを利用したいのですが、その具体的なやり方、手順がドキュメント内に見当たらないように思います。

他のマイコンであれば割込みベクタの登録等必要かと思うのですが、その辺りの情報が載ったドキュメントや、"GPIO"での割込みを使ったExampleコード、その他参考にできるNuttX関係の情報サイトでも良いので、ご教示頂けますでしょうか。


CC BY-SA 4.0
2020-02-11T20:06:53.347
62965
2021-09-08T01:14:33.200
2020-02-12T00:39:29.673
3060
37799
question
spresense gpio
SpresenseにおけるGPIOでの割込み方法についての資料はありますか？


Spresenseの知識・経験が無いので、検索結果の紹介になりますが、お勧めに従って。  
spresense-arduino-compatibleとあるので、Spresense
SDKで使えるかは不明ですが、呼び出している例らしきものが以下にあります。

[spresense-arduino-
compatible/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/cores/spresense/WInterrupt.cpp](https://github.com/sonydevworld/spresense-
arduino-
compatible/blob/master/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/cores/spresense/WInterrupt.cpp)

>
[code]

>     static void attach_interrupt(uint8_t pin, void (*isr)(void), int mode)
>     {
>         int  _mode;
>         bool filter = true; // always enable noise filter
>  
>         switch (mode) {
>         case LOW:
>             _mode = INT_LOW_LEVEL;
>             break;
>         case HIGH:
>             _mode = INT_HIGH_LEVEL;
>             break;
>         case CHANGE:
>             _mode = INT_BOTH_EDGE;
>             break;
>         case RISING:
>             _mode = INT_RISING_EDGE;
>             break;
>         case FALLING:
>             _mode = INT_FALLING_EDGE;
>             break;
>         default:
>             printf("ERROR: unknown interrupt mode [%d]\n", mode);
>             return;
>         }
>  
>         int irq = board_gpio_intconfig(pin, _mode, filter, (xcpt_t)isr);
>         if (irq < 0) {
>             printf("ERROR: Out of interrupt resources\n");
>             return;
>         }
>  
>         /* wait RTC few cycles before the interrupt is enabled for noise
> filter. */
>         delay(1);
>         board_gpio_int(pin, true);
>     }
>  
>     void attachInterrupt(uint8_t interrupt, void (*isr)(void), int mode)
>     {
>         uint8_t _pin = pin_convert(interrupt);
>         if (_pin == PIN_NOT_ASSIGNED)
>             return;
>         attach_interrupt(_pin, isr, mode);
>     }
>  
[/code]

そして [attachInterruptのリポジトリ内検索結果](https://github.com/sonydevworld/spresense-
arduino-compatible/search?q=attachInterrupt&unscoped_q=attachInterrupt)

資料的には  
ハードウェア使い方/設定関連  
[3.6. UARTの使用方法](https://developer.sony.com/ja/develop/spresense/developer-
tools/hardware-
documentation#_uart%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95)

> 拡張ボード側のUARTを使用する場合、メインボードのUARTピン(D00, D01, D27, D28)をGPIOとして使用することはできません。

[3.10.
拡張基板でのデジタル信号(UART/SPI/PWM/GPIO)使用上の注意](https://developer.sony.com/ja/develop/spresense/developer-
tools/hardware-
documentation#_%E6%8B%A1%E5%BC%B5%E5%9F%BA%E6%9D%BF%E3%81%A7%E3%81%AE%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E4%BF%A1%E5%8F%B7uartspipwmgpio%E4%BD%BF%E7%94%A8%E4%B8%8A%E3%81%AE%E6%B3%A8%E6%84%8F)  
接続するハードウェアに関する注意

ソフトウェア関連説明  
[5.2. GPIO/Pin
Specification](https://developer.sony.com/develop/spresense/docs/sdk_developer_guide_ja.html#_gpiopin_specification)

関連API  
[GPIO Interface
driver](https://developer.sony.com/develop/spresense/developer-tools/api-
reference/api-references-spresense-sdk/group__gpioif.html)  
[board_gpio_intconfig()](https://developer.sony.com/develop/spresense/developer-
tools/api-reference/api-references-spresense-
sdk/group__gpioif.html#ga3ac5454bcb588a251d8214157858268f)

>
[code]

>     int board_gpio_intconfig( uint32_t pin,
>                               int      mode,
>                               bool     filter,
>                               xcpt_t   isr
>                             )
>     途中省略
>         [in] isr  Interrupt Service Routine
>  
[/code]

割り込みは使っていないがGPIOでLチカする例  
[SPRESENSE
SDKでArduinoを使わずにとりあえずLチカする](https://blog.tokor.org/2018/08/03/SPRESENSE-
SDK%E3%81%A7Arduino%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9AL%E3%83%81%E3%82%AB%E3%81%99%E3%82%8B/)


CC BY-SA 4.0
2020-02-12T04:06:33.253
62982
2020-02-12T04:06:33.253
26370
62965
answer


Spresenseのドキュメントが更新されたようで、GPIOの設定から割り込みまでの説明が追加されてました。

[GPIO ユーティリティツール -
プログラミング](https://developer.sony.com/develop/spresense/docs/sdk_tutorials_ja.html#_%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

こちらを参照するとやりたいことができると思います。


CC BY-SA 4.0
2021-09-08T01:14:33.200
82325
2021-09-08T01:14:33.200
32034
62965
answer