Raspberry Pi BroadcomBCM2835チップマニュアルガイド
運転するための2つの強力なツール:
回路図:回路図からレジスタを見つけます
チップマニュアル:書き込み
1.ラズベリーパイレジスターの紹介:
GPFSEL0 GPIO Function Select 0: //功能选择 输入/输出
GPSET0 GPIO Pin Output Set 0 : //输出0
GPSET1 GPIO Pin Output Set 1 : //输出1
0 = No effect
1 = Set GPIO pin n
GPCLR0 GPIO Pin Output Clear 0: //清零
0 = No effect
1 = Clear GPIO pin n
GPCLR1 GPIO Pin Output Clear 1 ://清1
各レジスタは32ビットです。
例:ピン4を出力ピン
FSEL4 14-12 001として構成します。4ピン14-12を001GPIOとして構成します。ピン4は出力です。
注:構成した一番下のピンは、BCM
レジスタグループ0ビットFESL0-9
レジスタグループ1ビットFSEL10-19に対応します。
特定のピンは、公式マニュアルにも記載されています。
2.レジスタアドレスの問題:
ドライバーを作成するとき、IOスペースの開始アドレスは0x3f000000に、GPIO 0x2000000のオフセットを加えたものであるため、GPIOの物理アドレスは0x3f200000から開始する必要があり、これに基づいて、LinuxシステムのMMUメモリ仮想化が行われます。管理、仮想アドレスにマップされます。
図のテールオフセットは正しいです。GPIO0x3f200000の物理アドレスによると、次のことがわかります
。GPFSEL00x3f200000
GPSET0 0x3f20001c
GPCLR0 0x3f200028
ここで得られるのは、物理アドレスが操作不能であり、次の関数を使用して仮想アドレスに変換する必要があるということです。
void __iomem * __ioremap(unsigned long phys_addr, size_t size, unsigned long flags);
ioremap宏定义在asm/io.h内:
#define ioremap(cookie,size) __ioremap(cookie,size,0)
パラメータ:
phys_addr:マッピング
される開始IOアドレスサイズ:マッピングされるスペースのサイズ
フラグ:マッピングされるIOスペースに関連するフラグと権限
この関数は、マッピングされたカーネル仮想アドレス(3G-4G)を返します。 I / Oメモリリソースのこのセクションには、返されたカーネル仮想アドレスの読み取りと書き込みによってアクセスされます。
と:
BCM2835チップマニュアル:
BCM2835_PDF_Datasheet