表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
51/61

2.PIOってどんな機能があるの?

ざっくりPIOを説明すると、GPIOを制御する専用のコントローラであり、プログラムでピンを操作できる。

ただし、アセンブラで書く必要があり、32ステップしか使えない。

昔のプログラム電卓かな?


ともあれサンプルを見ながら何ができるかを探っていった。


雑にまとめると

2つのレジスタをカウンタとしてルーブ処理ができる(Xビット転送をY回実行)

push, pull 命令でCPUとPIOのやり取りをFIFOで行う

out命令でシフトレジスタのデータをGPIOに出力できる

in命令で入力も指定できる

set命令でGPIOを設定できる。チップセレクトとか。

命令ごとに sidesetを設定でき、GPIOを操作できる。クロックとか。

これらのGPIOは1ピンじゃなく連続した5ピンまで設定できるので、SPIからQSPIまで作れる。


PIOでの処理はかなり癖があって悩んだが、SPI出力はこんな感じのコードになる。

1.pull FIFOデータ待ち

2.mov FIFOからyに転送バイト数を転送

3.set チップセレクト有効

4.set xに転送ビット数セット

5.pull FIFOデータ待ち

6.set クロックをLO

7.out 1ビットデータを出力

8.set クロックをHI

9.jmp xをカウントダウンして6にジャンプ

10.set クロックをLO

11.jmp yをカウントダウンして4にジャンプ

12.set チップセレクト無効


PIOで面白いところは、6,7や8,9や10,11 をsidesetを使えば1つの命令にまとめて節約できるところ。メモリ32ステップしかないから重要。

CPUからはひたすらデータをFIFOに書き込めばPIOがデータを送信してくれるし、DMAを使えばもっと高速に処理できる。


QSPIにするなら 7 の処理で4ビット出力するようにして、4のループ回数を1/4にすればいい。ただし GPIOが並んでいる必要がある。(picocalcはGP2-GP6と並んでいる)


またチップセレクトもクロックと並んだGPIOになってるなら set じゃなくて sideset にすることもできる。(picocalcはGP20,GP21と並んでいる)

ただ、PSRAMを使うにはチップセレクト有効にしたまま処理を継続したいので、チップセレクトはPIOじゃなくてCPU側で操作したほうがいい。


そして早速動かそうとしたが、動かなかったんだ これがw

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