• 検索結果がありません。

4. 応用例の説明

4.2 参考プログラムの説明

4.2.3 参考プログラムのフローチャート

(1) main()関数フローチャート

パワーオンリセットからLBSC、DBSC3の初期設定を実行した後、main()関数からの処理フローを示します。

スタート

< main() >

ピンファンクション設定

< pfc_init() >

SCIF0設定

< scif_init() >

コンソール表示(1)

Target Device Check ?

PCI Express初期設定

< pcie_init() >

PCI Expressコンフィグ空間読出し

コンソール表示(2)

コンソール表示(3)

Transmit Data Start ?

エンド ピンファンクションの設定

SCIF0を115200pbs, 8bitで設定

コンソール表示(1):

”SH7786 PCI Express DEMO Sample ROOT Port”を表示

コンソール表示に”Target Device Check? Y/N”と表示され、Target Deviceを チェックしたい場合は”Y”を、そうでない場合は”N”を入力

コンソール表示(2)

No Check Device”と表示 PCIEC (Root Port) 初期設定

Target Device のコンフィグ空間を読出し

コンソール表示(3):Target DeviceのVenderIDとDeviceIDを表示 VID/DIDが “0xFF”の場合、”Device not detected on PCI Bus”を表示

コンソール表示に”Transmit Data Start? Y/N”と表示され、Target Deviceにテストデータ を送受信したい場合は”Y”を、そうでない場合は”N”を入力

N N

Y PCIEC ROOT port

or END point ?

PCIEC = END point ( CONFIG_PCIE_END = 1 )

PCIEC = Root port

( CONFIG_PCIE_ROOT = 0 )

B PCIEC (END point) 初期設定

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

for( i=0; i<4; i++ )

コンソール表示(5)

コンソール表示(6) A

コンソール表示(5):IO空間から読出したアドレスとテストデータを表示

コンソール表示(6):メモリ空間から読出したアドレスとテストデータを表示 メモリ空間への書込み

< pcie_mem_write() >

メモリ空間から読出し

< pcie_mem_read() >

Target Deviceのメモリ空間にテストデータ書込み

Target Deviceのメモリ空間からテストデータ読出し IO空間への書込み

< pcie_io_write() >

IO空間から読出し

< pcie_io_read() >

Target DeviceのIO空間にテストデータ書込み

Target DeviceのIO空間からテストデータ読出し

コンソール表示(11)

エンド

コンソール表示(11):”PCI Express Demo Sample End”を表示 転送データの初期化 DMA転送用テストデータ(64byte)をSDRAMに展開

コンソール表示(7) コンソール表示(7):”DMA Start WRITE(SuperHyway->PCI)”を表示

メモリ空間にDMA転送(Write)

< pcie_start_dma() > SDRAMから64byteのテストデータをTarget Deviceのメモリ空間にDMA転送

コンソール表示(8) コンソール表示(8):”Transfer Data”と表示し、転送元のSDRAMアドレスとテスト データ64byte分を表示

コンソール表示(9) コンソール表示(9):”READ(PCI->SuperHyway)”を表示

メモリ空間からDMA転送(Read)

< pcie_start_dma() > Target Deviceの同一メモリ空間から64byte分のテストデータをSDRAMにDMA転送

コンソール表示(10) コンソール表示(10):”Transfer Data”を表示し、転送先のSDRAMアドレスとテスト データ64byte分を表示

図4.2.4.1 mainフロー(PCI Express Root port)

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

コンソール表示(1)

PCI Express初期設定

< pcie_init() >

コンソール表示(2)

エンド

コンソール表示(1):”SH7786 PCI Express DEMO Sample END Point”を表示

PCIEC (End Point) 初期設定

コンソール表示(2):”PCI Express Demo Sample End”を表示 B

図4.2.4.2 mainフロー(PCI Express End point)

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(2) ピンファンクション設定フローチャート

ピンファンクション設定の処理フローを示します。

図4.2.4.3 ピンファンクション設定フロー

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(3) SCIF0初期設定フローチャート

シリアルコンソールとして使用するSCIF0初期設定の処理フローを示します。

スタート

< scif_init() >

シリアルコントロールレジスタ

SCSCR0の設定 TIE, RIE, TE, RE を"0"クリア

FIFOコントロールレジスタ SCFCR0の設定

シリアルステータスレジスタ SCFSR0の設定

ラインステータスレジスタ SCLSR0の設定

ソースクロック選択

