Raspberry Pi 5のRP1-Chipを使い倒す(GPIO)

Raspberry Pi 5 からGPIOなどの周辺機能がRP1という新しいチップへ変更されたことで今までのライブラリが全て動作しなくなってしまったがそのチップへの興味は尽きないというか気になりだすと止まらない性格でもあるのでとりあえずGPIOだけでも理解できたらと調べてみた。

従来のGPIOはRIO(Registered IO)として対応はされているがRIOなど使わなくてもで同じことができてしまうのが素晴らしい。

ただ、毎度のことながら新しい機能を使おうとすると既存のコードとの互換性が損なわれてしまうのがなんとも歯がゆい...いつかは解決するのだろうが...とか、まぁ、余計なことを考えながらGPIOだけでも操作してみたいとRIOを使ったライブラリを作ってみた。

ライブラリはRP1の全機能が全て操作できるように対応してみたつもりだがサンプル・プログラムは定番のLチカだ。

まずはこれができないとね。(笑)

ちなみに単純ループでのLチカ出力周波数は約20MHzだった。かなり早いかも!

但し、実行するにはルート権限が必要なことに注意しよう!

【Lチカ実行の様子】
抵抗入りのLEDを使っているので安易にマネしないように。v(-_-;)

ちなみにGPIOピンの入力変化を指定のコールバック関数で待ちたいときは下記ライブラリを併用すると良い。【ピン変化割り込みのサンプル】

GPIO Character Device で GPIO を制御するライブラリ

【続編】
Raspberry Pi 5のRP1-Chipを使い倒す(PWM)

【関連投稿】
Raspberry Pi 5 のSoftware-I2C libraryを作ってみた。
Raspberry Pi 5 のSoftware-SPI libraryを作ってみた。

【修正】
2025-05-06
pinMode()に出力初期値指定の追加と不必要なプルアップ設定を解除するようにした。

2025-05-02
下記関数を追加。
static unsigned long nanos(void)
static unsigned long micros(void)
static unsigned long millis(void)
static void delayNanoseconds(unsigned long ns)
static void delayMicroseconds(unsigned long us)
static void delay(unsigned long ms)

2025-04-30
digitalWrite()の出力がリアルに反映されない現象の対策を行った。
その結果、Lチカ出力周波数は、SET/CLRで最大5MHz、TOGGLEでは最大400KHzとなる。

【サンプル・プラグラム】

【ライブラリ】