こんにちは。seyaです。今回から新しい挑戦をしていきたいと思います。
挑戦内容は、”デバイスドライバを使用せずにRaspberry Pi Mouseで迷路走行ができるようにする!”です。LEDやスイッチなどの周辺機能をプログラムの中で書いて動かしていくということをしていきたいと思います。
プログラムはGithubのこちらのリポジトリにあります。Raspimouse_samples
今回は、Lチカをするために、GPIOのレジスタを確認していきたいと思います。
Raspberry Piには、bcm2835チップが乗っています。GPIOなどの制御はこのチップで行われているそうです。今回は、bcm2835のGPIOレジスタを設定していきたいと思います。データシートを見ていきます。
この表より、レジスタのオフセットが0x200000であることがわかりました。また、このレジスタのそれぞれの説明を読んでいくことでどのように設定を行えばGPIOの制御ができるのかということもわかるようになりそうです。
このレジスタの概要より、GPIO Functuion SelectでGPIOの設定ができそうということが読み取れます。早速見ていきます。
それぞれのGPIOポートに対応する3bitの値を設定を行うことでOKということがわかります。LEDの点灯消灯を行うためには、outputモードに設定をすればよさそうです。
GPIOの出力設定は、GPIO Ooutput Pin Set 0/1やGPIO Ooutput Pin Clear 0/1レジスタで可能のようです。このレジスタ設定レジスタと同様にして確認をすると、それぞれのビットがGPIOに対応していました。
レジスタの設定方法がわかったので、Raspberry Piでこのレジスタをたたくためのプログラムを書いていきます。
bcm2835のレジスタにアクセスするために、物理的なアドレスの取得を行い、レジスタにアクセスをするということをしていきます。
使用する関数はopen,nmap関数などです。
今回は、長くなったのでプログラムに関しては次回書いていきたいと思います。
さいごに
Raspberry PiのGPIOをレジスタにアクセスをしてたたくというとてもローレイヤーの内容について書いてみました。マイコンと似たような感じでした。マイコンとは違って簡単にレジスタにアクセスをすることができないため、マイコンよりも難しく感じました。
この記事の最初に紹介をさせていただいたGithubのリポジトリにプログラムがあるので、見ていただければと思います。