シリアルコントロールレジスタ SCSCR0の設定

ビットレートレジスタ SCBRR0の設定

ソフトウェアウェイト

FIFOコントロールレジスタ SCFCR0の設定

エンド

シリアルコントロールレジスタ SCSCR0の設定 TX, RX の FIFO をクリア

BRK, DR, TR を"0"クリア

ORER を"0"クリア

EXT: SCK 入力 ボーレートに使用するソースクロックを選択

INI : PΦ, EXT : SCK外部入力

INI : PΦ

ソースクロックを PΦに設定

ソースクロックを SCK外部入力に設定

115200pbsに設定

1ビット期間待つためのソフトウェアウェイト

レシーブFIFOデータ数トリガ:1に設定 トランスミットFIFOデータ数トリガ:32に設定 TX, RXのFIFOをクリアしない設定 トランスミットイネーブル:1に設定 レシーブイネーブル:1に設定

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(4) PCI Express バス初期設定フローチャート

PCI Express バス初期設定の処理フローを示します。

スタート

< pcie_init() >

memset PCIECコンフィグレーションデータの初期化

PCIECソフトリセット

< pcie_soft_reset() > PCIECソフトウェアリセット

PCI Express物理層の初期化

< pcie_phy_init() > PCI Express物理層の初期化

PCI Expressの初期化

< pcie_trans_cont_init() > PCI Expressの初期化(コネクションの開始)

PCI Expressコンフィグレーションの設定 PCI Express

コンフィグレーション初期化

< pcie_config_init() >

エンド

図4.2.4.5 PCI Express バス初期設定フロー

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(5) PCIECソフトウェアリセットフローチャート

PCIECソフトウェアリセット処理フローを示します。

スタート

< pcie_soft_reset() >

ソフトリセット制御レジスタ

PCIESRSTRの設定 ソフトウェアリセット実行: SRST に"1"セット

転送コントロールレジスタ PCIETCTLRの設定

ソフトリセット制御レジスタ PCIESRSTRの設定

送信VC0ステータスレジスタ PCIETXVC0SRの設定

PCIEC内部レジスタ初期化: CFINIT ”0" にセット

ソフトウェアリセット解除: SRST に"0"セット

VC0送信バッファのクリア: TXBUFCLR に"1"セット

エンド

図4.2.4.6 PCIECソフトウェアリセットフロー

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(6) PCIEC物理層初期化フローチャート

PCIEC物理層初期化の処理フローを示します。

スタート

< pcie_phy_init() >

コンソール表示(1):”PCIe PHY During Initialization...”を表示

物理層レジスタ空間アクセスのクロック供給 PHYCKEに"1"セット

初期化順序

(1)物理層制御レジスタアドレス 0x60 に 0x004B_008B をセット (2)物理層制御レジスタアドレス 0x61 に 0x0000_7B41 をセット (3)物理層制御レジスタアドレス 0x64 に 0x00FF_4F00 をセット (4)物理層制御レジスタアドレス 0x65 に 0x0907_0907 をセット (5)物理層制御レジスタアドレス 0x66 に 0x0000_0010 をセット (6)物理層制御レジスタアドレス 0x74 に 0x0007_001C をセット (7)物理層制御レジスタアドレス 0x79 に 0x01FC_000D をセット (8)物理層制御レジスタアドレス 0xB0 に 0x0000_0610 をセット (9)物理層制御レジスタアドレス 0x67 に 0x0000_0400 をセット コンソール表示(1)

物理層制御レジスタ PCIEPHYCTLRの設定

コンソール表示(2):”PCIe PHY During Initialization...Finish”を表示 物理層制御レジスタの初期化

< phyreg_write() >

エンド コンソール表示(2)

物理層レジスタ空間アクセスのクロック停止 PHYCKEに"0"セット 物理層制御レジスタ

PCIEPHYCTLRの設定 PCIEC ROOT port

or END point ?

PCIEC = END point ( CONFIG_PCIE_END = 1 )

PCIEC = Root port

( CONFIG_PCIE_ROOT = 0 )

物理層制御レジスタの読出し

< phyreg_read() > 物理層制御レジスタアドレス 0x67 のデータを読出し

図4.2.4.7 PCIEC物理層初期化フロー

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(7) PCIEC初期化フローチャート

PCIEC初期化の処理フローを示します。

スタート

< pcie_trans_cont_init() >

コンソール表示(1):”PCIe Controller During Initialization...”を表示

