Open2
Raspberry Pi PicoのPIOを試す
Overview
Raspberry Pi Pico (RP2040) の PIO (Programmable I/O) 周りで試行錯誤した記録。
環境:
- SDK: Pico C SDK
- プロジェクトテンプレート: Enchan1207/raspico_template
クロック周り
Picoは(特に指定のない限り)125MHzで動作する。 125MHz = 8ns/clock
PIOもシステムクロックと同期して(or同速で)動作するが、16bit整数,8bit小数の分周器を搭載している。
たとえば、クロック周波数を4MHzにしたいなら:
// 125MHzを31.25分周すると4MHzになる
sm_config_set_clkdiv_int_frac(&config, 31, 25);
これで以下のPIOアセンブリを実行すると:
.program pulse
set pindirs, 1
.wrap_target
set pins, 0
set pins, 1
.wrap
出力波形はこのようになる
PIOは1命令を1サイクルで実行するので (input-synchronizerなどはここでは考えない)、4MHz = 250ns/cycle となり、周期500nsのパルスが出力される