- 締切済み
ESP32の割り込みベクタ
ESP32の割り込みベクタのプログラミングはどのようにすれば良いのでしょうか? 例えば、UART0でデータが受信した時の割り込みの場合はどのようにプログラムすれば良いか教えて頂きますよう、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
他の人が作成した、サンプルがあったので、 拾っておきました。 https://tutorialmore.com/questions-1309720.htm この手のは、関数名で、検索すれば結構見つかるので、 使い方が~って時は、他の人が書いたサンプル見るのが 一番早いですよ。 ということで、うまくいくことの祈ります!
- AsarKingChang
- ベストアンサー率46% (3467/7474)
この前書いたURLのちょっとしたに、それも書いてましたよ。。 https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/uart.html#uart-api-using-interrupts 「Using Interrupts - Triggering interrupts on specific communication events」 の項目内の esp_err_tuart_enable_rx_intr(uart_port_t uart_num) これでしょ?(パラメタはポート番号ですね) ベクタはこれじゃないかな~ esp_err_tuart_isr_register(uart_port_t uart_num, void (*fn)(void *), void *arg, int intr_alloc_flags, uart_isr_handle_t *handle, ) fnが、関数ですね。 型が、 typedef void (*fn)(void *); なので、 同じ型を作ればOKでしょう。 static void int_vec(void *p); などをポインタで渡せばOKかと。 C言語風になってるので、おそらくは、レジスタ類はPUSHしてから コールしてくれているものと推測してますが、 だとするとオーバーヘッドはやや大きいかもしれませんね。。 割り込み類は、いつでも「可能な限り短いほうがいい!」 ってのは、マイクロ系チップ共通ですから。 (じゃないと、関数にいる間に別の通信をうければ、取りこぼすか再入を起こすので) サンプルはここにあるようですが、 https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/uart.html#uart-api-using-interrupts 全体サンプルじゃなく、関数APIサンプルのみしかないみたいですが。 ただ、現物ボード持ってないので、実際に実験して インターラプトがどう発生するのかが試せないんですけどね。 そこは、お力になれませんが。 ってことでOKでした?