ローカル(SuperHyway)アドレスレジスタ0に"0x0C000000"セット コンソール表示(1)

ローカルアドレスレジスタ0 PCIELAR0の設定

ローカルアドレスレジスタ2

PCIELAR2の設定 ローカル(SuperHyway)アドレスレジスタ2に"0x0D000000"セット

ローカルアドレスマスクレジスタ0 PCIELAMR0の設定

ローカル(SuperHyway)アドレスマスクレジスタ0に"0x000FFF01"セット LAMR0に1Mbyte、SPCSELに32ビットアドレス空間にメモリを確保、LARE にローカルアドレスイネーブルを指定

ローカルアドレスマスクレジスタ2 PCIELAMR2の設定

ローカル(SuperHyway)アドレスマスクレジスタ2に"0x000FFF11"セット LAMR2に1Mbyte、SPCSELに32ビットアドレス空間にI/Oを確保、LAREに ローカルアドレスイネーブルを指定

ID設定レジスタ1

PCIEIDSETR1の設定 ID設定レジスタ1 PCIEIDSETR1に"0x01234567"セット

ID設定レジスタ2

PCIEIDSETR2の設定 ID設定レジスタ2 PCIEIDSETR2に"0x89ABCDEF"セット

PCIコンフィグレーションレジスタ1 PCIEPCICONF1の設定

PCIコンフィグレーションレジスタ1 PCIEPCICONF1に"0x00000007"セット メモリ/IOリクエスト許可、メモリ空間アクセス許可、IO空間アクセス許可

転送コントロールレジスタ PCIETCTLRの設定

転送コントロールレジスタ PCIETCTLRに"0x00000001"セット LTSSM の起動(コネクション確立開始)

転送ステータスレジスタ PCIETSTR DLLACT=1?

Data Link Layer が アクティブ状態?

DLLACT=0

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(8) PCI Expressコンフィグレーションレジスタ初期設定フローチャート

PCI Expressコンフィグレーションレジスタ初期設定の処理フローを示します。

スタート

< pcie_config_init() >

PCI Expressコンフィグレーションレジスタのベンダー・プロダクトIDの取得 コンフィグレーションレジスタ読出し

< config_read() >

PI/Oコントロールレジスタ PCIEPCTLR CRS=1?

CRS を受信?

CRS=1 CRS=0

DeviceID = 0?

DeviceID /=0 DeviceID=0

エンド

デバイスIDの確認

コンフィグレーションレジスタ読出し

< config_read() > 接続先デバイスの MPSS (Max Payload Size Supported)を取得

CAP ID = 0x10?

コンフィグレーションレジスタ読出し

< config_read() >

PCI ExpressコンフィグレーションレジスタのPCI Express Capability Structure を取得

CAP ID /=0x10

CAP ID =0x10

PCI Expressケイパビリティレジスタ2 PCIEEXPCAP2の設定

MPSの取得

取得したPCI Express Capability Structureの MPS(Max Payload Size)と PCI Expressケイパビリティレジスタ1 PCIEEXPCAP1 のMPSを比較し、

より小さい値を MPS にする

コンフィグレーションレジスタ読出し

< config_read() >

PCI ExpressコンフィグレーションレジスタのPCI Express Capability Structure を取得

PCI ExpressコンフィグレーションレジスタのPCI Express Capability Structure の MPS に取得した MPS をセット

コンフィグレーションレジスタ書込み

< config_write() >

PCI Expressケイパビリティレジスタ2 PCIEEXPCAP2 に 取得した MPS を セット

コンフィグレーションレジスタ書込み

< config_write() >

PCI Expressコンフィグレーションレジスタのコマンド・レジスタに”0x00000007"

をセット

コンフィグレーションレジスタ読出し

< config_read() > PCI Expressコンフィグレーションレジスタのベースアドレスレジスタ0を取得

C

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

図4.2.4.9 PCI Expressコンフィグレーションレジスタ初期設定フロー

SH7786 グループ SH7786 PCI Express コントローラ(PCIEC)初期化設定例

(9) PCI Expressメモリ転送(Write)フローチャート

PCI Expressメモリ転送(Write)の処理フローを示します。

図4.2.4.10 PCI Expressメモリ転送(Write)フロー

(10) PCI Expressメモリ転送(Read)フローチャート

PCI Expressメモリ転送(Read)の処理フローを示します。

図4.2.4.11 PCI Expressメモリ転送(Read)フロー

関連したドキュメント