Raspberry Pi上級コース7:Raspberry Pi BroadcomBCM2835チップマニュアルのガイド

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

おすすめ

転載: blog.csdn.net/weixin_40734514/article/details/108814683