2021RP2040でPIOを動かすまでのプロジェクト新規作成・ビルド方法について解説します。ここではPythonではなくC言語をターゲットとしています。参考にして作成します。参考に、ビルド・デバッグができる所まで進めたら、VSCodeのエクスプローラーで、PIOTest.cと同一階層にPIOTest.pioというファイルを新規作成し、次のように編集します。FIFOが空になるとpullでFIFOにデータが入るまで待機します。出力ピン(GPIO)に書き込みます。1』等で値が入る対象)となるGPIOを設定します。変数pinにはGPIO番号が入ります。ここでは"1"としていますので、pinのGPIOのみが使用されることになります。GPIO番号"pin"をGPIOとして使えるようにします。対象のGPIOを出力に設定します。Pico)のPIOのJMPやMOVといったアセンブラのような命令について解説します。条件によって設定したラベル位置に処理を移動させます。レジスタXが0の場合、ラベルloopに処理をジャンプします。命令は次のフォーマットで記述します。かっこ()は省略可を意味します。条件が成立(true)する場合に、ラベルにジャンプします。条件は次の8パターンの書き方があります。条件は常に成立(true)となり、常にラベルにジャンプします。レジスタXが0の場合、ラベルにジャンプします。レジスタXが0では無い場合、ラベルにジャンプします。ついでにレジスタxの値を1引きます。レジスタYが0の場合、ラベルにジャンプします。レジスタYが0では無い場合、ラベルにジャンプします。ついでにレジスタyの値を1引きます。レジスタXとYが違う値の場合、ラベルにジャンプします。_pin関数で設定しておいたGPIOピンがHレベルの場合、ラベルにジャンプします。OUTシフトレジスタが空でなければ、ラベルにジャンプします。条件が成立するまで待機します。遅延命令を付けた場合は、条件成立直後に遅延処理が実施されます。I/O)のブロック図を解説します。私なりにブロック図を書き直して、それを元にPIOについて説明します。I/O)とは、簡単に言うとメインのCPUとは別で動く非常に小さなCPUのことです。この小さなCPU(ステートマシンと呼びます)は合計8つ存在し、IO操作等が可能です。CPUとは独立して動作しますので、タイミングのシビアなI/O制御に向いており、プログラミング次第でUARTやSPIといった周辺回路と大体同様の機能を作成できます。全体のブロック図は次のようになります。ステートマシンはPIO0とPIO1の2ブロックに4つずつ、合計8つ存在します。詳細なブロック図は次のようになります。CPUからステートマシンにデータを送る際に使用される32bitのバッファ。FIFOからOutシフトレジスタへ値を移動できる。FIFOは他のFIFOと結合してサイズを拡張可能。ステートマシンからCPUにデータを送る際に使用される32bitのバッファ。FIFOから目的のデータを取得する。FIFOへ値を移動できる。FIFOと同じく結合してサイズ拡張可能。32bitのデータを保持できるビットシフト機能の付いたレジスタ。『OUT』命令で保持データ(指定ビット数分)をGPIO等に反映し、ビットシフトする。32bitのデータを保持できるビットシフト機能の付いたレジスタ。『IN』命令でGPIO等の値(指定ビット数分)を取得し、ビットシフトする。Elkanprotonaso制御・組み込みエンジニア歴だけでいうと8年ほど。計測制御アプリ開発が得意分野で本業。Webアプリフレームワーク(Python/Ruby)を用いた開発実績もあり。毎日業務で読み書きしまくるC#が一番得意。今は3歳の息子を愛でるので忙しいおじさん。