φ(. . )めもめも

技術関連の個人的な備忘録

RaspberryPi - C言語でLチカ(レジスタ直接制御)

雑誌インターフェース 2012年12月号の サンプルプログラム (おそらくオリジナルはここ)を、 Rev2基板用にすこし修正して動作させた。(48行目~)
それと、サンプルプログラムのGPIO4が無効になっていた(何故?)ので使えるように。
※下記のコードもGPIO4を10回トグルさせるようにしている。

Rev2のピンヘッダのGPIO情報はこちらの少し下あたり。

$ gcc gpio_c.c
$ sudo ./a.out

レジスタへ直接アクセス出来るようにする手順

  1. malloc()で、仮想メモリ空間のメモリ領域を確保
  2. 確保したメモリ領域内から、4Kバウンダリのアドレスを求める
  3. /dev/mem と mmap()で、確保したメモリ領域をレジスタ領域にマッピング
  4. mmap()からマッピングされたレジスタのアドレスが返る
  5. mmap()が返したアドレス+オフセットで各レジスタにアクセスする

※ そういえば、あまり見かけないけど型修飾子のintは省略できる。

volatile unsigned *gpio;