Raspberry Pi PicoのPIOをMicroPythonから使った時の備忘録です。
例えば、GPIO0の立ち上がりによって、インプットピンがHIGHになるのを待って、ある波形をGPIO15ピンから出力する場合は、MicroPython用のPIOアセンブラの記法では以下のようになる。
@rp2.asm_pio(set_init=rp2.PIO.OUT_HIGH)
def base_signal(): // 適当な名前
wait(1, pin, 0) // in_pinの0番目が1=HIGHになるのを待つ
set(pins, 0) [10] // set_pinを上げ下げする
set(pins, 0) [10]
set(pins, 0) [10]
set(pins, 0) [6]
set(pins, 1) [10]
set(pins, 0) [7]
set(pins, 1) [3]
set(pins, 0) [5]
set(pins, 1) [11]
wait(0, pin, 0) // in_pin0番目が0=LOWになるのを待つ
既に記憶が曖昧ですが、本家SDKでは、wait 0 gpio 1とか、gpioを露わに書く記法が許されていますが、MicroPythonでできるかどうか忘れました。試したときはできなかったと思いますが、単純に文法を間違っただけの気がします。
実際に起動する命令は以下のようになります。
pin0 = Pin(0,Pin.IN,Pin.PULL_UP)
pin15 = Pin(15,Pin.OUT)
sm = rp2.StateMachine(0, base_signal, freq=20000000, set_base=Pin(15),out_base=Pin(15),in_base=Pin(0))
# Start the StateMachine.
sm.active(1)
セットピンとアウトピンを同じGPIO15に割り当てていますが、これは本家SDKでも許された書き方です。しかし、何故かCircuitPythonでは許されず、重複しているというエラーが出ます。
セットピンとアウトピンが別々にしか許されない場合、かなり出来ることに制限がかかるので早急に治ることを願います。