3でGPIOライブラリを作ってみた。気になったことのあれこれ。この広告は、90日以上更新していないブログに表示しています。3でGPIOライブラリを作ってみた。PiのGPIOを対象としたライブラリを作成する。既存のライブラリなどは数多く存在するが実際に自分で作成することでその内部を理解できると思う。GNU/Linuxchipsetまずデータシートからチップセットを調べる。(64Bit)引用:https://www.terraelectronica.ru/pdf/show?pdf_file=%252Fds%252Fpdf%252FT%252FTechicRP3.pdf上記からBCM2387であることがわかった。BCM2387https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf上記のデータシートから抜粋したメモリマップが以下。ペリフェラルレジスタペリフェラルデバイスのレジスタは、ペリフェラル(プログラマブル・カウンタや割り込み制御、シリアル通信ポートなどのハードウェア)の動作を設定したり、動作状況を読み出したりするためのレジスタである。https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#%E3%83%9A%E3%83%AA%E3%83%95%E3%82%A7%E3%83%A9%E3%83%AB%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BFデータシートを見ると以下のような記述があった。p6上記からペリフェラルレジスタが0x3F000000からマッピングされていることがわかる。以下のドキュメントからbcm_host_get_peripheral_address()でペリフェラルレジスタのアドレスを取得できることがわかったので実際に以下のコードで確かめる。./myfile0x3F000000加えて以下の/proc/iomemからもメモリマップが確認できる。p90にGPIOレジスタのマッピング表が記載されている。p91上記にもあるようにGPFSEL(n)はGPIOピンの操作を定義するためのものとなっている。GPFSEL0の使用方法と各ビットの対応の表を以下に抜粋した。0上記から3bitずつが各ピンに対応していることがわかる。上記と同じ要領でGPFSEL5まで続き54ピン全てに対応する。p95アウトプット用のレジスタで各ビットが各ピンに対応している。GPSET0を例に対応表をいかに示す。0上記と同じ要領でGPSET1を用いて54ピンまで対応している。p95これはアウトプットのクリア用レジスタで先ほどと同様に各ビットが各ピンに対応している。GPCLR0を例に対応表をいかに示す。0上記と同じ要領でGPCLR1を用いて54ピンまで対応している。p96ピンの値を取得する用のレジスタで先ほどと同様に各ビットが各ピンに対応している。GPLEV0を例に対応表をいかに示す。R/W|0上記と同じ要領でGPLEV1を用いて54ピンまで対応している。https://linuxjm.osdn.jp/html/LDP_man-pages/man4/mem.4.html当該デバイスファイルを用いることで物理メモリにアクセスすることでき、先ほど調べたペリフェラルレジスタがマッピングされているアドレスにアクセスする。mmap()ファイルやデバイスをメモリーにマップ/アンマップする。https://linuxjm.osdn.jp/html/LDP_man-pages/man2/mmap.2.html当該関数を用いて先ほどのデバイスファイルをプロセスのメモリにマッピングしアクセスを行う。PAGE_SIZE仮想メモリを扱う単位であるページのサイズを取得する。PAGE_SIZE4096実際にアクセスしてみる。intのポインタに変換しそのアドレスを参照しにいっているものである。コンパイルすると以下のエラーが出力されるが問題はない。^~問題なく実行することが確認できた。上記をより汎用的にし、GPIOをデジタルピンとしてON/OFF切り替え及びピンの状態を取得するライブラリを作成した。3でGPIOライブラリを作ってみた。xv6のコードリーティングを通してUnixの動作を追う。2.6.11のコードリー...2018-12-01キャラクタデバイスドライバを作ってみた。ラズパイのGPIOを対象としたデバイスドライバを作成した。»Profile低レイヤ好きのソフトウェアエンジニア。(1)はてなブログをはじめよう!k--onishiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。