RP2040はWiFi/BLEがないので、どう使ったらいいのやらと思っていたけど、プログラミングできるステートマシンが搭載されたPIOが熱いと思う。多分。
CからPIOを叩くのが本筋かもしれないが、コンパイルしないといかんので面倒で、Try&Errorをなんどもやりたい場合はMicroPytonが便利と思う。なんだけど、、MicroPython版でPIOを叩くための情報があまりない。サンプルソースもあるにはあるけど、説明がないので、細かい部分がどうなっているのかわからない。仕様もStateMachine用のアセンブラとちょっと違ってるように思えるのだけど。。Pythonでputを使ってるけど、アセンブラにはPULL/OUTはあるけどPutは無いのでは?? 勉強中だから勘違いかもしれんが。Raspberry Pi Pico Python SDKとかいろいろ仕様書を読むのだけど、MicroPythonの表記法とPIOのハードウエアアーキテクチャが頭の中でリンクしないというか。。
sm.put(ar,8) というのが、8bitを除いて残り24bit(単位がbitかbyteか正確には理解できていません)を渡すということらしいが、、putって一体何・・
■追記
putはTxFIFOへの書き込み操作らしい。RxFIFOからの読み込みは、getの様だ。FIFOのR/W時にどれだけのbit数が欲しいのかを引数で指定するのだろう。多分。(単位はbit? byte??) 該当のソースコードは多分以下なのだが、、Python->Cの呼び出しシーケンスが分かっておらず、読み解けない。。
micropython/rp2_pio.c at master · micropython/micropython · GitHub
// StateMachine.put(value, shift=0) STATIC mp_obj_t rp2_state_machine_put(size_t n_args, const mp_obj_t *args) { rp2_state_machine_obj_t *self = MP_OBJ_TO_PTR(args[0]); uint32_t shift = 0; if (n_args > 2) { shift = mp_obj_get_int(args[2]); } uint32_t data; mp_buffer_info_t bufinfo; if (!mp_get_buffer(args[1], &bufinfo, MP_BUFFER_READ)) { data = mp_obj_get_int_truncated(args[1]); bufinfo.buf = &data; bufinfo.len = sizeof(uint32_t); bufinfo.typecode = 'I'; } const uint8_t *src = bufinfo.buf; const uint8_t *src_top = src + bufinfo.len; while (src < src_top) { uint32_t value; if (bufinfo.typecode == 'B' || bufinfo.typecode == BYTEARRAY_TYPECODE) { value = *(uint8_t *)src; src += sizeof(uint8_t); } else if (bufinfo.typecode == 'H') { value = *(uint16_t *)src; src += sizeof(uint16_t); } else if (bufinfo.typecode == 'I') { value = *(uint32_t *)src; src += sizeof(uint32_t); } else { mp_raise_ValueError("unsupported buffer type"); } while (pio_sm_is_tx_fifo_full(self->pio, self->sm)) { // This delay must be fast. mp_handle_pending(true); MICROPY_HW_USBDEV_TASK_HOOK } pio_sm_put(self->pio, self->sm, value << shift); } return mp_const_none; }
■追記
jmp命令で使える条件
# jmp condition constants "not_x": 1, "x_dec": 2, "not_y": 3, "y_dec": 4, "x_not_y": 5, "pin": 6, "not_osre": 7,
GitHubより
micropython/rp2.py at master · micropython/micropython · GitHub
■ご参考URL
なんとなく活動記録。様のPIOまとめ記事
Raspberry Pi Pico(RP2040)のPIOについて備忘録(MicroPython)
「Get started with MicroPython on Raspberry Pi Pico」
HackSpace magazine
一見初心者向けの入門書のようだけど、最後の付録の章ではPIOについてもかなり詳しく書いている。これを見ながら勉強したが、、、分かり切らない。