...

32-Bit TX System RISC

by user

on
Category: Documents
111

views

Report

Comments

Transcript

32-Bit TX System RISC
32 ビット TX System RISC
TX39 ファミリー TMPR3927A
セミコンダクター社
まえがき
東芝マイクロコンピュータ LSI および開発支援システムをご利用いただき誠
にありがとうございます。
当社では民生用から産業用まで幅広い分野にご利用いただける各種のマイ
クロコンピュータ LSI 群を用意しております。本書は、このうち OA 用途に特
化した組み込み用 ASSP(Application Specific Standard Product ; 特定用途向け標
準 IC) TMPR3927A について記述したものです。TMPR3927A は当社が開発し
た 32 ビット RISC コアである TX39 プロセッサコアを核にする組み込み用の高
性能マイクロプロセッサです。
2000 年 11 月
セミコンダクター社
本資料の技術的お問い合わせは、下記にお願いいたします。
マイクロプロセッサ統括部 RISC 応用担当
〒210-8520 川崎市幸区堀川町 580 番 1 号
東芝マイクロエレクトロニクスセンター
半導体システム技術センター分室
電話 044-548-2214
TMPR3927A
目 次
取り扱い上のご注意とお願い
TMPR3927A
第 1 章 概要と特長 .......................................................................................................................................1-1
1.1 概要 ..................................................................................................................................................1-1
1.2 本書の表記法....................................................................................................................................1-2
1.2.1 数値の表記 ................................................................................................................................1-2
1.2.2 データの表記 ............................................................................................................................1-2
1.2.3 信号の表記 ................................................................................................................................1-2
1.2.4 レジスタの表記 .........................................................................................................................1-2
1.3 特長 ..................................................................................................................................................1-3
第 2 章 構成 ..................................................................................................................................................2-1
2.1 ブロック図 .......................................................................................................................................2-1
第3章
3.1
3.1
3.3
3.1
端子 ..................................................................................................................................................3-1
端子配置 ...........................................................................................................................................3-1
端子機能 ...........................................................................................................................................3-3
ピンマルチプレクス .........................................................................................................................3-9
初期設定信号..................................................................................................................................3-12
第 4 章 アドレスマップ ................................................................................................................................4-1
4.1 メモリマッピング ............................................................................................................................4-1
4.2 レジスタマップ ................................................................................................................................4-3
第 5 章 コンフィグレーション .....................................................................................................................5-1
5.1 チップコンフィグレーションレジスタ (CCFG) 0xFFFE_E000.....................................................5-1
5.1.1 チップリビジョン ID レジスタ (CRIR) 0xFFFE_E004...........................................................5-3
5.1.2 ピンコンフィグレーションレジスタ (PCFG) 0xFFFE_E008 .................................................5-4
5.1.3 タイムアウトエラーアドレスレジスタ (TEAR) 0xFFFE_E00C .............................................5-7
第 6 章 クロック ...........................................................................................................................................6-1
6.1 クロックジェネレータ .....................................................................................................................6-1
6.2 システムコントロールクロック (SYSCLK) ....................................................................................6-1
6.3 パワーダウンモード .........................................................................................................................6-2
6.3.1 動作 ...........................................................................................................................................6-2
6.3.2 レジスタ....................................................................................................................................6-3
第 7 章 バスオペレーション .........................................................................................................................7-1
7.1 バスマスタ .......................................................................................................................................7-1
7.1.1 スヌープ機能 ............................................................................................................................7-1
7.1.2 エンディアンとデータバスの関係 ............................................................................................7-1
7.2 バスオペレーション .........................................................................................................................7-3
7.2.1 バスエラー ................................................................................................................................7-4
第 8 章 SDRAM コントローラ .....................................................................................................................8-1
8.1 特長 ..................................................................................................................................................8-1
8.2 SDRAMC のブロック図...................................................................................................................8-3
8.3 メモリコンフィグレーションおよび構成 ........................................................................................8-4
8.4 レジスタ ...........................................................................................................................................8-5
8.4.1 レジスタマップ .........................................................................................................................8-5
8.4.2 SDRAM チャネルコントロールレジスタ (SDCCR0 ∼ 7).........................................................8-6
8.4.3 SDRAM タイミングレジスタ 1 (SDRAM/SGRAM 用) (SDCTR1)..........................................8-8
8.4.4 SDRAM タイミングレジスタ 2 (DIMM フラッシュ用) (SDCTR2).......................................8-10
8.4.5 SDRAM タイミングレジスタ 3 (SMROM 用) (SDCTR3)...................................................... 8-11
i
TMPR3927A
8.4.6 SDRAM コマンドレジスタ (SDCCMD).................................................................................8-12
8.4.7 SGRAM ロードマスクレジスタ (SDCSMRS1)......................................................................8-13
8.4.8 SGRAM ロードカラーレジスタ (SDCSMRS2)......................................................................8-14
8.5 動作 ................................................................................................................................................8-15
8.5.1 メモリタイプによる TX3927 の信号 ......................................................................................8-15
8.5.2 SDRAM オペレーション ........................................................................................................8-16
8.5.3 DIMM フラッシュオペレーション.........................................................................................8-24
8.5.4 SMROM オペレーション .......................................................................................................8-27
8.5.5 SGRAM オペレーション ........................................................................................................8-29
8.5.6 ソフトウエアの作成上の注意点 .............................................................................................8-30
8.6 タイミング図..................................................................................................................................8-31
8.6.1 32 ビットバスモードの SDRAM シングルリードオペレーション.........................................8-31
8.6.2 32 ビットバスモードの SDRAM シングルライトオペレーション.........................................8-32
8.6.3 32 ビットバスモードの SDRAM バーストリードオペレーション.........................................8-34
8.6.4 32 ビットバスモードの SDRAM バーストライトオペレーション.........................................8-35
8.6.5 32 ビットバスモードの SDRAM リード (ページをまたがるとき).........................................8-36
8.6.6 32 ビットバスモードの SDRAM へのライト (ページをまたがるとき) .................................8-37
8.6.7 32 ビットバスモードの SDRAM スローバーストライトオペレーション..............................8-38
8.6.8 16 ビットバスモードの SDRAM シングルリードオペレーション.........................................8-39
8.6.9 16 ビットバスモードの SDRAM シングルライトオペレーション.........................................8-40
8.6.10 32 ビットバスモードの DIMM フラッシュシングルリードオペレーション ......................8-41
8.6.11 32 ビットバスモードの DIMM フラッシュシングルライトオペレーション ......................8-42
8.6.12 32 ビットバスモードの SMROM シングルリードオペレーション.....................................8-43
8.6.13 32 ビットバスモードの SMROM バーストリードオペレーション.....................................8-44
8.6.14 低消費電力およびパワーダウンモード................................................................................8-45
8.6.15 32 ビットバスモードの SGRAM メモリ .............................................................................8-48
8.6.16 外部 DMA オペレーション (ビッグエンディアン) ..............................................................8-51
8.6.17 外部 DMA オペレーション (リトルエンディアン) ..............................................................8-53
8.7 SDRAM 使用例 ..............................................................................................................................8-55
第 9 章 外部バスコントローラ .....................................................................................................................9-1
9.1 特長 ..................................................................................................................................................9-1
9.2 ブロック図 .......................................................................................................................................9-2
9.3 レジスタ ...........................................................................................................................................9-3
9.3.1 レジスタマップ .........................................................................................................................9-3
9.3.2 ROM チャネルコントロールレジスタ (RCCR0 ∼ 7) ................................................................9-4
9.4 動作 ..................................................................................................................................................9-6
9.4.1 ブートアップオプション ..........................................................................................................9-6
9.4.2 グローバルオプション ..............................................................................................................9-7
9.4.3 チャネルコントロールレジスタ ...............................................................................................9-7
9.4.4 クロックオプション..................................................................................................................9-7
9.4.5 ベースアドレスとチャネルサイズの関係 .................................................................................9-7
9.4.6 動作モード ................................................................................................................................9-8
9.4.7 16 ビットバスオペレーション ..................................................................................................9-9
9.4.8 SHWT オプション ....................................................................................................................9-9
9.4.9 ACK*/READY 信号のタイミング ..........................................................................................9-10
9.4.10 READY 入力タイミング ...................................................................................................... 9-11
9.4.11 アドレッシング ....................................................................................................................9-12
9.4.12 ACE*オペレーション ..........................................................................................................9-12
9.5 タイミング図..................................................................................................................................9-13
9.5.1 ACE*信号オペレーション ......................................................................................................9-14
9.5.2 ノーマルモード 32 ビットライトオペレーション ..................................................................9-15
9.5.3 ノーマルモード、32 ビットオペレーション ..........................................................................9-16
9.5.4 ノーマルモード、16 ビットバスオペレーション ...................................................................9-19
9.5.5 ノーマルモード、16 ビットバーストオペレーション............................................................9-23
ii
TMPR3927A
9.5.6 ページモード、32 ビットバーストオペレーション ...............................................................9-25
9.5.7 外部 ACK*モード 32 ビットオペレーション .........................................................................9-27
9.5.8 外部 ACK*モード 16 ビットオペレーション .........................................................................9-31
9.5.9 レディモード、32 ビットオペレーション..............................................................................9-33
9.6 Flash ROM, SRAM 使用例............................................................................................................9-35
第 10 章 DMA コントローラ ........................................................................................................................10-1
10.1 特長.............................................................................................................................................10-1
10.2 ブロック図..................................................................................................................................10-2
10.3 レジスタ .....................................................................................................................................10-3
10.3.1 レジスタマップ ....................................................................................................................10-3
10.3.2 マスタコントロールレジスタ (MCR) ..................................................................................10-4
10.3.3 チャネルコントロールレジスタ (CCRn) .............................................................................10-7
10.3.4 チャネルステータスレジスタ (CSRn) ............................................................................... 10-11
10.3.5 ソースアドレスレジスタ (SARn) ......................................................................................10-13
10.3.6 デスティネーションアドレスレジスタ (DARn) ................................................................10-14
10.3.7 チェインアドレスレジスタ (CHARn) ...............................................................................10-15
10.3.8 ソースアドレスインクリメントレジスタ (SAIn) ..............................................................10-16
10.3.9 デスティネーションアドレスインクリメントレジスタ (DAIn)........................................10-17
10.3.10 カウントレジスタ (CNTRn) ..............................................................................................10-18
10.4 動作...........................................................................................................................................10-19
10.4.1 デュアルアドレスオペレーション .....................................................................................10-19
10.4.2 チェインオペレーション ...................................................................................................10-21
10.4.3 シングルアドレスオペレーション .....................................................................................10-22
10.4.4 外部 DMADONE*入力による DMA の終了......................................................................10-22
10.4.5 スタンダードでないアドレスインクリメント値 ...............................................................10-23
10.4.6 デュアルアドレスのバースト転送 .....................................................................................10-24
10.4.7 内蔵 I/O との DMA 転送 ....................................................................................................10-24
10.4.8 外部リクエスト (DMAREQ) の受け付けタイミング ........................................................10-25
10.4.9 コンフィグレーションエラー ............................................................................................10-25
10.4.10 DMAC FIFO 使用上の注意事項 ........................................................................................10-26
10.5 タイミング図 ............................................................................................................................10-28
10.5.1 シングルアドレスモードの 32 ビットリードオペレーション (ROM)...............................10-28
10.5.2 シングルアドレスモードの 32 ビットライトオペレーション (SRAM).............................10-30
10.5.3 バーストアドレスモードの 32 ビットリードオペレーション (ROM)...............................10-31
10.5.4 バーストアドレスモードの 32 ビットライトオペレーション (SRAM).............................10-33
10.5.5 シングルアドレスモードの 16 ビットリードオペレーション (ROM)...............................10-34
10.5.6 シングルアドレスモードの 16 ビットライトオペレーション (SRAM).............................10-35
10.5.7 シングルアドレス、ハーフスピードモードの 32 ビットリードオペレーション (ROM)..10-36
10.5.8 シングルアドレス、ハーフスピードモードの 32 ビットライトオペレーション (SRAM) 10-37
10.5.9 シングルアドレスモードの 32 ビットリードオペレーション (SDRAM)..........................10-38
10.5.10 シングルアドレスモードの 32 ビットライトオペレーション (SDRAM)..........................10-39
10.5.11 バーストアドレスモードの 16 ビットリードオペレーション (SDRAM)..........................10-40
10.5.12 バーストアドレスモードの 32 ビットリードオペレーション (SDRAM)..........................10-41
10.5.13 バーストアドレスモードの 32 ビットライトオペレーション (SDRAM)..........................10-42
10.5.14 シングルアドレスモードの 32 ビット最終シングルリードオペレーション (SDRAM) ....10-43
10.5.15 シングルアドレスモードの 16 ビットリードオペレーション (SDRAM)..........................10-44
10.5.16 シングルアドレスモードの 16 ビットライトオペレーション (SDRAM)..........................10-45
10.5.17 シングルアドレスモードの 32 ビットリードオペレーション (SDRAM)..........................10-46
10.5.18 シングルアドレスモードの 32 ビットライトオペレーション (SDRAM)..........................10-47
10.5.19 バーストアドレスモードの 32 ビットライトオペレーション (SDRAM)..........................10-48
10.5.20 デュアルアドレスモードのバーストオペレーション (SRAM → SRAM) .........................10-49
10.5.21 デュアルアドレスモードのバーストオペレーション (SRAM → SDRAM) ......................10-50
10.5.22 デュアルアドレスモードのバーストオペレーション (SDRAM → SRAM) ......................10-51
10.5.23 デュアルアドレスモードのバーストオペレーション (SDRAM → SDRAM) ...................10-52
iii
TMPR3927A
10.5.24 デュアルアドレスモードのノンバーストオペレーション (SDRAM → ROMC デバイス)10-53
10.5.25 デュアルアドレスモードのノンバーストオペレーション (ROMC デバイス → SDRAM)10-54
第 11 章 割り込みコントローラ (IRC) ......................................................................................................... 11-1
11.1 特長............................................................................................................................................. 11-1
11.2 ブロック図.................................................................................................................................. 11-1
11.3 レジスタ ..................................................................................................................................... 11-2
11.3.1 レジスタマップ .................................................................................................................... 11-2
11.3.2 割り込み制御イネーブルレジスタ (IRCER) 0xFFFE_C000 ............................................. 11-3
11.3.3 割り込み制御モードレジスタ 0 (IRCR0) 0xFFFE_C004 ................................................... 11-4
11.3.4 割り込み制御モードレジスタ 1 (IRCR1) 0xFFFE_C008 ................................................... 11-6
11.3.5 割り込みレベルレジスタ 0 (IRILR0) 0xFFFE_C010 ....................................................... 11-7
11.3.6 割り込みレベルレジスタ 1 (IRILR1) 0xFFFE_C014 ....................................................... 11-8
11.3.7 割り込みレベルレジスタ 2 (IRILR2) 0xFFFE_C018 ....................................................... 11-9
11.3.8 割り込みレベルレジスタ 3 (IRILR3) 0xFFFE_C01C..................................................... 11-10
11.3.9 割り込みレベルレジスタ 4 (IRILR4) 0xFFFE_C020 ....................................................... 11-11
11.3.10 割り込みレベルレジスタ 5 (IRILR5) 0xFFFE_C024 ..................................................... 11-12
11.3.11 割り込みレベルレジスタ 6 (IRILR6) 0xFFFE_C028 ..................................................... 11-13
11.3.12 割り込みレベルレジスタ 7 (IRILR7) 0xFFFE_C02C..................................................... 11-14
11.3.13 割り込みマスクレジスタ (IRIMR) 0xFFFE_C040 ........................................................... 11-15
11.3.14 割り込みステータスコントロールレジスタ (IRSCR) ....................................................... 11-16
11.3.15 割り込みソースステータスレジスタ (IRSSR)................................................................... 11-17
11.3.16 割り込みカレントステータスレジスタ (IRCSR)............................................................... 11-19
11.4 動作........................................................................................................................................... 11-20
11.4.1 割り込みソース .................................................................................................................. 11-20
11.4.2 割り込み要求検出 .............................................................................................................. 11-21
11.4.3 優先処理............................................................................................................................. 11-21
第 12 章 PCI コントローラ (PCIC) ..............................................................................................................12-1
12.1 特長.............................................................................................................................................12-1
12.1.1 インタフェース機能.............................................................................................................12-1
12.1.2 イニシエータ機能 ................................................................................................................12-2
12.1.3 ターゲット機能 ....................................................................................................................12-2
12.1.4 PCI アービタ/パークマスタ機能 .........................................................................................12-2
12.2 ブロック図..................................................................................................................................12-3
12.3 レジスタ .....................................................................................................................................12-4
12.3.1 レジスタマップ ....................................................................................................................12-5
12.3.2 PCI コンフィグレーションヘッダ領域レジスタ .................................................................12-7
12.3.3 イニシエータコンフィグレーション空間レジスタ............................................................12-28
12.3.4 ターゲットコンフィグレーション空間レジスタ ...............................................................12-35
12.3.5 PCI バスアービタ/パークマスタレジスタ .........................................................................12-56
12.3.6 ローカルバススペシャルレジスタ .....................................................................................12-67
12.4 動作...........................................................................................................................................12-84
12.4.1 転送モード .........................................................................................................................12-84
12.4.2 コンフィグレーションサイクル.........................................................................................12-85
12.4.3 アドレス変換方式 ..............................................................................................................12-85
12.4.4 PCIC クロック...................................................................................................................12-86
12.4.5 アービタ機能......................................................................................................................12-87
12.4.6 FIFO の深さ ......................................................................................................................12-88
12.4.7 ターゲットモジュールへのアクセス .................................................................................12-88
12.4.8 レジスタアクセス ..............................................................................................................12-88
12.4.9 ローカルバスと PCI バス間のアドレスマッピング...........................................................12-88
12.4.10 ACPI (Advanced Configuration and Power Interface) パワーマネージメント..............12-89
12.4.11 バイトスワップ機能...........................................................................................................12-90
12.4.12 PCI のコンフィグレーション空間の一部マスク ...............................................................12-92
12.5 タイミング図 ............................................................................................................................12-94
iv
TMPR3927A
12.5.1
12.5.2
12.5.3
12.5.4
12.5.5
12.5.6
12.5.7
12.5.8
12.5.9
イニシエータコンフィグレーションリード ......................................................................12-94
イニシエータメモリリード................................................................................................12-94
イニシエータメモリライト................................................................................................12-95
イニシエータ IO リード.....................................................................................................12-95
イニシエータ IO ライト.....................................................................................................12-96
スペシャルサイクル...........................................................................................................12-96
ターゲットコンフィグレーションリード ..........................................................................12-97
SDRAM から PCI への 8 ワードバースト転送..................................................................12-98
PCI から SDRAM への 8 ワードバースト転送..................................................................12-99
第 13 章 シリアル I/O ポート (SIO) .............................................................................................................13-1
13.1 特長.............................................................................................................................................13-1
13.2 ブロック図..................................................................................................................................13-2
13.3 レジスタ .....................................................................................................................................13-4
13.3.1 レジスタマップ ....................................................................................................................13-4
13.3.2 ラインコントロールレジスタ (SILCRn) .............................................................................13-5
13.3.3 DMA/割り込みコントロールレジスタ (SIDICRn)..............................................................13-7
13.3.4 DMA/割り込みステータスレジスタ (SIDISRn)..................................................................13-8
13.3.5 ステータス変化割り込みステータスレジスタ (SISCISRn) ..............................................13-10
13.3.6 FIFO コントロールレジスタ (SIFCRn) ............................................................................ 13-11
13.3.7 フローコントロールレジスタ (SIFLCRn).........................................................................13-12
13.3.8 ボーレートコントロールレジスタ (SIBGRn)....................................................................13-13
13.3.9 送信 FIFO レジスタ (SITFIFOn)......................................................................................13-14
13.3.10 受信 FIFO レジスタ (SIRFIFOn)......................................................................................13-15
13.4 動作...........................................................................................................................................13-16
13.4.1 概要 ....................................................................................................................................13-16
13.4.2 データフォーマット...........................................................................................................13-16
13.4.3 シリアルクロックジェネレータ.........................................................................................13-18
13.4.4 ボーレートジェネレータ ...................................................................................................13-18
13.4.5 受信制御部 .........................................................................................................................13-20
13.4.6 受信シフトレジスタ...........................................................................................................13-20
13.4.7 受信リードバッファ...........................................................................................................13-20
13.4.8 送信制御部 .........................................................................................................................13-20
13.4.9 送信シフトレジスタ...........................................................................................................13-20
13.4.10 ホスト I/F...........................................................................................................................13-20
13.4.11 フロー制御部......................................................................................................................13-21
13.4.12 パリティ制御部 ..................................................................................................................13-21
13.4.13 エラーフラグ......................................................................................................................13-21
13.4.14 ブレーク検出......................................................................................................................13-22
13.4.15 受信タイムアウト ..............................................................................................................13-22
13.4.16 受信データ転送と受信 FIFO のステータスビットの取り扱いについて ...........................13-22
13.4.17 マルチコントローラシステム ............................................................................................13-22
13.4.18 ソフトウエアリセット .......................................................................................................13-23
13.4.19 DMA 転送モード ...............................................................................................................13-24
13.5 タイミング図 ............................................................................................................................13-25
13.5.1 受信時の動作 (7 および 8 ビットデータ長) .......................................................................13-25
13.5.2 DMAI/F 時の SITXDREQ/SITXDACK, SIRXDREQ/SIRXDACK のタイミング
(DMA レベル 4 の場合)......................................................................................................13-25
13.5.3 DMAI/F 時の SITXDREQ/SITXDACK, SIRXDREQ/SIRXDACK のタイミング
(DMA レベル 8 の場合)......................................................................................................13-25
13.5.4 受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
ID 受信待機時 RWUB = “1”) ......................................................................13-26
13.5.5 受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
データ受信待機時 RWUB = “0”) ................................................................13-26
v
TMPR3927A
13.5.6
13.5.7
13.5.8
受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
データ読み飛ばし RWEB = “1”) ................................................................13-26
送信時の動作......................................................................................................................13-27
CTS*による送信停止タイミング.......................................................................................13-27
第 14 章 タイマ/カウンタ .............................................................................................................................14-1
14.1 特長.............................................................................................................................................14-1
14.2 ブロック図..................................................................................................................................14-2
14.3 レジスタ .....................................................................................................................................14-3
14.3.1 レジスタマップ ....................................................................................................................14-3
14.3.2 タイマコントロールレジスタ (TMTCRn) ...........................................................................14-4
14.3.3 タイマ割り込みステータスレジスタ (TMTISRn) ...............................................................14-5
14.3.4 コンペアレジスタ A (TMCPRAn) .......................................................................................14-6
14.3.5 コンペアレジスタ B (TMCPRBn) .......................................................................................14-7
14.3.6 インタバルタイマモードレジスタ (TMITMRn)..................................................................14-8
14.3.7 分周レジスタ (TIMCCDRn) ................................................................................................14-9
14.3.8 パルスジェネレータモードレジスタ (TMPGMRn)...........................................................14-10
14.3.9 タイマリードレジスタ (TMTPRn) .................................................................................... 14-11
14.3.10 ウォッチドッグタイマモードレジスタ (TMWTMR2).......................................................14-12
14.4 動作...........................................................................................................................................14-13
14.4.1 インタバルタイマモード ...................................................................................................14-13
14.4.2 パルスジェネレータモード................................................................................................14-15
14.4.3 ウォッチドッグタイマモード ............................................................................................14-16
14.5 タイミング図 ............................................................................................................................14-18
14.5.1 インタバルタイマモード割り込みタイミング...................................................................14-18
14.5.2 パルスジェネレータモード F/F 出力タイミング ...............................................................14-19
14.5.3 ウォッチドッグタイマモード割り込みタイミング............................................................14-19
第 15 章 パラレル I/O ポート (PIO) .............................................................................................................15-1
15.1 特長.............................................................................................................................................15-1
15.2 レジスタ .....................................................................................................................................15-1
15.2.1 レジスタマップ ....................................................................................................................15-1
15.2.2 PIO 出力データレジスタ (XPIODO)...................................................................................15-2
15.2.3 PIO 入力データレジスタ (XPIODI) ....................................................................................15-3
15.2.4 PIO 方向コントロールレジスタ (XPIODIR).......................................................................15-4
15.2.5 PIO オープンドレインコントロールレジスタ (XPI00D) ....................................................15-5
15.2.6 PIO フラグレジスタ 0 (XPI0FLAG0) .................................................................................15-6
15.2.7 PIO フラグレジスタ 1 (XPIOFLAG1).................................................................................15-7
15.2.8 PIO フラグ極性コントロールレジスタ (XPIOPOL) ...........................................................15-8
15.2.9 PIO 割り込みコントロールレジスタ (XPIOINT)................................................................15-9
15.2.10 CPU 割り込みマスクレジスタ (XPIOMASKCPU) ...........................................................15-10
15.2.11 外部割り込みマスクレジスタ (XPIOMASKEXT) ............................................................. 15-11
15.3 動作...........................................................................................................................................15-12
15.3.1 PIO 端子のセットアップ ...................................................................................................15-12
15.3.2 汎用パラレルポート...........................................................................................................15-12
15.3.3 割り込み要求......................................................................................................................15-12
15.3.4 PIO 端子のリード/ライト ..................................................................................................15-12
第 16 章 パワーオンシーケンス ...................................................................................................................16-1
第 17 章 電気的特性 .....................................................................................................................................17-1
17.1 絶対最大定格 (*1).......................................................................................................................17-1
17.2 推奨動作条件 (*2).......................................................................................................................17-1
17.3 DC 特性 ......................................................................................................................................17-2
17.3.1 PCI インタフェース以外の端子の DC 特性 ........................................................................17-2
17.3.2 PCI インタフェース端子の DC 特性 ...................................................................................17-2
17.4 水晶発振特性 ..............................................................................................................................17-3
vi
TMPR3927A
17.4.1 推奨発振条件 (16 逓倍使用時) .............................................................................................17-3
17.4.2 推奨入力クロック条件 (2 逓倍使用時).................................................................................17-3
17.4.3 電気特性...............................................................................................................................17-3
17.5 PLL フィルタ回路 ......................................................................................................................17-4
17.6 AC 特性 (PCI インタフェース以外の端子) ................................................................................17-5
17.6.1 AC 特性表 ............................................................................................................................17-5
17.6.2 SDRAM インタフェース AC 特性表 ...................................................................................17-5
17.7 AC 特性 (PCI インタフェース端子) ...........................................................................................17-6
17.7.1 AC 特性表 ............................................................................................................................17-6
17.7.2 タイミング図 (SDRAMC, ROMC インタフェース端子).....................................................17-7
17.7.3 タイミング図 (PCI インタフェース端子) ............................................................................17-7
17.8 シリアル入力クロック................................................................................................................17-8
第 18 章 パッケージ外形図 ..........................................................................................................................18-1
第 19 章 使用上の注意点 ..............................................................................................................................19-1
19.1 TMPR3927A のプログラミングに関する注意点 .......................................................................19-1
付録 A TX3927 プログラミングサンプル集 ............................................................................................... A-1
A.1 プログラミングに慣れていない方のために ................................................................................ A-1
A.1.1 メモリマップド I/O.................................................................................................................. A-1
A.1.2 コプロセッサ 0 レジスタのアクセスについて......................................................................... A-1
A.2 基本動作 ...................................................................................................................................... A-4
A.2.1 ヘッダファイル ........................................................................................................................ A-4
A.2.2 スタートルーチン .................................................................................................................. A-15
A.2.3 メモリコントローラ設定(SDRAM) ....................................................................................... A-19
A.1.1 割り込み処理プログラム ....................................................................................................... A-21
A.2.5 キャッシュの設定および操作 ................................................................................................ A-27
A.1 内蔵ペリフェラル使用例 ........................................................................................................... A-29
A.1.1 Timer ..................................................................................................................................... A-29
A.1.2 SIO......................................................................................................................................... A-30
A.1.3 DMA ...................................................................................................................................... A-46
A.1.4 PIO......................................................................................................................................... A-47
A.1 PCI コントローラ ......................................................................................................................... A-48
A.1.1 PCI コントローラの初期化.................................................................................................... A-48
付録 B 熱特性.............................................................................................................................................. B-1
B.1 FIN 付きパッケージ熱抵抗概略 ..................................................................................................... B-1
B.2 パッケージ熱抵抗測定概略 ......................................................................................................... B-2
B.3 FIN の設計計算例 ........................................................................................................................... B-5
vii
TMPR3927A
viii
取り扱い上のご注意とお願い
取り扱い上のご注意とお願い
[1]
1.
半導体製品採用に当たってのご注意
安全設計について
当社は品質、信頼性の向上に努めていますが、一般に半導体製品は誤作動したり故障することがあ
ります。
当社半導体製品をご使用頂く場合は、半導体製品の誤作動や故障により、他の人の生命・身体・財
産が侵害されることのないように、購入者側の責任において、装置の安全設計を行うことをお願いし
ます。
なお、設計に際しては、最新の製品仕様をご確認の上、製品の保証範囲内でご使用頂くとともに、
考慮されるべき注意事項や条件についてはこの小冊子、および「半導体信頼性ハンドブック」の記載
内容に注意を頂くようお願いします。
2.
用途制限について
本資料に掲載されている製品は、一般的電子機器 (コンピュータ、パーソナル機器、事務機器、計
測機器、産業用ロボット、家電機器など) に使用されることを意図しています。
特別に高い品質・信頼性が要求され、その故障や誤作動が直接人命を脅かしたり人体に危害を及ぼ
す恐れのある機器 (原子力制御機器、航空宇宙機器、輸送機器、交通信号機器、燃焼制御、医療機器、
各種安全装置など) にこれらの製品を使用すること (以下“特定用途”という) は意図もされていませ
んし、また保証もされていません。
本資料に掲載されている製品を当該特定用途に使用することは、お客様の責任でなされることとな
ります。
1
取り扱い上のご注意とお願い
[2]
安全上のご注意
本項には、お使いになる方や他の人への危害と財産の損害を未然に防ぎ、デバイスを安全に正しく
お使いいただくために、重要な内容を記載しています。
次の内容(表示、図記号)をよく理解してから本文をお読みになり、記載事項をお守りください。
[表示の説明]
表 示
意 味
危険
“誤った取り扱いをすると、使用者が死亡するまたは重傷(#1)を負う差し迫っ
警告
“誤った取り扱いをすると、使用者が死亡または重傷 (#1)を負う可能性のある
注意
“誤った取り扱いをすると使用者が傷害 (#2) を負う可能性または物的損害
た危険が想定されること”を示します。
こと”を示します。
(#3) のみが発生する可能性のあること”を示します。
#1:重傷とは、失明、けが、やけど、感電などで後遺症の残るもの、および治療に入院や通院を
要すものをいいます。
#2:傷害とは、治療に入院や長期の通院を必要としない、けが、やけど、感電などをいいます。
#3:物的損害とは、装置・機器などにかかわる拡大損害をいいます。
[図記号の説明]
図 記 号
意 味
禁止 (してはいけないこと) を示します。
具体的な禁止内容は、図記号の中や近くに絵や文字で指示します。
強制 (必ずすること) を示します。
具体的な強制内容は、図記号の中や近くに絵や文章で指示します。
注意 (レーザ光) を示します。
2
取り扱い上のご注意とお願い
1.
半導体製品全般でのご注意
注意
禁止
禁止
禁止
禁止
強制
強制
強制
デバイスは最大定格(電流、電圧、消費電力、温度など)を超えて使用しないでくださ
い。
破壊や劣化の原因となり、破裂・燃焼による傷害を負うことがあります。
デバイスの逆差し、差し違い、または電源のプラスとマイナスの逆接続はしないで
ください。
電流や消費電力が最大定格を超え破壊や劣化の原因となり、破裂・燃焼による傷害
を負うことがあります。
デバイスに通電中は放熱板に触れないでください。
放熱板が高温になっていますので火傷を負うことがあります。
デバイスのリード先端に触れないでください。
先端が尖っているタイプがあり刺し傷を負うことがあります。
評価・検査・試験時には、電極やプローブなどをデバイス端子に接続後に電源を投
入してください。
感電による傷害を負うことがあります。
測定設備やはんだごてなどは漏電がないことを確認のうえアースをしてください。
漏電した場合、デバイスの破壊や感電の恐れがあります。
ニッパなどによるリードカッティング時は、保護メガネを使用してください。
カッティングくずの飛散により目に傷害を負う恐れがあります。
3
取り扱い上のご注意とお願い
2.
製品群特有のご注意
2.1
光半導体
危険
可視半導体レーザの動作時には、レーザ光を覗き込んだり、光学系を通して見ない
でください。
禁止
重度の場合には視力障害に留まらず失明することがあります。光学特性の検査など
に際しレーザ保護メガネを使用される場合は、JISC6802 に従ってください。
警告
LED デバイスは最大定格を越えた電流を通電しないでください。
特に樹脂パッケージ LED デバイスの場合は、パッケージ樹脂が破裂飛散して負傷
禁止
することがあります。
フォトカプラの絶縁耐圧の評価・試験に際しては、100μA を超えるリーク電流が
検出された際に、供給電圧を遮断できる装置を用いてください。
強制
短絡による大電流が流れ続けて破裂・燃焼を起こし、傷害や火災の原因となります。
可視半導体レーザは、規定光出力を超えたレーザ光が放射されることがないよう
に、デバイスに内蔵の、または別の受光素子を用いて光出力の安定化設計を行って
ください。
強制
安定化機能が正常に働かず定格出力を超えた際には、デバイスが破壊するだけでな
く、レーザ光によって傷害を負うことがあります。
2.2
電力素子
危険
電源投入中、および遮断後で電荷が放電するまでは、身体を触れないでください。
禁止
感電による死亡、重傷を負う可能性があります。
デバイスの評価・検査・試験時には、電極やプローブなどの接続後に電源を投入し
てください。また、終了時には電荷の放電をしてください。
強制
電源投入中の接続操作は感電による傷害を負うことがあります。
4
取り扱い上のご注意とお願い
警告
最大定格(電流、電圧、安全動作領域、温度など)を超えて使用しないでください。
禁止
デバイスが破壊し大電流が流れ、破壊・燃焼を起こし傷害や火災の原因となります。
短絡電流を検出できる装置を用い、短絡発生時は供給電源全線を遮断してください。
電源を遮断しないと短絡による大電流が流れ続け、破裂・燃焼を起こし傷害や火災
強制
の原因となります。
筐体は破裂・燃焼による飛散防止などを考慮した設計をしてください。
強制
飛散物による傷害の原因になります。
評価・検査・試験時にはデバイスにカバーなどの安全保護具を使用してください。
強制
破裂・燃焼による傷害を負うことがあります。
金属部は接地して使用する設計にしてください。
デバイスの電極と金属ケース部が絶縁されているモジュール製品でも、静電容量に
強制
よりケース部の電位が上がることがあります。絶縁の破壊によってケース部が高電
圧になり、接触すると感電して負傷する恐れがあります。
高速整流素子は、順方向、逆方向損失を考慮した放熱設計、安全設計をしてくださ
い。
一般の整流素子に比べ漏れ電流が大きくなり、使用環境が厳しい場合(高温度、高
強制
電圧など)
、逆方向損失の増加により熱暴走を起こし、破壊・飛散による傷害を負う
ことがあります。
デバイスの主回路の動作時を除き、制御回路への通電時はいかなるときもデバイス
のゲートに逆バイアスを印加し、主回路を確実に非動作にする設計をしてください。
強制
デバイスが誤動作時には重大な事故や傷害の原因となることがあります。
5
取り扱い上のご注意とお願い
注意
評価・検査・試験時には、デバイスの冷却後に取り扱うか保護手袋を使用してくだ
さい。
強制
デバイスは動作することにより高温になり、供給電源を切っても余熱により火傷を
負うことがあります。
2.3
バイポーラ IC(車載用)
注意
モータコイルなどの誘導負荷がある場合は、負極性の電流が入らないように逆吸収
用ダイオードを接続してください。
強制
ON/OFF 時の負荷電流により、デバイスが誤動作あるいは破壊し、傷害を負うこと
があります。
保護機能が内蔵されているデバイスに供給する電源は、安定したものを使用してく
ださい。
電源が不安定な場合、誤動作を生じ保護機能が正常に働かないことがあります。ま
強制
た、保護機能が正常に働かないと、デバイスが破壊する恐れがあり、傷害を負うこ
とがあります。
6
取り扱い上のご注意とお願い
一般的な安全上のご注意および使用上のお願い事項
[3]
本項には、デバイスを正しく理解頂き、安全・品質・信頼性を確保するための事項を記載していま
す。
1.
受け入れから出荷
1.1
ESD (静電気放電)
デバイス単体でのハンドリング時は、静電気が発生しにくい環境
で、作業者は帯電防止衣服を着用する必要があります。また、デバ
イスが直接接触する容器などは、帯電防止材料を使用の上、0.5∼
1.0MΩの保護抵抗を介してアースしてください。
特に”静電気注意”が明記されているデバイスの場合は下記に従
ってください。
1.1.1 作業環境の管理
(1) 湿度が下がると、摩擦などにより静電気が帯電しやすくなります。湿度は防湿包装製品の
開封後の吸湿も考慮し、40∼60%を推奨します。
(2) 作業領域内に設置された装置・冶具などは、アースをしてください。
(3) 作業領域内の床は、導電性マットを敷くなどして、床表面を静電防止(表面抵抗率 104
∼108Ω/sq、表面・アース間抵抗 7.5×105∼108Ω)しアースをしてください。
(4) 作業台の表面は導電性マット(表面抵抗率 104∼108Ω/sq、表面・アース間抵抗 7.5×105
∼108 Ω)などで静電気拡散性(抵抗成分をもつもの)とし、アースをしてください。
作業台表面は金属にしないでください。帯電したデバイスが直接接触した場合に、低抵抗
で急激に放電を生じる原因となります。
(5) 自動化装置を使用の場合は、以下の諸点を守ってください。
(a) デバイスのパッケージ表面をバキュームでピックアップする場合は、ピックアップ
の先端に導電ゴムなどを使用して帯電防止をしてください。
(b) デバイスのパッケージ表面への摩擦はできるだけ小さくしてください。機構上で避
けられない場合は、摩擦面を小さくするか、摩擦係数、電気抵抗の小さな素材、お
よびイオナイザーの使用を検討してください。
(c) デバイスのリードまたは端子との接触部には、静電気消散性材料を使用してくださ
い。
(d) デバイスに帯電体(作業服、人体など)が接触しないようにしてください。
(e) テープキャリアは、テープの接触する部分に低抵抗素材を用いているものを使用し
てください。
(f) 工程内で使用する冶具・工具は、デバイスに接触しないようにしてください。
(g) パッケージ帯電を伴う工程では、イオナイザーを用いイオン中和を行ってください。
(6) 作業領域内の CRT の表面は、VDT フィルタなどで帯電防止し、作業中の ON/OFF はで
きるだけ避けてください。デバイスなどへの電界誘導の原因となります。
(7) 作業領域内の帯電電位は定期的に測定し、帯電のないことを確認してください。
(8) 作業椅子は帯電防止繊維製カバーをし、接地チェーンにより床面にアースしてください。
(座面・接地チェーン間抵抗 7.5×105∼1012Ω)
(9) 保管棚表面は静電防止マットを設置してください。
(表面抵抗率 104∼108Ω/sq、表面・アース間抵抗 7.5×105∼108Ω)
7
取り扱い上のご注意とお願い
(10) デバイスの搬送および一時保管に用いる入れ物(箱や冶具、袋など)は、静電気消散性材
料または静電防止材料を使用したものを用いてください。
(11) 台車の製品包装材と接触する面は、静電気導電性の材質を用い、接地チェーンにより床面
にアースしてください。
(12) 静電気管理領域は、静電気対策専用の接地線を設けてください。その接地線は送電回路の
接地線(第三種以上)、または地中接地線を使用してください。なお、可能な際は装置類
のアースとの分離接地を推奨します。
1.1.2 作業時の管理
(1) 作業者は帯電防止服と導電靴(またはヒールストラップ、レッグストラップ)を着用して
ください。
(2) 作業者はリストストラップを着け、1MΩ程度の抵抗
を介してアースしてください。
(3) はんだごてはこて先をアースし、低電圧用(6V∼24V)
のものを使用してください。
(4) デバイスの端子と接触する可能性のあるピンセットは、静電気防止用のものを使用し、で
きるだけ金属材料製の使用は避けてください。金属ピンセットは帯電したデバイスが低抵
抗で急激に放電する原因となります。バキュームピンセットを用いる場合は、先端に導電
性吸着パットを用い、静電気対策専用の接地線にアースしてください。(抵抗値は 104∼
108Ω)
(5) デバイスおよびその収容容器は、高電界発生部(CRT 上など)の近くに置かないでくだ
さい。
(6) デバイスを実装した基板は、帯電防止したボード入れに間隔を開けて置くなどして、直接
重ね合わせないようにしてください。摩擦帯電および放電が生じる原因になります。
(7) 静電気管理領域に持ち込む物品(クリップボードなど)は、極力帯電防止材料を使用した
ものにしてください。
(8) 作業者が直接デバイスに触れるときは、極力静電気対策された指サック、グローブなどを
着用してください。(抵抗値は 108Ω以下)
(9) デバイスの近くに装置類の安全カバーを設ける際は、109Ω以下の抵抗値の材料を使用し
てください。
(10) リストストラップを使用できないとき、およびデバイスを摩擦する可能性のあるときは、
イオナイザーを使用してください。
(11) テープキャリア製品に用いている搬送用フィルムは、静電気が帯電しやすい材料を使用し
ています。取り扱い時にはイオナイザーを使用し、フィルムに帯電しないようにしてくだ
さい。また、銅箔部に静電気が印加されないように、周辺装置の静電気破壊に対する防止
対策を行ってください。
8
取り扱い上のご注意とお願い
1.2
振動・衝撃・応力
デバイスと包装は、丁寧に取り扱ってください。デバイスあ
るいは包装の落下・衝撃はデバイスを破壊させる原因になりま
す。できるだけ機械的振動や衝撃を与えないようにしてくださ
い。デバイスの内部が中空になったキャンタイプや、セラミッ
ク封止のデバイスは、内部の結線ワイヤが非固定のため、プラ
スチック封止のデバイスに比べ振動、衝撃に弱い構造になって
います。
実際のセットにおいて、はんだ付け部分や接続部分などに振動、衝撃または応力が加わっ
た際に断線に至るケースが確認されていますので、振動の多い機器では機構設計に留意が必
要です。特に、強い振動または応力が加えられた際に、パッケージまたはチップのクラック
が発生したり、ウインドーガラスを用いているCCDなどの製品の場合には、表面の傷やガ
ラス接合部の剥離の原因になります。また、パッケージを介して半導体チップに応力が加わ
った際には、ピエゾ効果によりチップ内部の抵抗変化が起こることがありますので、アナロ
グ回路ではパッケージに対する応力も考慮する必要があります。
2.
保管
2.1
通常包装品
(1) 水濡れの可能性のある場所や、直射日光のあたる場所では保管しないでください。
(2) 運搬や保管時は包装箱への注意表示に従ってください。
(3) 保管場所の温度と湿度は、5∼35℃、45∼75%を目安としてくだ
さい。
(4) 有毒ガス(特に腐食性ガス)の発生する場所や塵埃の多い所では、
保管しないでください。
(5) 温度変化の少ない場所に保管してください。保管時の急激な温度
変化は結露が生じ、リードの酸化、腐食などが発生し、はんだ濡
れ性が悪くなります。
(6) デバイスを包装から取り出した後に再び保管する場合は、帯電防止処理された収納容器を
使用してください。
(7) 保管時はデバイスに直接荷重をかけないようにしてください。
(8) 通常の保管形態で2年程度以上が経過した際には、使用前にはんだ付け性の確認をするこ
とを推奨します。
9
取り扱い上のご注意とお願い
防湿包装品
防湿包装品は種別で規定された取り扱い方法に、十分配慮して使用いただくことが要求さ
れます。規定された条件が遵守されなかった際には、デバイスの品質および信頼性を損ねる
場合があります。ここでは防湿包装品に対する一般的な事項について記載しますが、細部の
条件はデバイス間で異なる場合がありますので、取り扱いに際しては個別規格またはデータ
ブックを参照してください。
2.2.1 防湿包装に対する一般的な取り扱い上の留意
運搬や保管時は包装箱の注意表示に従ってください。
(1) 投げたり落としたりしないでください。アルミラミネート
の包装材が破れて機密性が損なわれる場合があります。
(2) 保管環境は 5∼30℃、相対湿度 90%以下にしてください。
なお、保管期限はシール部への表示の日付けから 12 ヶ月
以内です。
(3) 上記の保管期限が過ぎたとき、および保管期間内であっても包装の開封時に湿度イン
ジケータの 30%表示部がピンク色になっている際は、下表に示す条件で排湿処理を
行ってください。なお、開封後に 5∼30℃、相対湿度 60%以下で保管した際に、排湿
処理なしで使用できる時間を防湿袋に表示しています。この期間過ぎたとき、および
期間内であっても高湿度環境で保管した際は、排湿処理を行ってください。
デバイスの包装形態
排湿処理可否および条件
トレイタイプ
「Heatproof」または温度表示がある場合は、125℃で 20 時間(一部の品種で時間
指定が異なることがあります)のベーキングを行ってください。
マガジンタイプ
「Heatproof」または温度表示のあるトレイ、またはアルミマガジンに移し変えて
125℃で 20 時間のベーキングを行ってください。
テーピングタイプ
ベーキング処理ができませんので、開封後は規定の時間内に使用してください。
(4) 排湿処理の実施に際しては、静電気によるデバイスの破壊防止を行ってください。
(5) 湿度インジケータに関して(ご参考)
インジケータは標準温度 25℃における周囲湿度値の大略値を検知します。6 点表示
と 3 点表示のものがありますが、順次 3 点表示に統一される計画です。
HUMIDITY INDICATOR
60%
50%
30%
20%
HUMIDITY INDICATOR
40
30
10%
DANGER IF PINK
40%
DANGER IF PINK
CHANGE DESICCANT
2.2
20
READ AT LAVENDER
BETWEEN PINK & BLUE
READ AT LAVENDER
BETWEEN PINK & BLUE
(a) 6 点表示インジケータ
(b) 3 点表示インジケータ
図 2.2.1 湿度インジケータのイメージ
10
取り扱い上のご注意とお願い
3.
設計
電子機器およびシステムの要求信頼度を達成する上で、半導体デバイスは最大定格およびその推
奨動作条件に従って使用頂くだけでなく、周囲温度、過渡的ノイズ・サージなどの使用環境条件と
実装条件についても、デバイスの信頼性への影響を十分配慮することが必要です。ここでは設計の
一般的事項について説明します。設計に当たっては各製品ごとの個別規格を参照してください。
3.1
最大定格
注意
デバイスは最大定格(電流、電圧、消費電力、温度)を超えて使用しないでくださ
い。破壊や劣化の原因となり、破裂・燃焼による傷害を負うことがあります。
最大定格とは、瞬時たりとも超えてはならない規格であり、複数
の定格のいずれに対しても超えることができません。最大定格は製
品により異なりますが、各端子の電圧・電流、許容損失または接合
部温度、保存温度などがあります。
各端子の電圧・電流値が最大定格を超えた場合は、過電圧・過電
流によりデバイス内部の劣化が起こります。
著しい場合には、内部の発熱による配線の溶断や半導体チップの破壊に至ることもありま
す。保存温度および動作温度などが定格を超えた場合は、デバイスを構成する各種材料の熱
膨張係数の差などにより、気密性の低下やボンデイング部分のオープンなどを引き起こすこと
があります。
3.2
保証動作範囲
推奨動作条件は、個別の技術資料・データブックに記載されている動作を保証するために
推奨する条件です。さらに、デバイスを高い信頼度で使用していただくために、最大定格の
電圧、電流、電力および温度に対してディレーテイングしてください。
3.3
ディレ−ティング
デバイスを高い信頼度で使用していただくため、最大定格の電圧、電流、電力および温度
に対してディレーテイングをして使用してください。
ディレーテイングは、アプリケーションにより異なりますので、製品の個別技術資料を参照
してください。
3.4
未使用端子
デバイスによっては未使用の端子をオープン状態で使用すると、入力が不安定になり、消
費電流の急激な増加などの異常動作となる場合があります。また、未使用の出力端子に電源、
GND および他の出力端子がショートすると、ICの異常動作または破壊などを生じる場合が
あります。
使用していない入力および出力端子の処置は、製品および各端子により異なるため、個別
技術資料・データブックの説明に従ってください。
一例として、CMOS ロジック IC の入力は非常にインピーダンスが高いため、オープン状態
での使用はノイズを拾いやすく、不安定な状態となります。この場合、入力が中間レベルで
あったりすると P チャネル、N チャネル双方のトランジスタが導通状態となり、不要な電源
電流が流れることになります。同一パッケージ内で使用していない入力ゲートは、電源電圧
(Vcc)端子やアース(GND)端子に接続しておくことが必要です。放熱フィンの端子処置につき
ましては、個別技術資料・データブックの説明に従ってください。
11
取り扱い上のご注意とお願い
3.5
ラッチアップ
CMOS 構造のデバイスは、ラッチアップと呼ばれる特有の状態になることがあります。こ
れは CMOS IC 自身が内蔵する寄生の PNPN 接合(サイリスタ構造)が導通し、Vcc―GND 間
に数百 mA 以上の大電流が流れ、破壊に至る現象です。
ラッチアップは、入力・出力端子への電圧印加が定格を超えて内部素子に大きな電流が流
れた場合、あるいは Vcc 端子の電圧が定格を超えて内部素子が降伏状態になったときに起こ
ります。この場合、定格外の電圧印加が瞬間的なものであっても、いったんラッチアップ状
態になると、Vcc−GND 間の大電流が保持され、発熱、発煙の恐れもあるため、次の点に留
意してください。
(1) 入出力端子の電圧レベルを Vcc より上げない、または Vss より下げないでください。
電源投入時のタイミングも考慮してください。
(2) 異常ノイズがデバイスに加わらないようにしてください。
(3) 未使用の入力端子の電位を Vcc または Vss に固定してください。
(4) 出力短絡をしないでください。
3.6
入力・出力の保護
出力同士を接続したワイヤード論理構成は、出力がショート状態となるため使用できませ
ん。もちろん出力を Vcc や GND にショートしないようにしてください。また、3−ステート
出力の製品において出力ショート電流を長時間流し続けると、IC の劣化に結びつく場合があ
りますので、出力がともにイネーブルとならないように設計してください。
3.7
負荷容量
デバイスによっては、大きな負荷容量を接続すると遅延時間が大きくなり、大きな充放電
電流が流れてノイズの原因になります。また、長時間出力が短絡となるため配線の溶断にも
つながります。各製品で推奨する負荷容量を使用してください。
3.8
熱設計
半導体デバイスの故障率は、使用温度により大きく加速されます。また、デバイスの内部
に加わる温度ストレスは図 3-8-1 に示すように、デバイスの周囲温度とデバイスの消費電力に
よる温度上昇の和となります。熱設計に際しては個別技術資料・データブックの熱設計上の
留意を参照してください。
高信頼性確保のために、熱設計に際し次の点に配慮してください。
(1) デバイスの周囲温度(Ta)は、周囲からの発熱の影響を避け、できるだけ低く保つことを検
討してください。
(2) デバイスの動的消費電力が比較的大きくなる場合は、強制空冷、基板の材料および放熱フ
ィンの使用なども検討してください。パッケージの熱抵抗を下げることができます。
12
取り扱い上のご注意とお願い
(3) デバイス自身についても、消費電力による熱的ストレスを抑えるため、デイレーテイングし
て使用してください。
θja=θjc+θca
θja=(Tj−Ta)/P
θjc=(Tj−Tc)/P
Ta
θca
θca=(Tc−Ta)/P
Tc
θja:ジャンクションから周囲への熱抵抗(℃/W)
θjc:ジャンクションからパッケージ表面への熱抵
抗、あるいは内部熱抵抗(℃/W)
θjc
Tj
θ ca : パ ッ ケ ー ジ 表 面 か ら 周 囲 へ の 熱 抵 抗 、
あるいは外部熱抵抗(℃/W)
Tj:ジャンクション温度あるいはチップ温度(℃)
Tc:パッケージ表面温度あるいはケース温度(℃)
Ta:周囲温度(℃)
図 3-8 パッケージの熱特性
P:消費電力(W)
3.9
インターフェース
異なる入出力のデバイスを接続する場合は、入力 VIL/VIH と出力 VOL/VOH のそれぞれのレベ
ルが合わないと誤動作の原因となります。また、2 電源系システムのような異なる電源電圧の
デバイスを接続する場合は、電源の投入や切断の順序を誤るとデバイスを破壊することがあ
ります。各デバイスのインタフェースについては、それぞれの個別技術資料・データブック
を参照してください。また、不明な点は当社営業窓口まで問い合わせくてださい。
3.10 デカップリング
スイッチング時に発生するスパイク電流は、Vcc、GND の電位を変動させ、出力波形のリ
ンギングおよび応答速度遅延の原因になります(通常、電源、GND の配線インピーダンスは
50∼100Ωです)。そのため、高周波に対する電源ラインのインピーダンスを低くしておく必
要があります。具体的には Vcc、GND 線は太く短く配線し、Vcc−GND 間に高周波フィルタ
としてのデカップリングコンデンサ(0.01∼1μF 程度)を基板の要所要所に挿入することが理
想となります。
また、低周波用フィルタとしては、基板単位で 10∼100μF 程度のコンデンサを入れること
が適当です。ただし、このコンデンサの容量が大き過ぎる場合(例えば 1000μF)は、逆に
ラッチアップなどを引き起こす原因ともなりますので、適当な容量とすることが必要です。
一方、高速ロジック IC などにおけるノイズの原因は、反射とクロストークおよび電源の共
通インピーダンスによる影響が考えられます。反射は信号の遅延、リンギング、オーバーシ
ュートおよびアンダーシュートを増加させて雑音余裕度を少なくします。このような反射に
対する配線上の対策としては、実装密度を高くし、配線の長さを短くして、配線のインダク
タンス(L)やキャパシタンス(C)を減らすことが効果的ですが、配線間のクロストーク問題への
考慮も必要となります。実際のパターン設計に際してはこれらの考慮が必要です。
13
取り扱い上のご注意とお願い
3.11 外部ノイズ
プリント基板の入出力信号や信号線が長いときなどは、外部からの
誘導によるノイズやサ−ジが印加された場合に、デバイスによっては
誤動作を起こす可能性があります。ノイズに関しては信号線の引き回
しをしないようにし、さらにインピーダンスを低くしたり、ノイズ除
去回路を挿入するなどの、サ−ジに関しての保護対策が必要です。
必要な保護については、各製品のデータブックを参照してください。
3.12 電磁妨害
OA 機器などから放射される電磁妨害波が原因で、ラジオやテレビへのトラブル事例が増加
しています。電波を有効利用し、無線通信の品質を確保するために、各国で対象機器ごとの
限度値を定め、電磁妨害波の規制を行っています。
電磁妨害波の種類には、電源線や電話線を伝わる伝導ノイズ、機器から電磁波として直接
放射される輻射ノイズがあり、これらの測定および対策方法は異なっています。
電磁妨害波対策の難しさは、機器の各部分から発生する電磁波強度を設計段階で計算する
手段がないために、試作機の完成後に専用の設備で測定して、初めて電磁妨害波の強度が判
明する点にあります。しかし、システムの設計時にいくつかの電磁妨害波防止の手段を講じ
ておけば、完成後の対策をスムーズに行うことが可能です。例えば、幾通りかのシールドの
取り付けを可能にしておき、測定結果に基ずき最適なシールドを選択するような手段なども
効果的です。
3.13 周辺回路
半導体デバイスは多くの場合に周辺回路および部品を伴います。入出力信号の電圧・電流
などは下記事項に留意しデバイスの仕様に合った設計をしてください。
(1) 入力端子に対しては、入力電圧・電流が適正でないと誤動作の原因になります。また、仕
様によってはプルアップ・ダウン抵抗が内蔵されている場合がありますので、必要電圧お
よび電流を考慮の上設計してください。
(2) 出力端子に対しては、外部回路のドライブ能力が決められています。それを超えるドライ
ブ能力が必要な場合には補償回路などを挿入するか、外部回路に使用する部品選定をする
段階であらかじめ考慮してください。
3.14 安全規格
各国で遵守されるべき安全規格が設けられています。これらにはデバイスに対する認証制
度、および絶縁設計基準などの要求が含まれる場合があります。国別の安全規格に十分留意
し、適合したデバイスの選択と設計をしてください。
14
取り扱い上のご注意とお願い
3.15 その他
(1) システムの設計時は、用途に応じたフェールセーフなどの対策をしてください。また、実
装システムによるシステムデバックを実施してください。
(2) プラスチックパッケージのデバイスを、高電界中に置くとチャージアップにより表面リー
クが発生し、誤動作する場合があります。高電界中で使用する場合は、パッケージ表面を
導電性のシールド板で遮蔽するなどの処置を考慮してください。
(3) メモリやマイクロコンピュータなどでは、電源投入やリセットの解除に留意が必要な場合
がありますので、各デバイスの個別技術資料・データブックを参照の上、デバイスに合っ
た設計上の配慮をしてください。
(4) 実装したデバイスの端子上に、外部から導電性物質(金属ピンなど)が落下し、ショート
状態にならないように筐体設計上の配慮をしてください。
4.
検査、試験、評価
4.1
ア−ス
注意
4.2
測定設備やはんだごてなどは、漏電がないことを確認してアースしてください。漏
電した場合、デバイスの電気的破壊や感電の恐れがあります。
検査の順序
注意
① デバイスの逆差しおよび差し違いのままでの通電はしないでください。電流や消費
電力が最大定格を超え、破壊や劣化の原因になるだけでなく、破裂・燃焼により傷
害を負うことがあります。なお、逆差しおよび差し違いのままで通電したデバイス
は使用しないでください。
② 電圧が交流で 42.4V(ピーク値)、直流で 60V を超えて評価・検査・試験時には、電
極やプローブなどを接続後に電源を投入してください。感電により傷害を負うこと
があります。
(1) デバイスへの電圧印加は冶具などに挿入した後に行ってください。この際、電源の立ち上
げ、立ち下げに規定がある場合はその指示に従ってください。
(2) デバイスの検査終了後は、デバイスへの印加電圧を OFF した後に治具より取り出してく
ださい。電源を ON のまま取り出すとデバイスの劣化、破壊を招く場合があります。
(3) 測定器からのサージ印加がないようにしてください。
(4) テープキャリアパッケージ(TCP)では、LSI チップが露出しています。検査の際にはチッ
プクラック、キズなどが発生しないようにしてください。
電気的な接触もチップ故障の原因となりますので、同接触がないようにしてください。
15
取り扱い上のご注意とお願い
5.
実装
デバイスのパッケージには、リード挿入形と表面実装形があります。基板実装時における信頼
性への影響は、フラックスなどによる汚染およびはんだ実装時の熱ストレスなどがあります。特
に、表面実装デバイスでは、はんだリフローによるパッケージ全体加熱時の熱ストレスが最も大
きな問題となります。また、同一パッケージでもチップサイズやフレームデザインなどにより、
実装方法が異なる場合があります。詳細はデバイスごとの個別技術資料・データブックを参照し
てください。
5.1
リード加工
注意
① ニッパなどによるリードカッティング時は、保護メガネを使用してください。カッ
ティングくずの飛散により目に傷害を負う恐れがあります。
② デバイスのリード先端に触れないでください。
先端が尖っているタイプがあり刺し傷を負うことがあります。
デバイスをプリント基板などに取り付けるに際し、リードを切断したり成形加工をする場合が
あります。この際にデバイスの内部に異常な力が加わり、機械的に破壊させたり信頼度を低下さ
せたりする原因となることがあります。その原因は主としてデバイス本体とリード間に加わる相
対的なストレスによるもので、デバイス内部のリードの損傷、密着性の低下および封止部の破壊
などにつながります。リード加工に際しては以下の事項に留意ししください。
(面実装タイプのデバイスは対象外です)
(1) プリント基板のリードの挿入穴間隔は、デバイスのリード間隔と同一寸法基準にて設計を行っ
てください。
(2) プリント基板の穴とデバイスリードの間隔が一致しない際は、デバイスの強制挿入を行わない
でください。
(3) デバイスとプリント基板間の最小寸法は、個別技術資料・データブッ
クを参照してください。必要時はリードフォーミングなどで隙間を空
けてください。はんだ付け時、プリント基板からデバイスを浮かすた
めの鞍(スペーサ)は使用しないでください。はんだ凝固後も鞍が熱
膨張してデバイスに重大なストレスを与えることがあります。
(4) リードフォーミングを行う場合は、下記に留意してください。
(a) リードの折り曲げに際しては、パッケージ寄りの折り曲げ部の一端を固定し、デバイスに
機械的な応力が加わらないようにしてください。なお、同一箇所でのリードの曲げ伸ばし
は繰り返さないでください。
(b) リードフォーミングの実施に際してはリードに損傷を与えないでください。
(c) その他、個別技術資料・データブックに規定される注意事項を守ってください。
16
取り扱い上のご注意とお願い
5.2
ソケットによる実装
(1) ソケットによるデバイスの実装は、それぞれのパッケージに合ったソケットを使用してく
ださい。
(2) コンタクト部分の接触圧力が適正なものを使用してください。抜き差しの繰り返しにより
接触不良を起こしたり、圧力が高い際には抜き差しする際にデバイスのリードを曲げたり
傷つけたりします。
(3) ソケットをプリント基板にはんだ付けする際は、フラックスがコンタクト部分まで浸入し
ない構造または完全に洗浄できる構造のものを使用してください。
(4) プリント基板の防湿などのために塗布するコーティング剤は、ソケットのコンタク部に付
着しないようにしてください。
(5) ソケットへの抜き差しなどでリードが著しく曲がった場合に、やむを得ず曲げを矯正して
使用する場合は一回にとどめ、複数回の矯正使用はしないでください。
(6) デバイスが実装されたプリント基板に、外部から振動が加わる場合は、デバイスとソケッ
ト間で振動しないように、接触圧力の大きいソケットを使用してください。
5.3
はんだ付け温度プロファイル
はんだ付けはデバイス個々の技術資料・データブックに記載の方法・条件に従って実施し
てください。デバイスによりはんだ付けの方法、温度および時間などを制限している場合が
あります。
5.3.1 はんだごての場合
リード部温度を 260℃ 10 秒以内、または 350℃ 3 秒以内で実施してください。
5.3.2 赤外線リフローの場合
(1) 遠・中赤外線での上下加熱方法を推奨します。(図 5-3-1 参照)
中赤外線ヒータ
(リフローヒータ)
デバイスの流れ
遠赤外線ヒータ (プリヒータ)
図 5-3-1 遠・中赤外線での上下過熱方式
(2) パッケージ表面温度は最大 240℃とし、 210℃以上の時間は 30 秒以内で実施してく
ださい。
17
取り扱い上のご注意とお願い
(3) 推奨温度プロファイルの一例として図 5-3-2 を参照してください。
(°C)
240
パッケージ表面温度
210
160
140
60 ∼ 90 秒
30 ∼ 50 秒
時間
(秒)
図 5-3-2 温度プロファイル
5.3.3 温風リフローの場合
(1) パッケージ表面温度は最大 240℃とし、210℃以上の時間は 30 秒以内で実施してく
ださい。
(2) 推奨温度プロファイルは、上記 5.3.2(3)遠・中赤外線リフローの場合の図 5-3-2 を参
照してください。
5.3.4 はんだフローの場合
(1) プリヒートは、150℃で 60∼120 秒実施してください。
(2) リード挿入形パッケージではストッパー部まで、または本体から 1.5mm 以上離れた
ところで最大 260℃のはんだフローにおいて 10 秒以内に実施してください。
(3) 表面実装型パッケージの場合は、熱ストレスを避けるため 250℃以下で 5 秒以内の
実装を推奨します。
(4) 表面実装型パッケージのはんだフローでの推奨温度プロファイルの一例を図 5-3-3
に示します。
(°C)
250
パッケージ表面温度
160
140
60∼120 秒
5 秒以内
時間
図 5-3-3 温度プロファイル
18
(秒)
取り扱い上のご注意とお願い
5.4
フラックス洗浄
(1) フラックス洗浄は、ナトリウム、塩素などの反応性イオンの残留がないように洗浄してく
ださい。有機溶剤によっては、水と反応し塩化水素などの腐食性ガスを発生させ、デバイ
スの劣化を生じさせる恐れがあります。
(2) 水洗浄に際しては、特にナトリウム、塩素などの反応性イオンの残留がないようにしてく
ださい。
(3) 洗浄中または、洗浄液がデバイスに付着した状態で、ブラシや手で表示マーク面をこすら
ないでください。表示マークが消える恐れがあります。
(4) 浸漬洗浄、シャワー洗浄、およびスチーム洗浄は溶剤の化学的作用により洗浄を行います。
溶剤中やスチーム中の浸漬時間は、デバイスへの影響を考慮して、液温 50℃以下で 1 分
以内に処理してください。
(5) セラミックを主材料とした気密封止タイプパッケージ(LCC,PGA,CCD など)のデバイ
スは、超音波洗浄を避けてください。内部の接続ワイヤが超音波に共振して断線する恐れ
があります。なお、超音波洗浄が可能なパッケージのデバイスであっても、超音波による
洗浄は短時間で行ってください。長時間の洗浄はモールド樹脂とフレーム材との密着性を
低下させる恐れがあります。
推奨する基本的な条件を下記します。
超音波洗浄の推奨条件
周波数:27∼29kHz
超音波出力:300W 以下(0.25W/cm2 以下)
洗浄時間:30 秒以下
超音波振動子とプリント基板やデバイスが、直接接触しないように溶剤中に浮遊した状態
で行ってください。
5.5
無洗浄
アナログ系および高速のデバイスに対しては洗浄することを推奨します。フラックスの等
級によっては無洗浄の場合にリード間微小リークや、マイグレーションを起こすことがあり
ます。ただし、ハロゲン含有量が 0.05W%以下のフラックスを使用する際は、無洗浄でも問題
ないと推定されます。
5.6
テープキャリアパッケージ(TCP)の実装
(1) テープキャリアパッケージの実装は、静電気破壊への対策が必要です。
(2) テープからのデバイス切り離し、およびアウターリードボンデイング(OLB)実装を行う際
は、作業の安全性に十分に配慮して実施してください。
(3) ポリイミド製のベースフィルムは堅く薄いため、身体への受傷および物品への損傷が発生
しないようにしてください。
(4) 打ち抜きの際は、微細破片の飛散により受傷することがないように飛散防止策をしてくだ
さい。
(5) デバイスを切り離した後のテープ、リールおよびスペーサなどは、産業廃棄物として適
切な処理をしてください。
19
取り扱い上のご注意とお願い
(6) TCP デバイスは、LSI チップ裏面が露出しています。従ってチップクラック防止のため
LSI 裏面に機械的衝撃が加わらないように実装してください。さらに、電気的な接触につ
いても,LSI 故障の原因となります。LSI チップ裏面に電気的接触がないように実装して
ください。
特性向上のために LSI チップ裏面を基板に接続する実装の場合は、事前に当社営業窓口
に問い合せてください。
5.7
チップの実装
チップで納入されるデバイスは、プラスチックパッケージ製品にくらべ、外的要因により
容易に特性劣化および破損が生じます。取り扱いには十分留意してください。
(1) チップ表面が汚染された雰囲気ないしは物質にさらされないように、整備された環境で実
装してください。
(2) チップの取り扱い時は、静電気にさらさないようにしてください。チップ実装に際しては、
特に静電気破壊への対策が必要です。そのため、周辺部品を先に実装し、最後にチップ実
装をすることを推奨します。
(3) チップ実装用の基板(PCB など)は、基板上に化学薬品(PCB エッチング時の薬品など)の残
留などがないものを使用してください。
(4) チップの実装は、半導体製品としての適切な電気的、熱的、機械的な特性を得られるよう
に最適な組み立て方法を用いてください。
*
5.8
チップについての詳細は、個別の仕様書を参照してください。
基板コーティング
高信頼性を必要とする機器、あるいは悪環境下(湿度、腐食性ガス、塵埃など)で使用される
機器にデバイスを使用する場合は、防湿コーティングを行うことがあります。コーティング
樹脂の使用に際しては、応力の少ないものを選択してください。
5.9
放熱板
(1) デバイスに放熱板を取り付ける場合は、指定のアクセサリを使用してください。また、取
り付ける際に、デバイスに過大な応力を加えないようにしてください。
(2) デバイスを放熱板に 2 ヶ所以上で取り付ける場合は、ほかの取り付け部を開放したまま 1
ヶ所のみを規定トルク値まで締め付けることはしないで、すべての取り付け部を軽く予備
締めした後に規定のトルク値まで締め付けてください。
(3) 放熱板のネジ穴は規定通りにし、デバイスの取り付け部はバリや
凹凸が少ない平坦な面にしてください。
(4) 放熱板とデバイスとの間にシリコーングリースを薄く塗布する
ことで熱伝導がよくなります。この場合、不揮発性のシリコー
ングリースを使用してください。揮発性のシリコーングリース
は、長期間使用するとひび割れが生じ、放熱効果を悪化させる
ことがあります。
(5) プラスチックパッケージデバイスの場合、グリースの選定によってはベースオイルがパッ
ケージの内部に浸入してデバイスの寿命を著しく悪化させることがあるので、推奨のシリ
コーングリース(東芝シリコーン製 YG6260)を使用してください。その他のものを使用
する場合は同等品を選択してください。
(6) デバイスの動作中は、放熱板が高温になりますので、接触によって火傷をしないようにし
てください。
20
取り扱い上のご注意とお願い
5.10 絞め付けトルク
(1) デバイスの個別技術資料・データブックに記載された、規定値以内の絞め付けトルクで締
め付けてください。
(2) エアドライバはデバイス本体に接触させないでください。
5.11 デバイスの再実装および再使用
次の履歴を経たデバイスは再実装および再使用をしないでください。特性および信頼性面
で重大な問題が発生する場合があります。
(1) はんだ付けから回収されたデバイス。
(2) 逆差しまたは逆極性で通電されたデバイス。
(3) リードフォーミングが再実施されたデバイス。
6.
使用環境
6.1
温度
一般に半導体デバイスは、ほかの機構部品などに比べ温度に対して敏感です。各電気的特
性は使用温度によって制限されますので、あらかじめ温度特性を把握してディレ−ティング
を考慮した設計を盛り込む必要があります。また、動作保証温度範囲外で使用されますと、
電気的特性が保証されないばかりでなくデバイスの劣化を早めます。
6.2
湿度
(1) プラスチックパッケージのデバイスは、その気密性が完全ではありません。従って、高湿
度環境での長期使用は、内部への水分侵入により半導体チップの劣化や故障を引き起こす
場合があります。また、通常のプリント基板では、高湿度環境で配線間インピ−ダンスが
低下する可能性があります。
高い信号源インピ−ダンスを持つシステムでは、これら基板リ−クやデバイスのリード間
リ−クが誤動作の原因になります。このような場合には、デバイス表面の防湿処理を検討
してください。一方、低湿度では静電気の放電による損傷が問題になりますので、特に防
湿処理をしない限り 40∼60%の湿度範囲で使用してください。
6.3
腐食性ガス
デバイスは腐食性ガスに反応して特性が劣化することがあります。例えばゴム製品の近傍
にデバイスを配置する際は、化学反応によって生ずるリードの腐食およびリード間リークに
対する配慮が必要です。なぜなら、ゴム製品は高湿度環境で結露するだけでなく、硫黄を含
む硫化ガスが発生するためです。
6.4
放射線・宇宙線
一般のデバイスは、耐放射線や耐宇宙線の設計がなされていません。従って、放射線の発
生する環境では、放射線や宇宙線を防止する遮蔽設計が必要です。
21
取り扱い上のご注意とお願い
6.5
強電界・強磁界
デバイスは、磁界にさらした場合にプラスチック材料や IC チップ内部の分極現象により、
インピーダンス変化やリーク電流の増加などの異常現象が起こります。テレビの偏向ヨ−ク
の近傍に LSI を実装したことにより、誤動作を起こしたという事例もあります。このような
場合には、実装場所の変更や電界・磁界シールドが必要です。特に、交番磁界環境では、起
電力が発生するために磁気シールドが必要です。
6.6
外乱光(紫外線、太陽光、蛍光灯、ランプなど)
半導体デバイスに光を与えますと光電効果により起電圧が生じ、誤動作を起こす場合があ
ります。特にパッケージを通してチップが見えるデバイスについては、より高い影響を受け
ますので、外乱光が入射しない設計にしてください。光半導体や EP−ROM 以外でも影響が
あります。
6.7
塵埃・油
腐食ガスと同様に、デバイスが化学反応する場合がありますので、デバイスの特性に影響
を与える塵埃・油などが付着しない環境で使用してください。光デバイスの場合、光学特性
にも影響が現れますので設計の際に、特に留意が必要です。
6.8
発煙・発火
半導体デバイスやモジュール化したデバイスは、不燃性ではありませんので、故障などの
発生時に燃焼する場合があります。また、その際に毒性を持ったガスが発生する恐れがあり
ま
す
。
従って、燃焼・発熱体および発火物・引火物の近くでは、使用しないでください。
7.
廃棄
デバイスおよび包装材の廃棄については、排出事業者自らが適正に処理することを定めた法律
や条例がありますので、それら法律を遵守してください。
22
取り扱い上のご注意とお願い
製品群別特有のご注意および使用上のお願い事項
[4]
本項には製品群別固有の留意が必要な事項を記載しています。本項への記載事項は[3]項より優
先します。
1.
マイコン
1.1
設計
1.1.1 推奨以外の発振子の使用
マイコン製品の発振回路に使用する発振子などの部品については、個別技術資料・デ
ータブックに推奨する部品名、条件を記載していますので、これらを使用してください。
推奨している部品・条件以外で利用して頂く場合には、個別技術資料・データブックに
記載しています当社技術担当あるいは発振子メーカーまで問い合わせてください。
1.1.2 未定義機能
マイコン製品では、各製品個々に定義されていない命令 (未定義命令)があります。同
様に、定義されていない機能 (例えばレジスタ中で機能の割り当てられていないビットな
ど)もあります。
各製品の個別技術資料・データブックを参照して頂き、未定義命令および未定義の機能
については使用しないでください。
23
取り扱い上のご注意とお願い
24
TMPR3927A
第 1 章 概要と特長
第1章
1.1
概要と特長
概要
TMPR3927A (以下、TX3927) は、32 ビット TX System RISC TX39 ファミリーの標準マイクロ
コントローラです。
TX3927 は、CPU として TX39/H2 プロセッサコアを使用しています。TX39/H2 プロセッサコア
は、MIPS Technologies, Inc. (以下、MIPS) の R3000A アーキテクチャをベースに当社が開発した
32 ビット RISC 型 CPU コアです。
TX3927 には、TX39/H2 プロセッサコアの他に、組み込み用途向けのマイクロコントローラとし
て、メモリコントローラ、PCI コントローラ、DMA コントローラ、シリアルおよびパラレルポー
ト、タイマ/カウンタなどの周辺回路を内蔵しています。
命令セットなどの TX39/H2 プロセッサコアアーキテクチャについては、下記ドキュメントを参
照してください。
『32 ビット TX System RISC TX39/H2 コア アーキテクチャ』
(当社資料番号: 02444D12AB)
R3000A は、MIPS Technologies, Inc.の商標です。
1-1
第 1 章 概要と特長
1.2
本書の表記法
1.2.1
数値の表記
•
16 進数は次のように表記します。(これは 10 進数の 42 を表しています)
0x2A
•
KB (キロバイト) 210 = 1,024 バイト、
MB (メガバイト) 220 = 1,024 × 1,024 = 1,048,576 バイト、
GB (ギガバイト) 230 = 1,024 × 1,024 × 1,024 = 1,073,741,824 バイト
を表します。
1.2.2
データの表記
•
バイト (byte): 8 ビット (bit) のことです。
•
ハーフワード (half word): 連続した 2 バイト (16 ビット) のことです。
•
ワード (word): 連続した 4 バイト (32 ビット) のことです。
•
ダブルワード (double word): 連続した 8 バイト (64 ビット) のことです。
(注) 「第 12 章 PCI コントローラ (PCIC)」では PCI 仕様に準拠した表記をとっています。P12-1
の (注意) を参照してください。
1.2.3
信号の表記
•
ローアクティブの信号は信号名の末尾に“ * ”を付けて示します。
(例: RESET*)
•
1.2.4
信号がアクティブレベルに移ることを 「アサート (assert)」、
アクティブでないレベルに移ることを 「デアサート (deassert)」
と呼びます。
レジスタの表記
•
•
レジスタ内の各ビットの属性は、次のように表します。
R
リードオンリー。ライトすることはできません。
W
ライトオンリー。リードしたときの値は不定です。
R/W
リード/ライト。
R/WC
リード/ライトクリア。これらのレジスタはリードとライトができます。ただし、
1 をライトすると対応するビットがクリア (0 にリセット) され、0 をライトす
ると無効となります。
R/WL
リード/ライトローカル。これらのレジスタは PCI バスと TX39/H2 コアのどち
らからでもリード可能です。ただし、対応するビットにライトできるのは
TX39/H2 コアのみです。
レジスタとそのレジスタビット/フィールド名を示すときは、「<レジスタ名>. <ビット/フ
ィールド名>」 と表記します。
例: CCFG. TOE
これはチップコンフィグレーションレジスタ (CCFG) のビット [14] のビットフィールド
であるタイムアウトバスエラーイネーブル (TOE)を示します。
1-2
第 1 章 概要と特長
1.3
特長
•
•
•
•
TX39/H2 プロセッサコア
•
TX39/H2 は、R3000A アーキテクチャをベースに当社が開発した高性能 32 ビットマイク
ロプロセッサコアです。
•
8 K バイトの命令キャッシュ (2 ウェイセットアソシアティブ)
•
4 K バイトのデータキャッシュ (2 ウェイセットアソシアティブ)
•
バーストリフィルおよびキャッシュロック機能をサポート
•
クリティカルワードファーストモードをサポート
•
MMU にトランジションロックアサイドバッファ (TLB) を搭載
•
ハードウエア MAC ユニットを内蔵し 1 サイクルで DSP 動作を実行 (スループット)
•
デバッグサポートユニット (DSU) を内蔵
SDRAM コントローラ
•
8 チャネル (6 チャネルは ROMC と兼用)
•
SDRAM、DIMM フラッシュ、SGRAM、または SMROM メモリに対応
•
2/4 バンクサイズの 16 M/64 M/128 M/256 M ビット SDRAM に対応
•
チャネルごとにデータバス幅は 16 ビットまたは 32 ビットに設定可能
•
シングルデータレート (SDR) SDRAM をサポート。
•
JEDEC 規格の SDRAM 用 100 ピンまたは 168 ピン DIMM ソケット対応
•
JEDEC 規格のフラッシュ用 100 ピン DIMM ソケット対応
•
CKE によるタイミング制御サポート
•
リフレッシュ制御
•
セルフリフレッシュサポート
•
66 MHz クロック
ROM コントローラ
•
8 チャネル (6 チャネルは SDRAMC と兼用)
•
ROM、ページモード ROM、マスク ROM、EPROM、E2PROM、SRAM、フラッシュメ
モリおよび I/O デバイスに対応
•
32 ビットメモリに対しては 1 M バイト∼1 G バイトのメモリサイズに対応。16 ビットバス
のメモリに対しては 1 M バイト∼512 M バイトのメモリサイズに対応
•
チャネルごとにデータバス幅を 16 ビットまたは 32 ビットに設定可能
•
フルスピード (最大 66 MHz) /ハーフスピード (最大 33 MHz) バスモード対応
•
内部ウェイト/外部ウェイト (ACK*/RDY) 選択可
タイマ/カウンタ
•
24 ビットアップカウンタ×3 チャネル
•
インタバルタイマモード、パルスジェネレータモードおよびウォッチドッグタイマモード
(チャネル 2 のみ) をサポート
•
タイマ出力端子 : 2 本
•
外部入力クロックも可能
1-3
第 1 章 概要と特長
•
•
•
•
•
割り込みコントローラ
•
ノンマスカブル割り込み (NMI)
•
マスカブル割り込み:内部 8 要因、外部 6 要因
•
エッジ/レベル選択可能
PCI コントローラ
•
PCI Local Bus Specification Revision 2.1 に準拠
•
33 MHz の 32 ビット PCI インタフェース
•
ターゲット (ストリーミング機能あり) およびイニシエータ (ストリーミング機能なし) モ
ードをサポート
•
ターゲットモードでのゼロ−ウェイトのバースト転送 (リード/ライト) が可能
•
FIFO を内蔵し、メモリコントローラに対するレイテンシを最小限におさえる
•
PCI バスのメモリ空間をローカルバス (G-Bus) アドレス空間に自動的にマッピング
•
内部アービタ機能のイネーブル/ディセーブル選択可 (内部アービタは外部 4 マスタまで対
応)
•
外部割り込み機能が可能
•
内部クロック/外部クロック選択可
ダイレクトメモリアクセスコントローラ (DMAC)
•
4 チャネル
•
メモリ↔メモリ、メモリ↔I/O 間転送をサポート
•
8/16/32 ビット幅の I/O デバイスに対応
•
内部/外部転送要求をサポート
•
デュアルアドレスおよびシングルアドレス転送モードをサポート
•
ワードアライメントのメモリ間転送に対して 4 ワード/8 ワードバーストリード/ライトが
可能
•
アドレス増加値を設定可能 (ソース、デティネーションとも)
シリアル I/O ポート
•
UART × 2 チャネル
•
ボーレートジェネレータ内蔵
•
モデムフローコントロール機能内蔵
•
8 ビット × 8 トランスミッタ FIFO 内蔵
•
13 ビット (データ 8 ビットおよびステータス 5 ビット) × 16 レシーバ FIFO 内蔵
•
内部クロック/外部クロック選択可
パラレル I/O ポート
•
方向やモードに関係なくリード可能な最高 16 個の双方向 I/O 端子を内蔵 (1 本はパラレル
ポート専用)
•
ピンごとに端子方向の選択ができ、出力に関してはトーテムポールまたはオープンドレイ
ンを選択可能
•
16 ビットフラグレジスタを内蔵
1-4
第 1 章 概要と特長
•
電源: 2.5 V (内部)/3.3 V (I/O)
•
最大動作周波数: 133 MHz
•
パッケージタイプ: 240 ピン QFP
MIPS は、“MIPS Technologies, Inc.” の登録商標です。
1-5
第 1 章 概要と特長
1-6
第 2 章 構成
第2章
構成
ブロック図
2.1
PCI3*
SDRCLKEN
TX39/H2 コア
PCICLKEN
SYSCLKEN
PCIXARB*
BBC
TLBOFF*
BME [1:0]
BOOT16*
CHANHS*
I-Cache
GDCLK
GSDAO [1:0]
D-Cache
GPCST [3:0]
GDRESET*
GDBGE*
GSDI*
TX39
WBU
DSU
BAI*
ENDIAN
PLLM [1:0]
TEST*
SCAN_ENB*
G-Bus I/F
RESET*
PLL
SDRAMC
CG
G Bus
XIN
XOUT
SYSCLK
CLKEN
SDCLK [4:0]
RAS*
CAS*
PCIAD [31:0]
C_BE [3:0]
ROMC
PAR
FRAME*
TREDY*
EBIF
IRDY*
STOP*
DEVSEL*
REQ [3:0] *
GNT [3:0] *
PCICLK [0]
PCICLK [3:1]
PCIC
IRC
PERR*
SERR*
DMAC
(4ch.)
IDSEL
DQM [3:0]
WE*
CKE
SDCS [1:0] *
SDCS_CE [7:2] *
CE [1:0] *
ACE*
SWE*
OE*
DATA [31:0]
ACK*
ADDR [19:2]
BWE [3:0] *
DSF
NMI*
INT [5:0]
DMAREQ [3:0]
DMAACK [3:0]
DMADONE*
PIO [15:0]
G to IM Bridge
IM Bus
TMR2
SIO1
TIMER [1]
TCLK
TIMER [0]
(注)
TMR1
SIO0
TMR0
ピンは兼用になっているものがありますので注意してください。
兼用ピンについては「3.3 ピンマルチプレクス」を参照してください。
図 2.1.1 TX3927 ブロック図
2-1
CTS [1:0]*
RTS [1:0]*
RXD [1:0]
TXD [1:0]
SCLK
第 2 章 構成
2-2
第 3 章 端子
第3章
端子
端子配置
3.1
表 3.1.1 TX3927 ピン配置 (1/2)
ピン番号
信号名
ピン番号
信号名
ピン番号
信号名
ピン番号
信号名
1
VSS2
31
VSS2
61
VSS
91
VSS2
2
DATA [30]
32
VSS
62
PCIAD [29]
92
DEVSEL*
3
DATA [23]
33
VDDS
63
PCIAD [28]
93
STOP*
4
DATA [31]
34
RTS [1] *
64
PCIAD [27]
94
PERR*
5
CE [1]
35
GPCST [2]
65
VSS
95
SERR*
6
VSS
36
GPCST [1]
66
PCIAD [26]
96
PAR
7
CE [0]
37
GPCST [0]
67
PCIAD [25]
97
C_BE [1]
8
ACE*
38
GDCLK
68
PCIAD [24]
98
VSS
9
ADDR [4]
39
GSDI
69
VSS
99
PCIAD [15]
10
ADDR [3]
40
GDRESET*
70
C_BE [3]
100
VDDS
11
ADDR [2]
41
GDBGE*
71
VDDS
101
PCIAD [14]
12
SYSCLK
42
PCICLK [3]
72
IDSEL
102
PCIAD [13]
13
VDD2
43
VDDS
73
PCIAD [23]
103
VSS
14
BWE [3] *
44
VSS
74
PCIAD [22]
104
PCIAD [12]
15
BWE [2] *
45
PCICLK [2]
75
VSS
105
PCIAD [11]
16
VSS
46
PCICLK [1]
76
PCIAD [21]
106
PCIAD [10]
17
BWE [1] *
47
PCICLK [0]
77
PCIAD [20]
107
VSS
18
BWE [0] *
48
VSS
78
PCIAD [19]
108
PCIAD [9]
19
OE*
49
GNT [3] *
79
VSS
109
PCIAD [8]
20
SWE*
50
GNT [2] *
80
PCIAD [18]
110
VDDS
21
SCLK
51
GNT [1] *
81
PCIAD [17]
111
C_BE [0]
22
RXD [0]
52
GNT [0] *
82
VDDS
112
VSS
23
TXD [0]
53
REQ [3] *
83
PCIAD [16]
113
PCIAD [7]
24
RTS [0] *
54
REQ [2] *
84
VSS
114
PCIAD [6]
25
CTS [0] *
55
REQ [1] *
85
C_BE [2]
115
PCIAD [5]
26
RXD [1]
56
REQ [0] *
86
FRAME*
116
VSS
27
TXD [1]
57
PCIAD [31]
87
IRDY*
117
PCIAD [4]
28
CTS [1] *
58
PCIAD [30]
88
VSS
118
PCIAD [3]
29
GSDAO [0]
59
VSS2
89
TRDY*
119
PCIAD [2]
30
VDD2
60
VDDS
90
VDD2
120
VDDS
3-1
第 3 章 端子
表 3.1.2 TX3927 ピン配置 (2/2)
ピン番号
信号名
ピン番号
信号名
ピン番号
信号名
ピン番号
信号名
121
VSS
151
VSS2
181
VSS2
211
VSS2
122
PCIAD [1]
152
DATA [12]
182
XIN
212
SDCS [0] *
123
PCIAD [0]
153
VSS
183
XOUT
213
SDCS [1] *
124
ACK*
154
DATA [5]
184
VDD2
214
SDCS_CE [2] *
125
DMAREQ [3]
155
DATA [13]
185
VDD2
215
SDCS_CE [3] *
126
DMAACK [3]
156
DATA [6]
186
PLLVDD
216
SDCS_CE [4] *
127
DMAREQ [2]
157
DATA [14]
187
FILTER [0]
217
SDCS_CE [5] *
128
DMAACK [2]
158
DATA [7]
188
FILTER [1]
218
VDDS
129
DMAREQ [0]
159
VDDS
189
PLLVSS
219
DMAACK [1]
130
VSS
160
DATA [15]
190
VSS2
220
DMAREQ [1]
131
VDDS
161
VSS
191
NMI*
221
DQM [2]
132
DMAACK [0]
162
DQM [0]
192
SCANENB*
222
VSS
133
DMADONE*
163
DQM [1]
193
CLKEN
223
DQM [3]
134
INT [3]
164
ADDR [5]
194
RESET*
224
DATA [16]
135
INT [2]
165
ADDR [6]
195
TEST*
225
DATA [24]
136
INT [1]
166
ADDR [7]
196
ADDR [18]
226
DATA [17]
137
INT [0]
167
ADDR [8]
197
ADDR [19]
227
DATA [25]
138
PIO [0]
168
VSS
198
RAS*
228
DATA [18]
139
DATA [0]
169
ADDR [9]
199
VSS
229
VSS
140
DATA [8]
170
VDDS
200
CAS*
230
VDDS
141
DATA [1]
171
ADDR [10]
201
SDCLK [0]
231
DATA [26]
142
DATA [9]
172
ADDR [11]
202
SDCLK [1]
232
DATA [19]
143
VSS
173
ADDR [12]
203
SDCLK [2]
233
DATA [27]
144
DATA [2]
174
ADDR [13]
204
VDDS
234
DATA [20]
145
DATA [10]
175
ADDR [14]
205
SDCLK [3]
235
DATA [28]
146
DATA [3]
176
VSS
206
SDCLK [4]
236
DATA [21]
147
VDDS
177
ADDR [15]
207
VSS
237
VSS
148
DATA [11]
178
ADDR [16]
208
CKE
238
DATA [29]
149
DATA [4]
179
ADDR [17]
209
WE*
239
DATA [22]
150
VDD2
180
VDDS
210
VDD2
240
VDDS
3-2
第 3 章 端子
3.2
端子機能
信号名
I/O
機 能
システムインタフェース
SYSCLK
O
System Clock
フルスピードモード (TX39/H2コアの1/2の周波数) もしくはハーフスピードモード
(TX39/H2コアの1/4の周波数) のクロックが出力されます。
ブート信号CHANS* (ADDR [15] 端子) およびBME [1:0] (ADDR [9:8] 端子) の設定によ
りどちらのスピードモードになるか決まります。CHANS*を“0”にするか、BME [1:0]
を“10”にするとハーフスピードになります。
またブート信号SYSCLKEN (ADDR [5] 端子) を“0”に設定するとSYSCLKは出力され
ません。
DATA [31:0]
I/O
Data
データバスです。
16ビットバスモード時にはDATA [15:0] を使用します。
内部にプルアップ抵抗が付いています。
ACK*
I/O
Acknowledge
外部ACK*モード時、バスオペレーションを終了させるための入力信号となります。RDY
入力として使用することもできます(1チャネルごとに設定できます)。また、内部ACK*
モード時には出力信号となり、バスオペレーションの終了を外部に通知することができ
ます。
内部にプルアップ抵抗が付いています。
RESET*
I
Reset
TX3927を初期化するための信号です。
内部回路を初期化するためにRESET*信号はCPUクロックで512クロック以上Lowにし
てください。
内部にプルアップ抵抗が付いています。
XIN
I
Crystal Input
水晶発振子を接続するかクロックを直接入力してください。
このときの周波数は、ブート信号PLLM [1:0] (ADDT [3:2] 端子)で指定した逓倍値にあう
ようにしてください。
:逓倍値は2です。このときは外部からクロックを入力してください。
PLLM [1:0] =“01”
XOUTはオープンにしてください。
:逓倍値は16です。このときは水晶発振子を接続するかクロックを直
PLLM [1:0] =“11”
接入力してください。
,
“10”には設定しないでください。
PLLM [1:0] を“00”
XOUT
O
Crystal Output
水晶発振子を接続してください。
PLLM [1:0] を“01”に設定したときはオープンにしてください。
CLKEN
I
Clock Enable
TX3927内蔵CGのイネーブル信号です。
電圧が安定して、XINから入力するクロック (水晶発振子または外部クロック入力) が安
定するまでこのCLKEN信号をLowにしてください。
内部にプルアップ抵抗が付いています。
クロック
3-3
第 3 章 端子
信号名
I/O
機 能
割り込み信号
NMI*
I
Non Maskable Interrupt
ノンマスカブル割り込み信号です。
内部にプルアップ抵抗が付いています。
INT [5:4]
I
Interrupt Request
外部割り込み要求信号です。CTS0,RTS0とそれぞれ兼用です。
内部プルアップ抵抗が付いています。
INT [3:0]
I
Interrupt Request
外部割り込み要求信号です。
内部にプルアップ抵抗が付いています。
O
Timer Pulse Width Output
タイマ出力信号です。パルスジェネレータモード時に使用します。これ以外のモードで
は “1” が出力されます。他のピンと兼用です。
タイマインタフェース
TIMER [1:0]
DMAREQ [3] /PIO [15] /TIMER [1]
DMAACK [3] /PIO [11] /TOMER [0]
DMADONE*/PIO [7] /TIMER [0]
TCLK
I
External Timer Clock
タイマの入力クロック信号です。TMR0,TMR1,TMR2に共通となっています。この信号
はPIO [13] およびDMAREQ [2] と兼用です。
SDCLK [4:0]
O
SDRAM Clock Out
TX39/H2コアの1/2の周波数です(TX39/H2コア133MHz時66MHz)。SDRAM、SMROM、
フルスピードバスモードでのI/Oデバイスが使用するクロックとなります。
SDCLK [0]のみ内部にプルアップ抵抗が付いています。
ブート信号SDRCLKEN (ADDR [4] 端子) を“0”に設定するとSDCLKは出力されませ
ん。
RAS*
O
Row Address Strobe
SDRAM、SMROM、SGRAM用RAS*信号です。
CAS*
O
Column Address Strobe
SDRAM、SMROM、SGRAM用CAS*信号です。
SDCS [7:0] *
O
Synchronous Memory Device Chip Select
SDRAM、SMROM、SGRAMまたは100-pin DIMM Flash用チップセレクト信号です。
SDCS [7:2] はCE [7:2] と兼用です。さらにSDCS [7:6] はDMAREQ [1] /PIO [11] およ
びDMAACK [1] /PIO [10] とも兼用です。SDCS[7:6]には内部にプルアップ抵抗が付い
ています。
DQM [3:0] *
O
Data Mask
ライトサイクル時にはデータマスク信号として機能し、SDRAMの入力データをバイト
ごとに制御します。リードサイクル時にはSDRAMの出力バッファを制御します。ライ
トサイクル時にはDIMM Flashのバイトイネーブルとしても機能します。
WE*
O
Write Enable
SDRAM、SMROM、SGRAM用WE*信号です。
CKE
O
Clock Enable
SDRAM、SMROM、SGRAM用CKE端子です。
SWE*
O
SRAM Write Enable
SRAM、I/Oデバイス用ライトイネーブル信号です。
メモリインタフェース
3-4
第 3 章 端子
I/O
機 能
ADDR [19:2]
O
Address
アドレス信号です。
ROM、SRAM、I/Oデバイスに対しては、外部回路(74377)とACE*信号とを用いること
により28本のアドレス信号として使用できます。ACE*がLowのときADDR [29:20] が
ADDR [19:10] 端子に出力されます。
SDRAM、SMROM、SGRAM、DIMM Flashに対してはADDR [19:5] を使用します。
内部にプルアップ抵抗が付いています。
またリセット中にブート信号として使用します。ブート設定はリセットの立ち上がりで
TX3927の内部にラッチされます。
OE*
O
Output Enable
ROM、SRAM、I/Oデバイス、SMROM、DIMM Flash用アウトプットイネーブル信号で
す。
CE [7:0] *
O
ROM Chip Enable
ROM、SRAM、I/Oデバイス用チップセレクト信号です。ROMCE [7:2] はSDCS [7:2] と
兼用です。
CE [7:6]のみ内部にプルアップ抵抗が付いています。
ACE*
O
ROM Address Clock Enable
マルチプレクス信号ADDR [19:10] から出力されるADDR [29:20] を外部回路(74377)
でラッチするためのクロックイネーブル信号です。
BE [3:0] */
BWE [3:0] *
O
Byte Enable/Byte Write Enable
BE [3:0] はバスオペレーション時データバスDATA [31:0] 上の有効なデータ位置を示
します。16ビットバスモード時にはBE [1:0] *だけを使用します。
BWE [3:0] はライトバスオペレーション時データバスDATA [31:0] 上の有効なデータ
位置を示します。16ビットバスモード時にはBWE [1:0] *だけを使用します。
データバスとの対応は次の通りです。
BE [3] */BWE [3] *:DATA [31:24]
BE [2] */BWE [2] *:DATA [23:16]
BE [1] */BWE [1] *:DATA [15:8]
BE [0] */BWE [0] *:DATA [7:0]
この信号をBE [3:0] として使うかBWE [3:0] として使うかはブート信号BBC (ADDR
[6] 端子) およびROMコントローラのRCCRn.RBCnで指定します。
DSF
O
Define Special Function
SGRAM用の信号です。PIO [1] と兼用です。
信号名
メモリインタフェース
3-5
第 3 章 端子
信号名
I/O
機 能
PCIインタフェース
PCIAD [31:0]
I/O
PCI Address and Data
アドレス・データマルチプレクスバスです。
C_BE [3:0]
I/O
Bus Command and Byte Enables
コマンドおよびバイトイネーブル信号です。
PAR
I/O
Parity
PCIAD [31:0] およびC_BE [3:0] *に対するパリティ信号です。パリティは偶数パリティ
です。
FRAME*
I/O
Cycle Frame
バスオペレーションが実行されていることを示します。
IRDY*
I/O
Initiator Ready
イニシエータがデータ転送を完了してよいことを示す信号です。
TRDY*
I/O
Target Ready
ターゲットがデータ転送を完了してよいことを示す信号です。
STOP*
I/O
Stop
ターゲットがイニシエータに対してデータ転送の中止を要求する信号です。
ID_SEL
I
DEVSEL*
I/O
Device Select
ターゲットがイニシエータによるアクセスに対してアサートする応答信号です。
REQ [3:0] *
I/O
Request
マスタがバス制御権を要求するための信号です。
内部アービタモード時はすべて入力になります。
外部アービタモード時には、REQ [0] が出力信号、REQ [1] がフラグ割り込み出力信
号となり、REQ [3:2] は使用しません。
GNT [3:0] *
I/O
Grant
マスタに対してバス制御権を許可したことを示す信号です。
内部アービタモード時はすべて出力になります。
外部アービタモードでは、GNT [0] が入力信号となり、GNT [3:1] は使用しません。
PERR*
I/O
Parity Error
スペシャルサイクル以外のバスサイクルにおいてデータパリティエラーが発生したこ
とを示します。
SERR*
I/O
System Error
アドレスパリティエラー、スペシャルサイクル中のデータパリティエラー、または致命
的なエラーが発生したことを示します。
PCICLK [3:0]
I/O
PCI Clock
PCIバスのクロックです。
PCICLK [0] はTX3927から出力するモードと、外部からTX3927のPCIコントローラへ
入力するモードとがあります。PCICLK [3:1] はトライステート出力信号です。
どちらを使用するかはブート信号PCICLKEN (ADDR [18] 端子) で設定します。
PCICLKENを“1”にしたときPCICLK [3:0] は出力になります。一方PCICLKENを“0”
にしたときはPCICLK [0] は入力になり、PCICLK [3:1] は使用しません。
Initialization Device Select
コンフィグレーションアクセス時のチップセレクト信号です。
3-6
第 3 章 端子
信号名
I/O
機 能
DMAインタフェース
DMAREQ [3:0]
I
DMA Request
外部I/OデバイスからのDMA転送要求信号です。
信号はPIO、タイマ機能およびSDCS_CE [7] と兼用になっています。
詳細は「3.3 ピンマルチプレクス」を参照してください。
内部にプルアップ抵抗が付いています。
DMAACK [3:0]
O
DMA Acknowledge
外部I/Oデバイスに対するDMA転送アクノリッジ信号です。
信号はPIO、タイマ機能およびSDCS_CE [6] と兼用になっています。
詳細は「3.3 ピンマルチプレクス」を参照してください。
内部にプルアップ抵抗が付いています。
DMADONE*
I/O
DMA Done
DMA転送の終了を知らせる出力信号もしくは、DMA転送を停止させるための入力信号
として機能します。
内部にプルアップ抵抗が付いています。
TXD [1:0]
O
SIO Transmit Data
シリアルデータ出力です。
信号はPIO信号および割り込み要求信号と兼用になっています。
内部にプルアップ抵抗が付いています。
RXD [1:0]
I
SIO Receive Data
シリアルデータ入力です。
信号はPIO信号および割り込み要求信号と兼用になっています。
内部にプルアップ抵抗が付いています。
RTS [1:0] *
O
Request to Send
RTS*信号です。
信号はPIO信号、割り込み要求信号およびデバッグ信号GPCST [3]と兼用になっていま
す。
内部にプルアップ抵抗が付いています。
CTS [1:0] *
I
Clear to Send
CTS*信号です。
信号はPIO信号、割り込み要求信号およびデバッグ信号GSDAO [1]と兼用になっていま
す。
内部にプルアップ抵抗が付いています。
SCLK
I
SIO Clock
SIO用クロック入力です。SIO0とSIO1とで共用になっています。
内部にプルアップ抵抗が付いています。
SIOインタフェース
パラレルインタフェース
PIO [15:0]
I/O
PIO Port
PIO [0] はPIO専用の信号です。その他のPIO [15:1] はDMA,割り込み入力,タイマ,
シリアルシンタフェースもしくはSGRAM用のDSF信号と兼用になっています。
PIOは内部にプルアップ抵抗が付いています。
3-7
第 3 章 端子
信号名
I/O
機 能
デバッグインタフェース
GDCLK
O
Debug Clock Signal
外部リアルタイムデバッグシステム用のクロック信号です。
GSDAO [1:0]
O
Serial Data and Address Output/Target PC
外部リアルタイムデバッグシステム用の出力信号です。
GPCST [3:0]
O
PC Trace Status
外部リアルタイムデバッグシステム用のPCトレース出力信号です。
GDRESET*
I
Debug Reset
外部リアルタイムデバッグシステム用のリセット信号です。
内部にプルアップ抵抗が付いています。
GDBGE*
I
Debugger Enable
外部リアルタイムデバッグシステム用のイネーブル信号です。
内部にプルアップ抵抗が付いています。
GSDI*
I
Serial Data input/Debug Interrupt
外部リアルタイムデバッグシステム用の入力信号です。
内部にプルアップ抵抗が付いています。
TEST*
I
Test
テスト端子です。Highに固定してください。
内部にプルアップ抵抗が付いています。
SCAN_ENB*
I
Scan Mode Test Control
テスト端子です。Highに固定してください。
内部にプルアップ抵抗が付いています。
その他
PLLVDD
PLLVSS
PLL用電源端子です。2.5Vを供給してください。
PLL用GND端子です。
VDD2
内部ロジック用電源端子です。2.5Vを供給してください。
VSS2
内部ロジック用GND端子です。
VDDS
VSS
I/O端子用電源端子です。3.3Vを供給してください。
I/O端子用GND端子です。
3-8
第 3 章 端子
3.3
ピンマルチプレクス
表 3.1.2に示す 24 本の信号は兼用ピンになっています。どの機能を使用するかは PCFG 制御レ
ジスタの設定もしくはその他の設定で選択できます。PCFG 制御レジスタでの設定方法を表 3.3.1
に示します。
表 3.3.1 ピンのマルチプレクス一覧
ピン番号
信号名
兼用している機能
217
SDCS_CE [5] *
SDCS [5] */CE [5] *
216
SDCS_CE [4] *
SDCS [4] */CE [4] *
215
SDCS_CE [3] *
SDCS [3] */CE [3] *
214
SDCS_CE [2] *
SDCS [2] */CE [2] *
52
GNT [0] *
GNT_0_OUT/GNT_IN
56
REQ [0] *
REQ_0_IN/REQ_OUT
REQ_1_IN/XINT_OUT
55
REQ [1] *
125
DMAREQ [3]
126
DMAACK [3]
PIO [14] /DMAACK [3] /TIMER [0]
127
DMAREQ [2]
PIO [13] /DMAREQ [2] /TCLK
PIO [15] /DMAREQ [3] /TIMER [1]
128
DMAACK [2]
PIO [12] /DMAACK [2]
220
DMAREQ [1]
PIO [11] /DMAREQ [1] /SDCS [7] */CE [7] *
219
DMAACK [1]
PIO [10] /DMAACK [1] /SDCS [6] */CE [6] *
129
DMAREQ [0]
PIO [9] /DMAREQ [0]
132
DMAACK [0]
PIO [8] /DMAACK [0]
133
DMADONE*
26
RXD [1]
PIO [7] /DMADONE*/TIMER [0]
PIO [6] /RXD [1]
27
TXD [1]
PIO [5] /TXD [1]
22
RXD [0]
PIO [4] /RXD [0]
23
TXD [0]
28
CTS [1] *
PIO [2] /CTS [1] */GSDAO [1]
PIO [3] /TXD [0]
34
RTS [1] *
PIO [1] /RTS [1] */DSF/GPCST [3]
25
CTS [0] *
INT [5] /CTS [0] *
24
RTS [0] *
INT [4] /RTS [0] *
チャネル 5~2 のチップセレクト信号である SDCS_CE [5:2] *は SDRAM コントローラと
ROM コントローラとで兼用になっています。SDRAM コントローラもしくは ROM コントロ
ーラでチャネルをイネーブルにすると、ピンが割り当てられます。もし SDRAM コントロー
ラと ROM コントローラとで同じチャネルを同時にイネーブルにした場合、どちらのバスサイ
クルでもチップセレクト信号 SDCS_CE [5:2] *はアサートされます。この場合メモリのデータ
を保証できませんので注意してください。
PCI のグラント信号(GNT [3:0] *)とリクエスト信号(REQ [3:0] *)は、PCI のアービタモード
を内部にするか外部にするかで動作が変わってきます。内部アービタモードでは、リクエスト
信号(REQ [3:0] *)は入力に、グラント信号(GNT [3:0] *)は出力なります。
これに対して外部アービタモードの場合には、REQ [0] *は PCI モジュールに対するリクエ
スト信号として出力に、GNT [0] *は PCI モジュールからのグラント信号として入力になりま
す。また REQ [1] *は PIO モジュールフラグレジスタで制御される割リ込み出力として機能し
ます。残りの REQ [3:2] * (出力モード) および GNT [3:1] * (入力モード) は使用しません。
3-9
第 3 章 端子
残りのマルチプレクスピンはピンコンフィグレジスタ (PCFG 制御レジスタ) で設定します。
設定方法 を表 3.3.1 に 示し ま す。表 を見て いただ く とわ か り ますが 、DMAREQ [3] と
DMAACK [3] というように、通常2つのピンがペアで設定されます。
ただし CTS [1] *と RTS [1] *はデバッグサポート用の端子とも兼用になっていて、デバッグ
サポート用の他の端子 (GDBGE*) も設定に関係します。
DMAREQ [1],DMAACK [1] 信号はチャネル 7,6 のチップセレクト信号である SDCS_CE
[7:6] *に設定できますが、このチップセレクト信号(SDCS_CE [7:6] *)は SDRAM コントロー
ラと ROM コントローラとで兼用になっています。SDRAM コントローラもしくは ROM コン
トローラでチャネルをイネーブルにすると、ピンが割り当てられます。もし SDRAM コント
ローラと ROM コントローラとで同じチャネルを同時にイネーブルにした場合、どちらのバス
サイクルでもチップセレクト信号 SDCS_CE [7:6] *はアサートされます。この場合メモリのデ
ータを保証できませんので注意してください。
CTS [0] *と RTS [0] *は割リ込み信号 INT [5:4] と兼用です。この CTS [0] *と RTS [0] *は
直接割リ込みコントローラにつながっています。したがってこの端子をシリアル機能として使
うときには割り込みをイネーブルにしないでください。そうしないと CTS [0] *や RTS [0] *
が変化するたびに割り込みが発生してしまいます。
3-10
第 3 章 端子
表 3.3.2 PCFG 制御レジスタでの設定
Pin/Function
Pin/Function
PCFG Control Bits
DMAREQ [3]
DMAACK [3]
SELDMA [3]
SELTMR [1]
SELTMR [0]
PIO [15]
PIO [14]
0
0
0
PIO [15]
TIMER [0]
0
0
1
TIMER [1]
PIO [14]
0
1
0
TIMER [1]
TIMER [0]
0
1
1
DMAREQ [3]
DMAACK [3]
1
x
x
DMAREQ [2]
DMAACK [2]
SELDMA [2]
PIO [13]
PIO [12]
0
DMAREQ [2]
DMAACK [2]
1
DMAREQ [1]
DMAACK [1]
SELDMA [1]
SELCS
PIO [11]
PIO [10]
0
0
SDCS_CE [7]*
SDCS_CE [6]*
0
1
DMAREQ [1]
DMAACK [1]
1
x
DMAREQ [0]
DMAACK [0]
PIO [9]
PIO [8]
0
DMAREQ [0]
DMAACK [0]
1
SELDMA [0]
DMADONE*
SELDONE
PIO [7]
0
0
TIMER [0]
0
1
DMADONE*
1
x
SELTMR [2]
RXD [1]
TXD [1]
SELSIO [1]
PIO [6]
PIO [5]
0
RXD [1]
TXD [1]
1
RXD [0]
TXD [0]
SELSIO [0]
PIO [4]
PIO [3]
0
RXD [0]
TXD [0]
1
CTS [1] *
RTS [1] *
PIO [2]
PIO [1]
1
0
0
PIO [2]
DSF
1
0
1
GDBGE*
SELSIOC [1]
SELDSF
CTS [1] *
RTS [1] *
1
1
0
GSDAO [1]
GPCST [3]
0
x
x
CTS [0] *
RTS [0] *
INT [5]
INT [4]
0
CTS [0] *
RTS [0] *
1
SELSIOC [0]
3-11
第 3 章 端子
3.4
初期設定信号
これらの信号は ADDR [19:2] 信号と兼用になっています。RESET*信号もしくは CLKEN 信号
の立ち上がり時に TX3927 に取り込み TX3927 の初期設定を行います。PLLM [1:0] は CLKEN 信
号の立ち上がりで取り込み、その他の信号は RESET*信号の立ち上がりで取り込みます。なお、こ
れらの信号はすべて TX3927 内部でプルアップされています。
またこれらの信号の中にはレジスタにラッチされるものもあります。表の一番右の欄はラッチし
たビットのリード/ライトを示します。CCFG、PCFG は「第 5 章 コンフィグレーション」を、
SDCCR0 は「第 8 章 SDRAM コントローラ」を、RCCR0 は「第 9 章 外部バスコントローラ」
を参照してください。
レジスタ/ビット R/W
初期設定信号
端 子
機 能
PLLM [1:0]
ADDR [3:2]
PLL Multiplier
内部のクロックジェネレータの逓倍値を指定します。リセット解
除後に変更することはできません。
00 : 設定禁止
01 : 2倍
10 : 設定禁止
11 : 16倍
CCFG/bit [5:4]
(Chip Configuration
register)
R
TLBOFF*
ADDR [19]
TLB Off
TLBをイネーブルにするかどうか設定します。
0 : ディセーブル(TLB Off)
1 : イネーブル(TLB On)
CCFG/bit [17]
(Chip Configuration
register)
R/W
(*1)
ENDIAN
ADDR [14]
ENDIAN
CPUのエンディアンを指定します。リセット解除後に変更するこ
とはできません。
CCFG/bit [2]
(Chip Configuration
register)
R
0 : Little Endian
1 : Big Endian
SYSCLKEN
ADDR [5]
System Clock Enable
システムクロック出力(SYSCLK)をイネーブルにします。
0 : ディセーブル
1 : イネーブル
PCFG/bit [27]
(Pin Configuration
register)
CHANHS*
ADDR [15]
Boot with Half Speed Bus
SYSCLK出力の周波数を設定します。ただしBME [1:0]=“10”の
ときにはSYSCLK出力は強制的にhalf bus speedになります。リ
セット解除後に変更することはできません。
0 : SYSCLK出力の周波数はhalf bus speed(CPUの1/4)
1 : SYSCLK出力の周波数はfull bus speed(CPUの1/2)
CCFG/bit [1]
(Chip Configuration
register)
SDRCLKEN
ADDR [4]
SDRAM Clock Enable
SDRAM用の出力クロックをイネーブルにします。
0 : ディセーブル
1 : イネーブル
PCFG/bit [26:22]
(Pin Configuration
register)
BME [1:0]
ADDR [9:8]
BOOT16*
ADDR [13]
Boot Memory Enable
ブートメモリのタイプを指定します。
RCCR0/bit [4:3]
もしくは
00 : SMROM
01 : DIMM Flash
10 : Half Speed ROM
11 : Full Speed ROM
SDCCR0/bit [19:18],
[17]
Boot with 16-bit Bus Width
ブートメモリのバス幅を指定します。
0 : 16 bits
1 : 32 bits
3-12
RCCR0/bit [7]
(ROM channel
control register 0)
R/W
R
R/W
R/W
R/W
第 3 章 端子
レジスタ/ビット R/W
初期設定信号
端 子
機 能
BAI*
ADDR [7]
Boot ACK* Input
ブートメモリのACK入力信号がイネーブルかどうかを指定しま
す。
0 : 外部ACK入力イネーブル
1 : 外部ACK入力ディセーブル
(ACKは内部で生成し、出力になります。)
RCCR0/bit [12]
(ROM channel
control register 0)
R/W
BBC
ADDR [6]
Boot Byte Control
ブートメモリのバイトイネーブル信号をBWE [3:0] にするかBE
[3:0] にするかを選択します。
RCCR0/bit [5]
(ROM channel
control register 0)
R/W
0 : BE [3:0] (Byte Enable)
1 : BWE [3:0] (Byte Write Enable)
PCICLKEN
ADDR [18]
PCI Clock Enable
PCI用の出力クロック(PCICLK)をイネーブルにします。
0 : ディセーブル (入力)
PCICLK [0] に外部からPCIクロックを入力してください。
1 : イネーブル (出力)
PCFG/bit [21:18]
(Pin Configuration
register)
R/W
PCI3*
ADDR [17]
PCI Clock divisor
PCI出力クロックの分周値を設定します。
0 : Gbusクロックの1/3
1 : Gbusクロックの1/2
CCFG/bit [12]
(Chip Configuration
register)
R/W
PCIXARB*
ADDR [11]
PCI Arbiter Control Setting
PCIのアービトレーションをTX3927で行うか外部のバスマスタ
で行うかを選択します。リセット解除後に変更することはできま
せん。
0 : 外部バスマスタがアービトレーションを実行
1 : TX3927のPCIコントローラがアービトレーションを実行
CCFG/bit [13]
(Chip Configuration
register)
R
(注 1) CCFG.TLBOFF はライトできますが、ブートで設定した値から変更しないでください。
(注 2) ADDR [16], [12], [10] はリセット中 Low レベルにならないようにしてください。
初期設定信号とアドレス,データバスとの対応表
ピン番号
初期設定信号
端子
197
TLBOFF*
ADDR [19]
196
PCICLKEN
ADDR [18]
179
PCI3
ADDR [17]
177
CHANHS*
ADDR [15]
175
ENDIAN
ADDR [14]
174
BOOT16*
ADDR [13]
172
PCIXARB*
ADDR [11]
169,167
BME [1:0]
ADDR [9:8]
166
BAI*
ADDR [7]
165
BBC
ADDR [6]
164
SYSCLKEN
ADDR [5]
9
SDRCLKEN
ADDR [4]
10,11
PLLM [1:0]
ADDR [3:2]
3-13
第 3 章 端子
3-14
第 4 章 アドレスマップ
第4章
4.1
アドレスマップ
メモリマッピング
TX3927 のアドレス空間は 4 G バイトです。
TX3927 のメモリマップは、TX39/H2 プロセッサコアのメモリ管理ユニット (MMU) によって
管理されます。表 4.1.1に TX3927 のアドレスマップの一覧を、図 4.1.1に TLB オフのときのアド
レスマップを図 4.1.2に TLB オンのときのアドレスマップを示します。
TX39/H2 プロセッサコアのメモリマップの詳細については、「32 ビット TX System RISC
TX39/H2 コアアーキテクチャ」を参照してください (02444D12AB)。
表 4.1.1 TX3927 アドレスマップ一覧
セグメント
kseg2
(予約)
Kseg2
(予約)
kseg2
kseg1
kseg0
Kuseg
(予約)
kuseg
バーチャル
アドレス
物理アドレス
0xFFFF_FFFF
0xFFFF_FFFF
0xFFFF_0000
0xFFFF_0000
0xFFFE FFFF
0xFFFE FFFF
0xFF00 0000
0xFF00 0000
0xFEFF_FFFF
0xFEFF_FFFF
0xC000_0000
0xC000_0000
0xBFFF_FFFF
0x1FFF_FFFF
0xA000_0000
0x0000_0000
0x9FFF_FFFF
0x1FFF_FFFF
0x8000_0000
0x0000_0000
0x7FFF_FFFF
0xBFFF_FFFF
0x7F00_0000
0xBF00_0000
0x7EFF_FFFF
0xBEFF_FFFF
0x0000_0000
0x4000_0000
キャッシュ可能な領域
モード
TLB オン
TLB オフ
キャッシュ可能
キャッシュ不可
カーネル
キャッシュ不可
キャッシュ不可
カーネル
キャッシュ可能
キャッシュ可能
カーネル
キャッシュ不可
キャッシュ不可
カーネル
キャッシュ可能
キャッシュ可能
カーネル
キャッシュ可能
キャッシュ不可
カーネル/ユーザー
キャッシュ可能
キャッシュ可能
カーネル/ユーザー
TX3927 では接続するメモリ (SDRAM, ROM など) や I/O デバイスのアドレスはメモリコ
ントローラ (SDRAMC, ROMC) で設定します。このとき設定するアドレスは物理アドレスで
す。
ブートメモリには ROMC のチャネル 0 または SDRAMC のチャネル 0 が割り当てられます。
リセット直後はどちらのチャネルもベースアドレスは 0x1FC0_0000 (物理アドレス) になっ
ていますので、ここから命令フェッチを開始します。
kseg2 の上位 (0xFF00_0000~0xFFFE_FFFF) は予約領域です。TX3927 の内蔵モジュール
のレジスタは、この領域に割り当てています。
4-1
第 4 章 アドレスマップ
仮想アドレススペース
物理アドレススペース
0xFFFF_FFFF
0xFFFF_FFFF
(予約領域)
kseg2
0xC000_0000
0xA000_0000
kseg1
0x8000_0000
kseg0
1024 MB
0xC000_0000
0x4000_0000
2048 MB
0x0000_0000
kuseg
アクセス不能
0x2000_0000
512 MB
0x0000_0000
図 4.1.1 メモリアドレスマップ (TLB オフ)
仮想アドレススペース
物理アドレススペース
0xFFFF FFFF
0xFFFF FFFF
0xFFFF 0000
64 KB
16 MB (予約)
0xFF00 0000
0xFFFF 0000
0xFF00 0000
3568 MB
カーネル予約
0xC000 0000
カーネル (キャッシュ可)
(kseg2)
0xA000 0000
カーネル (キャッシュ不可)
(kseg1)
任意
カーネル (キャッシュ可)
0x8000 0000
(kseg0)
0x4000 0000
予約
カーネル/
ユーザー (キャッシュ可)
0x0000 0000
カーネルブートおよび I/O
512 M キャッシュ可/
キャッシュ不可
(kuseg)
図 4.1.2 メモリアドレスマップ (TLB オン)
4-2
0x2000 0000
0x1FFF FFFF
0x0000 0000
第 4 章 アドレスマップ
レジスタマップ
4.2
アドレスが 0xFFFE_0000∼0xFFFE_FFFF のうち、表にないアドレスにはアクセスしないでく
ださい。バスがロックすることがあります。
表 4.2.1 TX3927 レジスタマップ (1/6)
アドレス
ニモニック
レジスタ
PIO
0xFFFE_F524
XPIOMASKEXT
PIO 外部割り込みマスクレジスタ
0xFFFE_F520
XPIOMASKCPU
PIO CPU 割り込みマスクレジスタ
0xFFFE_F51C
XPIOINT
PIO 割り込みコントロールレジスタ
0xFFFE_F518
XPIOPOL
PIO フラグ極性コントロールレジスタ
0xFFFE_F514
XPIOFLAG1
PIO フラグ 1 レジスタ
0xFFFE_F510
XPIOFLAG0
PIO フラグ 0 レジスタ
0xFFFE_F50C
XPIOOD
PIO オープンドレインコントロールレジスタ
0xFFFE_F508
XPIODIR
PIO 方向コントロールレジスタ
0xFFFE_F504
XPIODI
PIO 入力データレジスタ
0xFFFE_F500
XPIODO
PIO 出力データレジスタ
0xFFFE_F420
SIRFIFO1
受信 FIFO レジスタ 1
0xFFFE_F41C
SITFIFO1
送信 FIFO レジスタ 1
0xFFFE_F418
SIBGR1
ボーレートコントロールレジスタ 1
0xFFFE_F414
SIFLCR1
フローコントロールレジスタ 1
0xFFFE_F410
SIFCR1
FIFO コントロールレジスタ 1
0xFFFE_F40C
SICISR1
ステータス変化割り込みステータスレジスタ 1
0xFFFE_F408
SIDISR1
DMA/割り込みステータスレジスタ 1
0xFFFE_F404
SIDICR1
DMA/割り込みコントロールレジスタ 1
0xFFFE_F400
SILCR1
ラインコントロールレジスタ 1
0xFFFE_F320
SIRFIFO0
受信 FIFO レジスタ 0
0xFFFE_F31C
SITFIFO0
送信 FIFO レジスタ 0
0xFFFE_F318
SIBGR0
ボーレートコントロールレジスタ 0
0xFFFE_F314
SIFLCR0
フローコントロールレジスタ 0
0xFFFE_F310
SIFCR0
FIFO コントロールレジスタ 0
0xFFFE_F30C
SICISR0
ステータス変化割り込みステータスレジスタ 0
0xFFFE_F308
SIDISR0
DMA/割り込みステータスレジスタ 0
0xFFFE_F304
SIDICR0
DMA/割り込みコントロールレジスタ 0
0xFFFE_F300
SILCR0
ラインコントロールレジスタ 0
SIO1
SIO0
4-3
第 4 章 アドレスマップ
表 4.2.2 TX3927 レジスタマップ (2/6)
アドレス
ニモニック
レジスタ
TMR2
タイマリードレジスタ 2
0xFFFE_F2F0
TMTRR2
0xFFFE_F240
TMWTMR2

0xFFFE_F230
ウォッチドッグタイマモードレジスタ 2
(予約)
0xFFFE_F220
TMCCDR2
分周レジスタ 2
0xFFFE_F210
TMITMR2
インタバルタイマモードレジスタ 2

0xFFFE_F20C
(予約)
0xFFFE_F208
TMCPRA2
コンペアレジスタ A2
0xFFFE_F204
TMTISR2
タイマ割り込みステータスレジスタ 2
0xFFFE_F200
TMTCR2
タイマコントロールレジスタ 2
TMR1
0xFFFE_F1F0
タイマリードレジスタ 1
TMTRR1

0xFFFE_F140
(予約)
0xFFFE_F130
TMPGMR1
パルスジェネレータモードレジスタ 1
0xFFFE_F120
TMCCDR1
分周レジスタ 1
0xFFFE_F110
TMITMR1
インタバルタイマモードレジスタ 1
0xFFFE_F10C
TMCPRB1
コンペアレジスタ B1
0xFFFE_F108
TMCPRA1
コンペアレジスタ A1
0xFFFE_F104
TMTISR1
タイマ割り込みステータスレジスタ 1
0xFFFE_F100
TMTCR1
タイマコントロールレジスタ 1
TMTRR0
タイマリードレジスタ 0
TMR0
0xFFFE_F0F0

0xFFFE_F040
(予約)
0xFFFE_F030
TMPGMR0
パルスジェネレータモードレジスタ 0
0xFFFE_F020
TMCCDR0
分周レジスタ 0
0xFFFE_F010
TMITMR0
インタバルタイマモードレジスタ 0
0xFFFE_F00C
TMCPRB0
コンペアレジスタ B0
0xFFFE_F008
TMCPRA0
コンペアレジスタ A0
0xFFFE_F004
TMTISR0
タイマ割り込みステータスレジスタ 0
0xFFFE_F000
TMTCR0
タイマコントロールレジスタ 0
0xFFFE_E010
PDCR
パワーダウンコントロールレジスタ
0xFFFE_E00C
TEAR
タイムアウトエラーアドレスレジスタ
0xFFFE_E008
PCFG
ピンコンフィグレーションレジスタ
0xFFFE_E004
CRIR
チップリビジョン ID レジスタ
0xFFFE_E000
CCFG
チップコンフィグレーションレジスタ
CCFG
4-4
第 4 章 アドレスマップ
表 4.2.3 TX3927 レジスタマップ (3/6)
アドレス
ニモニック
レジスタ
PCIC
0xFFFE_D158
IPCICBE
イニシエータインダイレクトコマンド/バイトイネーブルレジスタ
0xFFFE_D154
IPCIDATA
イニシエータインダイレクトデータレジスタ
0xFFFE_D150
IPCIADDR
イニシエータインダイレクトアドレスレジスタ
0xFFFE_D14C
IOMAS
イニシエータ IO マッピングアドレスサイズレジスタ
0xFFFE_D148
MMAS
イニシエータメモリマッピングアドレスサイズレジスタ
0xFFFE_D144
ISCDP
イニシエータスペシャルサイクルデータポートレジスタ
0xFFFE_D140
IIADP
イニシエータ割り込みアクノリッジデータポートレジスタ
0xFFFE_D13C
ICRD
イニシエータコンフィグレーションデータレジスタ
0xFFFE_D138
ICA
イニシエータコンフィグレーションアドレスレジスタ
0xFFFE_D134
PCISTATIM
PCI ステータス割り込みマスクレジスタ
0xFFFE_D130
LBIM
ローカルバス割り込みマスクレジスタ
0xFFFE_D12C
LBSTAT
ローカルバスステータスレジスタ
0xFFFE_D128
LBC
ローカルバスコントロールレジスタ
0xFFFE_D124
MBAS
ターゲットメモリベースアドレスサイズレジスタ
0xFFFE_D120
IOBAS
ターゲット I/O ベースアドレスサイズレジスタ
0xFFFE_D11C
PBACS
PCI バスアービタカレントステートレジスタ
0xFFFE_D118
CPCIBGS
カレント PCI バスグラントステータスレジスタ
0xFFFE_D114
CPCIBRS
カレント PCI バスリクエストステータスレジスタ
0xFFFE_D110
BM
ブロークンマスタレジスタ
0xFFFE_D10C
PBAPMIM
PCI バスアービタ/パークマスタ割り込みマスクレジスタ
0xFFFE_D108
PBAPMS
PCI バスアービタ/パークマスタステータスレジスタ
0xFFFE_D104
PBAPMC
PCI バスアービタ/パークマスタコントロールレジスタ
0xFFFE_D100
REQ_TRACE
リクエストトレースレジスタ
0xFFFE_D0EA
PWMNGSR
パワーマネージメントサポートレジスタ
0xFFFE_D0E0
PWMNGR
パワーマネージメントレジスタ
0xFFFE_D0D0
TBL
ターゲットバースト長レジスタ
0xFFFE_D0CC
SC_BE
スペシャルサイクルバイトイネーブルレジスタ
0xFFFE_D0C8
SC_MSG
スペシャルサイクルメッセージレジスタ
0xFFFE_D0C4
TLBIOMAR
ターゲットローカルバス I/O マッピングアドレスレジスタ
0xFFFE_D0C0
TLBMMAR
ターゲットローカルバスメモリマッピングアドレスレジスタ
0xFFFE_D0BC
TLBIAP
ターゲットローカルバス IFIFO アドレスレジスタ
0xFFFE_D0B8
TLBOAP
ターゲットローカルバス OFIFO アドレスレジスタ
0xFFFE_D0A8
PCIRRDT
PCI リードリトライディスカードタイマレジスタ
0xFFFE_D0A4
PCIRRT_CMD
PCI リードリトライタイマコマンドレジスタ
0xFFFE_D0A0
PCIRRT
PCI リードリトライタグレジスタ
0xFFFE_D09C
TCCMD
ターゲットカレントコマンドレジスタ
0xFFFE_D098
TIM
ターゲット割り込みマスクレジスタ
0xFFFE_D094
TSTAT
ターゲットステータスレジスタ
0xFFFE_D090
TC
ターゲットコントロールレジスタ
0xFFFE_D068
ILBIOMA
イニシエータローカルバス I/O マッピングアドレスレジスタ
0xFFFE_D064
ILBMMAR
イニシエータローカルバスメモリマッピングアドレスレジスタ
0xFFFE_D060
IPBIOMAR
イニシエータ PCI バス I/O マッピングアドレスレジスタ
0xFFFE_D05C
IPBMMAR
イニシエータ PCI バスメモリマッピングアドレスレジスタ
0xFFFE_D04C
RRT
リトライ/リコネクトタイマレジスタ
0xFFFE_D048
IIM
イニシエータ割り込みマスクレジスタ
0xFFFE_D044
ISTAT
0xFFFE_D040
0xFFFE_D03F
イニシエータステータスレジスタ
—
IL
(予約)
PCI 割り込みラインレジスタ
4-5
第 4 章 アドレスマップ
表 4.2.4 TX3927 レジスタマップ (4/6)
アドレス
ニモニック
レジスタ
0xFFFE_D03E
IP
PCI 割り込みピンレジスタ
0xFFFE_D03D
MG
最小グラントレジスタ
0xFFFE_D03C
ML
最大レイテンシレジスタ
0xFFFE_D037
CAPPTR
0xFFFE_D030
ケイパビリティポインタ
—
0xFFFE_D02E
SSVID
0xFFFE_D02C
SVID
OxFFFE_D028
(予約)
サブシステムベンダーID レジスタ
システムベンダーID レジスタ
—
(予約)
0xFFFE_D014
MBA
ターゲットメモリベースアドレスレジスタ
0xFFFE_D010
IOBA
ターゲット I/O ベースアドレスレジスタ
0xFFFE_D00F
CLS
キャッシュラインサイズレジスタ
0xFFFE_D00E
MLT
マスタレイテンシタイマレジスタ
0xFFFE_D00D
HT
ヘッダタイプレジスタ
0xFFFE_D00C
—
(予約)
0xFFFE_D00B
RID
リビジョン ID レジスタ
0xFFFE_D00A
RLPI
レジスタレベルプログラミングインタフェースレジスタ
0xFFFE_D009
SCC
サブクラスコードレジスタ
0xFFFE_D008
CC
クラスコードレジスタ
0xFFFE_D006
PCICMD
PCI コマンドレジスタ
0xFFFE_D004
PCISTAT
PCI ステータスレジスタ
0xFFFE_D002
VID
ベンダ ID レジスタ
0xFFFE_D000
DID
デバイス ID レジスタ
0xFFFE_C0A0
IRCSR
割り込みカレントステータレジスタ
0xFFFE_C080
IRSSR
割り込みソースステータスレジスタ
0xFFFE_C060
IRSCR
割り込みステータスコントロールレジスタ
0xFFFE_C040
IRIMR
割り込みマスクレジスタ
0xFFFE_C02C
IRILR7
割り込みレベルレジスタ 7
0xFFFE_C028
IRILR6
割り込みレベルレジスタ 6
0xFFFE_C024
IRILR5
割り込みレベルレジスタ 5
0xFFFE_C020
IRILR4
割り込みレベルレジスタ 4
0xFFFE_C01C
IRILR3
割り込みレベルレジスタ 3
0xFFFE_C018
IRILR2
割り込みレベルレジスタ 2
0xFFFE_C014
IRILR1
割り込みレベルレジスタ 1
0xFFFE_C010
IRILR0
割り込みレベルレジスタ 0
0xFFFE_C008
IRCR1
割り込み制御モードレジスタ 1
0xFFFE_C004
IRCR0
割り込み制御モードレジスタ 0
0xFFFE_C000
IRCER
割り込み制御イネーブルレジスタ
IRC
4-6
第 4 章 アドレスマップ
表 4.2.5 TX3927 レジスタマップ (5/6)
アドレス
ニモニック
レジスタ
DMA
0xFFFE_B0A8
—
(予約)
0xFFFE_B0A4
MCR
DMA マスタコントロールレジスタ
0xFFFE_B0A0
TDHR
DMA 一時データ保持レジスタ
0xFFFE_B09C
DBR7
DMA データバッファレジスタ 7
0xFFFE_B098
DBR6
DMA データバッファレジスタ 6
0xFFFE_B094
DBR5
DMA データバッファレジスタ 5
0xFFFE_B090
DBR4
DMA データバッファレジスタ 4
0xFFFE_B08C
DBR3
DMA データバッファレジスタ 3
0xFFFE_B088
DBR2
DMA データバッファレジスタ 2
0xFFFE_B084
DBR1
DMA データバッファレジスタ 1
0xFFFE_B080
DBR0
DMA データバッファレジスタ 0
0xFFFE_B07C
CSR3
DMA ステータスレジスタチャネル 3
0xFFFE_B078
CCR3
DMA コントロールレジスタチャネル 3
0xFFFE_B074
DAI3
DMA デスティネーションアドレスインクリメントレジスタチャネル 3
0xFFFE_B070
SAI3
DMA ソースアドレスインクリメントレジスタチャネル 3
0xFFFE_B06C
CNAR3
DMA カウントレジスタチャネル 3
0xFFFE_B068
DAR3
DMA デスティネーションアドレスレジスタチャネル 3
0xFFFE_B064
SAR3
DMA ソースアドレスレジスタチャネル 3
0xFFFE_B060
CHAR3
DMA チェインアドレスレジスタチャネル 3
0xFFFE_B05C
CSR2
DMA ステータスレジスタチャネル 2
0xFFFE_B058
CCR2
DMA コントロールレジスタチャネル 2
0xFFFE_B054
DAI2
DMA デスティネーションアドレスインクリメントレジスタチャネル 2
0xFFFE_B050
SAI2
DMA ソースアドレスインクリメントレジスタチャネル 2
0xFFFE_B04C
CNAR2
DMA カウントレジスタチャネル 2
0xFFFE_B048
DAR2
DMA デスティネーションアドレスレジスタチャネル 2
0xFFFE_B044
SAR2
DMA ソースアドレスレジスタチャネル 2
0xFFFE_B040
CHAR2
DMA チェインアドレスレジスタチャネル 2
0xFFFE_B03C
CSR1
DMA ステータスレジスタチャネル 1
0xFFFE_B038
CCR1
DMA コントロールレジスタチャネル 1
0xFFFE_B034
DAI1
DMA デスティネーションアドレスインクリメントレジスタチャネル 1
0xFFFE_B030
SAI1
DMA ソースアドレスインクリメントレジスタチャネル 1
0xFFFE_B02C
CNAR1
DMA カウントレジスタチャネル 1
0xFFFE_B028
DAR1
DMA デスティネーションアドレスレジスタチャネル 1
0xFFFE_B024
SAR1
DMA ソースアドレスレジスタチャネル 1
0xFFFE_B020
CHAR1
DMA チェインアドレスレジスタチャネル 1
0xFFFE_B01C
CSR0
DMA ステータスレジスタチャネル 0
0xFFFE_B018
CCR0
DMA コントロールレジスタチャネル 0
0xFFFE_B014
DAI0
DMA デスティネーションアドレスインクリメントレジスタチャネル 0
0xFFFE_B010
SAI0
DMA ソースアドレスインクリメントレジスタチャネル 0
0xFFFE_B00C
CNAR0
DMA カウントレジスタチャネル 0
0xFFFE_B008
DAR0
DMA デスティネーションアドレスレジスタチャネル 0
0xFFFE_B004
SAR0
DMA ソースアドレスレジスタチャネル 0
0xFFFE_B000
CHAR0
DMA チェインアドレスレジスタチャネル 0
4-7
第 4 章 アドレスマップ
表 4.2.6 TX3927 レジスタマップ (6/6)
アドレス
ニモニック
レジスタ
ROMC
0xFFFE_901C
RCCR7
ROM チャネルコントロールレジスタ 7
0xFFFE_9018
RCCR6
ROM チャネルコントロールレジスタ 6
0xFFFE_9014
RCCR5
ROM チャネルコントロールレジスタ 5
0xFFFE_9010
RCCR4
ROM チャネルコントロールレジスタ 4
0xFFFE_900C
RCCR3
ROM チャネルコントロールレジスタ 3
0xFFFE_9008
RCCR2
ROM チャネルコントロールレジスタ
0xFFFE_9004
RCCR1
ROM チャネルコントロールレジスタ 1
0xFFFE_9000
RCCR0
ROM チャネルコントロールレジスタ 0
0xFFFE_8034
SDCSMRS2
SGRAM ロードカラーレジスタ
0xFFFE_8030
SDCSMRS1
SGRAM ロードマスクレジスタ
0xFFFE_802C
SDCCMD
SDRAM コマンドレジスタ
0xFFFE_8028
SDCTR3
SDRAM タイミングレジスタ 3 (SMROM 用)
0xFFFE_8024
SDCTR2
SDRAM タイミングレジスタ 2 (DIMM Flash 用)
0xFFFE_8020
SDCTR1
SDRAM タイミングレジスタ 1 (SDRAM/SGRAM 用)
0xFFFE_801C
SDCCR7
SDRAM コントロールレジスタチャネル 7
0xFFFE_8018
SDCCR6
SDRAM コントロールレジスタチャネル 6
0xFFFE_8014
SDCCR5
SDRAM コントロールレジスタチャネル 5
0xFFFE_8010
SDCCR4
SDRAM コントロールレジスタチャネル 4
0xFFFE_800C
SDCCR3
SDRAM コントロールレジスタチャネル 3
0xFFFE_8008
SDCCR2
SDRAM コントロールレジスタチャネル 2
0xFFFE_8004
SDCCR1
SDRAM コントロールレジスタチャネル 1
0xFFFE_8000
SDCCR0
SDRAM コントロールレジスタチャネル 0
SDRAMC
(注)
上記のリストに挙げたすべてのアドレスマッピングは、BIG ENDIAN アドレスフォーマティング
です。
4-8
第 5 章 コンフィグレーション
第5章
コンフィグレーション
この章では、0xFFFE_E000 ∼ 0xFFFE_E00F にマッピングされている 4 つのレジスタについて説
明します。
5.1
チップコンフィグレーションレジスタ (CCFG) 0xFFFE_E000
TX3927 にはソフトウエアで設定可能な機能と端子があります。これらの設定は、チップコンフ
ィグレーションレジスタ (CCFG) とピンコンフィグレーションレジスタ (PCFG) およびブート
端子によるブートコンフィグレーションにより行います。
31
19
0
18
1
17
16
TLBOFF
BEOW
R/W
TLBOFF
15
WR
14
TOE
13
XArb
R/W
0
R/W
0
PCIXARB*
R
ビット
ニモニック
17
TLBOFFB
16
BEOW
15
12
11
10
PCI3 PSNP PPRI
R/W
PCI3*
R/W
0
9
8
7
0
6
0
R/W
0
5
4
PLLM
3
1
R
PLLM
フィールド名
Endian
2
1
Half
R
R
Endian
R/W : タイプ
: 初期値
0
0
ACE
Hold
R/W : タイプ
1
: 初期値
説 明
TLB オフ
TLB Off
TLB をイネーブルにするかどうか設定します。
リセット時に、ADDR [19] の値がラッチされます。
このビットはライトできますが、リセット後に値を変更しないでください。
0: TLB オフ (ディセーブル)
1: TLB オン (イネーブル)
バスエラー
Bus Error on Write
0: このビットをクリアします。
1: TX39/H2 コアのライトオペレーションによってバスエラーが発生したことを示
します。
WR
ウォッチドッグ
タイマリセット
Watchdog Timer for Reset/NMI
TMR2 によるウォッチドッグタイマ割り込み発生時の動作を指定します。
0: ノンマスカブル割り込みが発生します。
1: リセットがかかります。
14
TOE
タイムアウト
バスエラー有効
Timeout Enable for Bus Error
バスエラータイムアウト機能を有効にします。
0: タイムアウト機能をディセーブルにします。
1: タイムアウト機能をイネーブルにします。
詳細は「7.2.1 バスエラー」を参照してください。
13
PCIXARB
PCI アービタ
Internal or External PCI arbiter.
PIC のアービタとして、内部アービタを使うかどうか示します。
リセット時の ADDR [11] の値がラッチされます。
0: 外部アービタ
1: 内部アービタ
12
PCI3B
PCI クロック分周
PCI Clock Divider Control
PCI コントローラクロックの周波数を指定します。
リセット時の ADDR [17] の値がラッチされます。
0: PCI クロックは G-Bus クロックの 1/3
1: PCI クロックは G-Bus クロックの 1/2
図 5.1.1 チップコンフィグレーションレジスタ (1/2)
5-1
第 5 章 コンフィグレーション
ビット
ニモニック
フィールド名
説 明
11
PSNP
PCI スヌープ
10
PPRI
PCI アービトレー Select PCI Arbitration Priority
ション
PCI と DMAC の優先順位を指定します。
0: アービトレーションで DMA は PCI に優先します。
プライオリティ
1: 設定禁止
5:4
PLLM
PLL マルチプライ
PLL Multiplier
PLL の逓倍値を示します。リセット時の ADDR [3 : 2] の値がラッチされます。
PLLM [1] を“1”にしたときは、接続できる水晶発振子は 6.25~8.33 MHz です。
PLLM [1] を“0”にしたときは、XIN に水晶発振器をつけてクロック入力してくだ
さい。このとき XOUT はオープンにしてください。
00: 設定禁止
01: 2 倍
10: 設定禁止
11: 16 倍
2
ENDIAN
エンディアン
Current Endian Setting of G-Bus
エンディアンを示します。リセット時の ADDR [14] の値がラッチされます。
PCI Bus Request Snoop
PCI がバスマスタであるときの TX39/H2 コアのキャッシュスヌープ機能を有効にし
ます。ただし、データキャッシュをライトバックで使用するときはスヌープ機能を
ディセーブルにしてください。
0: キャッシュスヌープ機能をディセーブルにします。
1: キャッシュスヌープ機能をイネーブルにします。
0: LITTLE ENDIAN
1: BIG ENDIAN
このビットの設定は、TX39/H2 コアのステータスレジスタ中の RE (エンディアン反
転) ビットをセットしても変わりません。
1
HALF
0
ACEHOLD
(注)
ハーフスピード
System Clock Half-Speed Mode
SYSCLK 出力の周波数を示します。
リセット時の ADDR [15] および ADDR [9 : 8] の値によって決まります。
ADDR [15] が 0 または ADDR [9 : 8] が 10 のときはハーフスピードになります。
それ以外はフルスピードになります。
0: フルスピード (G-Bus と同じ周波数)
1: ハーフスピード (G-Bus の 1/2 の周波数)
ACE ホールド
ACE* Address Hold
ACE*デアサート後、アドレスを 1 クロックホールドするかどうかを指定します。
0: アドレスは、ACE*と同じクロックで切り替わります。このモードでは、1 ns の
アドレスホールド時間が保証されています。
1: アドレスは、ACE*の立ち上がり後に 1 クロックだけ保持されます。
未定義ビットに対しては、示してある値を書き込んでください。
図 5.1.2 チップコンフィグレーションレジスタ (2/2)
5-2
第 5 章 コンフィグレーション
5.1.1
チップリビジョン ID レジスタ (CRIR) 0xFFFE_E004
リビジョン ID レジスタは TX3927 のリビジョンを示します。
31
16
PCODE
: タイプ
: 初期値
R
0x3927
15
12
11
8
7
4
3
0
MJERREV
MINEREV
MJREV
MINREV
R
0
R
0
R

R

ビット
ニモニック
フィールド名
説 明
31 : 16
PCODE
プロダイトコード
Product Code (固定値 : 0x3927)
製品番号を表します。
15 : 12
MJERREV
付加コード (主)
Major Extra Code Implementation Revision (固定値 : 0x0)
付加コード (主) を表します。
11 : 8
MINEREV
付加コード (副)
Minor Extra Code Implementation Revision (固定値 : 0x0)
付加コード (副) を表します。
7:4
MJREV
リビジョン (主)
Major Implementation Revision
リビジョン (主) を表します。値は当社技術部までお問い合わせください。
3:0
MINREV
リビジョン (副)
Minor Implementation Revision
リビジョン (副) を表します。値は当社技術部までお問い合わせください。
図 5.1.3 チップリビジョン ID レジスタ
5-3
: タイプ
: 初期値
第 5 章 コンフィグレーション
ピンコンフィグレーションレジスタ (PCFG) 0xFFFE_E008
5.1.2
TX3927 にはソフトウエアで設定可能な機能と端子があります。これらのセットアップは、
チップコンフィ グレー ション レジス タ (CCFG) と ピンコ ンフィグレ ーショ ンレ ジスタ
(PCFG) 内で行われます。ピンマルチプレクスについては「3.3 ピンマルチプレクス」も参照
してください。
31
28
26
22
21
18
SYSCLKEN
SDRCLKEN
PCICLKEN
R
R/W

R/W

R/W

15
14
SELSIOC
13
12
SELSIO
R/W
00
ビット
27
0
11
R/W
00
ニモニック
9
8
7
4
17
R/W
0
3
R/W : タイプ
: 初期値
0
0
SELTMR
SELDONE
INTDMA
SELDMA
R/W
00
R/W
0
R/W
0000
R/W
0000
フィールド名
16
SELCS SELDSF
: タイプ
: 初期値
説 明
27
SYSCLKEN
システムクロック System Clock Enable
イネーブル
SYSCLK 端子の出力をイネーブルにします。リセットの立ち上がりで ADDR [5] の
値がラッチされます。リセット後、このビットは CPU によってリード/ライト可能
になります。
1: SYSCLK がイネーブルになります。
0: SYSCLK がディセーブルになります。
26 : 22
SDRCLKEN
[4 : 0]
SDRAM クロック
イネーブル
SDRAM Clock Enable
SDCLK [4 : 0] 端子からの SDRAM クロック出力を個々にイネーブルにします。すべ
てのビットにリセットの立ち上がりで ADDR [4] の値がラッチされます。このビッ
トは CPU によって個々にリード/ライト可能になります。
1: SDRCLK がイネーブルになります。
0: SDRCLK がディセーブルになります。
21 : 18
PCICLKEN
[3 : 0]
PCI クロック
イネーブル
PCI Clock Enable
PCICLK [3 : 0] 端子からの PCI クロック出力を個々にイネーブルにします。すべて
のビットにリセットの立ち上がりで ADDR [18] の値がラッチされます。リセット
後、これらのビットは CPU により個々にリード/ライト可能になります。
1: PCICLK がイネーブルになります。
0: PCICLK がディセーブルになります。
17
SELCS
CS 選択
Select DMA/SDCS_CE Function (初期値 0)
SELDMA [1] とともに使用して、DMAREQ [1] /PIO [11] /SDCS_CE [7] と DMAACK
[1] /PIO [10] /SDCS_CE [6] の機能を選択します。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
16
SELDSF
DSF 選択
Select DSF Function (初期値 0)
SELSIOC [1] とともに使用して、RTS* [1] /PIO [1] /DSF 端子の機能を選択します。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
SELSIOC [1 : 0]
SIO
コントロール選択
Select SIO Control Pins (初期値 00)
SELSIOC [1] :SELDSF とともに使用して、CTS [1] /PIO [2] と RTS [1] /PIO [1] /DSF
の機能を選択します。
SELSIOC [0] :SELDSF とともに使用して、CTS [0] /INT [5] と RTS [0] /INT [4] の
機能を選択します。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
15 : 14
図 5.1.4 ピンコンフィグレーションレジスタ (1/2)
5-4
第 5 章 コンフィグレーション
ビット
ニモニック
フィールド名
説 明
13 : 12
SELSIO [1 : 0]
SIO
ファンクション
選択
Select SIO/PIO function select (初期値 00)
SELSIO [1] : RXD [1] /PIO [6] と TXD [1] /PIO [5] の機能を選択します。
SELSIO [0] : RXD [0] /PIO [4] と TXD [0] /PIO [3] の機能を選択します。
0: PIO 端子
1: SIO 端子
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
11 : 9
SELTMR [2 : 0]
TMR
ファンクション
選択
Select TIMER/PIO Function Select (初期値 000)
SELTMR [2] :SELDONE とともに使用して、DMADONE/TIMER [0] /PIO [7] の機能
を選択します。
SELTMR [1] :SELDMA [3] とともに使用して、DMAREQ [3] /TIMER [1] /PIO [15] の
機能を選択します。
SELTMR [0] : SELDMA [3] とともに使用して、DMAACK [3] /TIMER [0] /PIO [14] の
機能を選択します。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
8
SELDONE
DMADONE
選択
Select DMADONE*/PIO (初期値 0)
SELTMR [2] とともに使用して、DMADONE/TIMER [0] /PIO [7] の機能を選択しま
す。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
7:4
INTDMA [3 : 0]
内部 DMA
リクエスト選択
Internal/External DMA Source connection (初期値 0000)
DMA 要求ソースとして外部 I/O を使うか、内部 SIO を使用するか指定します。
INTDMA [3] :
0: DMAREQ/ACK [3] は外部端子に接続します。
1: DMAREQ/ACK [3] は SIO [1]の SITXDREQ/ACK に接続します。
INTDMA [2] :
0: DMAREQ/ACK [2] は外部端子に接続します。
1: DMAREQ/ACK [2] は SIO [0]の SITXDREQ/ACK に接続します。
INTDMA [1] :
0: DMAREQ/ACK [1] は外部端子に接続します。
1: DMAREQ/ACK [1] は SIO [1]の SIRXDREQ/ACK に接続します。
INTDMA [0] :
0: DMAREQ/ACK [0] は外部端子に接続します。
1: DMAREQ/ACK [0] は SIO [0]の SIRXDREQ/ACK に接続します。
3:0
(注)
SELDMA [3 : 0]
DMA
ファンクション
選択
Select DMA/PIO/TIMER Function (初期値 0000)
SELDMA [3] : SELTMR [1 : 0] とともに使用して、DMAREQ [3] /PIO [15] /TIMER [1]
と DMAACK [3] /PIO [14] /TIMER [0] の機能を選択します。
SELDMA [2] : DMAREQ [2] /PIO [13] と DMAACK [2] /PIO [12] の機能を選択しま
す。
SELDMA [1] : SELCS とともに使用して、DMAREQ [1] /PIO [11] /SDCS_CE [7] と
DMAACK [1] /PIO [10] /SDCS_CE [6] の機能を選択します。
SELDMA [0] : DMAREQ [0] /PIO [9] と DMAACK [0] /PIO [8] の機能を選択します。
マルチプレクス機能の詳細については、「3.3 ピンマルチプレクス」および表 5.1.1
を参照してください。
未定義ビットに対しては、示してある値を書き込んでください。
図 5.1.5 ピンコンフィグレーションレジスタ (2/2)
5-5
第 5 章 コンフィグレーション
表 5.1.1. PCFG 制御レジスタでの設定
Pin/Function
Pin/Function
PCFG Control Bits
DMAREQ [3]
DMAACK [3]
SELDMA [3]
SELTMR [1]
SELTMR [0]
PIO [15]
PIO [15]
TIMER [1]
TIMER [1]
DMAREQ [3]
PIO [14]
TIMER [0]
PIO [14]
TIMER [0]
DMAACK [3]
0
0
0
0
1
0
0
1
1
x
0
1
0
1
x
DMAREQ [2]
DMAACK [2]
SELDMA [2]
PIO [13]
DMAREQ [2]
PIO [12]
DMAACK [2]
0
1
DMAREQ [1]
DMAACK [1]
SELDMA [1]
SELCS
PIO [11]
SDCS_CE [7]
DMAREQ [1]
PIO [10]
SDCS_CE [6]
DMAACK [1]
0
0
1
0
1
x
DMAREQ [0]
DMAACK [0]
SELDMA [0]
PIO [9]
DMAREQ [0]
PIO [8]
DMAACK [0]
0
1
DMADONE*
SELDONE
SELTMR [2]
PIO [7]
TIMER [0]
DMADONE*
0
0
1
0
1
x
RXD [1]
TXD [1]
SELSIO [1]
PIO [6]
RXD [1]
PIO [5]
TXD [1]
0
1
RXD [0]
TXD [0]
SELSIO [0]
PIO [4]
RXD [0]
PIO [3]
TXD [0]
0
1
CTS* [1]
RTS* [1]
GDBGE*
SELSIOC [1]
SELDSF
PIO [2]
PIO [2]
CTS* [1]
GSDAO [1]
PIO [1]
DSF
RTS* [1]
GPCST [3]
1
1
1
0
0
0
1
x
0
1
0
x
CTS* [0]
RTS* [0]
SELSIOC [0]
INT [5]
CTS* [0]
INT [4]
RTS* [0]
0
1
5-6
第 5 章 コンフィグレーション
5.1.3
タイムアウトエラーアドレスレジスタ (TEAR) 0xFFFE_E00C
31
16
BEAR
: タイプ
: 初期値
R
不定
15
0
BEAR
: タイプ
: 初期値
R
不定
ビット
ニモニック
31 : 0
BEAR
フィールド名
バスエラー
アドレス
説 明
Bus Error Address
バスエラーが発生するとバス上のアドレスがこのレジスタにラッチされます。
図 5.1.6 タイムアウトエラーアドレスレジスタ
5-7
第 5 章 コンフィグレーション
5-8
第 6 章 クロック
第6章
クロック
クロックジェネレータ
6.1
TX3927 CPU クロックは、外部クロック入力の周波数を逓倍した周波数になります。逓倍値と
しては 2 倍、または 16 倍を選択できます。この逓倍値の選択は、ブート信号 PLLM [1 : 0] (ADDR
[3 : 2]) で行います。CLKEN 信号の立ち上がりで PLLM [1 : 0] が “01” のとき 2 倍に、“11”のとき
は 16 倍になります。
TX3927 には、内部に 5 系統のクロック (CORECLK, GBUSCLK, SYSCLK, PCICLK, IMCLK)
があります。クロックの周波数および機能を表 6.1.1に示します。
表 6.1.1 TX3927 内部クロックの周波数および機能
動作周波数 (fc = (外部入力クロ
ック周波数) × (逓倍値) )
クロック
フルスピード ハーフスピード
バスモード
バスモード
機能
使用ブロック
TX39/H2 CPU コアの TX39/H2 コア
基準クロックです。
CORECLK
fc
fc
GBUSCLK
fc/2
fc/2
G-Bus の基準クロック DMAC、 SDRAMC
です。
IRC、 EBIF (一部)
ROMC (一部)
PCIC (G-Bus インタフ
ェース)
SYSCLK
fc/2
fc/4
ハ ー フ ス ピ ー ド バ ス ROMC、EBIF (一部)
モードの基準となる
G-Bus の ク ロ ッ ク で
す。
PCI バスの基準クロッ PCIC (PCI バスインタ
クです。
フェース)
PCICLK
PCICLKEN = High
PCICLKEN = Low
IMCLK
6.2
PCI3* = High
fc/6
fc/6
PCI3* = Low
fc/4
PCICLK 入力
fc/4
PCICLK 入力
fc/4
fc/4
IM-Bus の基準クロッ SIO、TMR
クです。
システムコントロールクロック (SYSCLK)
TX39/H2 コアの 内部ク ロック がこの 信号を 生成します。システムコン トロー ルクロ ック
(SYSCLK) は、TX39/H2 プロセッサコアの周波数の 1/2 または 1/4 で動作し、システムコントロー
ルインタフェース信号のタイミングに使用されます。
SYSCLK の周波数を決めるブート設定の値は、内部クロックに同期して TX3927 内部に取り込
まれます。したがって設定をハーフスピードにした場合、数クロック間フルスピードの早さで
SYSCLK が動作したあとハーフスピードに変わることがありますので注意しくてださい。
6-1
第 6 章 クロック
6.3
パワーダウンモード
TX3927 には、PLL も含め内部のクロックを止めてスタンバイ状態になるパワーダウンモードが
あります。
6.3.1
動作
パワーダウン時にはクロックジェネレータで作られる内部クロックが止まるため、パワーダウン
動作を制御するクロックとしては外部から入力されるクロックをそのまま使用します。パワーダウ
ンを制御するクロックは、クロックジェネレータ内の PLL によって逓倍された周波数ではない点
注意してください。パワーダウンコントロールレジスタ (PDCR) のパワーダウントリガビット
(PDN) がセットされると、パワーダウン回路は XIN クロックサイクルで 20 クロック (16 逓倍のと
き、2 逓倍のときは 132 クロック) 後に CLKEN コントロール入力を内部でデアサートして、クロ
ック出力を停止します。CLKEN 信号をデアサートしてから、さらに XIN クロックサイクルで 16
サイクル (16 逓倍のとき、2 逓倍のときは 128 クロック) 後に PLL は停止します。外部デバイスに
よって供給された場合の PCI クロックと外部入力クロックを除くすべてのチップ上のクロックが
停止します。すべてのクロックは、いったん停止されると、NMI 信号を含む指定した外部割り込
み端子で割り込みをかけるまで止まったままです。どの外部割り込みをパワーダウンからの復帰に
使うかは、パワーダウンコントロールレジスタのパワーダウンマスクビット (PDCR.PDNMSK [6 :
0]) で行います。各ビットが割り込みごとに対応していて、“1” にセットした割り込みだけがパワー
ダウンからの復帰のための割り込みとしてイネーブルになります。割り込みが発生すると、パワー
ダウン回路は PLL をオンにします。パワーダウンコントロールレジスタ (PDCR) のパワーアップ
タイムカウンタ値 (PUTCV) で指定された時間だけ待ってから、パワーダウンロジックは内部クロ
ック出力をイネーブルにし、システムはノーマルモードに戻ります。表 6.3.1にパワーダウンにか
かる時間を SDCLK のサイクル数で示します。また、表 6.3.2にパワーアップにかかる時間 (PCVTV
のカウント値に加える値) を外部入力クロックのサイクル数で示します。
(注)
ソフト設定により簡単にパワーダウンモードに入ってクロックがディセーブルになりま
すので注意してください。いったんパワーダウンモードに入ると復帰するのは簡単ではあ
りません。もしソフトウエアですべての割り込み入力をディセーブルにしてあると、特殊
なリセットシーケンスやパワーサイクル以外は、パワーダウンモードから復帰できなくな
ります。リセットサイクルでは、パワーアップリセットと同じリセットタイミングが必要
になります。パワーダウントリガビットの設定後に割り込みを受け付けると、パワーダウ
ンシーケンスからクロックが動作している正常な状態に戻り、PLL がディセーブルになる
前にウェイクアップイベントが発生すると、3 クロック後にクロックがイネーブルになり
ます。
PLLM [1 : 0]
出力クロックの発振が止まるまでのクロック数
01
132 (Xin クロック数) + 12~24 (CORECLK 数)
11
20 (Xin クロック数) + 12~24 (CORECLK 数)
表 6.3.1 パワーダウン時間
PLLM [1 : 0]
出力クロックが発振するまで
01
PUTCV (Xin クロック数) + 24 (CORECLK 数)
11
PUTCV (Xin クロック数) + 24 (CORECLK 数)
表 6.3.2 パワーアップ時間
パワーダウンモードへの移行はソフトウエアで行います。このソフトウエアは、パワーダウンお
よびパワーアップ遷移時にバスサイクルを実行しないよう、キャッシュから実行するようにしてく
ださい。
6-2
第 6 章 クロック
6.3.2
レジスタ
パワーダウンコントロールレジスタ (PDCR) は、パワーダウン処理をコントロールするため
に使用します。このレジスタのビット 16 はパワーダウントリガビット (PDN) です。これはリ
セットにより “0” にクリアされます。その後 “0” から “1” にセットされるとパワーダウンシー
ケンスが開始されます。このビットは自動的にはクリアされないため、再度パワーダウンシー
ケンスを開始する前にソフトウエアにてクリアしてください。ビット [23 : 17] は割り込み入力
端子のパワーダウンマスクビット (PDNMSK [6 : 0] ) です。ビット 17 は外部割り込み 0 に、
ビット 18 は外部割り込み 1 にという具合に各割り込みに対応しています。
ビットの値が “0” の
ときは、割り込み端子はパワーダウンからの復帰を行えません。このビットが “1” のときは、
パワーダウンからの復帰を行えます。ビット [15 : 0] は、PLL がイネーブルになってからクロ
ックジェネレータからの内部クロック出力がアクティブになるまでの待ち時間を設定します。
ただし実際の待ち時間は、このレジスタ内の値に XIN クロックで 24 クロックを加えた値にな
ります。
6-3
第 6 章 クロック
6.3.2.1
パワーダウンコントロールレジスタ (PDCR)
31
24
0xFFFE_E010
23
0
PDNMSK
R/W
0x7F
15
16
PDN
R/W : タイプ
0
: 初期値
0
PUTCV
: タイプ
: 初期値
R/W
0
ビット
23 : 17
ニモニック
フィールド名
PDNMSK [6 : 0] パワーダウン
マスク
説 明
Power Down Mask ビット (初期値 0x7F)
パワーダウンモードから復帰するために使用する外部割り込み信号を指定します。
1 ビットずつ割り込み要因が割り当ててあり、そのビットを “1” にセットすると、パ
ワーダウンモードからの復帰のための割り込みとして使えます。
PDNMSK [6] = NMI
PDNMSK [5] = INT [5]
PDNMSK [4] = INT [4]
PDNMSK [3] = INT [3]
PDNMSK [2] = INT [2]
PDNMSK [1] = INT [1]
PDNMSK [0] = INT [0]
1: 割り込みイネーブル
0: 割り込みディセーブル
16
PDN
15 : 0
PUTCV
(注)
パワーダウン
トリガ
Power Down Trigger (初期値 0)
パワーダウンシーケンスのトリガビットです。リセット時に 0 にクリアされ、0 か
ら 1 に遷移するとパワーダウンシーケンスに入ります。
パワーダウンから復帰しても自動的に “0” に戻りません。次のパワーダウンを行う
前にいったん ”0” にクリアしてください。
パワーアップ
タイムカウンタ
Power Up Time Counter Value (初期値 0x0000)
PLL をイネーブルにしてからクロックジェネレータの出力をイネーブルにするまで
の待ち時間を設定します。この待ち時間は、レジスタ内の値に、XIN クロック 3.5
クロックを加えた値になります。なお、このとき TX3927 へのクロック入力は安定
している必要があります。XIN は、逓倍値の設定により CPU コアクロックの 1/16、
1/2 になります。
未定義ビットに対しては、示してある値を書き込んでください。
図 6.3.1 パワーダウンコントロールレジスタ
6-4
第 7 章 バスオペレーション
第7章
バスオペレーション
TX3927 では TX39/H2 CPU コアのほかに DMAC または PCIC がバスマスタとなりバスオペレーシ
ョンを起動します。外部のメモリなどにアクセスするときは、TX3927 内のメモリコントローラを介
してバスマスタはこれらの外部メモリなどにアクセスします。
7.1
バスマスタ
TX3927 では TX39/H2 の他に DMAC および PCIC がバスマスタとなります。通常は TX39/H2
コアがバスマスタとして動作していますが、DMAC あるいは PCIC は必要に応じて TX3927 内部
バスのバス制御権を得てバスマスタとして動作します。DMAC、PCIC がバスマスタとなるのは次
の場合です。
7.1.1
•
DMAC: I/O-メモリ、メモリ-I/O、メモリ-メモリ間の DMA 転送を行うとき。
•
PCIC: メモリ→PCI、あるいは PCI→メモリのデータ転送でメモリにアクセスするとき。
PCIC は TX3927 内蔵メモリコントローラ (SDRAMC、ROMC) を使ってメモリに
アクセスします。
スヌープ機能
DMAC、PCIC はそれぞれスヌープ機能を使用することができます。
7.1.1.1
キャッシュがライトバックモードのとき
このときはスヌープ機能が使えません。CCFG.PSNP ビットおよび CCRn.SNOP ビッ
トは “0” にしてください。
7.1.1.2
キャッシュがライトスルーモードのとき
スヌープ機能が使用できます。スヌープ機能を使用するときは、CCFG.PSNP ビット
および CCRn.SNOP ビットを “1” にしてください。
7.1.2
エンディアンとデータバスの関係
TX3927 はビッグエンディアンとリトルエンディアンの両方をサポートしています。どちら
のエンディアンを使用するかは次の 2 つで指定します。
•
初期設定信号の ENDIAN (ADDR[14]) 信号
•
DMAC の MCR レジスタの LE ビット (ビット 2)
この 2 つで同じエンディアンを設定してください。
PCI バスについてはこのほかに PCIC にバイトスワップ機能があり、次のどちらかを選択で
きます。
•
スワップしないでストレートにデータを出力する。
•
バイトスワップする。
詳しくは「12.4.12 バイトスワップ機能」を参照してください。
次にレジスタとメモリ中のデータ構成について説明します。TX3927 ではデータサイズとし
て、32 ビットのワード、16 ビットのハーフワード、8 ビットのバイトを扱えます。エンディ
アンによってバイトのアドレス順序が変わってきます。図 7.1.1にビッグエンディアンとリト
ルエンディアンの場合のワード中のバイト順序、および複数ワード中のワード順序を示します。
7-1
第 7 章 バスオペレーション
上位アドレス
下位アドレス
31 24 23 16 15 8 7 0
ワードアドレス
8
9
10
11
8
4
5
6
7
4
0
1
2
3
0
● バイト 0 が最上位バイト(ビット 31-24)です。
● ワードのアドレスは、最上位バイト(バイト 0)のアドレスで指定します。
(a) ビックエンディアン
31 24 23 16 15 8 7 0
上位アドレス
ワードアドレス
11
10
9
8
8
7
6
5
4
4
3
2
1
0
0
下位アドレス
● バイト 0 が最下位バイト(ビット 7-0)です。
● ワードのアドレスは、最下位バイト(バイト 0)のアドレスで指定します。
(b) リトルエンディアン
図 7.1.1 ビッグエンディアンとリトルエンディアン
TX3927 はメモリバス幅として、16 ビットと 32 ビットの 2 つをサポートしています。デー
タ幅、バス幅、エンディアンとデータの位置の関係を表 7.1.1に示します。
表 7.1.1 データ幅、バス幅、エンディアンとデータの関係
データ幅 スタート バス幅
データ
バス
番地
サイクル
ビッグエンディアン
リトルエンディアン
の
アドレス DATA[31]- DATA[23]- DATA[15]- DATA[7]- DATA[31]- DATA[23]- DATA[15]- DATA[7]DATA[24] DATA[16] DATA[8] DATA[0] DATA[24] DATA[16] DATA[8] DATA[0]
8 ビット
4n + 0
16 ビット 4n + 0
32 ビット 4n + 0
xxxx
xxxx
b7 − b0
xxxx
b7 − b0
xxxx
xxxx
xxxx
4n + 1
16 ビット 4n + 0
xxxx
xxxx
xxxx
b7 − b0
32 ビット 4n + 0
16 ビット 4n + 2
32 ビット 4n + 0
xxxx
b7 − b0
xxxx
xxxx
xxxx
4n + 2
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
xxxx
b7 − b0
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
xxxx
b7 − b0
b7 − b0
4n + 0
16 ビット 4n + 2
32 ビット 4n + 0
16 ビット 4n + 0
xxxx
xxxx
b15 − b8
b7 − b0
xxxx
xxxx
b15 − b8
b7 − b0
xxxx
xxxx
xxxx
xxxx
b15 − b8
b7 − b0
4n + 2
32 ビット 4n + 0
16 ビット 4n + 2
xxxx
xxxx
b15 − b8
b7 − b0
xxxx
xxxx
b15 − b8
b7 − b0
b7 − b0
b15 − b8
b7 − b0
xxxx
xxxx
xxxx
xxxx
b15 − b8 b7 − b0
b31 − b24 b23 − b16
4n + 3
16 ビット
32 ビット
4n + 0
32 ビット 4n + 0
16 ビット 4n + 0
4n + 2
32 ビット 4n + 0
xxxx
xxxx
xxxx
xxxx
xxxx
b7 − b0
xxxx
xxxx
b7 − b0
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
b7 − b0
xxxx
xxxx
xxxx
xxxx
b15 − b8
b7 − b0
xxxx
xxxx
b15 − b8
xxxx
xxxx
xxxx
xxxx
b31 − b24 b23 − b16 xxxx
b15 − b8 b7 − b0
xxxx
b31 − b24 b23 − b16 b15 − b8
7-2
b7 − b0
b7 − b0
xxxx
b31 − b24 b23 − b16 b15 − b8
b7 − b0
第 7 章 バスオペレーション
7.2
バスオペレーション
TX3927 は次の 4 種類の外部デバイスに対するバスオペレーションを行うことができます。各デ
バイスに対するアクセスに先立って、デバイスのアドレス領域やウェイト数などを対応するコント
ローラに設定する必要があります。各バスオペレーションの詳細については各章を参照ください。
外部デバイス
SDRAM, SGRAM,
SMROM, DIMM Flash
コントローラ
詳細説明
SDRAMC
第 4 章 SDRAMC
ROM, SRAM, Flash
メモリ、I/O
ROMC
第 5 章 ROMC
DMAC
第 6 章 DMAC
PCI デバイス
PCIC
第 7 章 PCIC
SDRAMC および ROMC はバスマスタが TX39/H2 でも、DMA コントローラ (DMAC) でも、
PCI
コントローラ (PCIC) でも同じように動作します。DMAC は直接は外部のメモリ、I/O をアクセス
することはなく SDRAMC、
ROMC を経由してアクセスします。
PCIC は TX39/H2 もしくは DAMC
が PCI 上のデバイスにアクセスするときは、PCI バスに対するメモリコントローラとして動作し
ます。一方、外部 PCI デバイスが TX3927 につながるメモリなどにアクセスする場合には、PCIC
はバスマスタとして機能し、SDRAMC、ROMC を経由して TX3927 のローカルメモリにアクセス
します。ただし、データキャッシュをライトバックモードにしたときには、TX39/H2 コアはスヌ
ープ機能をサポートしませんので、PCIC および DMAC のスヌープ機能はディセーブルにしてく
ださい。
バスマスタ
メモリコントローラ
外部デバイス
TX39/H2
SDRAMC, ROMC
PCIC (イニシエータ)
ローカルメモリ、I/O
DMAC
SDRAMC, ROMC
PCIC (イニシエータ)
ローカルメモリ、I/O
SDRAMC、ROMC
ローカルメモリ、I/O
PCIC (ターゲット)
(外部 PCI デバイス)
PCI デバイス
PCI デバイス
メモリコントローラとして機能する SDRAM、ROMC、PCIC が同じアドレス空間に対して同時
にアクセスすることのないよう、各メモリコントローラのアドレス空間を設定してください。
上記 4 つのコントローラに設定した各デバイスのアドレス領域および TX3927 内部レジスタ領域
のアドレスへのアクセスに対してのみ TX3927 がバスオペレーションを実行するようにプログラ
ムを組んでください。アクセスする必要のあるデバイスに対しては必ず上記 4 つのコントローラの
いずれかに設定してください。
TX3927 のバススピードには、フルスピードバスモードとハーフスピードバスモードの 2 種類が
あります。フルスピードモードでは、外部バスは G-Bus と同じ周波数 (CPU の 1/2 周波数) で動作
します。一方、ハーフスピードモードでは、外部バスは G-Bus の半分の周波数 (CPU の 1/4 の周
波数) で動作します。ブート信号 CHANHS* (ADDR [15] 端子) の設定により SYSCLK 出力モード
が選択されます。RESET*信号の立ち上がり時に CHANHS*が “High” のときにフルスピードモー
ド、“Low” のときにハーフスピードモードになります。また ROMC 内のレジスタにより各チャネ
ルごとどちらのモードを選択するか設定できます。
7-3
第 7 章 バスオペレーション
7.2.1
バスエラー
TX3927 では CCFG.TOE ビットを “1” にセットしてバスサイクルのタイムアウトを設定す
ることにより、誤ったアクセスをしてアクノリッジが戻ってこない場合にバスエラーを発生し
ます。(バスエラーに対する外部端子はありません)
このときバスエラーが発生するのは、G-bus のクロックで G-bus のクロックで 512 クロッ
クたってもアクノリッジが返ってこないときです。バスエラー (タイムアウトエラー) が発生す
る場合として、外部 ACK*がアサートされない場合、メモリコントローラで設定していない空
間をアクセスした場合が考えられます。
TX39/H2 のリードオペレーション時のバスエラーに対しては、TX39/H2 コアはバスエラー
例外を発生します。また TX39/H2 コアのライトオペレーション時のバスエラーに対しては
TX39/H2 コアはノンマスカブル割り込み例外を発生します。DMAC のバスオペレーション時
のバスエラーに対しては、転送を終了し、DMAC 中のステータスビットをセットします。ま
た割り込みがイネーブルになっていれば割り込みを発生します。
PCIC のバスオペレーション時のバスエラーに対しては、通常動作と同じようにサイクルを
終了します。このときステータスビットはセットされます。また割り込みがイネーブルになっ
ていれば割り込みを発生します。
7-4
第 8 章 SDRAM コントローラ
第8章
8.1
SDRAM コントローラ
特長
SDRAM コントローラ (SDRAMC)は、SDRAM、DIMM Flash、SMROM、または SGRAM と
のインタフェースに必要なコントロール信号を生成します。チャネルは全部で 8 チャネルあり、独
立に動作できます。SDRAM コントローラは、様々なバスコンフィグレーションで最大 1 G バイト
のメモリサイズに対応します。
SDRAM コントローラの特長は
1.
クロック周波数: 50 MHz~66 MHz (TX39/H2 コアの 1/2 の周波数)
2.
SDRAM/SGRAM はスピードレベル−10 以上、ならびに SMROM はスピードレベル−15 (66
MHz) ないし−20 (50 MHz) のタイミング用に設計されています。
3.
8 個の独立したメモリチャネル。ただし、チャネル 2~7 は ROM コントローラのチャネル 2~7
とチップセレクト信号が共用になっていますので、どちらか一方としてしか使用できません。
ご注意ください。
4.
各メモリチャネルは、SDRAM または DIMM SDRAM、DIMM フラッシュ、SMROM、また
は SGRAM に対応しています。DIMM SDRAM としては JEDEC 規格の 100 ピンおよび 168
ピンメモリ DIMM に対応し、DIMM フラッシュとしては 100 ピン DIMM に対応します。
5.
データバス幅: チャネルごとに 16 ビット/32 ビットが選択できます。(SMROM と SGRAM は
32 ビットのみ)。
6.
クリティカル ワード ファースト アクセスに対応。この機能は、キャッシュミスしたデータが、
アライメント境界にないときのパフォーマンスを上げるものです。まずキャッシュミスしたワ
ードデータがリードされ、このデータを使って CPU が命令を処理している最中に残りのデー
タをキャッシュにリフィルします。SDRAMC ではどのメモリに対してもこの機能をサポート
しています。
7.
オプションによりリセット後に DIMM フラッシュまたは SMROM からブートすることも可能
です。また、SMROM のロウアドレスマッチング機能をイネーブルにして、時間のかかる起動
コマンドを消去することもできます。
8.
SDRAM/SGRAM メモリアクセスタイミング:
シングルリード 8 サイクル
バーストリード 8 + (n − 1) サイクル
シングルライト 6 サイクル
バーストライト 6 + (n − 2) サイクル
ただし、n はバースト内のデータ転送回数です。スローライトバーストがイネーブルになると、
ライトバーストの追加アクセスごとに 2 サイクルが加算されます。
10. 任意のチャネルベースアドレスがそのチャネルサイズ境界上に存在します。
(これが通常の使用法です。ハードウエアによってさらに多くのオプションが可能になりますが、
推奨できません。)
11. SDRAM/SGRAM および SMROM タイミングレイテンシがプログラムできます。
使用するクロック周波数やメモリのスピードに合わせてタイミングを設定できメモリ性能を
最適化したシステムを実現できます。
8-1
第 8 章 SDRAM コントローラ
12. SDRAM/SGRAM バースト長:
SMROM バースト長:
(注)
32 ビットおよび 16 ビットメモリに対して 1
32 ビットメモリに対して 4
SMROM のバースト長は、クリティカルワードファースト以外は 4 ワードアライメン
トでなければなりません。
13. バーストリードまたはライト時にアドレスのインクリメント値をプログラマブルに設定する
こともできます。デフォルトのバーストアドレスは、1 ワードずつインクリメントします。こ
の機能はシングルアドレスモードで DMA コントローラで設定して使用します。これにより効
率的な転送が可能です (この機能は SMROM ではサポートされていません)。
14. 4、8、16、32 ワードの G-Bus バースト長。SDRAM、SGRAM、DIMM フラッシュではバー
スト長にアライメントになっている必要がないため、ページ、バンク、およびチャネル境界を
またぐバーストがサポートされています。ページをまたぐときは、8 アドレスビットまたは 256
ワードに固定されています。リフレッシュサイクルは、境界をまたぐアクセスをしている最中
は、待たされます。メモリアドレス空間外で始まり、そのメモリ空間内で終了するバーストな
らびにその逆にメモリアドレス空間内で始まりメモリ空間外で終わるバーストは、バスハング
をはじめとする予期せぬ結果を引き起こす恐れがありますので実行しないよう注意してくだ
さい。
15. シングルまたはバーストライト時に任意のバイトへの書き込みが可能です。これは BWE 信号
で制御します。
16. バスエラーまたは GDRESET*により内部バスサイクルが早めに終了した場合も、メモリオペ
レーションは最後まで実行されます。一方、RESET*が入った場合には内部バスサイクルと同
時にメモリオペレーションも終了します。
17. リフレッシュ周期をプログラマブルに設定できます。
18. SDRAM/SGRAM リフレッシュモード: オートリフレッシュまたはセルフリフレッシュが可能
です。
19. 低消費電力モード: SDRAM/SGRAM に対してはセルフリフレッシュまたはプリチャージパワ
ーダウン、SMROM に対しては低消費電力モードがあります。またパワーダウンモードからの
自動復帰も可能です。
20. アドレッシングモード: シーケンシャルのみ。
21. バーストライト時のみオートプリチャージを使用します。その他のアクセスではプリチャージ
コマンドを使用します。
22. DIMM のコンフィグレーションを決定するための Serial Presence Detect (SPD) は、2 本のプ
ログラマブル I/O (PIO) ピンを使用することによって実現できます。ソフトウエアによってシ
リアルプロトコルを実行してください。
23. ファンアウトの高いシステムに対応。
負荷の大きいデータバスに対応するために、選択可能な 2 つのデータリードバックパスと、ス
ローライトバーストモードをサポートしています。リードでは、タイミングの一貫性を保つた
めに、フィードバッククロックによりいったんデータをラッチするか、このラッチのパスをバ
イパスするかを選べます。スローライトバーストモードでは、各ライトごとに 2 個のクロック
が使用されます。
24. SDR (シングルデータレート) の SDRAM/SGRAM に対応できます。
DDR (ダブルデータレート) のデバイスには対応していません。
8-2
第 8 章 SDRAM コントローラ
8.2
SDRAMC のブロック図
SDRAMC
CS [7 : 0] *
OE*
チャネル 0-7
コントロール
レジスタ
G-Bus
I/F 信号
G-Bus
インタ
フェース
コント
ロール
タイミング
レジスタ
CKE
WE*
ADDR [14 : 0]
制御回路
RAS*
CAS*
コマンド/
ロードレジスタ
DQM [3 : 0]
DSF
リフレッシュ
カウンタ
G-Bus
図 8.2.1 TX3927 SDRAMC のブロック図
8-3
第 8 章 SDRAM コントローラ
8.3
メモリコンフィグレーションおよび構成
表 8.3.1に示す SDRAM、SMROM、ならびに SGRAM に対応しています。
表 8.3.1 対応するメモリ構成
メモリサイズ
SDRAM
バンク
ロウアドレス
カラムアドレス
1 M x 16
2
11
8
2Mx8
2
11
9
4 M x 4*
2
11
10
2 M x 32
2
11
9
2 M x 32
2
12
8
4 M x 16
2
11
10
4 M x 16
2
13
8
8Mx8
2
13
9
16 M x 4*
2
13
10
2 M x 32
4
11
8
4 M x 16
4
12
8
8Mx8
4
12
9
16 M x 4*
4
12
10
4 M x 32
4
12
8
8 M x 16
4
12
9
16 Mbit
64 Mbit
64 Mbit
128 Mbit
16 M x 8
4
12
10
32 M x 4*
4
12
11
256 Mbit
SMROM
8 M x 32
4
13
8
16 M x 16
4
13
9
32 M x 8
4
13
10
64 M x 4*
4
13
11
NA
13
7
2 M x 32
NA
14
7
2 M x 32
NA
13
8
2
9
8
2
10
8
32 Mbit
1 M x 32
64 Mbit
SGRAM
8 Mbit
256 K x 32
16 Mbit
512 K x 32
*
これらの構成は論理的に対応していますが、バスの負荷が大きくなり使用上のトラブルを
引き起こす可能性がありますので注意してください。
表 8.3.2
メモリタイプ
最大メモリ (x8 以上のデバイスを使用)
最大値/チャネル (MB)
8 チャネルの最大値
SDRAM
128
1 GB
DIMM FLASH
32
256 MB
SMROM
8
64 MB
SGRAM
2
16 MB
8-4
第 8 章 SDRAM コントローラ
8.4
レジスタ
8.4.1
レジスタマップ
表 8.4.1 SDRAM コントロールレジスタ
アドレス
レジスタ記号
レジスタ名
0xFFFE_8000
SDCCR0
SDRAM Channel Control Register 0
0xFFFE_8004
SDCCR1
SDRAM Channel Control Register 1
0xFFFE_8008
SDCCR2
SDRAM Channel Control Register 2
0xFFFE_800C
SDCCR3
SDRAM Channel Control Register 3
0xFFFE_8010
SDCCR4
SDRAM Channel Control Register 4
0xFFFE_8014
SDCCR5
SDRAM Channel Control Register 5
0xFFFE_8018
SDCCR6
SDRAM Channel Control Register 6
0xFFFE_801C
SDCCR7
SDRAM Channel Control Register 7
0xFFFE_8020
SDCTR1
SDRAM Shared Timing Register 1 (SDRAM/SGRAM 用)
0xFFFE_8024
SDCTR2
SDRAM Shared Timing Register 2 (DIMM Flash 用)
0xFFFE_8028
SDCTR3
SDRAM Shared Timing Register 3 (SMROM 用)
0xFFFE_802C
SDCCMD
SDRAM Command Register
0xFFFE_8030
SDCSMRS1
SGRAM Load Mask Register
0xFFFE_8034
SDCSMRS2
SGRAM Load Color Register
(注 1) “Reserved” となっている設定は使用しないでください。このときの動作は保証できません。
(注 2) すべてのレジスタがリード可能で、ワードアドレッシング専用です。
(注 3) tCK = クロック周期
チャネル 7 ∼ 2 は ROM コントローラとチップセレクト信号を兼用しています。SDRAM コ
ントローラと ROM コントローラで同じチャネルを同時にイネーブルすることのないよう注意
してください。
8-5
第 8 章 SDRAM コントローラ
8.4.2
SDRAM チャネルコントロールレジスタ (SDCCR0 ∼ 7) 0xFFFE_8000 (ch.0)
0xFFFE_8004 (ch.1)
0xFFFE_8008 (ch.2)
0xFFFE_800C (ch.3)
0xFFFE_8010 (ch.4)
0xFFFE_8014 (ch.5)
0xFFFE_8018 (ch.6)
0xFFFE_801C (ch.7)
31
21
SDBA
20
0
19
R/W
0x1FC
R/W
15
5
SDAM
4
0
R/W
0
3
2
1
SDCS
R/W
0
17
SDE
0
SDRS
R/W
0x000
(注)
18
SDM
0
R/W : タイプ
0
: 初期値
0
SDMW
R/W
0
16
SDBS
0
R/W : タイプ
0
: 初期値
ブートメモリとして、DIMM Flash または SMROM を指定した場合には、ch0 のみレジスタの初期
値はブートの設定にしたがって設定されます。ブートの設定方法については、
「3.4 初期設定信号」
を参照してください。
ビット
ニモニック
フィールド名
説 明
31 : 21
SDBA
ベースアドレス
Base Address (初期値 0x1FC)
チャネル 0 のベースアドレス
19 : 18
SDM
メモリタイプ
Memory Type (初期値 00)
チャネル 0 に接続するメモリのタイプを示します。
00: SDRAM
01: DIMM フラッシュ
イネーブル
10: SMROM
11: SGRAM
Enable (初期値 0)
チャネル 0 をイネーブルにするかどうか指定します。
0: ディセーブル
1: イネーブル
17
SDE
16
SDBS
バンク数
Number of Banks (初期値 0)
SDRAM/SGRAM のバンク数または DIMM フラッシュのアドレスマッピングタイプ
を指定します。
0: SDRAM/SGRAM 2 バンクまたは DIMM フラッシュアドレスマッピングタイプ 0
1: SDRAM/SGRAM 4 バンクまたは DIMM フラッシュアドレスマッピングタイプ 1
15 : 5
SDAM
アドレスマスク
Address Mask (初期値 0x000)
ベースアドレス (SDBA0 フィールド) によるアドレス比較の有効ビットを設定しま
す。
0: 対応する SDBA0 フィールドのビットは比較されます。
1: 対応する SDBA0 フィールドのビットは比較されません。
4:3
SDRS1
ロウサイズ
Row Size (初期値 00)
メモリのロウサイズを指定します。
00: 2048 Rows (11 ビット)
01: 4096 Rows (12 ビット)
10: 8192 Rows (13 ビット)
11: Reserved
図 8.4.1 SDRAM チャネルコントロールレジスタ (1/2)
8-6
第 8 章 SDRAM コントローラ
ビット
ニモニック
1
2:1
SDCS
0
SDMW2
フィールド名
説 明
カラムサイズ
Column Size (初期値 00)
メモリのカラムアドレスを指定します。
00: 256 ワード (8 ビット)
01: 512 ワード (9 ビット)
10: 1024 ワード (10 ビット)
11: 2048 ワード (11 ビット)
メモリ幅
Memory Width (初期値 0)
メモリのバス幅を指定します。
0: 32 ビット
1: 16 ビット
(注 1) これらのフィールドは SDRAM または SGRAM 専用です。その他のすべてのメモリタイプに対し
ては無視されます。
(注 2) メモリ幅フィールドは、SMROM または SGRAM に対しては常に 0 に設定してください。
図 8.4.2 SDRAM チャネルコントロールレジスタ (2/2)
•
ベースアドレス (SDBA) とアドレスマスク (SDRAM) の使用方法
アドレスマスク (SDAM) はベースアドレス (SDBA) の対応するアドレスビットを、このチャネルの
アドレス空間の判定に使うかどうかを選択するために使います。メモリを中途半端なメモリエリア
に置くことはできないので注意してください。例えば、下記のように設定しても、このチャネルの
アドレス空間は 0xA0000000 ∼ 0xA1FFFFFF になります。0xA1000000 ∼ 0xA2FFFFFF にはなりま
せんので注意してください。
設定例
SDCCR: 0x010301ea
-SDBA = 0000 0001 000b
-SDAM = 0000 0001 111b
アドレスをマスク
8-7
第 8 章 SDRAM コントローラ
8.4.3
SDRAM タイミングレジスタ 1 (SDRAM/SGRAM 用) (SDCTR1) 0xFFFE_8020
31
29
SDBC
0
R/W
0
0
0
0
14
SWB
13
BW
12
WpB
11
0
R/W
0
R/W
0
R/W
0
15
R/W
ビット
ニモニック
31 : 29
SDBC
28 : 27
28
27
SDACP
SDACP
26
25
24
SDP SDCD WRT
R/W
0
R/W
0
23
R/W
0
18
SDRC
R/W
0
0
0
アクティブ
コマンド時間
0
0
R/W
0
16
DRB
R/W : タイプ
0
: 初期値
0
SDRP
: タイプ
: 初期値
R/W
0x400
フィールド名
バンクサイクル
時間
0
17
CASL
説 明
Bank Cycle Time (tRC) (初期値 000)
メモリのバンクサイクル時間を指定します。
000: 5 tCK (リセット)
100: 9 tCK
001: 6 tCK
101: 10 tCK
010: 7 tCK
110: Reserved
011: 8 tCK
111: Reserved
Active Command Period (tRAS) (初期値 00)
メモリのアクティブコマンド時間を指定します。
00: 3 tCK (リセット)
01: 4 tCK
10: 5 tCK
11: 6 tCK
26
SDP
プリチャージ時間
Precharge Time (tRP) (初期値 0)
メモリのプリチャージ時間を指定します。
0: 2 tCK (リセット)
1: 3 tCK
25
SDCD
RAS-CAS
ディレイ
RAS to CAS Delay (tRCD) (初期値 0)
0: 2 tCK (リセット)
1: 3 tCK
24
WRT
ライトリカバリ
タイム
Write Recovery Time (tWR) (初期値 0)
メモリのライトリカバリ時間を指定します。
0: 1 tCK (リセット)
1: 2 tCK
23 : 18
SDRC
リフレッシュ
カウンタ
Refresh Counter (初期値 000000)
リフレッシュの度にデクリメントされます。リフレッシュ回路が起動され、ゼロ以
外の値がロードされると、このフィールドは 0 で停止するダウンカウンタになりま
す。再度カウントダウンを開始するには、ゼロ以外の値を再ロードしなければなり
ません。メモリの初期化に使用します。
17
CASL
CAS レイテンシ
CAS Latency (tCASL) (初期値 0)
CAS のレイテンシを指定します。
0: 2 tCK (リセット)
1: 3 tCK
16
DRB
データリード
バイパス
Data Read Bypass (初期値 0)
使用されるデータリードバックパスを選択します。
0: データリードバックはフィードバッククロックでレジスタにいったんラッチしま
す (リセット)。
1: データリードバックはフィードバッククロックのラッチをバイパスします。
図 8.4.3 SDRAM タイミングレジスタ 1 (SDRAM/SGRAM 用) (1/2)
8-8
第 8 章 SDRAM コントローラ
ビット
ニモニック
14
SWB
フィールド名
スローライト
バースト
説 明
Slow Write Burst (tSWB) (初期値 0)
スローライトバーストを行うかどうかを指定します。
0: tCK ごとにバーストライトが発生 (リセット)
1: tCK おきにバーストライトが発生
13
BW
SGRAM ブロック
ライト
SGRAM Block Write (初期値 0)
SGRAM のブロックライトをイネーブルにするかどうか指定します。
0: ディセーブル (リセット)
1: イネーブル
12
WpB
SGRAM ライト/
ビット
SGRAM Write Per Bit (初期値 0)
0: ディセーブル (リセット)
1: イネーブル
11 : 0
SDRP
リフレッシュ期間
Refresh Period (初期値 0x400)
リフレッシュサイクルを発生させるクロックサイクル数を指定します。
SDRAM/SGRAM に対して最低 1 チャネルがイネーブルになっているときだけ、リ
フレッシュがイネーブルになります。タイミングレジスタは、任意のチャネルがイ
ネーブルになる前にプログラムしてください。
初期値は 0x400 です。このとき 15.5 µs@66 MHz ごとにリフレッシュサイクルが発
生します。
(注 1) モードレジスタ設定サイクルタイム tRSC は、SMROM MRS リカバリタイムを満たすために 3 tCK
に設定されます。
(注 2) tRC はリフレッシュサイクルタイム専用です。リードとライトでは、バーストのときも含めて、tRC
は tRAS + tRP + 1 tCK ≧ tRC という条件に包含されます。
(注 3) tRCD = 2tCK, tRAS = 6tCK になる組み合わせは設定しないでください。
図 8.4.4 SDRAM タイミングレジスタ 1 (SDRAM/SGRAM 用) (2/2)
8-9
第 8 章 SDRAM コントローラ
8.4.4
SDRAM タイミングレジスタ 2 (DIMM フラッシュ用) (SDCTR2) 0xFFFE_8024
31
16
0
: タイプ
: 初期値
15
8
7
0
ビット
ニモニック
7:4
SDWWS
3:0
SDRWS
フィールド名
4
3
0
SDWWS
SDRWS
R/W
0xF
R/W
0xF
説 明
ライトウェイト
ステート
Write Wait States (初期値 0xF)
DIMM Flash のライト時のウェイトステート数を指定します。
リードウェイト
ステート
0000 1tck
0001 2tck
:
1110 15tck
1111 16tck
Read Wait States (初期値 0xF)
DIMM Flash のリード時のウェイトステート数を指定します。
0000 1tck
0001 2tck
:
1110 15tck
1111 16tck
図 8.4.5 SDRAM タイミングレジスタ 2 (DIMM フラッシュ用)
8-10
: タイプ
: 初期値
第 8 章 SDRAM コントローラ
8.4.5
SDRAM タイミングレジスタ 3 (SMROM 用) (SDCTR3) 0xFFFE_8028
31
27
0
26
25
RAME
RASL
R/W
0
R/W
1
24
18
0
15
17
16
CALS
DRB
R/W
1
R/W : タイプ
0
: 初期値
0
0
: タイプ
: 初期値
ビット
ニモニック
フィールド名
説 明
26
RAME
ロウアドレス
マッチイネーブル
Row Address Match Enable (初期値 0)
現在のロウアドレスが同じチャネル上の前回リードされたロウアドレスに一致する
かをチェックする機能をイネーブルにします。一致すると、アクティブコマンドは
スキップされ、リードコマンドのみが実行されます。
0: ディセーブル (リセット)
1: イネーブル
25
RASL
RAS レイテンシ
RAS Latency (tRCD) (初期値 1)
RAS のレイテンシを指定します。
0: 1 tCK
1: 2 tCK (リセット)
17
CASL
CAS レイテンシ
CAS Latency (tCASL) (初期値 1)
CAS のレイテンシを指定します。
0: 4 tCK
1: 5 tCK (リセット)
16
DRB
データリード
バイパス
Data Read Bypass (初期値 0)
使用されるデータリードバックパスを選択します。
0: データリードバックはフィードバッククロックでレジスタにいったんラッチしま
す。
1: データリードバックはフィールドバッククロックのラッチをバイパスします。
(注 1) モードレジスタ設定リカバリタイムは 3 tCK に設定されます。
(注 2) tRC は tRCD と tCAS に包含されます。
(注 3) tVCVC (有効な CAS から有効な CAS までの時間) は、4 tCK に設定されます。
(注 4) 下の表は、現在のパラメータ設定です。
スピード
tRCD (tCK)
tCASL (tCK)
50 MHz
1
4
66 MHz
2
5
図 8.4.6 SDRAM タイミングレジスタ 3 (SMROM 用)
8-11
第 8 章 SDRAM コントローラ
8.4.6
SDRAM コマンドレジスタ (SDCCMD) 0xFFFE_802C
31
24
15
R
0x20
R
0x10
12
31 : 24
ニモニック
11
4
バージョン
ナンバー
11 : 4
SDCMSK
3:0
SDCMD
: タイプ
: 初期値
3
0
SDCMSK
SDCMD
R/W
0x00
R/W
0x0
フィールド名
モデルナンバー モデルナンバー
23 : 16
16
バージョンナンバー
0
ビット
23
モデルナンバー
: タイプ
: 初期値
説 明
Model Number (初期値 0x20)
モデルナンバーを示します。
TX3927 では 0x20 です。このフィールドはリードオンリーです。
バージョン
ナンバー
Version Number (初期値 0x10)
バージョンナンバーを示します。
TX3927 では、0x10 です。このフィールドはリードオンリーです。
チャネルマスク
Channel Mask (初期値 0x00)
このビットを “1” にセットすると、対応するチャネルのコマンドがイネーブルにな
ります。このコマンドはイネーブルになったすべてのチャネルと同時に実行されま
す。1
ビット 11-チャネル 7
ビット 10-チャネル 6
ビット 9 -チャネル 5
ビット 8 -チャネル 4
ビット 7 -チャネル 3
ビット 6 -チャネル 2
ビット 5 -チャネル 1
ビット 4 -チャネル 0
コマンド
Command (初期値 0x00)
メモリに対するコマンドを指定します。
0x0: NOP コマンド
0x1: SDRAM/SGRAM モードレジスタを設定
0x2: SMROM モードレジスタを設定
0x3: すべての SDRAM/SGRAM バンクをプリチャージ (PALL)。
0x4: 低消費電力モードに入ります。
0x5: パワーダウンモードに入ります。
0x6: 低消費電力/パワーダウンモードから出ます。
0x7-0xf: Reserved
コマンドは、メモリタイプが SDRAM、SMROM、または SGRAM のチャネル上で
のみ実行されます。低消費電力モードは SDRAM/SGRAM に対してはセルフリフレ
ッシュモード、SMROM に対しては低消費電力モードになります。パワーダウンモ
ードは SDRAM/SGRAM に対してはプリチャージパワーダウンモード、SMROM に
対しては低消費電力モードになります。
(注)
マスクビットは、SGRAM のロードマスクレジスタおよびロードカラーレジスタを使用するために
も使われます。
コマンドが実行されるまでコマンドレジスタへのライトサイクルはウェイトします。したが
ってコマンドサイクルが実行されるまでメモリサイクルを実行できません。またコマンドは、
SCRAMC がアイドルになるまで開始できません。
コマンドを実行する際にはチャネルコントロールレジスタで該当チャネルを先にイネーブ
ルにしておいてください。チャネルコントロールレジスタでイネーブルになっていないチャネ
ルに対してはコマンドは実行されません。
図 8.4.7 SDRAM コマンドレジスタ
8-12
第 8 章 SDRAM コントローラ
8.4.7
SGRAM ロードマスクレジスタ (SDCSMRS1) 0xFFFE_8030
31
16
: タイプ
: 初期値
R/W
0x0000
15
0
: タイプ
: 初期値
R/W
0x0000
ビット
ニモニック
31 : 0
SDCSMRS1
フィールド名
SGRAM
ロードマスク
説 明
SGRAM Load Mask Register 1 (初期値 0x00000000)
このレジスタにライトすると、SGRAM のマスクレジスタに 32 ビットデータがロー
ドされます。このとき、コマンドレジスタ内の対応チャネルのマスクビットをイネ
ーブルし、コントロールレジスタでメモリタイプを SGRAM*に設定してください。
マスクビットをイネーブルにするときには、SGRAM が不用意にコマンドの影響を
受けないようにコマンドフィールドは NOP コマンドにしてください。コマンドオペ
レーションと同様に、SDRAMC がアイドルになるまで実行されません。このレジス
タはリードすると常に “0” が読めます。
図 8.4.8 SGRAM ロードマスクレジスタ
8-13
第 8 章 SDRAM コントローラ
8.4.8
SGRAM ロードカラーレジスタ (SDCSMRS2) 0xFFFE_8034
31
16
: タイプ
: 初期値
R/W
0x0000
15
0
: タイプ
: 初期値
R/W
0x0000
ビット
ニモニック
31 : 0
SDCSMRS2
フィールド名
SGRAM
ロードカラー
説 明
SGRAM Load Color Register 2 (初期値 0x00000000)
このレジスタにライトすると、SGRAM のカラーレジスタに 32 ビットデータがロー
ドされます。このときコマンドレジスタ内の対応するチャネルのマスクビットをイ
ネーブルにし、コントロールレジスタでメモリタイプを SGRAM に設定してくださ
い。マスクビットをイネーブルにするときには、SGRAM が不用意にコマンドの影
響を受けないようにコマンドフィールドは NOP コマンドにしてください。コマンド
オペレーションと同様に、SDRAMC がアイドルになるまで実行されません。このレ
ジスタはリードすると常に “0” が読めます。
図 8.4.9 SGRAM ロードカラーレジスタ
8-14
第 8 章 SDRAM コントローラ
第8章
SDRAM コントローラ
動作
8.5
8.5.1
メモリタイプによる TX3927 の信号
表 8.5.1 メモリタイプごとの制御信号
機能
信号名
SDRAM/SGRAM
Read
SMROM
DIMM フラッシュ
Write
Read
Write
Read
Write1
チップ選択
CS* [7 : 0]
L
L
L
L
L
L
出力イネーブル
OE*
NU
NU
L
H
L2
H2
クロックイネーブル
CKE
V
V
NU
NU
V
V
アドレス
ADDR [19 : 5]
V
V
V
V
V
V
データ
DATA [31 : 0]
V
V
V
V
V
V
ロウアドレスストローブ
RAS*
L
L
NU
NU
L
L
カラムアドレスストローブ
CAS*
L
L
NU
NU
L
L
ライトイネーブル
WE*
H
L
NU
NU
H3
L3
データマスク
DQM [3 : 0]
L
V
H4
V
NU5
NU5
6
デファインスペシャルファンクション
DSF
L
V
NU
NU
NU
NU
バイト/ライトイネーブル
BWE [3 : 0]
NU
NU
NU
NU
NU
NU
シリアルプレゼンスディテクト
SCL, SDA
V7
V7
V
V
NU
NU
(V = 有効、H = ロジックハイ、L = ロジックロウ、NU = 未使用)
(注 1) SMROM のライトオペレーションは、モードレジスタ設定 (MRS) およびバースト停止 (プリチャ
ージ) コマンドのみです。
(注 2) SMROM の DQM 端子に接続します。
(注 3) SMROM のモードレジスタ設定端子 MR*に接続します。
(注 4) DQM [3 : 0] は強制的に High になります。この信号はマスクビットとしてでなくバイトライトイ
ネーブルとして使用されます。
(注 5) SMROM アクセス時には DQM [3 : 0] は High のままです。
(注 6) 特殊な SGRAM 機能に対してのみアサートされます。
(注 7) DIMM デバイスにのみ使用されます。
•
NU 信号は、デバイスに接続してもしなくても構いません。
•
D [31 : 0]、SCL、ならびに SDA は、他のモジュールによって処理されます。
•
CS* [1 : 0] は、SDRAM コントローラ専用です。一方、CS* [7 : 2] が ROM コントローラのチップセ
レクトと兼用になっています。SDRAM コントローラと ROM コントローラの両方で同じチャネル
を同時にイネーブルにしないように注意してください。OE*は、ROM コントローラ出力イネーブル
と共有されています。OE*は、DIMM フラッシュまたは SMROM リードアクセス時に DIMM フラッ
シュおよび SMROM の出力バッファをイネーブルにするために使用します。
8-15
第 8 章 SDRAM コントローラ
8.5.2
SDRAM オペレーション
(1) 初期設定とリフレッシュ
TX3927 のコマンドレジスタは初期設定に必要なサイクルを生成する機能を持っていま
すので、ソフトウエアによりこのレジスタを設定することで任意のタイミングで初期設定
を実行できます。このように初期設定シーケンスには高い自在性が提供されています。
初期設定時の CAS-before-RAS (CBR) リフレッシュサイクルは、ノーマルリフレッシュ
回路によって生成されます。これらのリフレッシュを早く完了しなければならない場合は、
初期設定の際にソフトウエアでリフレッシュ周期を非常に短い値に設定することができ
ます。必要な数の CBR リフレッシュサイクルが発生した後は、ソフトウエアによりリフ
レッシュ周期フィールドに通常値をライトしてください。
SDRAM タイミングレジスタ内のリフレッシュカウンタフィールドは、メモリに対する
リフレッシュ回数をカウントするのに便利です。そのため、ソフトウエア上で特殊タイミ
ングループを組んで適正回数のリフレッシュが発生するまで待つ必要はありません。
メモリの再初期設定もサポートされています。この場合も、ソフトウエアによって自在
に設定することができます。
ただし、リフレッシュ回路をイネーブルにするためには、
最低 1 個のチャネルを SDRAM
(または SGRAM) としてイネーブルに設定しておかなくてはなりません。チャネルがいっ
たんイネーブルになると、リフレッシュ回路はリフレッシュ周期を自身のカウンタにロー
ドして動作し始めます。その後は、取り込んだカウント値が 0 になるたびにリフレッシュ
周期を自身のカウンタに取り込みます。したがって途中でリフレッシュ周期を変えた場合、
その値は次のリフレッシュ期間に反映されます。
リフレッシュ要求は他のいかなる SDRAM コントローラのアクセス要求にも優先しま
す。ペンディング中のメモリアクセス要求は、リフレッシュが完了するまで待たされます。
ただし、アクシデントなどによりリフレッシュ周期が非常に短い値に設定された場合には、
すべてのメモリアクセスが連続するリフレッシュによって拒絶され、SDRAMC が応答で
きなくなる恐れもあります。このような事態を防ぐため TX3927 では、メモリアクセス要
求がある場合には、2 回目のリフレッシュ要求はこのメモリアクセスが終了してから行う
ようにしています。これにより、リフレッシュ間にレジスタまたはメモリアクセスを挿入
することができます。
(2) プリチャージ
•
バーストもしくはシングルリードまたはシングルライトは、プリチャージアクティブ
バンクコマンド (PBank) によって終了します。バーストライトはオートプリチャー
ジコマンドによって終了します。境界を越えるときは PBank コマンドが使用されま
す。
ライト時の重要なタイミングに「ライトリカバリタイム」と「最後のデータ入力からロ
ープリチャージまでの時間」があります。データシートで tWR、tDPL または tRDL で示さ
れるタイミングのことで、TX3927 の SDRAM タイミングレジスタ 1 (SDCTR1) のライト
リカバリタイム (WRT) ビットで制御されます。
このビットは、使用する SDRAM に適した値に設定してください。そうしないと、オー
トプリチャージのタイミングがおかしくなり、アクセスが連続するオペレーション中に問
題が起きます。ライトリカバリタイムを 1clk に設定して使うときには、SDRAM が動作
することを確認してください。これを 2clk に設定すると、1clk で動作する SDRAM も問
題なく動作します。
•
バンク境界を越えるときは、新規バンクが選択される前に PBank コマンドが発行さ
れるため、ページ越えるものとして処理されます。
•
PALL コマンドは、そのコマンドが実行される任意のチャネル上の任意のメモリコン
フィグレーションに対して作用します。
8-16
第 8 章 SDRAM コントローラ
(3) リードとライト
•
シングルアクセスでは、8 サイクルリードと 6 サイクルライトという基本のサイクル
数に対して次のように増加します。
表 8.5.2
Read
tRCD
tCASL
Write
2
増加なし
増加なし
3
1 サイクル追加
1 サイクル追加
2
増加なし
増加なし
3
1 サイクル追加
増加なし
•
SDRAM へのアクセスが連続する場合、リードおよびライトは、設定されたタイミン
グレイテンシに応じてやや動作が遅くなる場合があります。
•
どんなタイプのアクセスでも、バスアクノリッジは可能な限り速やかに返されます。
その結果、SDRAMC ステートマシンは、設定されたタイミングと終了するサイクル
のタイプ (リードまたはライト) に従って IDLE 状態に戻ります。SDRAM に対するプ
リチャージやリカバリは必要ならば自動的に行われますので、特にプログラムで行う
必要はありません。ただしこのためバックトーバックオペレーションがすぐに実行で
きないとこもあります。基本的に TX3927 は SDRAM アクセスを可能な限り速やかに
実行します。
•
バーストライト動作中、ページをまたがることがあり、このページ境界をチェックす
るため余分なサイクル (tRCD サイクルを追加) が発生します。
•
TX3927 では、次のバーストアクセスをサポートします。
表 8.5.3 サポートするバーストアクセス
4
8
16
32
CPU RD
Yes
Yes
Yes
Yes
CPU WR
Yes
No
No
No
PCI RD
Yes
Yes
Yes
No
PCI WR
Yes
Yes
Yes
No
DMA RD
Yes
Yes
Yes
Yes
DMA WR
Yes
Yes
Yes
Yes
ワード数
•
スローライトバーストは、いったんイネーブルになると、すべてのバーストライトア
クセスと 16 メモリへのシングルライトに適用されます。スローライトは、データバ
スと DQM ビットをそれらが使用される 2 クロック前にセットアップします。
SDRAM
に対するその他のすべての信号は、それらが使用される 1 クロック前にセットアップ
されます。
8-17
第 8 章 SDRAM コントローラ
(4) アドレッシングに関する注意点
•
表 8.5.4、表 8.5.5に、32 ビットメモリの SDRAM アドレスマッピングを示します。
B0 は “2 バンク” 選択に使用されます。B1 は “4 バンク” 選択に使用されます。L/H は
Low もしくは High を示し、オートプリチャージかどうかによって変わります。
表 8.5.4 32 ビット SDRAM メモリのアドレスマッピング (1/2)
ロウアドレス幅 = 11
カラムアドレス幅 = 8
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
8
9
L/H
L/H
L/H
19
20
22
21
16
17
18
19
20
19
20
22
21
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
ロウアドレス
10
11
12
13
14
15
7
8
9
10
11
ロウアドレス幅 = 11
カラムアドレス幅 = 9
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
21
22
L/H
22
22
22
22
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
22
22
22
22
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 11
カラムアドレス幅 = 10
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
21
22
L/H
23
22
22
23
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
23
22
22
23
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 12
カラムアドレス幅 = 8
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
22
23
L/H
21
22
23
22
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
22
23
22
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 12
カラムアドレス幅 = 9
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
22
23
L/H
21
23
24
23
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
23
24
23
ロウアドレス幅 = 12
カラムアドレス幅 = 10
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
ADDR [19 : 5]
カラムアドレス
18
(B1)
19
(B0)
2
3
4
5
6
7
8
9
22
23
L/H
21
24
25
24
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
24
25
24
8-18
第 8 章 SDRAM コントローラ
表 8.5.5 32 ビット SDRAM メモリのアドレスマッピング (2/2)
ロウアドレス幅 = 12
カラムアドレス幅 = 11
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
8
9
22
23
L/H
24
25
26
25
16
17
18
19
20
21
25
26
25
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
ロウアドレス
10
11
12
13
14
15
7
8
9
10
11
ロウアドレス幅 = 13
カラムアドレス幅 = 8
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
23
24
L/H
21
22
24
23
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
22
24
23
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 13
カラムアドレス幅 = 9
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
23
24
L/H
21
22
25
24
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
22
25
24
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 13
カラムアドレス幅 = 10
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
23
24
L/H
21
22
26
25
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
22
26
25
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 13
カラムアドレス幅 = 11
アドレスビット
5
6
ADDR [19 : 5]
カラムアドレス
2
3
4
5
6
7
8
9
23
24
L/H
25
22
27
26
ロウアドレス
10
11
12
13
14
15
16
17
18
19
20
21
22
27
26
8-19
第 8 章 SDRAM コントローラ
•
表 8.5.6、表 8.5.7に、16 ビットメモリの SDRAM アドレスマッピングを示します。
B0 は “2 バンク” 選択に使用されます。B1 は “4 バンク” 選択に使用されます (2 バン
クを使用する場合は ADDR18)。L/H は Low もしくは High を示し、オートプリチャ
ージかどうかによって変わります。
表 8.5.6 16 ビット SDRAM メモリのアドレスマッピング (1/2)
ロウアドレス幅 = 11
カラムアドレス幅 = 8
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
ロウアドレス
9
10
11
12
13
14
7
8
9
10
11
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
7
8
20
21
L/H
20
21
21
20
15
16
17
18
19
20
21
21
20
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 11
カラムアドレス幅 = 9
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
20
21
L/H
21
21
21
21
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
21
21
21
21
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 11
カラムアドレス幅 = 10
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
20
21
L/H
22
21
21
22
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
22
21
21
22
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 12
カラムアドレス幅 = 8
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
21
22
L/H
20
21
22
21
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
22
21
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 12
カラムアドレス幅 = 9
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
21
22
L/H
20
22
23
22
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
22
23
22
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 12
カラムアドレス幅 = 10
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
21
22
L/H
20
23
24
23
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
23
24
23
6
8-20
第 8 章 SDRAM コントローラ
表 8.5.7 16 ビット SDRAM メモリのアドレスマッピング (2/2)
ロウアドレス幅 = 12
カラムアドレス幅 = 11
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
ロウアドレス
9
10
11
12
13
14
7
8
9
10
11
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
7
8
21
22
L/H
23
24
25
24
15
16
17
18
19
20
24
25
24
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
ロウアドレス幅 = 13
カラムアドレス幅 = 8
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
22
23
L/H
20
21
23
22
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
23
22
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 13
カラムアドレス幅 = 9
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
22
23
L/H
20
21
24
23
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
24
23
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 13
カラムアドレス幅 = 10
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
22
23
L/H
20
21
25
24
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
25
24
7
8
9
10
11
12
13
14
15
(AP)
16
17
18
(B1)
19
(B0)
6
ロウアドレス幅 = 13
カラムアドレス幅 = 11
アドレスビット
5
ADDR [19 : 5]
カラムアドレス
1
2
3
4
5
6
7
8
22
23
L/H
24
21
26
25
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
26
25
6
•
複数チャネル間で同一のアドレスがイネーブルになった場合には、チャネル番号の小
さい (優先順位の高い) チャネルのみがアクティブになります。
チャネルの優先順位は
ch0⇒ch1⇒ch2⇒ch3⇒ch4⇒ch5⇒ch6⇒ch7 のようになっています。
•
16 ビットメモリから 32 ビットメモリおよび 32 ビットメモリから 16 ビットメモリへ
のチャネルをまたぐアクセスをサポートしています。
•
16 ビットメモリは、下位データバス (D0-D15) に接続してください。同様に、
DQM0*-DQM1*を使用してください。ビックエンディアンでは、上位ハーフワード
(D16-D31) が最初にライトされ、下位ハーフワード (D0-D15) が次にライトされます。
リトルエンディアンでは、下位ハーフワード (D0-D15) が最初にライトされ、上位ハ
ーフワード (D16-D31) が次にライトされます。16 ビットメモリに対するバスサイク
ルは、バイトイネーブルがどのような場合でも常に 2 つの外部アクセスを発生させま
す。DQM2*-DQM3*は High のままです。
8-21
第 8 章 SDRAM コントローラ
•
ベースアドレス (SDCCRn.SDBAn) とアドレスマスク (SDCCRn.SDAMn) の設定に
より、チャネルが選択されたか判定されます。ただし、SDRAM に対して実際に出力
されるアドレスビットは、コントロールレジスタ内で設定されたロウ/カラムサイズ
(SDCCRn.SDRSn/SDCSn) に従います。したがって、チャネル選択で使用される下
位ビットと実行されるアドレスの上位ビットとの間にオーバラップが存在する可能
性があります。
•
TX3927 の 内 部 レ ジ ス タ は ア ド レ ス 空 間 中 の 予 約 領 域
(0xFF00_0000~0xFFFE_FFFF) にあります。この予約領域を SDRAMC のメモリチ
ャネルにマッピングしないようにしてください。設定した場合、動作を保証できませ
ん。
(5) バスエラーと異常サイクル終了
•
SDRAM コントローラ (SDRAMC) はバスエラーを返しません。
•
SDRAMC のレジスタ空間 (0xFFFE_8000~0xFFFE_8FFF) でレジスタの存在しない
アドレスにライトしてもバスサイクルは正常に終了します。また、そのアドレスに対
してリードすると、オール 0 がリードされます。
•
SDRAMC は、バスエラー (SDRAMC 以外のモジュールによって発生します) または
デバッグリセットのいずれかが発生すると、現在のオペレーションをただちにアボー
トします。いずれの場合にも、現在の SDRAM サイクルを終了し、残りの SDRAMC
オペレーションが打ち切られ、PALL コマンドを発生し、SDRAMC はアイドル状態
に戻ります。SDRAMC は、アイドルに戻って正常に応答するまでは新たなアクセス
を実行しません。SDRAM の内容はリカバリまたはデバッギングのためにそのまま保
持されます。
•
コマンドサイクルを実行するためコマンドレジスタにライトすると、コマンドが実際
に実行されるまでは、このレジスタへのライトサイクルがウェイトします。したがっ
てレジスタアクセスのアボートをサポートしています。アボートが発生すると、その
クロックサイクル内の現在のオペレーションを完了し、コントロール信号はアイドル
状態に戻ります。
•
リフレッシュは、サイクルアボートの影響を受けません。リフレッシュ中にアボート
が起きてもリフレッシュは実行されます。
(6) パワーダウンモード
ソフトウエアは、コマンドレジスタを使ってコマンドを発生することにより、いつでも
SDRAM に対して CKE をディセーブルにしたり、イネーブルにすることができます。
Enter L/H Power Mode コマンドと Enter Power Down Mode コマンドは CKE をオフに
し、コマンド Exit L/H Power/Power Down Mode は CKE をオンにします。低消費電力モ
ード (L/H Power Mode) は SDRAM をセルフリフレッシュモードにし、パワーダウンモー
ド (Power Down Mode) は SDARM をプリチャージパワーダウンモードにします。プリチ
ャージパワーダウンモードでは、いかなるリフレッシュも実行されないため、SDRAM の
データは無効になる可能性があります。
パワーダウンモードに入ると、SDRAM に対するクロック入力が停止されます。また、
SDRAMC は内部リフレッシュ回路のリフレッシュカウンタをリセットし、ディセーブル
にします。
上記のようにコマンドレジスタによる方法か、または自動終了プロセスによってパワー
ダウンモードは終了します。この自動終了プロセスは、CKE がオフの状態で、SDRAM (ま
たは SMROM) にアクセスしようとしたときに実行されます。これはソフトウエアで特に
設定しなくても自動的に実行されます。自動終了プロセスでは、CKE は自動的にオンに
なり、バスアクセスが正常に実行されます。したがって、TX3927 は、自身がパワーダウ
ンモードから戻った直後にもすぐに命令のフェッチまたはデータのリードを実行できま
す。
8-22
第 8 章 SDRAM コントローラ
パワーダウンモードが終了後、10 tCK の時間たってから次のオペレーションが始まりま
す。これは SDRAM におけるパワーダウン後の最初のアクセスまでの時間の規定を十分守
っています。
TX3927 にはロウパワーのために HALT モードや DOZE モードも設けられています。
これらのモードでは、CPU は停止しますが、SDRAMC を含めその他の周辺は止まりませ
ん。したがって、HALT/DOZE モードに移行する前に、適正なチャネルコマンドを実行し
てメモリをセットアップしておいてください。
(7) デバッグモード
•
「8.5.1 (5) バスエラーおよび異常サイクル終了」の項で説明したように、デバッグ
リセットにより現在の SDRAM オペレーションを適正に終了するため、メモリの内容
をデバッグすることができます。
•
SDRAMC は、デバッグモードで正常に動作します。
8-23
第 8 章 SDRAM コントローラ
8.5.3
DIMM フラッシュオペレーション
(1) 初期設定、ブート、およびリフレッシュ
DIMM フラッシュは初期化の必要がありません。最大 16 クロック間リセットすること
でリードまたはライトをできるようになります。
リセット信号の立ち上がりでブート信号 BME [1 : 0] (ADDR [9 : 8]) を “01” に設定する
ことにより、ブートメモリとして DIMM フラッシュを選択できます。このとき SDRAM
チャネル 0 が、DIMM フラッシュ用のブートチャネルとして使用されます。コントロー
ルレジスタ (SDCCR0) 中のベースアドレスは 0x1FC0_0000 です。DIMM フラッシュメ
モリのロウアドレスの MSB がアドレス 21 までの場合、DIMM フラッシュにおける先頭
アドレスは 0 になります。コントロールレジスタ (SDCCR0) のその他のフィールドは、
メモリタイプ (SDM0) = 01 (DIMM フラッシュ)、イネーブル (SDE0) = 1 (チャネルイネー
ブル)、メモリ幅 (SDMW0) = 0 または 1 (ブート信号 BOOT16* (ADDE [13]) の値に応じ
て 32 ビットまたは 16 ビットになります) に初期化されます。
リフレッシュ回路は、SDRAMC のチャネルのうち、最低 1 チャネルを SDRAM または
SGRAM としてイネーブルにした場合にのみ動作し、DIMM フラッシュに設定されたチ
ャネルに対してはリフレッシュは実行されません。
リフレッシュオペレーションに対する SDRAM およびフラッシュの間のもう 1 つの大
きな違いは、DIMM フラッシュに対するバーストアクセス中にリフレッシュ要求による割
り込みが可能な点です。これは、設定によってはフラッシュバーストアクセスが SDRAM
のノーマルリフレッシュ周期を超えるためで、その結果として連続した 2 つのリフレッシ
ュ要求の 1 つが失われる場合もあります。例えば、ウェイト数が 16、システムクロック
が 50 MHz の 16 ビットバス幅のフラッシュメモリから 32 ワードバーストリードする場合、
完了するのに 28.1 µs [ (44 クロック × 32 リード − 3 クロック) × 20 ns] かかるため、リフ
レッシュ周期 15.6 µs を超えてしまいます。TX3927 はこれを避けるため、DIMM フラッ
シュにバーストアクセスしている最中でもリフレッシュが発生すると、リフレッシュを優
先させます。
(2) プリチャージ
プリチャージは、DIMM フラッシュには意味がありません。同様に、コマンドレジスタ
の他のコマンドも意味がありません。DIMM フラッシュに対して実行されたコマンドは、
DIMM フラッシュのチャネルの CS*がアサートされていないため、NOP として処理され
ます。したがって、フラッシュチャネルがイネーブルでかつコマンドレジスタマスクビッ
トも “1” にセットされている場合やフラッシュがシステム内の唯一のメモリである場合で
も、実行されたコマンドが終了するまでメモリアクセスを実行できません。
一般に、SDRAM にも DIMM フラッシュにも共通に接続している ADDR、RAS*、CAS*、
ならびに WE*信号は、SDRAM アクセスおよびコマンドを実行するときにアクティブに
なります。ただし、CS [7 : 0] *に関しては該当する SDRAM チャネルの CS*のみがアサ
ートされます。フラッシュメモリは、CS*がアサートされるまで待機状態のままです。
8-24
第 8 章 SDRAM コントローラ
(3) リードとライト
•
DIMM フラッシュ用の SDRAM タイミングレジスタ (SDCTR2) によりウェイト時間
を設定できます。これにより様々なスピードクラスのフラッシュメモリに対するリー
ドおよびライトアクセス時間を調整することができます。
•
DIMM フラッシュでは SDRAM と同様にバーストアクセスをサポートします。一般
に、フラッシュへのライトは完了するまでインタバル時間が必要となるため、フラッ
シュに対するバーストライトは無効です。ただし、この機能は将来のために設定でき
るようになっていますので注意してください。
•
CPU などからの DIMM フラッシュへのバーストアクセスは SDRAMC により外部バ
ス上ではシングルアクセスとして処理されます。
•
DIMM フラッシュ以外のメモリアクセス時には、フラッシュデバイスを NOP 状態に
保つために、CS*は常に High のままです。
•
スローライトバーストは DIMM フラッシュには使えません。SDTCR1.SWB1 ビット
“1” にセットしてこの機能をイネーブルにしても、DIMM フラッシュのアクセスには
影響ありません。この機能はあくまで同一システム上の SDRAM に対してのみ機能し
ます。
•
データリードバイパスは、DIMM フラッシュのアクセスに対しても同じ効果がありま
す。すなわち、DIMM フラッシュのアクセスは、SDRAM タイミングレジスタ
(SDTCR1) のデータリードバイパスビット (DRB1) の設定に従います。
(4) アドレッシングに関する注意点
•
表 8.5.8に、タイプ 0 の DIMM フラッシュのアドレスマッピングを示します。ロウア
ドレスの ADDR5-ADDR7 は “don’t care” です。ADDR16, ADDR17 は拡張用に使用
できます。
表 8.5.8 タイプ 0 の DIMM フラッシュのアドレスマッピング
32 ビットフラッシュメモリのタイプ 0 のアドレスマッピング
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
16
17
ADDR [19 : 5]
カラムアドレス
時
18
(B1)
19
(B0)
2
3
4
5
6
7
8
9
10
11
12
25
26
14
13
ロウアドレス時
10
11
12
15
16
17
18
19
20
21
22
25
26
24
23
16 ビットフラッシュメモリのタイプ 0 のアドレスマッピング
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
16
17
ADDR [19 : 5]
カラムアドレス
時
18
(B1)
19
(B0)
1
2
3
4
5
6
7
8
9
10
11
24
25
13
12
ロウアドレス時
10
11
12
14
15
16
17
18
19
20
21
24
25
23
22
8-25
第 8 章 SDRAM コントローラ
•
表 8.5.9に、タイプ 1 の DIMM フラッシュのアドレスマッピングを示します。ロウア
ドレスの ADDR5-ADDR7 および ADDR18, ADDR19 は “don’t care” です。ADDR17
は拡張用に使用可能です。
表 8.5.9 タイプ 1 の DIMM フラッシュのアドレスマッピング
32 ビットフラッシュメモリのタイプ 1 のアドレスマッピング
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
16
17
ADDR [19 : 5]
カラムアドレス
時
18
(B1)
19
(B0)
2
3
4
5
6
7
8
9
19
20
10
24
25
12
11
ロウアドレス時
10
11
12
13
14
15
16
17
18
21
22
23
25
12
11
16 ビットフラッシュメモリのタイプ 1 のアドレスマッピング
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
16
17
ADDR [19 : 5]
カラムアドレス
時
18
(B1)
19
(B0)
1
2
3
4
5
6
7
8
18
19
9
23
24
11
10
ロウアドレス時
10
11
12
12
13
14
15
16
17
20
21
22
24
11
10
•
ベースアドレス (SDCCRn.SDAAn) とアドレスマスク (SDCCRn.SDAMn) の設定に
よりチャネルが選択されます。ただし、コントロールレジスタ内のロウサイズ
(SDCCRn.SDRSn)、カラムサイズ (SDCCRn.SDCSn) の設定はフラッシュに影響し
ません。これらのフィールドは無視されます。
•
その他のすべてのアドレッシング機能は、SDRAM と同じです。すべての境界をまた
ぐアクセスがサポートされ (特に、ページおよびチャネル境界)、複数チャネルが同一
アドレスでイネーブルになった場合は、優先順位のもっとも高いもの
(ch0⇒ch1⇒2ch⇒ch3⇒ch4⇒ch5⇒ch6⇒ch7 の順) がアクティブになります。
(5) バスエラーと異常サイクル終了
•
唯一の例外を除いて SDRAM と同じです。アクセスのアボートが異なります。DIMM
フラッシュではアボートがリードオペレーションで発生しようとライトオペレーシ
ョンで発生しようとフラッシュメモリサイクルをただちに終了します (フラッシュメ
モリアクセスは完了するまで数クロックかかります)。バイトイネーブルとデータバス
(OE*のデアサートを含む) をバスマスタによりただちに要求されるため、このように
ただちにメモリサイクルを終了します。
(6) パワーダウンモード
•
SDRAM と同じですが、DIMM フラッシュでは、SDCLK が出力されていなくても
SDRAMC が動作している限りバスサイクルが依然として発生する点が異なっていま
す。DIMM フラッシュは非同期デバイスで、CKE 信号も外部クロック信号も使用し
ていないからです。
(7) デバッグモード
•
SDRAM と同じです。
「8.5.1 (7) デバッグモード」を参照してください。
8-26
第 8 章 SDRAM コントローラ
8.5.4
SMROM オペレーション
(1) 初期設定、ブート、およびリフレッシュ
SMROM は、パワーオン時に自動的に初期化され、データ転送できる状態になります。
SMROM は CS*および OE*の両方がアサートされるまではバスを駆動しません。そのデ
フォルト値は RAS レイテンシ (tRCD) = 2、CAS レイテンシ (tCASL) = 5、バースト長 = 4
または 8 です。
SMROM ブート時の適正オペレーションのためにこれらのデフォルト値が要求されま
す。タイミングレイテンシは SMROM 用の SDRAM タイミングレジスタ (SDCTR3) で初
期化時にこの値に設定されています。さらに、SDRAMC は 4 のバースト長で動作します
が、初期ブート時に実行されるシングルリードでは、バースト長 = 8 も可能です。8 ワー
ドバースト長では SMROM で tRC = 10 @66 MHz になりますが、シングルリードではデフ
ォルトのタイミングレイテンシにより tRC = 11 となるため、これも問題ありません。
SMROM ブートは、リセット時にブート信号 BME [1 : 0] (ADDR [9 : 8]端子)を “00” に
設定することによって選択されます。ブートシーケンスの途中で、任意のデフォルト設定
を変更できます。このときバースト長を 8 から 4 に変更してください。この変更は、MRS
コマンドを実行する (バースト長は自動的に 4 に設定され、タイミングのレイテンシはデ
フォルト値のまま) ことによって行われます。共有タイミングレジスタおよび SMROM 内
のタイミングレイテンシは、オペレーションを適正に実行できるまではプログラムしない
ことが重要です。
バースト長が 4 に設定されると、キャッシュをイネーブルにすることができ、バースト
が実行可能になります。ブートシーケンスを SMROM から続行しつつ、タイミングレイ
テンシを変更する場合は、これを実行するためのプログラムがキャッシュ内に存在しなく
てはなりません。SDRAM タイミングレジスタ (SDCTR3) の更新と MRS を実行するキャ
ッシュ内の命令は、SMROM のタイミングレイテンシを変更しても影響を受けません。変
更作業が終了すれば、タイミングレイテンシは SDRAMC と SMROM 間で同期されてい
ますので、ノーマルリードサイクルが開始可能になります。
一方、タイミングレイテンシを変更する前にブートメモリを RAM に切り替えられると、
タイミングレジスタ (SDCTR3) と SMROM 内のモードレジスタの変更がより自在に行え
るようになります。
メモリチャネル 0 は、ブートチャネルとして使用します。コントロールレジスタ
(SDCCR0) で設定されているデフォルトのベースアドレスは 0x1FC0_0000 です。
32 M ビ
ットの SMROM では MSB ロウアドレスがアドレスビット 21 のため、SMROM のブート
の先頭アドレスは 0 になります。これに対して 64M bit の SMROM の場合には、アドレ
ス 22 (= 1) が MSB になるため、ブートの先頭アドレスは 0x400000 になります。コント
ロールレジスタ (SDCCR0) のその他のフィールドは、メモリタイプ (SDM0) = 10、イネ
ーブル (SDE0) = 1、メモリ幅 (SDMW0) = 0 (32 ビット) に初期化されています。
リフレッシュ回路は、SDRAM が最低 1 チャネルでイネーブルになった場合にのみ動作
します。リフレッシュは、SMROM に設定したチャネルに対しては行われません。
8-27
第 8 章 SDRAM コントローラ
(2) リードとライト
•
バーストアクセスは、4 ワードアライメントでなくてはなりません。TX39/H2 コア (た
だしクリティカルワードファーストは例外です) とデュアルアドレスモードの DMA
コントローラは常に 4 ワード境界にアクセスします。一方、SMROM に対する PCI
バーストアクセスは、4 ワード境界にアライメントされないことがありますので注意
してください。
•
SMROM へのライトは無効です。ライト実行しようとすると、SDRAMC はそれを無
視し、バスのアクノリッジを返しません。したがってバスがロックして、バスタイム
アウトが発生します。
•
バースト長が 4 であるため、シングルリードはバースト停止コマンド (プレチャージ
コマンド) によって終了します。これにより、SMROM はシングルのワードデータの
みを出力して、その後、データバスをハイインピーダンスします。
•
ロウアドレスマッチ機能がイネーブルになると、現在のロウアドレスが前回のロウア
ドレスと比較されます。比較した結果が一致すると、同じチャネルが選択されると見
なし、起動コマンド (RAS*サイクル) がスキップされ、リードコマンド (CAS*サイク
ル) のみが実行されます。これは、シングルリードでもバーストリードでも行われま
す。66 MHz では、tRCD = 2 tCk であるため、各リードアクセスごとに 2 クロックサ
イクル短縮できます。50 MHz では、tRCD = 1 tCk であるため、各リードアクセスご
とに 1 クロックサイクルが短縮できます。
(3) アドレッシングに関する注意点
•
表 8.5.10に、32 ビットの SMROM メモリのアドレスマッピングを示します。ロウア
ドレス 13 ビット、カラムアドレス 7 ビットのデバイスにおける基本的なマッピング
は表中ダークグレーで表示されています。A22 と A23 の 2 つのアドレスは、カラム
空間またはロウ空間の大きいものに対応するために使います。どのアドレスまで使用
するかは、使用する SMROM 部品で変わりますでの使用する SMROM をもとに決め
てください。
表 8.5.10 32 ビット SMROM メモリのアドレスマッピング
ロウアドレス幅 = 13 (14, 15)
カラムアドレス幅 = 7 (8, 9)
アドレスビット
5
6
7
8
9
10
11
12
13
14
15
(AP)
16
17
ADDR [19 : 5]
カラムアドレス
18
(B1)
19
(B0)
2
3
4
5
6
7
8
22
22
23
19
20
21
22
23
ロウアドレス
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
•
ロウアドレスマッチ機能をイネーブルにすると、マッチング回路が 15 ビットのロウ
アドレスをチェックします。
(4) バスエラーと異常サイクル終了
•
SMROM のバースト長が 4 で動作すること以外は、SDRAM と同じです。リードオペ
レーションは、プリチャージコマンドによってアボートされますが、SMROM のデー
タ端子は 4 tCK または 5 tCK の CAS レイテンシ後にハイインピーダンスになります。
(5) パワーダウンモード
•
SMROM パワーダウンモードが低消費電力モードのみであることを除いて、SDRAM
と同じです。自動終了機能も SDRAM と同様に実行できます。
8-28
第 8 章 SDRAM コントローラ
8.5.5
SGRAM オペレーション
SGRAM オペレーションは、SDRAM オペレーションと非常によく似ています。実際に、
SGRAM メモリは、DSF 端子を Low で固定することにより、システム内の SDRAM の代替メ
モリとして使用することができます。ただし、サイズと以下で説明する SGRAM の特殊な機能
に関してはやや異なっています。
(1) アドレッシング
SGRAM はメモリサイズが 8 M ビットと 16 M ビットです (データは 32 ビット幅)。こ
のように SDRAM に比べてアドレッシング空間は小さくなっています。これらのデバイス
は、コントロールレジスタ (SDCCRn) でロウサイズを 11 ビット、カラムサイズを 8 ビッ
トに設定して使います。TX3927 ではこの 2 つの SGRAM デバイスの両方をサポートしま
す。8 M ビットデバイスでは、TX3927 の ADDR5-ADDR13 と ADDR16 を SGRAM チッ
プの A0-A8 と BA にそれぞれ接続します。16 M ビットデバイスでは、TX3927 の
ADDR5-ADDR14 と ADDR17 を SGRAM チップの A0-A9 と BA にそれぞれ接続します。
いずれの場合にも、プリチャージビット ADDR13 または ADDR14 は、オートプリチャー
ジかどうかによりカラムアドレスで Low または High になります。
2 つのチャネルの SGRAM メモリを連続したひとつの SGRAM メモリ空間として使用
するには、16 M ビットデバイスを使用します。(8 M ビットデバイスは、コントロールレ
ジスタ内のベースアドレス選択フィールドよりも小さいサイズなので使用できません)
(2) ライトパービット (WPB) およびブロックライト (BW) 機能
各機能は、SDRAM タイミングレジスタ (SDCTR1) 内の対応するビットを “1” にセット
することによってイネーブルになります。このビットはすべてのチャネルの SGRAM メモ
リに適用されます。この 2 つの機能をともに、イネーブルにすると、同じライトアクセス
に対して、両方の機能が適用されます。
ライトパービット機能は、マスクレジスタを SGRAM にロードすることによって初期化
されます。これには、スペシャルモードレジスタセット (SMRS) コマンド (TX3927 の設
定ではロードマスクコマンド) を使用します。同様に、ライトブロック機能はロードカラ
ーコマンドをロードすることによって初期化されます。これらのコマンドは、いつでも実
行でき、SGRAM の内部レジスタをアップデートすることができます。コマンドレジスタ
(SDCCMD) 内のチャネルマスクビット (SDCMSK3) は、SMRS コマンドを実行する前に
正しく設定してください。
SDRAM と違って、BW には守るべき独自なタイミングがあります (WPB 機能には、特
殊な制約がありません)。ブロックライトから、プリチャージディレイ時間 (tBPL) とブロ
ックライトサイクル時間 (tBWC) の 2 つの AC スペックがあります。tBPL は、BW 後にプ
リチャージをどのくらい速く実行できるかを規定するものです。デバイスのクロックスピ
ードなどにより 1∼2 tCK の値になります。tBWC は、バースト時に連続する BW をどのく
らい速く実行できるかを規定します。デバイスクロックスピードなどにより 1, 2 tCK の値
になります。
tBPL はシングルライトおよびバーストライトに適用されます。SDRAM タイミングレジ
スタ (SDCTR1) 中のライトリカバリタイムで制御します。SDRAM と同じく、オートプリ
チャージを実行するバーストライトにおいて、使用するメモリに適した値に設定してくだ
さい。
tBWC はバーストライトに適用され、一般には 1 tCK 固定です。ただし、SDRAM タイ
ミングレジスタ (SDCTR1) でスローライトオプションを設定していると、tBWC は 2 tCK
になります。
DMA アドレスインクリメント機能は、BW とともに使用することができます。
8-29
第 8 章 SDRAM コントローラ
DSF 信号は、SMRS コマンド実行時と WPB および BW 機能実行時にアサートされま
す。DSF 端子は PIO 機能 (PIO [1]) と兼用になっています。DSF 端子として使用するに
は、
TX3927 ピンコンフィグレーションレジスタ (PCFG) で設定する必要があります。
DSF
信号は SGRAM アクセスのクロックサイクル時にのみアサートされます。
8.5.6
ソフトウエアの作成上の注意点
•
SDRAM/SGRAM 用の SDRAM タイミングレジスタ (SDCTR1) には、かならず MRS コ
マンドが実行する前に適正なタイミング値でプログラムしてください。また、DIMM フラ
ッシュ用の SDRAM タイミングレジスタ (SDCTR2) は、効率的なアクセスができるよう
に適正な値を設定してください。SMROM 用の SDRAM タイミングレジスタ (SDCTR3)
には、ブート時に特別な配慮が必要で、これについては「8.5.3 (1) 初期設定、ブートお
よびリフレッシュ」を参照してください。
•
3 つの SDRAM タイミングレジスタ (SDCTR1~3) のタイミング設定は、システム内のす
べての SDRAM/SGRAM、DIMM フラッシュ、および SMROM メモリに適用されます。
したがって、設定は最も遅いデバイスに合わせてプログラムしてください。
•
TX3927 はライトバッファをもっています。TX39/H2 コアは直接メモリなどへの書き込み
は行わず、ライトバッファにデータをライトするだけでストア命令を終了し、次の命令の
処理に移っていきます。ライトバッファは書き込まれたデータをバスの空き具合を見て、
対象メモリなどにライトします。このためプログラム上のストア命令と実際のライトバス
サイクルとの間に時間差が発生します。コマンドレジスタ (SDCCMD) (もしくは SGRAM
ロ ー ド マ ス ク レ ジ ス タ (SDCSMRS1) ま た は SGRAM ロ ー ド カ ラ ー レ ジ ス タ
(SDCSMRS2)) からのコマンドの実行を待ってからプログラム処理が先に進むようにす
るためには、ライトバッファをフラッシュします。ライトバッファのフラッシュは、コマ
ンドレジスタをいったんライトした後、単に同じアドレスをリードバックするとこで実現
できます (最近ライトされたアドレスからリードバックすると、ライトバッファがフラッ
シュされるまでそのリードバックは完了しません)。このように安全のため、“lw” 命令に
よるリードバックを実行してパイプラインをストールさせて、確実にコマンドが実行され
るようにしてください。
•
32 M ビットの SMROM デバイスのブートアドレスは 0 になりますが、64 M ビットの
SMROM デバイスのブートアドレスはゼロ以外の値 (0x400000) になります。詳細につい
ては、SMROM の項を参照してください。
8-30
第 8 章 SDRAM コントローラ
第8章
SDRAM コントローラ
8.6
タイミング図
ここに示すタイミング波形は、次の制約のもとでのタイミングになっていますので注意してくだ
さい。
(1) シングル 32 ビットライトでは、データがメモリにライトされると同時に ACK*がアサートさ
れます。ただし、バーストライトまたは 16 ビットメモリに対する 32 ビットライトでは、デー
タがメモリにライトされる 2 クロックサイクル前に ACK*がアサートします。すべてのリード
では、データが有効でメモリからリードされるサイクルと同じサイクルで ACK*がアサートさ
れます。ACK*は DIMM フラッシュライトでも示されますが、そのバスサイクルの終わりにア
サートされます。
8.6.1
32 ビットバスモードの SDRAM シングルリードオペレーション
SDCLK
CS*
ADDR
[19 : 5]
7fff
7bff
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
87654321
ACK*
図 8.6.1 32 ビット SDRAM メモリからのシングルリード
(tCLK = 15、tRCD = 2、tCASL = 2)
8-31
第 8 章 SDRAM コントローラ
8.6.2
32 ビットバスモードの SDRAM シングルライトオペレーション
SDCLK
CS*
ADDR
[19 : 5]
7ff7
7bff
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
789abcde
ACK*
図 8.6.2 32 ビット SDRAM メモリへのシングルライト
(tCLK = 15、tRCD = 2、tRAS = 4)
8-32
第 8 章 SDRAM コントローラ
SDCLK
CS*
ADDR
[19 : 5]
7ff7
7bff
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
789abcde
ACK*
図 8.6.3 32 ビット SDRAM メモリへのシングルライト
(tCLK = 15、tRCD = 2、tRAS = 3)
8-33
第 8 章 SDRAM コントローラ
8.6.3
32 ビットバスモードの SDRAM バーストリードオペレーション
SDCLK
CS*
ADDR
[19 : 5]
0001
0004
0005
0006
0007
0008
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
00000410
f
fffffbef
00000418
ACK*
図 8.6.4 32 ビット SDRAM メモリからのバーストリード
(4 ワード、tCLK = 15、tRCD = 2、tCASL = 2)
8-34
fffffbe7
第 8 章 SDRAM コントローラ
8.6.4
32 ビットバスモードの SDRAM バーストライトオペレーション
SDCLK
CS*
ADDR
[19 : 5]
0000
0100
0101
0102
0503
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
DATA [31 : 0]
f
0
000003f0
f
fffffc0f
000003f8
fffffc07
ACK*
図 8.6.5 32 ビット SDRAM メモリへのバーストライト
(4 ワード、tCLK = 15、tRCD = 2、tRAS = 4)
8-35
第 8 章 SDRAM コントローラ
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE
WE*
CAS*
RAS*
ADDR
[19 : 5]
CS*
f
07ff
00fd
00fe
00ff
ffe0000f
0000
001ffff8
0001
ffe00007
0
0002
0000
0100
0101
00000
f
32 ビットバスモードの SDRAM リード (ページをまたがるとき)
SDCLK
8.6.5
図 8.6.6 32 ビット SDRAM メモリからのリード (ページをまたがるとき)
(4 番目のワードがページを越えたとき、tCLK = 15、tRCD = 2、tCASL = 2)
8-36
第 8 章 SDRAM コントローラ
ffe0000f
図 8.6.7 32 ビット SDRAM メモリへのライト (ページをまたがるとき)
(2 番目のワードがページを越えたとき、tCLK = 15、tRCD = 2、tRAS = 4)
8-37
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE
WE*
CAS*
RAS*
ADDR
[19 : 5]
CS*
f
0000
00ff
0
0000
f
0001
0000
001ffff8
0
0001
0402
ffe0000 000003
f
32 ビットバスモードの SDRAM へのライト (ページをまたがるとき)
SDCLK
8.6.6
第 8 章 SDRAM コントローラ
0
0c0d0e0f
08090a0b
04050607
図 8.6.8 32 ビット SDRAM メモリへのスローバーストライト
(4 ワード、tCLK = 15、tRCD = 2、tRAS = 4)
8-38
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE
WE*
CAS*
RAS*
ADDR
[19 : 5]
CS*
f
0000
e
00c0
00010203
d
00c1
b
00c2
70
04c3
f
32 ビットバスモードの SDRAM スローバーストライトオペレーション
SDCLK
8.6.7
第 8 章 SDRAM コントローラ
8.6.8
16 ビットバスモードの SDRAM シングルリードオペレーション
SDCLK
CS*
ADDR
[19 : 5]
7800
7a01
7a00
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
c
DATA [31 : 0]
f
xxxx8765 xxxx4321
ACK*
図 8.6.9 16 ビット SDRAM メモリからのシングルリード
(tCLK = 15、tRCD = 2、tCASL = 2)
8-39
第 8 章 SDRAM コントローラ
8.6.9
16 ビットバスモードの SDRAM シングルライトオペレーション
SDCLK
CS*
ADDR
[19 : 5]
7800
7a80
7a81
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
DATA [31 : 0]
f
c
xxxx789a xxxxbcde
ACK*
図 8.6.10 16 ビット SDRAM メモリへのシングルライト
(tCLK = 15、tRCD = 2、tRAS = 4)
8-40
f
第 8 章 SDRAM コントローラ
8.6.10
32 ビットバスモードの DIMM フラッシュシングルリードオペレーション
SDCLK
CS*
ADDR
[19 : 5]
0020
0001
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
DATA [31 : 0]
9abcdef0
ACK*
図 8.6.11 32 ビット DIMM フラッシュメモリからのシングルリード
(tCLK = 15、ウェイト = 4)
8-41
第 8 章 SDRAM コントローラ
8.6.11
32 ビットバスモードの DIMM フラッシュシングルライトオペレーション
SDCLK
CS*
ADDR
[19 : 5]
0020
0001
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
9abcdef0
0001
ACK*
図 8.6.12 32 ビット DIMM フラッシュメモリへのシングルライト
(tCLK = 15、ウェイト = 3)
8-42
第 8 章 SDRAM コントローラ
8.6.12
32 ビットバスモードの SMROM シングルリードオペレーション
SDCLK
CS*
ADDR
[19 : 5]
0000
0051
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
DATA [31 : 0]
eb800051
ACK*
図 8.6.13 32 ビット SMROM メモリからのシングルリード
(tCLK = 15、tRCD = 2、tCASL = 5)
8-43
8-44
(8 ワード、tCLK = 15、tRCD = 2、tCASL = 5)
図 8.6.14 32 ビット SMROM メモリからのバーストリード
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE
WE*
CAS*
RAS*
ADDR
[19 : 5]
CS*
0001
00f8
c1c000f8 c18000f9 c14000fa c10000fb c0c000fc c08000fd c04000fe c00000ff
f
00fc
8.6.13
SDCLK
第 8 章 SDRAM コントローラ
32 ビットバスモードの SMROM バーストリードオペレーション
第 8 章 SDRAM コントローラ
8.6.14
低消費電力およびパワーダウンモード
SDCLK
CS [1]*
CS [0]*
ADDR
[19 : 5]
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
DATA [31 : 0]
ACK*
図 8.6.15 低消費電力モードへの移行
(tCLK = 15、Ch. 0 = SDRAM、Ch. 1 = SMROM)
8-45
第 8 章 SDRAM コントローラ
SDCLK
CS [1]*
CS [0]*
ADDR
[19 : 5]
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
DATA [31 : 0]
ACK*
図 8.6.16 パワーダウンモードへの移行
(tCLK = 15、Ch. 0 = SDRAM、Ch. 1 = SMROM)
8-46
8-47
図 8.6.17 パワーダウンモードからの復帰
(tCLK = 15、Ch. 0 = SDRAM、Ch. 1 = SMROM)
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE
WE*
CAS*
RAS*
ADDR
[19 : 5]
CS [0] *
CS [1] *
SDCLK
0000
f
0
0006
12345678
f
第 8 章 SDRAM コントローラ
第 8 章 SDRAM コントローラ
8.6.15
32 ビットバスモードの SGRAM メモリ
SDCLK
CS*
ADDR
[19 : 5]
0020
RAS*
CAS*
WE*
CKE
OE*
DSF
f
DQM [3 : 0]
DATA [31 : 0]
55aa33cc
ACK*
図 8.6.18 32 ビット SGRAM メモリ内のマスクレジスタの SMRS
8-48
第 8 章 SDRAM コントローラ
SDCLK
CS*
ADDR
[19 : 5]
0040
RAS*
CAS*
WE*
CKE
OE*
DSF
DQM [3 : 0]
DATA [31 : 0]
f
aa55cc33
ACK*
図 8.6.19 32 ビット SGRAM メモリ内のカラーレジスタの SMRS
8-49
第 8 章 SDRAM コントローラ
SDCLK
CS*
ADDR
[19 : 5]
0000
000f
RAS*
CAS*
WE*
CKE
OE*
DSF
DQM [3 : 0]
f
0
f
ffffffff
DATA [31 : 0]
ACK*
図 8.6.20 32 ビット SGRAM メモリへの同時 WPB および BW
(ノンバースト、tRCD = 2、tRAS = 3、tBPL = 1)
8-50
第 8 章 SDRAM コントローラ
8.6.16
外部 DMA オペレーション (ビッグエンディアン)
SDCLK
CS*
ADDR
[19 : 5]
0002
0086
0087
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
DATA [31 : 0]
c
f
xxxxffff
ACK*
図 8.6.21 ビッグエンディアン時の外部 DMA 転送: 16 ビット I/O から
16 ビット SDRAM メモリへのシングルアドレス転送
(GBE [3 : 0] * = 3⇒偶数アドレスライト)
8-51
第 8 章 SDRAM コントローラ
SDCLK
CS*
ADDR
[19 : 5]
0002
0086
0087
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
DATA [31 : 0]
f
c
xxxxfef7
ACK*
図 8.6.22 ビッグエンディアン時の外部 DMA 転送: 16 ビット I/O から
16 ビット SDRAM メモリへのシングルアドレス転送
(GBE [3 : 0] * = C⇒奇数アドレスライト)
8-52
第 8 章 SDRAM コントローラ
8.6.17
外部 DMA オペレーション (リトルエンディアン)
SDCLK
CS*
ADDR
[19 : 5]
0002
0086
0087
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
f
c
DATA [31 : 0]
xxxxffff
ACK*
図 8.6.23 リトルエンディアン時の外部 DMA 転送: 16 ビット I/O から
16 ビット SDRAM メモリへのシングルアドレス転送
(GBE [3 : 0] * = 3⇒奇数アドレスライト)
8-53
第 8 章 SDRAM コントローラ
SDCLK
CS*
ADDR
[19 : 5]
0002
0086
0087
RAS*
CAS*
WE*
CKE
OE*
DQM [3 : 0]
DATA [31 : 0]
c
f
xxxxfef7
ACK*
図 8.6.24 リトルエンディアン時の外部 DMA 転送: 16 ビット I/O から
16 ビット SDRAM メモリへのシングルアドレス転送
(GBE [3 : 0] * = C⇒偶数アドレスライト)
8-54
第 8 章 SDRAM コントローラ
8.7
SDRAM 使用例
SDRAM 接続例を図 8.7.1に、SDRAM (DIMM100 ピン) の接続例を図 8.7.2に示します。
SDRAM (x16 bit)
TX3927
DQM [3:0]
DQM [3]
UDQM
ADDR [17:5]
ADDR [19]
ADDR [18]
ADDR [19:5]
DQM [2]
LDQM
DQM [1]
UDQM
A [12:0]
A [12:0]
BS0
BS1
BS0
BS1
SDCS*[0]
RAS*
CAS*
WE*
CS*
RAS*
CAS*
WE*
CS*
RAS*
CAS*
WE*
SDKLK [0]
CKE
CLK
CKE
CLK
CKE
DQ [15:0]
DQ [15:0]
D [15:0]
D [31:16]
DATA [31:0]
図 8.7.1 SDRAM (x16 bit) 接続例 (32 ビットデータバス)
SDRAM DIMM100
TX3927
ADDR [17:5]
ADDR [19:5]
ADDR [19]
ADDR [18]
DQMB [3:0]
A [13:0]
BA0
BA1
DQMB [3:0]
SDCS [0]
SDCS [1]
S0
S1
S2
S3
RAS*
CAS*
WE*
RAS*
CAS*
WE*
CKE
CKE0
CKE1
CK0
CK1
SDKLK [0]
DQ [31:0]
DATA [31:0]
図 8.7.2 SDRAM (DIMM100 ピン) 接続例
8-55
DQM [0]
LDQM
第 8 章 SDRAM コントローラ
8-56
第 9 章 外部バスコントローラ
第9章
9.1
外部バスコントローラ
特長
外部コントローラ (ROMC) は、ROM、SRAM メモリ、および I/O ペリフェラルをアクセスする
ために必要なすべての信号とタイミングを生成します。
その特長は以下の通りです。
•
最高 66 MHz のオペレーション
•
8 チャネル; 32 ビットチャネルコントロールレジスタによりそれぞれ独立して設定可能
•
ROM、マスク ROM、ページモード ROM、EPROM、EEPROM、SRAM、およびフラッ
シュメモリに対応
•
I/O ペリフェラルのアクセスをサポート
•
チャネルごとにデータバス幅として 16 ビット/32 ビットのどちらかを選択可能
•
チャネルごとにフルスピードまたはハーフスピードのどちらかを選択可能
•
32 ビットのメモリに対しては 1 M バイトから 1 G バイトのメモリサイズに対応。16 ビッ
トのメモリに対しては 1 M バイトから 512 M バイトのメモリサイズに対応
•
アドレスはマルチプレクス (ADDR [19:2])。上位アドレスラッチ (アドレス [29:20]) のた
めに ACE*信号を持つ
•
4、8、16、および 32 ワードの G-Bus バースト長をサポート
•
ページモードメモリに対して 4、8、および 16 ページサイズをサポート
•
アドレス、チップイネーブル、ライトイネーブル、および出力イネーブル信号のセットア
ップならびにホールド期間をプログラマブルに設定可能
•
外部アクノリッジ信号 (ACK*) および外部レディ信号モードをサポート
•
ブートメモリとしてチャネル 0 が使用可能
BOOT16:
データバス幅を選択 (16 ビットまたは 32 ビット)
BOOTAI:
ACK*出力または ACK*入力を選択
BOOTBC:
BWE ピンをバイトイネーブルまたはバイトライトイネーブルのどち
らとして使うか選択
BOOTME[1:0]: マスタイネーブルとブートスピード
•
グローバルオプションをサポート
CHANHS:
SYSCLK のスピードを選択 (ハーフスピードまたはフルスピード)
ACEHOLD:
ACE*信号に対するアドレスホールド時間を設定 (アドレスを ACE*と
同時に切り替えるか 1 クロック遅く切り替える)
•
各チャネルごとにタイミングを設定可能
•
チャネルごとにウェイト時間をプログラマブルに設定可能 (0∼63 サイクル)
9-1
第 9 章 外部バスコントローラ
9.2
ブロック図
ハーフ
コンフィグレーション
コントロール
CE*[7:0]
BWE*[3:0]/BE*[3:0]
ROMC
SWE*
ブートオプション
OE*
ADDR
G-Bus I/F 信号
ブートオプション
EBIF
ACK*
OE*
ADDR
ACK*
コントロール
ACE*
EBIF I/F 信号
G-Bus
図 9.2.1TX3927 内部の ROMC の接続
G-Bus
チャネルコント
ロールレジスタ
ROMC
ACEHLD
CHANHS
BOOT16
BOOTME
BOOTBE
BOOTAD
RESET*
CH0
アドレス
デコーダ
レジスタアドレス
デコーダ
タイミング
コントロール
MROM
Page ROM
EPROM
ホスト I/Fタイミング
コントロール
EEPROM
チャネルコント
ロールレジスタ
EBIF
CH7
アドレス
デコーダ
図 9.2.2 ROMC ブロック図
9-2
Flash ROM
SRAM
CE*[7:0]
OE*
SWE*
BWE*[3:0]/BE*[3:0]
ACK*/READY
ADDR
EBIF CONTROL
ACE*
第 9 章 外部バスコントローラ
9.3
レジスタ
9.3.1
レジスタマップ
ROM コントローラのベースアドレスは 0xFFFE_9000 です。ROM コントローラ内のすべ
てのレジスタは、ワードアクセスしてください。他のタイプのアクセスを実行すると予期せぬ
結果を生みます。
未定義ビットに対しては、示してある値を書き込んでください。
表 9.3.1 ROM コントローラレジスタ一覧
アドレス
レジスタ記号
レジスタ名
0xFFFE_9000
RCCR0
ROM チャネルコントロールレジスタ 0
0xFFFE_9004
RCCR1
ROM チャネルコントロールレジスタ 1
0xFFFE_9008
RCCR2
ROM チャネルコントロールレジスタ 2
0xFFFE_900C
RCCR3
ROM チャネルコントロールレジスタ 3
0xFFFE_9010
RCCR4
ROM チャネルコントロールレジスタ 4
0xFFFE_9014
RCCR5
ROM チャネルコントロールレジスタ 5
0xFFFE_9018
RCCR6
ROM チャネルコントロールレジスタ 6
0xFFFE_901C
RCCR7
ROM チャネルコントロールレジスタ 7
8 つの ROM チャネルコントロールレジスタがあります。ブートメモリとして “Half Speed
ROM” または “Full Speed ROM” を選択したときに ch0 の初期値が異なる以外は、チャネル番
号とアドレスが違うだけで機能はすべて同じです。
チャネル 2 ∼ 7 は SDRAM コントローラとチップセレクト信号を兼用しています。SDRAM
コントローラと ROM コントローラで同じチャネルを同時にイネーブルすることのないよう注
意してください。
9-3
第 9 章 外部バスコントローラ
9.3.2
ROM チャネルコントロールレジスタ (RCCR0 ∼ 7)
0xFFFE_9000 (ch.0)
0xFFFE_9004 (ch.1)
0xFFFE_9008 (ch.2)
0xFFFE_900C (ch.3)
0xFFFE_9010 (ch.4)
0xFFFE_9014 (ch.5)
0xFFFE_9018 (ch.6)
0xFFFE_901C (ch.7)
チャネル 0 は、ブートメモリとして使用できます。このため初期値はブート信号の値によっ
て設定されます。
31
20
19
RBA
R/W
0x1FC
15
12
11
RCS
R/W
1/0
1/0
R/W
1/0
BAI/0
0
0
1/0
17
16
RPWT
R/W
8
RWT
18
RPM
0
0
2
7
6
5
4
3
16BUS
RDY
RBC
RHS
RME
R/W
B16/0
R/W
0
R/W R/W
BBC/0 BME0/0
R/W
0
1
: タイプ
: 初期値
0
RSHWT
R/W
BME1/0
1
0
R/W
0
0
: タイプ
: 初期値
ビット ニモニック
フィールド名
31:20
RBA
ベースアドレス
ROM Control Base Address (初期値 0x1FC)
チャネルのベースアドレスを物理アドレスで指定します。
説 明
19:18
RPM
ページモード
ページサイズ
ROM Control Page Mode Page Size (初期値 00)
ワードバーストページモードのページサイズを指定します。
00: ページモードとして使用しない。
01: 4 ワードバーストページモード
10: 8 ワードバーストページモード
11: 16 ワードバーストページモード
17:16
RPWT
ページモード
ウェイト時間
ROM Control Page Mode Wait Time (初期値 11)
ページモードにおけるバーストアクセス時のウェイト数を指定します。
00: 0 ウェイト
10: 2 ウェイト
01: 1 ウェイト
11: 3 ウェイト
ページモード以外のときは、RWT と合わせて 0~62 までのウェイトを (BAI の値) を指定
します。(RWT の項参照)
15:12
RWT
ノーマルモード
ウェイト時間
ROM Control Normal Mode Wait Time (初期値 111 (BAI) の値 (ch.0), 0000 の値 (ch2 ∼7) )
シングルサイクルまたはバーストアクセスの最初のサイクルにおけるウェイトを指定し
ます。
0000: 0 ウェイト
0100: 4 ウェイト
1000: 8 ウェイト
1100: 12 ウェイト
0001: 1 ウェイト
0101: 5 ウェイト
1001: 9 ウェイト
1101: 13 ウェイト
0010: 2 ウェイト
0110: 6 ウェイト
1010: 10 ウェイト 1110: 14 ウェイト
0011: 3 ウェイト
0111: 7 ウェイト
1011: 11 ウェイト 1111: 15 ウェイト
ページモード以外のときは、RPWT と合わせて 0~62 までのウェイトを指定します。
RPWT [1:0] : RWT [3:0]
000000: 0 ウェイト
010000: 16 ウェイト ・・・・・110000: 48 ウェイト
000001: 1 ウェイト
010001: 17 ウェイト ・・・・・110001: 49 ウェイト
: : :
001110: 14 ウェイト
011110: 30 ウェイト ・・・・・111110: 62 ウェイト
001111: 15 ウェイト
011111: 31 ウェイト ・・・・・111111:外部 ACK*モード
(注1) ch0 の最下位ビットには、ブート信号 BAI* (ADDR [7] 端子) の反転した値がセッ
トされます。
(注2) RPM = 00, RDY = 0 のときに、RPWT0: RWT0 = 0x3f に設定した場合には、ACK*
出力でウェイト数が最大になるのではなく、ACK*入力モードになりますので注意
してください。
(注3) READY モードのときは RWT0 は ACK*/READY モードのダイナミック/スタティ
ックを選択するのに使用します。したがってウェイト数は偶数になります。
図 9.3.1 ROM チャネルコントロールレジスタ (1/2)
9-4
第 9 章 外部バスコントローラ
ビット ニモニック フィールド名
説 明
チャネルサイズ
ROM Control Channel Size (初期値 0010 (ch.0), 0000 (ch2 ∼7) )
チャネル 0 のメモリサイズを指定します。
0000: 1 M バイト
0101: 32 M バイト *1010: 1 G バイト
0001: 2 M バイト
0110: 64 M バイト
1011-1111: Reserved
0010: 4 M バイト
0111: 128 M バイト
0011: 8 M バイト
1000: 256 M バイト
0100: 16 M バイト 1001: 512 M バイト
* メモリバス幅が 16 ビットのときは最大 512 M バイトまでです。1 G バイトは設定で
きません。
バス幅
ROM Control 16-bit Width Bus Size (初期値 B16 の値 (ch.0), 0 の値 (ch2 ∼7) )
チャネル 0 のメモリバス幅を指定します。
0: 32 ビット幅
1: 16 ビット幅
(注) ch0 のこのビットには、ブート信号 BOOT16* (ADDR [13] 端子) の反転した値がセ
ットされます。
RDY
レディインプット
アクティブ
ROM Control Ready Input Active (初期値 0)
アクセスを ACK モードにするか、READY モードにするか指定します。
0: READY モードディセーブル (ACK モード)
1: READY モードイネーブル (READY モード)
READY モードでは RPM0 フィールドは 0 に設定してください。
5
RBC
バイトコントロー
ル
ROM Byte Control (初期値 BBC の値 (ch.0), 0 の値 (ch2 ∼7) )
BWE [3:0]信号を、ライトサイクル時のみアクティブ信号であるバイトライトイネーブ
ル信号 (BWE [3:0])として使うか、リード/ライトサイクルともにアクティブになるバイ
トイネーブル信号 (BE [3:0])として使うのかを指定します。
0: バイトイネーブル (BE [3:0])
1: バイトライトイネーブル (BWE [3:0])
(注) ch0 のこのビットにはブート信号 BBC (ADDR [6] 端子) の値がセットされます。
4
RHS
ハーフスピード
バス
ROM Control Half Speed Bus (初期値 BME0 の値, 0 の値 (ch2 ∼7) )
バスのスピードをフルスピード (G-Bus と同じクロックスピード) にするか、ハーフス
ピード (G-Bus の半分のクロックスピード) にするか指定します。
0: フルスピード
1: ハーフスピード
(注) ch0 のこのビットにはブート信号 BME [0] (ADDR [8] 端子) の反転した値がセット
されます。
3
RME
マスタイネーブル
ROM Control Master Enable (初期値 BME1 の値, 0 の値 (ch2 ∼7) )
チャネルをイネーブルにします。
0: チャネルディセーブル
1: チャネルイネーブル
(注) ch0 のこのビットにはブート信号 BME [1] (ADDR [9] 端子) の値がセットされます。
2:0
RSHWT
セットアップ/
ホールドウェイト
時間
ROM Control Setup/Hold Wait Time (初期値 000)
アドレスとチップイネーブル信号の間、およびチップイネーブル信号とライトイネー
ブル/出力イネーブル信号との間の切り替わりのウェイト数を指定します。
*000: ディセーブル 100: 4 ウェイト
001: 1 ウェイト
101: 5 ウェイト
010: 2 ウェイト
110: 6 ウェイト
011: 3 ウェイト
111: 7 ウェイト
* バーストアクセスおよびページモードでは、このビットフィールドをゼロにしてくだ
さい。
11:8
RCS
7
16BUS
6
図 9.3.2 ROM チャネルコントロールレジスタ (2/2)
9-5
第 9 章 外部バスコントローラ
9.4
動作
9.4.1
ブートアップオプション
ROM チャネル 0 は、ブートメモリとして使用することが可能です。そのときのメモリ設定
は、リセット初期設定時にブートオプションとしてサポートしています。以下にブートオプシ
ョンのニモニックと機能についてまとめています。これらのオプションの外部ピン (ブート端
子) によるコントロールについての詳細は、「3.4 初期設定信号」を参照してください。
BOOTME
チャネル 0 のイネーブル/ディセーブルおよび動作スピード (ハーフスピード/フルス
ピード) を指定します。ブート信号 BME [1:0] (ADDR [9:8] 端子) がそのままセットさ
れます。
00: チャネル 0 はブートチャネルとしてディセーブルになります。
(ブート信号 BME [1:0] = 00 のとき)
01: チャネル 0 はブートチャネルとしてディセーブルになります。
(ブート信号 BME [1:0] = 01 のとき)
10: チャネル 0 は、ハーフスピードモード (SYSCLK はハーフスピード) のブート
チャネルとしてイネーブルになります。(ブート信号 BME [1:0] = 10 のとき)
11: チャネル 0 は、フルスピードモード (SYSCLK はフルスピード) のブートチャ
ネルとしてイネーブルになります。(ブート信号 BME [1:0] = 11 のとき)
BOOT16
チャネル 0 メモリのバス幅を指定します。ブート信号 BOOT16* (ADDR [13] 端子) の
反転した値がセットされます。
0: チャネル 0 はブート時に 32 ビット幅 (ブート信号 BOOT16* = 1 のとき)
1: チャネル 0 はブート時に 16 ビット幅 (ブート信号 BOOT16* = 0 のとき)
BOOTAI
チャネル 0 の ACK*信号が内部か外部入力かを指定します。ブート信号 BAI* (DATA
[6] 端子) の反転した値がセットされます。
0: チャネル 0 はブート時に内部 ACK_モード(ブート信号 BAI* = 1 のとき)
1: チャネル 0 はブート時に外部 ACK_モード(ブート信号 BAI* = 0 のとき)
BOOTBC
チャネル 0 アクセスのとき BWE [3:0] 信号をバイトイネーブル信号 (BE [3:0]) とし
て使うかバイトライトイネーブル信号 (BWE [3:0])として使うかを指定します。ブート
信号 BBC (DATA [5] 端子) の値がセットされます。
0: チャネル 0 はバイトイネーブルモード (ブート信号 BBC = 0 のとき)
1: チャネル 0 はバイトライトイネーブルモード (ブート信号 BBC = 1 のとき)
9-6
第 9 章 外部バスコントローラ
9.4.2
グローバルオプション
「9.4.1 ブートアップオプション」で説明した以外に、以下に説明する 2 つのオプションが
あります。
CHANHS
SYSCLK 出力の周波数を指定します。ブート信号 CHANHS* (ADDR [15] 端子) の反
転の値です。
0: SYSCLK はフルスピード (G-Bus と同じ周波数)
1: SYSCLK はハーフスピード (G-Bus の半分の周波数)。1 チャネルでもハーフス
ピードで使うチャネルのあるときは SYSCLK をハーフスピードにしてください。
ACEHOLD
ACE*信号に対するアドレスのホールドを指定します。チップコンフィグレジスタ
(CCFG) の ACEHOLD ビットで設定します。
0: ACE*信号と同時にアドレスは切り替わります。
1: ACE*信号がデアサートされてから 1 クロック後にアドレスが切り替わります。
9.4.3
チャネルコントロールレジスタ
チャネルコントロールレジスタは、かならず 32 ビットでアクセスしてください。
チャネル間に優先順位は存在しません。また同じアドレスに対して複数のチャネルがアクテ
ィブにならないように設定してください。
9.4.4
クロックオプション
各チャネルは、独立にフルスピードまたはハーフスピードを選択できます。チャネル 0 を
ブートメモリとして使用すると SYSCLK 端子のスピードは、ブート信号 CHANHS の値に関
係なくチャネル 0 に設定したスピードになります。
フルスピードとハーフスピードの両方が必要な場合は、SYSCLK をハーフスピードに設定
し、SDCLK 出力の 1 つをフルスピードクロックとして使用してください。
ブート信号 BME [1:0], CHANHS の設定と SYSCLK のスピードの関係を下に示します。
9.4.5
BME[1]
BME[0]
CHANHS
SYSCLK
1
1
1
1
0
0
0
0
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1/2
1/2
1/2
full
1/2
full
1/2
full
Boot Ch0 のスピード (ROMC)
1/2
1/2
full
full




ROMC チャネル 0 を
ブートメモリとして使用
SDRAMC チャネル 0 を
ブートメモリとして使用
ベースアドレスとチャネルサイズの関係
ベースアドレスはチャネルサイズで設定したサイズ境界にしか設定できません。例えばチャ
ネルサイズを 64 M バイトに設定した場合、ベースアドレス (RBA) の 5 ビット目から 6 ビット
目 (bit 25 ∼ 20) に設定した値は無視されます。今ベースアドレス (RBA) に 0x150 を設定した
とすると 、実際 のベー スアド レスは 0x140 になり、アク セスされるアドレスの範囲は
0x94000000 ∼ 0x97ffffff (または 0xb4000000 ∼ 0xb7ffffff) の 64 M バイトになります。
RBA の値 000101010000
チャネルサイズが 64 M バイトなので無視される。
9-7
第 9 章 外部バスコントローラ
9.4.6
動作モード
コントローラの動作には、ACK*/READY 端子の状態に応じて 2 つの主要なモードがありま
す。一方のモードでは、ACK*/READY が常に入力となります(ACK*/READY スタティック
モード)。もう一方のモードでは、必要に応じてチャネルごとに ACK*/READY がチャネル上
で入力から出力に切り替わります (ACK*/READY ダイナミックモード)。これらの 2 つのモー
ドのそれぞれに、ノーマル、ページ、外部 ACK*、READY の 4 つのサブモードがあります。
これらのサブモードは、チャネルごとにプログラム可能です。これら 2 つの主要モードのサブ
モードには、少しずつ違いがあります。
9.4.6.1
ACK*/READY ダイナミックモード
コントローラは、どのチャネルも RDY と WT[0]をともに 1 にセットしていないときに
このモードになります。
このモードでは、ACK*/READY 端子はチャネルごとに自動的に入力から出力に切り替
わります。ノーマルまたはページサブモードでは、ACK*/READY は出力となり、内部
ACK*を使用します。外部 ACK*または READY サブモードでは、ACK*/READY は入力
になります。タイミング図を参考にして入力から出力に切り替わる際のコンフリクトを避
けるよう注意してください。
9.4.6.2
ACK*/READY スタティックモード
コントローラは、1 チャネルでも RDY と WT[0]ともに 1 にセットしているときにこの
モードになります。
このモードでは、ACK*/READY 端子はどんなときも常に入力です。この端子が常に入
力であるため、ノーマルまたはページサブモードのときも内部 ACK*は出力されません。
このモードでは、ACK*/READY 端子にオープンドレーンタイプノードのデバイスを使用
してください。
9.4.6.3
ノーマルサブモード
チャネルは、次の条件が成立するときにこのモードに入ります。
RPM = 00
RRDY = 0
RPWT:RWT ! = 0x3f
このモードでは、ACK*/READY 端子は ACK*出力となり、そのサイクルには RPWT、
RWT の値にしたがってウェイトが挿入されます。ウェイト数は 0~62 です。PWT:WT =
0x3f という設定はできないのでウェイト数 63 は設定できません。注意してください。こ
のように設定すると外部 ACK*サブモードになってしまいます。
9.4.6.4
外部 ACK*サブモード
チャネルは、次の条件が成立するときにこのモードに入ります。
RPM = 00
RRDY = 0
RPWT:RWT = 0x3f
このモードでは、ACK*/READY 端子は ACK*入力となり、そのサイクルは外部デバイ
スからの ACK*信号により終了します。ACK*入力は、内部で同期化されます。詳細につ
いては、「9.4.9.2 ACK*入力タイミング」を参照してください。
9.4.6.5
ページサブモード
チャネルは、次の条件が成立するときにこのモードに入ります。
PM ! = 00
RDY = 0
このモードでは、ACK*/READY 端子は ACK*出力となり、そのサイクルには RPWT、
RWT の値にしたがってウェイトが挿入されます。このモードは特にページモード ROM
をターゲットにしています。シングルサイクルアクセスまたはバーストアクセスの最初の
ワードサイクルにおいて、4 ビットの RWT フィールドがウェイト数を決定します。ウェ
9-8
第 9 章 外部バスコントローラ
イト数は、0~15 が設定可能です。その後のバーストサイクルアクセスでは、2 ビットの
RPWT フィールドがウェイト数を決定します。ウェイト数は 0~3 が設定可能です。
RPM フィールドでは、3 種類のページモードバーストサイズ設定ができます。ページ
モードバーストサイズが CPU のバーストサイズよりも小さいと、複数回のページモード
バーストサイクルが発生します。このとき 4 ビットの RWT フィールドで指定したウェイ
トが1回ごとのページモードバーストで挿入されます。ページモードでは、RWT のウェ
イト数は RPWT のウェイト数以上にしてください。
9.4.6.6
READY サブモード
チャネルは、次の条件が成立するときにこのモードに入ります。
PM = 00
RDY = 1
このモードでは、ACK*/READY 端子は READY 入力となり、そのサイクルは外部デバ
イスからの READY 入力により終了します。READY 入力は、内部で同期化されます。詳
細については、「9.4.10 READY 入力タイミング」を参照してください。
TX3927 は、RPWT:RWT で指定したウェイト数がすぎると、READY 信号がアクティ
ブかどうかチェックします。WT[0]は ACK*/READY スタティック/ダイナミックモード
を示すために使用されるため、ウェイト数の設定には使用しません。したがって、READY
モードで設定できるウェイト数は 0、2、4、6...62 になります。
バーストアクセスは、READY モードでは許容されていません。
9.4.7
16 ビットバスオペレーション
16 ビットモードの場合、1 バイトまたは 1 ハーフワードデータをアクセスするシングルサイ
クルが実行されると、外部バス上で 16 ビットアクセスが 1 回だけ実行されます。1 ワードア
クセスのときは、16 ビットアクセスが 2 回実行されます。16 ビットモードの場合、バースト
サイクルが実行されると、バスサイクルが 1 バイトを要求していようと、ハーフワードを要求
していようと、32 ビットワード以外のその他のバイトの組み合わせをを要求しようと、バー
ストアクセスのそれぞれについて 2 つの 16 ビットサイクルが実行されます。
16 ビットモードでは、メモリサイズは 512 MB です。1 GB は指定できませんので注意して
ください。
9.4.8
SHWT オプション
RSHWT フィールドがゼロ以外のとき、SHWT オプションが選択されます。このオプショ
ンは、次の信号の間にセットアップおよびホールド時間を追加します。
セットアップ: ADDR から CE、CE から OE、CE から BWE/BE
ホールド: CE から ADDR、OE から CE、BWE/BE から CE
これは、一般にスピードの遅い I/O デバイスに対して使用されます。すべてのセットアップ
およびホールド時間は、同一になり、個々に設定することはできません。
SHWT モードは、ページモードで使用することはできません。その他のすべてのモードは、
SHWT モードを使用できますが、そのバーストアクセスが使えないという制限があります。
TX3927 では以下のときにバーストアクセスが実行されますので、該当メモリチャネルで下
記バーストアクセスが実行されるときには、SHWT を “0” にしてください。
(1) TX3927 の命令フェッチ
(2) データキャッシュをライトバックモードで使用したときのキャッシュデータのメモリへ
の書き戻し時
(3) DMA で転送サイズ (XFSZ) を 4 ワード以上にして、かつチャネルコントロールレジスタ
(CCR) の DBINH または SBINH で該当メモリに対するアクセスをバースト禁止にしてい
ないとき
(4) PCI の設定でターゲットバースト長レジスタ (TBL) で 0FIF0、IFIF0 に取りこむサイズ
を 1D ワード以外のときで、外部 PCI マスタから次のアクセスがあったとき
a) リード (シングルでも)
b) 上記設定サイズ以上のバーストライト
9-9
第 9 章 外部バスコントローラ
9.4.9
ACK*/READY 信号のタイミング
9.4.9.1
ACK*出力タイミング
ACK*信号が出力のときには、外部デバイスはそれをリードおよびライトデータのタイミン
グのために使用することができます。
リードサイクル時には、データは常に ACK*が認識されるクロック (ACK*が立ち下がった
次のクロック) の立ち上がりでラッチされます。
ライトサイクル時には、データは ACK*が認識されるクロック (ACK*が立ち下がった次の
クロック) から 2 クロック間有効になります。また、これは SWE*/BWE*がデアサートされる
クロックの 1 つ先のクロックになります。
9.4.9.2
ACK*入力タイミング
ACK*信号が入力のときには、ACK*入力信号は内部で同期化されます。内部ステートマシ
ンの制約のため、ACK*は連続したクロックで連続して認識することはできません。ACK*が
いったん認識されると、それが再び最初に認識可能になるのは、リードの場合は 2 クロック後、
ライトの場合は 4 クロック後になります。
リードとライトで ACK*を検知し始めるタイミングが異なります。これ以降のクロックの立
ち上がりで ACK*を認識します。
•
リードサイクル
OE*の立ち下がったクロックの次のクロック
•
ライトサイクル
SWE*の立ち下がったクロック
SYSCLK/SDCLK
OE*
ACK*を検知し始める
タイミング
図 9.4.1 リードサイクルにおいて ACK*を検知し始めるタイミング
SYSCLK/SDCLK
SWE*
ACK*を検知し始める
タイミング
図 9.4.2 ライトサイクルにおいて ACK*を検知し始めるタイミング
リードサイクル時には、ACK*信号が認識されてから 2 クロック後にデータがラッチされま
す。
ライトサイクル時には、ACK*信号が認識されたクロックから 4 クロック間データが有効に
なります。また、これは SWE*/BWE*がデアサートされるクロックの 1 つ先のクロックにな
ります。
9-10
第 9 章 外部バスコントローラ
9.4.10
READY 入力タイミング
ACK*/READY 端子を READY 入力として使用する場合、READY 入力タイミングは「5.8.2
ACK*入力タイミング」で説明した ACK*入力のタイミングと基本的に同じです。ただし、
READY 入力タイミングには次の 2 つの違いがあります。その 1 つは、READY が ACK*と異
なりローアクティブではなくハイアクティブな信号であるという点です。2 つ目は、READY
モードでは、READY 信号のチェックを遅らせるために RPWT:RWT で指定されたウェイト数
を挿入できるという点です。詳細については、
「9.4.6.6 READY サブモード」を参照してく
ださい。
リードとライトで READY を検知し始めるタイミングが異なります。これ以降のクロックの
立ち上がりで READY を認識します。
•
リードサイクル
① ウェイトが 0 のとき (RPWT: RWT=0) :
OE*の立ち下がったクロックの次のクロック
② ウェイトが 0 以外のとき (RPWT: RWT!=0) :
OE*の立ち下がったクロックから数えて指定したウェイト分先のクロック
•
ライトサイクル
① ウェイトが 0 のとき (RPWT: RWT=0) :
SWE*の立ち下がったクロック
② ウェイトが 0 以外のとき (RPWT: RWT!=0) :
SWE*の立ち下がったクロックから数えて指定した (ウェイト – 1) クロック分
先のクロック
SYSCLK/SDCLK
OE*
ウェイトが ウェイトが
0 のとき
2 のとき
ウェイトが
4 のとき
ウェイトが
6 のとき
ウェイトが
8 のとき
図 9.4.3 リードサイクルにおいて READY を検知し始めるタイミング
SYSCLK/SDCLK
SWE*
ウェイトが ウェイトが
0 のとき
2 のとき
ウェイトが
4 のとき
ウェイトが
6 のとき
ウェイトが
8 のとき
図 9.4.4 ライトサイクルにおいて READY を検知し始めるタイミング
9.4.10.1 ACK*/READY 入力/出力切り替えタイミング
ACK*/READY ス タテ ィッ ク モ ー ド で は 、 ACK*/READY 端 子 は常 に入 力 で す 。
ACK*/READY ダイナミックモードでは、ACK*/READY 端子はそれが入力であることを
必要とするサブモードに入らない限り、通常は出力です。ACK*信号は、CE*信号がアサー
トされたときと同じクロックでハイインピーダンスになります。その後、ACK*信号は
CE*信号がデアサートされてから 1 クロック後に再び出力 (ドライブ)されます。
9-11
第 9 章 外部バスコントローラ
9.4.11
アドレッシング
TX3927 のアドレス空間は 4 G バイトあり、内部には 32 ビットのアドレス信号を持ってい
ます。しかし、外部のアドレス信号としては、これをマルチプレッサした信号として ADDR
[19:2] になります。
32 ビットバスモードでは、内部アドレスビット[19:2]が直接 ADDR[19:2]に接続されていま
す。上位アドレスである内部アドレスビット[29:20]は、外部 ADDR[19:10]にマルチプレクス
されます。32 ビットバスモードの最大メモリサイズは 1 GB です。
16 ビットバスモードでは、下位アドレスビットが内部バイトイネーブルおよび ENDIAN
モードに基づいて内部的に生成されます。この内部的に生成されたアドレスビットは、
ADDR[2]から出力されます。内部アドレスビット[18:2]は直接 ADDR[19:3]に接続されます。
上位アドレスである内部アドレスビット[28:19]は、外部 ADDR[19:10]にマルチプレクスされ
ます。16 ビットバスモードでは、32 ビットバスモードに対してアドレスが 1 ビット上にシフ
トした形で出力されます。このため 16 ビットバスモードの最大メモリサイズは 512 MB です。
アドレスのマルチプレクスの詳細については、
「9.4.12 ACE*オペレーション」を参照して
ください。
内部アドレス (GAIN[31:0]) と対応するアドレス端子 (ADDR[19:2]) の関係を示すと以下の
ようになります。
1)
32 ビットバス時のアドレス出力
内部アドレス (GAIN[31:0])
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
19
18
17
16
15
14
13
12
11
10
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
外部アドレス (ADDR[19:2])
2)
16 ビットバス時のアドレス出力
内部アドレス (GAIN[31:0])
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
19
18
17
16
15
14
13
12
11
10
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
外部アドレス (ADDR[19:2])
9.4.12
ACE*オペレーション
ACE*信号を使って、出力アドレスのマルチプレクスが可能です。ACE* (アドレスクロック
イネーブル) が Low のときにシステムクロック (SYSCLK) の立ち上がりでアドレスの最初の
10 ビット (上位アドレス) をデバイスがラッチできます。
また、ACE*信号自体をラッチイネーブル信号として使用することも可能です。
リセット後、最初のサイクルでは ACE*信号はかならずアクティブになります。
その後のすべてのサイクルでは、新たなアドレスの上位の 10 ビットが前のアドレスと比較
されます。比較した結果、アドレスが一致していないと上位アドレスが出力され ACE*がアク
ティブになります。
32 ビットモードでは、CS が 1 MB に対して設定されると、ACE*は決してアクティブにな
りません。
16 ビットモードでは、CS が 1 MB に対して設定されると、ADDR[20]をチップセレクトの
デコードに使用しない場合にのみ ACE*はアクティブになります。
デフォルトでは、ACE*の立ち上がり後アドレスは 1 クロック保持されます。これは、チッ
プコンフィグレーションレジスタ (CCFG)の ACEHOLD ビットをクリアすることによって、
保持時間なしへ変更できます。この保持時間はすべてのチャネルに共通に適用されます。
9-12
第 9 章 外部バスコントローラ
9.5
タイミング図
タイミング図を見る上では下記の項目に注意してください。
1.
クロック 信号 SYSCLK/SDCLK は 、SYSCLK ま たは SDCLK[4:0] の状 態を 示 します 。
SDCLK[4:0]は常にフルスピードで動作し、SYSCLK はフルスピードまたはハーフスピードの
いずれかに設定できます。信号タイミングは、チャネルの設定に応じてハーフまたはフルス
ピードクロックに同期します。
2.
すべてのタイミング図には、BWE*信号と BE*信号の両方が示されています。BWE*端子は、
チャネルコントロールレジスタの設定により、BWE または BE のどちらかとして機能します。
3.
図中すべてのバーストサイクルはページ境界からアクセスが始まっています。ただし、CWF
(クリティカルワードファースト) がイネーブルのときはこの限りではありません。アドレッシ
ングの順序は CWF 4 ワードバーストでは異なる場合があります。
4.
図中、ウェイトサイクルは、SWx として示されています。SHWT によるセットアップおよび
ホールドサイクルは、ASx (アドレス有効から CE 立ち下がりまでのセットアップ)、CSx (CE
立ち下がりから OE/SWE 立ち下がりまでのセットアップ)、AHx (CE の立ち上がりからアドレ
ス変化までのホールド)、CHx (OE/SWE 立ち上がりから CE の立ち上がりまでのホールド)と
して示されています。外部入力信号の同期サイクルは、ESx として示されています。アドレス
クロックイネーブルサイクルは、ACEx として示されています。その他のすべてのサイクルは、
Sx として示されています。サイクル間に重複が発生した場合には、Sx でなくその他のサイク
ルで記載しています。
5.
ACK*端子は、ダイナミックモードでは入力と出力が切り替わります。出力から入力に切り替
わる場合は、CE*がアクティブになるクロックと同じクロックでハイインピーダンスになりま
す。タイミング図中 ACK*信号が中間電位になっているのはこのハイインピーダンス状態を示
しています。入力から出力に切り替わる場合は、CE*がデアサートされてから 1 クロック後に
TX3927 は ACK*端子の出力 (ドライブ) を開始します。外部 ACK*(READY)モードで 16 ビッ
トメモリに 32 ビットアクセスする場合には、CE*が 2 つのハーフワードアクセス間でいった
んデアサートされることに注意してください。
6.
外部 ACK*(READY)タイミングは、1 クロック幅で示されています。以下の要件が満たされて
いる限り、外部 ACK*(READY)を 1 クロック以上アクティブにしても構いません。
•
外部 ACK*および READY シングルアクセスの場合には、CE*がデアサートするサイクル
の終わりまで ACK*端子をアクティブにすることができます。
•
外部デバイスは、ACK*端子のモード(ダイナミック/スタティック)に応じて、上記 5 の
ドライブ切り替え要件を満たすように信号を High またはトライステートに駆動しなけれ
ばなりません。
•
外部 ACK*バーストサイクルの場合には、外部デバイスはリード時には 3 クロック、ライ
ト時には 5 クロックまで信号をアクティブにすることができます。この時間を過ぎると、
次の有効な ACK*と認識されます。
(注)
ACK* (READY) 端子には内部にプルアップ抵抗がついていますが、抵抗値が大き
いので、必要な場合は外部にもプルアップ抵抗をつけてください。
9-13
第 9 章 外部バスコントローラ
9.5.1
ACE*信号オペレーション
ACE1
ACE2
SYCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
BWE*
1f
BE
1
0
DATA [31 : 0]
ACK*
図 9.5.1 ホールド時間付 ACE*
ACE1
SYCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
BWE*
BE
1
1
0
0
DATA [31 : 0]
ACK*
図 9.5.2 ホールド時間のない ACE*
9-14
第 9 章 外部バスコントローラ
ノーマルモード 32 ビットライトオペレーション
0
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
SW1
0
S2
S3
f
f
9.5.2
図 9.5.3 ノーマルモード 32 ビットバスオペレーション (32 ビットシングルライト、1 ウェイト)
9-15
第 9 章 外部バスコントローラ
ノーマルモード、32 ビットオペレーション
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
S1
SW1
f
0
S2
S3
f
9.5.3
図 9.5.4 ノーマルモード、32 ビットバスオペレーション (32 ビットシングルリード、1 ウェイト)
9-16
第 9 章 外部バスコントローラ
S1
SW1
S2
S1
SW1
S2
S1
SW1
S2
S1
SW1
S2
S3
SYSCLK/SDCLK
CE*
ADDR [19 : 2]
0
1
2
3
ACE*
OE*
SWE*
BWE*
BE
f
0
f
f
DATA [31 : 0]
ACK*
図 9.5.5 ノーマルモード、32 ビットバスオペレーション (4 ワードバーストリード、1 ウェイト)
9-17
9-18
ACK*
DATA [31 : 0]
BE
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
SW1
0
0
S2
S3
f
S1
SW1
0
1
S2
S3
0
f
S1
SW1
0
2
S2
S3
f
S1
SW1
0
3
S2
S3
f
f
第 9 章 外部バスコントローラ
図 9.5.6 ノーマルモード、32 ビットバスオペレーション (4 ワードバーストライト、1 ウェイト)
第 9 章 外部バスコントローラ
ノーマルモード、16 ビットバスオペレーション
c
f
c
c
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
S2
0
S3
f
S1
1
S2
c
S3
f
f
9.5.4
図 9.5.7 ノーマルモード、16 ビットバスオペレーション (32 ビットシングルライト、0 ウェイト)
9-19
第 9 章 外部バスコントローラ
S1
S2
S1
S2
S3
SYSCLK/SDCLK
CE*
0
ADDR [19 : 2]
1
ACE*
OE*
SWE*
BWE*
BE*
f
f
c
f
c
f
DATA [31 : 0]
ACK*
図 9.5.8 ノーマルモード、16 ビットバスオペレーション (32 ビットシングルリード、0 ウェイト)
9-20
9-21
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
S2
c
c
S3
f
f
第 9 章 外部バスコントローラ
図 9.5.9 ノーマルモード、16 ビットバスオペレーション (16 ビットシングルライト、0 ウェイト)
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
S1
f
S2
c
S3
f
第 9 章 外部バスコントローラ
図 9.5.10 ノーマルモード、16 ビットバスオペレーション (16 ビットシングルリード、0 ウェイト)
9-22
9-23
2
S2
S1
3
S2
S1
ACK*
DATA [31 : 0]
c
f
S1
BE
1
S2
f
0
S1
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
S2
4
S2
S1
5
S2
S1
6
S2
S1
7
S2
S3
f
9.5.5
CE*
SYCLK/SDCLK
S1
第 9 章 外部バスコントローラ
ノーマルモード、16 ビットバーストオペレーション
図 9.5.11 ノーマルモード、16 ビットバスオペレーション (4 ワードバーストリード、0 ウェイト)
9-24
ACK*
DATA [15 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/ SDCLK
f
f
S1
c
0
S2
S3
f
S1
c
1
S2
S3
f
S1
c
2
S2
S3
f
S1
c
3
S2
S3
c
f
S1
c
4
S2
S3
f
S1
c
5
S2
S3
f
S1
c
6
S2
S3
f
S1
c
7
S2
S3
f
f
第 9 章 外部バスコントローラ
図 9.5.12 ノーマルモード、16 ビットバスオペレーション (4 ワードバーストライト、0 ウェイト)
9-25
S1
2
S2
S1
3
S2
S1
ACK*
DATA [31 : 0]
0
f
1
S2
BE
S1
f
0
S2
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
SW1
4
SW1
S2
S1
5
S2
S1
6
S2
S1
7
S2
S3
f
9.5.6
S1
第 9 章 外部バスコントローラ
ページモード、32 ビットバーストオペレーション
図 9.5.13 ページモード、32 ビットバスオペレーション
(8 ワードバーストリード、1 ウェイト、0 ページウェイト)
9-26
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
SW1
0
0
S2
S3
f
S1
0
1
S2
S3
f
S1
0
2
S2
S3
f
S1
0
3
S2
c
S3
f
S1
SW1
0
4
S2
S3
f
S1
0
5
S2
S3
f
S1
0
6
S2
S3
f
S1
0
7
S2
S3
f
f
第 9 章 外部バスコントローラ
図 9.5.14 ページモード、32 ビットバスオペレーション
(8 ワードバーストライト、1 ウェイト、0 ページウェイト)
第 9 章 外部バスコントローラ
9.5.7
外部 ACK*モード 32 ビットオペレーション
S1
ES1
ES2
ES3
S2
S3
SYSCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
BWE*
BE*
f
0
f
f
0
f
DATA [31 : 0]
ACK*
(注 1) TX3927 は S1 ステートで ACK*信号をハイインピーダンスにします。
(注 2) 外部デバイスは ES1 ステートまでに ACK*を Low にドライブ (アサート) しま
す。この図ではドライブの切り換りを明確にするため ES1 で ACK*を Low にし
ています。S1 の終わりまでにすでに ACK*が Low になっていると ES1 はなく
なり、S1 の次にすぐ ES1 がきます (このとき 0 ウェイト)。
(注 3) 外部デバイスは ES2 ステートで ACK*を High にドライブ (デアサート) します。
外部デバイスが ACK*をアサートするのが遅れると、その分ウェイトステート
が挿入されます。ある条件を満たせば、ACK*信号を 1 クロック以上 Low にド
ライブしてもかまいません。詳しくは「9.5 タイミング図」および「9.4.9.2 ACK*
入力タイミング」を参照してください。
図 9.5.15 外部 ACK*モード 32 ビットバスオペレーション (32 ビットシングルライト、1 ウェイト)
S1
ES1
ES2
S2
S3
SYSCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
BWE*
BE*
f
f
0
f
DATA [31 : 0]
ACK*
図 9.5.16 外部 ACK*モード 32 ビットバスオペレーション (32 ビットシングルリード、1 ウェイト)
9-27
9-28
S1
ES1
1
ES2
S2
S1
ACK*
DATA [31 : 0]
0
f
S2
BE
0
ES2
f
ES1
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
S1
ES1
2
ES2
S2
S1
ES1
3
ES2
S2
S3
f
第 9 章 外部バスコントローラ
図 9.5.17 外部 ACK*モード 32 ビットバスオペレーション (4 ワードバーストリード、1 ウェイト)
9-29
ACK*
DATA [15 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
S1
ES1
ES2
0
0
ES3
S2
S3
f
S1
ES1
ES2
1
0
ES3
S2
S3
0
f
S1
ES1
ES2
2
0
ES3
S2
S3
f
S1
ES1
ES2
3
0
ES3
S2
S3
f
f
第 9 章 外部バスコントローラ
図 9.5.18 外部 ACK*モード 32 ビットオペレーション (4 ワードバーストライト、1 ウェイト)
第 9 章 外部バスコントローラ
AS1
AS2
CS1
CS2
SW1 ES1
ES2
ES3
S2
CH1 CH2
AH1
AH2
SYSCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
BWE*
BE
f
0
f
0
f
f
DATA [31 : 0]
ACK*
図 9.5.19 外部 ACK*モード 32 ビットバスオペレーション
(32 ビットシングルライト、2 ウェイト、SHWT = 2)
AS1
AS2
CS1
CS2
S1
ES1
ES2
S2
CH1 CH2
AH1
AH2
SYSCLK/SDCLK
CE*
ADDR [19 : 2]
ACE*
OE*
SWE*
f
BWE*
BE
0
f
DATA [31 : 0]
ACK*
図 9.5.20 外部 ACK*モード 32 ビットバスオペレーション
(32 ビットシングルリード、1 ウェイト、SHWT = 2)
9-30
f
9-31
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
(注)
CS1
CS2 SW1 ES1
c
c
0
ES2
ES3
S2
CH1 CH2
AH1
AH2
f
f
AS1
AH2、AS1、AS2 ステートは TX3927 が ACK*信号をドライブします。
f
f
AS2
AS2
CS1
CS2 SW1 ES1
c
c
1
ES2 ES3
S2
CH1 CH2
f
AH1
f
AH2
9.5.8
AS1
第 9 章 外部バスコントローラ
外部 ACK*モード 16 ビットオペレーション
図 9.5.21 外部 ACK*モード 16 ビットバスオペレーション
(32 ビットシングルライト、2 ウェイト、SHWT = 2)
9-32
(注)
S1
ES1
c
0
ES2
S2
CH2 CH2
AH1
AH2
ACK*
DATA [31 : 0]
AS1
AS2
AH2、AS1、AS2 ステートは TX3927 が ACK*信号をドライブします。
f
f
CS2
BE*
CS1
f
AS2
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
AS1
CS1
CS2
S1
c
ES1
ES2
1
S2
CH1 CH2 AH1
f
AH2
第 9 章 外部バスコントローラ
図 9.5.22 外部 ACK*モード 16 ビットバスオペレーション
(32 ビットシングルライト、1 ウェイト、SHWT = 2)
第 9 章 外部バスコントローラ
0
CS1
SW1
ES1
0
ES2
ES3
S2
CH1
f
AH1
f
レディモード、32 ビットオペレーション
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
f
AS1
9.5.9
図 9.5.23 レディモード 32 ビットバスオペレーション
(32 ビットシングルライト、2 ウェイト、SHWT = 1)
9-33
9-34
ACK*
DATA [31 : 0]
BE*
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK/SDCLK
f
AS1
CS1
S1
ES1
f
0
ES2
S2
CH1
AH1
f
第 9 章 外部バスコントローラ
図 9.5.24 レディモード、32 ビットバスオペレーション
(32 ビットシングルリード、1 ウェイト、SHWT = 1)
第 9 章 外部バスコントローラ
9.6
Flash ROM, SRAM 使用例
図 9.6.1および図 9.6.2に Flash ROM の接続例を、図 9.6.3に SRAM の接続例を示します。
TX3927
Flash ROM (x16 bit)
ADDR [19:2]
ADDR [19:2]
ADDR [10]
ADDR [20]
A [17:0]
A [17:0]
A18
A18
CE*
WE*
OE*
CE*
WE*
OE*
ACE*
CE*[0]
SWE*
OE*
D [15:0]
D [15:0]
D [31:16]
DATA [31:0]
D [15:0]
図 9.6.1 Flash ROM (x16 bit) 接続例 (32 ビットデータバス)
TX3927
Flash ROM (x16 bit)
ADDR [19:2]
ADDR [19:2]
ADDR [10]
ADDR [20]
A [17:0]
A18
ACE*
CE*
WE*
OE*
CE*[0]
SWE*
OE*
D [15:0]
DATA [15:0]
DATA [31:0]
図 9.6.2 Flash ROM (x16 bit) 接続例 (16 ビットデータバス)
9-35
第 9 章 外部バスコントローラ
TX3927
SRAM (x16 bit)
BWE* [3:0]
BWE* [3]
UB
ADDR [19:2]
CE*[0]
SWE*
OE*
ADDR [19:2]
BWE* [2]
LB
BWE* [1]
UB
A [17:0]
A [17:0]
CS*
WE*
OE*
CS*
WE*
OE*
D [15:0]
D [15:0]
D [31:16]
DATA [31:0]
図 9.6.3 SRAM (x16 bit) 接続例 (32 ビットデータバス)
9-36
BWE* [0]
LB
D [15:0]
第 10 章 DMA コントローラ
第10章 DMA コントローラ
10.1 特長
TX3927 は、メモリおよび I/O デバイスに対する DMA 転送を実行する DMA コントローラを内
蔵しています。
DMA コントローラには、以下のような特長があります。
•
4 つの DMA チャネルを内蔵
•
すべてのチャネルでリンクリストコマンドチェインをサポート
•
シングルおよびデュアルアドレス転送をサポート
•
メモリ間転送をサポート。
一回のリードまたはライト動作に対して最高 8 ワードまでのバースト転送が可能 (ワード
アライメントの必要あり)
•
各チャネルの優先順位判定は、スヌープ機能ありとなしとで独立に実行
•
ソースおよびデスティネーションアドレスの両方に対して符号付き 24 ビットのアドレス
カウントアップレジスタを内蔵
•
各チャネルごとに 24 ビットバイトカウントを内蔵
•
8、16、ならびに 32 ビット幅の I/O デバイスをサポート
16 ビットデバイスはシングルおよびデュアルアドレスモードをサポート
8 ビットデバイスはデュアルアドレスモードのみをサポート
•
外部シングルアドレス転送では、タイミングに ACK 端子を使用。
シングルアドレスモードでは、I/O デバイス幅がメモリ幅に一致している必要があります。
10-1
第 10 章 DMA コントローラ
10.2 ブロック図
TX39/H2 コア
Ch.0
CHAR0
SAR0
DAR0
バス制御権要求
CNTR0
コントロール部
DREQ0
DACK0
SAI0
マルチプレクサ
DMAC
DAI0
バス制御権解放通知
DMAREQ0
DMAACK0
外部端子へ
SIRXDREQ0
SIO ch0 へ
SIRXDACK0 (受信)
CCR0
バス制御権所有通知
PCFG.INTDMA[0]
CSR0
Ch.1
CHAR1
SAR1
DAR1
CNTR1
MCR
DREQ1
DACK1
SAI1
マルチプレクサ
バス制御権解放要求
DAI1
DMAREQ1
DMAACK1
外部端子へ
SIRXDREQ1
SIO ch1 へ
SIRXDACK1 (受信)
CCR1
FIFO
PCFG.INTDMA[1]
CSR1
CHAR2
SAR2
DAR2
CNTR2
DREQ2
DACK2
SAI2
マルチプレクサ
Ch.2
DAI2
DMAREQ2
DMAACK2
外部端子へ
SITXDREQ0
SIO ch0 へ
SITXDACK0 (受信)
CCR2
PCFG.INTDMA[2]
CSR2
CHAR3
SAR3
DAR3
CNTR3
DREQ3
DACK3
SAI3
DAI3
マルチプレクサ
Ch.3
DMAREQ0
DMAACK0
SITXDREQ1
SIO ch1 へ
SITXDACK1 (受信)
CCR3
CSR3
コントロール
アドレス
データ
図 10.2.1 TX3927 DMAC のブロック図
10-2
外部端子へ
PCFG.INTDMA[3]
第 10 章 DMA コントローラ
10.3 レジスタ
10.3.1
レジスタマップ
DMA コントローラのベースアドレスは、0xFFFE_B000 です。DMA コントローラ内のす
べてのレジスタは、フルワード(32 ビット)アクセスしてください。他のタイプのアクセス
を実行すると、予期せぬ結果が生じます。
未定義ビットに対しては、示してある値を書き込んでください。
表 10.3.1 DMA コントローラレジスタ
アドレス
レジスタ記号
レジスタ名
0xFFFE_B0A4
MCR
マスタコントロールレジスタ
0xFFFE_B0A0
TDHR
一時データ保持レジスタ*
0xFFFE_B09C
DBR7
データバッファレジスタ 7*
0xFFFE_B098
DBR6
データバッファレジスタ 6*
0xFFFE_B094
DBR5
データバッファレジスタ 5*
0xFFFE_B090
DBR4
データバッファレジスタ 4*
0xFFFE_B08C
DBR3
データバッファレジスタ 3*
0xFFFE_B088
DBR2
データバッファレジスタ 2*
0xFFFE_B084
DBR1
データバッファレジスタ 1*
0xFFFE_B080
DBR0
データバッファレジスタ 0*
0xFFFE_B07C
CSR3
チャネルステータスレジスタ 3
0xFFFE_B078
CCR3
チャネルコントロールレジスタ 3
0xFFFE_B074
DAI3
デスティネーションアドレスインクリメントレジスタ 3
0xFFFE_B070
SAI3
ソースアドレスインクリメントレジスタ 3
0xFFFE_B06C
CNTR3
カウントレジスタ 3
0xFFFE_B068
DAR3
デスティネーションアドレスレジスタ 3
0xFFFE_B064
SAR3
ソースアドレスレジスタ 3
0xFFFE_B060
CHAR3
チェインアドレスレジスタ 3
0xFFFE_B05C
CSR2
チャネルステータスレジスタ 2
0xFFFE_B058
CCR2
チャネルコントロールレジスタ 2
0xFFFE_B054
DAI2
デスティネーションアドレスインクリメントレジスタ 2
0xFFFE_B050
SAI2
ソースアドレスインクリメントレジスタ 2
0xFFFE_B04C
CNTR2
カウントレジスタ 2
0xFFFE_B048
DAR2
デスティネーションアドレスレジスタ 2
0xFFFE_B044
SAR2
ソースアドレスレジスタ 2
0xFFFE_B040
CHTR2
チェインアドレスレジスタ 2
0xFFFE_B03C
CSR1
チャネルステータスレジスタ 1
0xFFFE_B038
CCR1
チャネルコントロールレジスタ 1
0xFFFE_B034
DAI1
デスティネーションアドレスインクリメントレジスタ 1
0xFFFE_B030
SAI1
ソースアドレスインクリメントレジスタ 1
0xFFFE_B02C
CNTR1
カウントレジスタ 1
0xFFFE_B028
DAR1
デスティネーションアドレスレジスタ 1
0xFFFE_B024
SAR1
ソースアドレスレジスタ 1
0xFFFE_B020
CHTR1
チェインアドレスレジスタ 1
0xFFFE_B01C
CSR0
チャネルステータスレジスタ 0
0xFFFE_B018
CCR0
チャネルコントロールレジスタ 0
0xFFFE_B014
DAI0
デスティネーションアドレスインクリメントレジスタ 0
0xFFFE_B010
SAI0
ソースアドレスインクリメントレジスタ 0
0xFFFE_B00C
CNTR0
カウントレジスタ 0
0xFFFE_B008
DAR0
デスティネーションアドレスレジスタ 0
0xFFFE_B004
SAR0
ソースアドレスレジスタ 0
0xFFFE_B000
CHAR0
チェインアドレスレジスタ 0
(注)*: 一時データ保持レジスタとデータバッファレジスタは、デバッギングオペレーションで使用され
るリードオンリーレジスタです。転送をアボート、または停止した後でソフトウエアによりこの
データをリードすることでソフト的に転送を実行することが可能です。
10-3
第 10 章 DMA コントローラ
マスタコントロールレジスタ (MCR)
10.3.2
0xFFFE_B0A4
このレジスタは DMAC の全体を制御するレジスタです。
31
EIS3
30
EIS2
29
EIS1
28
EIS0
27
DIS3
26
DIS2
25
DIS1
24
DIS0
R
0
R
0
R
0
R
0
R
0
R
0
R
0
R
0
14
FIFOVC
13
11
10
15
R
00
ビット
ニモニック
23
18
0
17
16
FIFOVC
: タイプ
: 初期値
R
00
FIFWP
FIFRP
8
RSFIF
7
FIFUM
2
LE
R
000
R
000
R/W
0
R/W
0000
R/W
0
フィールド名
6
3
1
0
RRPT MSTEN
R/W
0
R/W
0
: タイプ
: 初期値
説 明
31
EIS3
チャネル 3
エラー割り込み
ステータス
Error Interrupt Status for Channel 3 (初期値 0x0)
チャネル 3 でエラー割り込みが発生したかどうかを示します。このビットにはチャ
ネル 3 のチャネルコントロールレジスタのエラー時の割り込みイネーブルビット
(CCR3.INTENE) とのチャネルステータスレジスタの異常チェイン終了ビット
(CSR3.ABCHC) との AND 結果が示されます。
1: エラー割り込みあり
0: エラー割り込みなし
30
EIS2
チャネル 2
エラー割り込み
ステータス
Error Interrupt Status for Channel 2 (初期値 0x0)
チャネル 2 でエラー割り込みが発生したかどうかを示します。このビットにはチャ
ネル 2 のチャネルコントロールレジスタのエラー時の割り込みイネーブルビット
(CCR2.INTENE) とのチャネルステータスレジスタの異常チェイン終了ビット
(CSR2.ABCHC) との AND 結果が示されます。
1: エラー割り込みあり
0: エラー割り込みなし
29
EIS1
チャネル 1
エラー割り込み
ステータス
Error Interrupt Status for Channel 1 (初期値 0x0)
Error Interrupt Status for Channel 2 (初期値 0x0)
チャネル 1 でエラー割り込みが発生したかどうかを示します。このビットにはチャ
ネル 1 のチャネルコントロールレジスタのエラー時の割り込みイネーブルビット
(CCR1.INTENE) とのチャネルステータスレジスタの異常チェイン終了ビット
(CSR1.ABCHC) との AND 結果が示されます。
1: エラー割り込みあり
0: エラー割り込みなし
28
EIS0
チャネル 0
エラー割り込み
ステータス
Error Interrupt Status for Channel 0 (初期値 0x0)
チャネル 0 でエラー割り込みが発生したかどうかを示します。このビットにはチャ
ネル 0 のチャネルコントロールレジスタのエラー時の割り込みイネーブルビット
(CCR0.INTENE) とのチャネルステータスレジスタの異常チェイン終了ビット
(CSR0.ABCHC) との AND 結果が示されます。
1: エラー割り込みあり
0: エラー割り込みなし
27
DIS3
チャネル 3
Done Interrupt Status for Channel 3 (初期値 0x0)
転送終了割り込み チャネル 3 で転送終了割り込みが発生したかどうかを示します。このビットにはチ
ステータス
ャネル 3 のチャネルコントロールレジスタの割り込みイネーブルビット
(CCR3.INTENC, CCR3.INTENT) とチャネルステータスレジスタの正常終了ビット
(CSR3.INCHNC, CSR3.NTRNFC) との下に示す演算結果が示されます。
(CCR3.INTENC & CSR3.NCHNC) | (CCR3.INTENT & CSR3.NTRNFC)
1: エラー割り込みあり
0: エラー割り込みなし
図 10.3.1 マスタコントロールレジスタ (1/3)
10-4
第 10 章 DMA コントローラ
ビット
26
ニモニック
DIS2
フィールド名
説 明
チャネル 2
Done Interrupt Status for Channel 2 (初期値 0x0)
転送終了割り込み チャネル 2 で転送終了割り込みが発生したかどうかを示します。このビットにはチ
ステータス
ャネル 2 のチャネルコントロールレジスタの割り込みイネーブルビット
(CCR2.INTENC, CCR2.INTENT) とチャネルステータスレジスタの正常終了ビット
(CSR2.INCHNC, CSR2.NTRNFC) との下に示す演算結果が示されます。
(CCR2.INTENC & CSR2.NCHNC) | (CCR2.INTENT & CSR2.NTRNFC)
1: エラー割り込みあり
0: エラー割り込みなし
25
DIS1
チャネル 1
Done Interrupt Status for Channel 1 (初期値 0x0)
転送終了割り込み チャネル 1 で転送終了割り込みが発生したかどうかを示します。このビットにはチ
ステータス
ャネル 1 のチャネルコントロールレジスタの割り込みイネーブルビット
(CCR1.INTENC, CCR1.INTENT) とチャネルステータスレジスタの正常終了ビット
(CSR1.INCHNC, CSR1.NTRNFC) との下に示す演算結果が示されます。
(CCR1.INTENC & CSR1.NCHNC) | (CCR1.INTENT & CSR1.NTRNFC)
1: エラー割り込みあり
0: エラー割り込みなし
24
DIS0
チャネル 0
Done Interrupt Status for Channel 0 (初期値 0x0)
転送終了割り込み チャネル 0 で転送終了割り込みが発生したかどうかを示します。このビットにはチ
ステータス
ャネル 0 のチャネルコントロールレジスタの割り込みイネーブルビット
(CCR0.INTENC, CCR0.INTENT) とチャネルステータスレジスタの正常終了ビット
(CSR0.INCHNC, CSR0.NTRNFC) との下に示す演算結果が示されます。
(CCR0.INTENC & CSR0.NCHNC) | (CCR0.INTENT & CSR0.NTRNFC)
1: エラー割り込みあり
0: エラー割り込みなし
17 : 14
FIFOVC
FIFO Valid Entry Count (初期値 0x0)
FIFO
バリッド
これらのリードオンリービットは、FIFO 中の、ライト済みであるが未だリードされ
エントリカウント ていないデータの数を示します。この情報は、転送アクティブビットをクリアして
転送が停止されたときに、FIFO 内のデータをソフトウエアでリカバリするために使
います。
13 : 11
FIFWP
FIFO
ライトポインタ
FIFO Write Pointer (初期値 000)
これらのリードオンリービットは、FIFO 内の次のライト位置を示します。この情報
は、リードポインタと対称性を保つために提供されており、転送アクティブビット
をクリアして転送が停止されたときに FIFO 内のデータをソフトウエアリカバリす
るためには必要ありません。
10 : 8
FIFRP
FIFO
リードポインタ
FIFO Read Pointer (初期値 000)
これらのリードオンリービットは、FIFO 内の次のリード位置を示します。この情報
は、転送アクティブビットをクリアして転送が停止されたときに FIFO 内のデータ
をソフトウエアでリカバリするために使います。
7
RSFIF
リセット FIFO
Reset FIFO (初期値 0)
FIFO をリセットするためのビットです。
このビットが “1” のとき、FIFO リードポインタ、ライトポインタ、ならびに入力カ
ウントはゼロに初期化されます。
6:3
FIFUM
FIFO ユーズ
マスク
FIFO Use Mask (初期値 0000)
この 4 ビットは、各チャネルが 8 ワードの FIFO をメモリ間転送に使用できるかど
うかを指定します。ビット 3 はチャネル 0、ビット 4 はチャネル 1、ビット 5 はチ
ャネル 2、ビット 6 はチャネル 3 にそれぞれ対応します。すべてのチャネルがバス
権を失ってから次に得るまでの間データを FIFO 内に保存する必要がない場合にの
み複数チャネルで 8 ワード FIFO を共有することができます。万一違反があっても
ハードウエア的に検出する方法がないため、その場合動作を保証できません。チャ
ネルがデュアルアドレスモードで 4 または 8 ワードの転送サイズの場合には、チャ
ネルの FIFUM ビットを “1” にセットしてください。
図 10.3.2 マスタコントロールレジスタ (2/3)
10-5
第 10 章 DMA コントローラ
ビット
ニモニック
フィールド名
説 明
2
LE
リトル
エンディアン
Little Endian (初期値 0)
エンディアンを指定するビットです。初期値の ENDIAN 信号と同じ設定にしてくだ
さい。
1: DMAC は、Little Endian にて動作
0: DMAC は、Big Endian にて動作
1
RRPT
ラウンドロビン
プライオリティ
Round Robin Priority (初期値 0)
優先順位の方法を指定します。
1: ラウンドロビン優先。最後に使用されたデバイスの優先順位が最低で、その前の
デバイスが次に低い優先順位
0: 固定優先。チャネル 0 が最高の優先順位で、1 はその次、チャネル 3 は最低の優
先順位になります。
(注) 優先順位判定は、スヌープ機能ありとなしとで独立に実行されます。
0
MSTEN
マスター
イネーブル
Master Enable (初期値 0)
DMAC をイネーブルにするためのビットです。
1: イネーブル(Dreq が受け付けられます)
0: ディセーブル(Dreq が受け付けられません)
(注) DMAC 全体がディセーブルになると、バスインタフェースロジックおよびステ
ートマシンを含むすべての内部ロジックがリセットされます。
図 10.3.3 マスタコントロールレジスタ (3/3)
10-6
第 10 章 DMA コントローラ
10.3.3
チャネルコントロールレジスタ (CCRn)
31
27
0
15
13
INTRQD
R/W
000
ビット
ニモニック
12
26
25
24
DBINH
SBINH
CHRST
R/W
0
R/W
0
R/W
1
10
9
11
INTENE INTENC INTENT CHNEN
R/W
0
R/W
0
R/W
0
R/W
0
23
0xFFFE_B018 (ch. 0)、
0xFFFE_B038 (ch. 1)、
0xFFFE_B058 (ch. 2)、
0xFFFE_B078 (ch. 3)
22
21
20
19
REQPL
EGREQ
CHDN
DNCTL
EXTRQ
R/W
0
R/W
0
R/W
0
R/W
0
R/W
00
R/W
0
6
5
4
RVBYTE AckPOL
R/W
0
8
7
XTACT
SNOP
R/W
0
R/W
0
フィールド名
DSTINC SRCINC
R/W
0
R/W
0
18
2
17
16
1
0
XFSZ
MEMIO
ONEAD
R/W
000
R/W
0
R/W
0
: タイプ
: 初期値
: タイプ
: 初期値
説 明
26
DBINH
デスティネーショ Destination Burst Inhibit (初期値 0)
ンバースト禁止
デュアルアドレス転送において、転送サイズ (XFSZ フィールド)でバースト転送を
選択したときに、デスティネーション側のライトサイクルをバースト転送で行うか
シングル転送で行うかを設定します。
シングルアドレス転送およびチェインオペレーションにはこのビットの設定は影響
しません。
1: バースト転送はできません。
0: バースト転送
ただしアライメントやカウントがバースト転送できる値になっている必要があ
ります。
25
SBINH
ソースバースト
禁止
24
CHRST
チャネルリセット Channel Reset (初期値 1)
チャネルを初期化するためのビットです。
1: すべてのステータスビット、転送アクティブ、ならびにチェインイネーブルがク
リアされ、そのチャネルのすべてのロジックと状態がリセットされます。そのチ
ャネルを動作させる前にソフトウエア的にこのビットをクリアしなければなり
ません。
0: チャネルイネーブル
23
RVBYTE
リバースバイト
Reverse Bytes (初期値 0)
バイト順をリバースするかどうか指定します。
1: デュアルアドレス、転送サイズが 32 ビット以上の転送に対してバイト順がリバ
ースされます。
0: バイト順は、リバースされません。
22
ACKPOL
アクノリッジ
ポラリティ
Acknowledge Polarity (初期値 0)
アクノリッジ信号 (DMAACKn) の極性を指定します。
1: DMAACK 信号は 1 のときにアサート
0: DMAACK 信号は 0 のときにアサート
21
REQPL
リクエスト
ポラリティ
Request Polarity (初期値 0)
リクエスト信号 (DMAREQu) の極性を指定します。
1: DMAREQ は 1 のときにアサート
0: DMAREQ は 0 のときにアサート
Source Burst Inhibit (初期値 0)
デュアルアドレス転送において、転送サイズ (XFSZ フィールド)でバースト転送を
選択したときに、ソース側のリードサイクルをバースト転送で行うかシングル転送
で行うかを設定します。
シングルアドレス転送およびチェインオペレーションにはこのビットの設定は影響
しません。
1: バースト転送はできません。
0: バースト転送
ただしアライメントやカウントがバースト転送できる値になっている必要があ
ります。
図 10.3.4 チャネルコントロールレジスタ (1/4)
10-7
第 10 章 DMA コントローラ
ビット
ニモニック
フィールド名
説 明
20
EGREQ
エッジリクエスト Edge Reques (初期値 0)
リクエスト信号 (DMAREQ) がエッジかレベルかを指定します。
1: 外部要求信号は、エッジ検出になります。エッジが検出されるたびに 1 回の DMA
転送が起動されます。次の転送を実行するために 1 回リクエスト信号をデアサー
トし、その後再びアサートしてください。
0: 外部要求信号はレベル検出になります。
19
CHDN
チェインダン
Chain Done (初期値 0)
1: DMADONE*の値は 1 回の転送ではなく転送チェインを制御します。DMADONE*
信号は、チェイン全体が完了した時点でアサートされます。また DMADONE*が
外部的にアサートされるとアクティブチャネルのチェイン全体が終了します。
0: DMADONE*信号が出力の場合には、DMADONE*の値は転送チェインではなく 1
回の転送を制御します。DMADONE*信号は、現在の転送が完了した時点でアサ
ートされます。また DMADONE*信号が入力の場合には DMADONE*が外部的に
アサートされると、DMA 転送全体 (現在の転送およびチェイン全体) が終了しま
す。
18 : 17
DNCTL
DONE
コントロール
Done Control (初期値 00)
DMADOME*信号の入力/出力の有効/無効を指定します。
00: DMADONE*信号は、出力されません。DMADONE*信号の入力を無視します。
01: DMADONE*信号は、出力されません。DMADONE*信号が入力されると、現在
の転送またはチェインが正常に終了します。
10: DMADONE*信号は、出力がイネーブルになり、転送またはチェインが終了する
とアサートされます。DMADONE*信号の入力は無視されます。
11: DMADONE*信号は、このチャネルがアクティブであるとオープンドレーン信号
になり、転送またはチェインが終了するとアサートされます。DMADONE*信号
が入力されると、現在の転送またはチェインのリンクが正常に終了します。
(注意) オープンドレインに対してプルアップ抵抗を使用すると遷移時間が長くなる
ため、このモードは注意して使用してください。
16
EXTRQ
外部リクエスト
External Request (初期値 0)
転送要求モードを設定します。
1: このチャネルに対して外部要求をアサートすると、DMAC が転送サイクルを実
行します。
0: このチャネルに対する転送サイクルが内部的に生成されます。このモードはメ
モリ間転送用に使います。
15 : 13
INTRQD
内部リクエスト
遅延
Internal Request Delay (初期値 000)
DMA 要求を内部発生にした場合に、内部的に 2 つの転送要求間に遅延時間を発生さ
せます。このビットではこの遅延時間を設定します。
000: 遅延時間は最小になります。(このときバスはいったん開放され、再び獲得さ
れます。)
001: 16 クロック遅れます。
010: 32 クロック遅れます。
011: 64 クロック遅れます。
100: 128 クロック遅れます。
101: 256 クロック遅れます。
110: 512 クロック遅れます。
111: 1024 クロック遅れます。
12
INTENE
エラー時の
割り込み
イネーブル
Interrupt Enable on Error (初期値 0)
1: エラーが発生すると、DMAC は割り込み要求を発生します。
0: エラーが発生しても割り込み要求を出しません。
11
INTENC
チェインダン時の Interrupt Enable on Chain Done (初期値 0)
割り込み
1: 現在のチェインが終了すると、DMAC は割り込み要求を発生します。
0: 現在のチェインが終了しても、割り込み要求を出しません。
イネーブル
10
INTENT
転送終了時の
割り込み
イネーブル
Interrupt Enable on Transfer Done (初期値 0)
1: 現在の転送が終了すると DMAC が割り込み要求を発生します。
0: 現在の転送が終了しても割り込み要求を出しません。
図 10.3.5 チャネルコントロールレジスタ (2/4)
10-8
第 10 章 DMA コントローラ
ビット
ニモニック
フィールド名
説 明
9
CHNEN
チェイン
イネーブル
Chain Enable (初期値 0)
チェイン動作を行うかどうか指定します。
1: 現在の転送が完了すると、DMA コントローラはチェインアドレスレジスタの指定
したアドレスからチャネルレジスタにデータをロードして、DMA 転送を続けま
す。
0: 現在の転送が完了しても、さらなる転送は開始されません。
8
XTACT
転送アクティブ
Transfer Active (初期値 0)
1: このチャネル上の転送がアクティブになります。転送を開始するには、レジスタ
内で適正値を設定した後、このレジスタビットに “1” をライトしてください。こ
のビットに “0” をライトすると、転送は適正に停止され、このビットを再び “1” に
設定することによって再開できます。このビットは、転送が正常に完了するか、
またはエラーで停止すると、自動的に “0” にクリアされます。
7
SNOP
スヌープ
Snoop (初期値 0)
バス制御権要求モードとしてスヌープ機能を使用するかしないかを指定します。
1: スヌープ機能を使用します。(GSREQ) スヌープはライト時にアサートされデー
タキャッシュは、メインメモリと整合性を保たれます。
0: スヌープ機能を使用しません。 (GHPGREQ)
(注) データキャッシュをライトバックモードにしたときには、このビットを 0 にし
てください。
6
DSTINC
ミックスド
デスティネーシ
ョンインクリメ
ント
Mixed Destination Increment (初期値 0)
デスティネーションアドレスの増加分を指定します。
1: 奇数ワード境界ではデスティネーションインクリメントレジスタの値、偶数ワー
ド境界では 4 バイトの固定値をアドレス増加分として使用して、デスティネーシ
ョンアドレスを増加します。
0: デスティネーションアドレスはデスティネーションインクリメントレジスタの
値分増加していきます。
(注) アドレスのインクリメントは、バーストサイクルでも実行されます。バースト
転送時に非標準インクリメント値 (4 以外) を使えるのは、SDRAM コントロー
ラにつながっているメモリだけです。このときの設定値は、0 から 255 ワード
(1020 バイト) が可能です。
5
SRCINC
ミックスド
ソース
インクリメント
Mixed Source Increment (初期値 0)
ソースアドレスの増加分を指定します。
1: 奇数ワード境界ではソースインクリメントレジスタの値を、偶数ワード境界では
4 バイトの固定値をアドレス増加分として使用して、ソースアドレスを増加しま
す。
0: ソースインクリメントレジスタの値分は、常にソースアドレスは増加していきま
す。
(注) アドレスのインクリメントは、バーストサイクルでも実行されます。バースト
転送時に非標準インクリメント値 (4 以外) を使えるのは、SDRAM コントロー
ラにつながっているメモリだけです。このときの設定値は、0 から 255 ワード
(1020 バイト) が可能です。
4:2
XFSZ
転送サイズ
Transfer Size (初期値 000)
1 回の要求に対する転送データ量を指定します。
000: 8 ビット。デュアルアドレスモードのみ可能。
001: 16 ビット。デュアルアドレスモードとメモリと I/O デバイス間のシングルア
ドレスモードで可能。
010: 1 ワード。デュアルアドレスモードとメモリと I/O デバイス間のシングルアド
レスモードで可能。
011: 予約
100: 4 ワード。MCR 中でチャネルの FIFUM ビットがセットされた場合のデュアル
アドレスモードとメモリと I/O デバイス間のシングルアドレスモードで可能。
101: 8 ワード。MCR 中でチャネルの FIFUM ビットがセットされた場合のデュアル
アドレスモードとメモリと I/O デバイス間のシングルアドレスモードで可能。
110: 16 ワード。メモリと I/O デバイス間のシングルアドレスモードで可能。
111: 32 ワード。メモリと I/O デバイス間のシングルアドレスモードで可能。
図 10.3.6 チャネルコントロールレジスタ (3/4)
10-9
第 10 章 DMA コントローラ
ビット
ニモニック
フィールド名
説 明
1
MEMIO
メモリ to I/O
Memory to I/O (初期値 0)
シングル転送での転送方向を指定します。(このビットはデュアルアドレス転送では
使用されません)
1: メモリから I/O へ
0: I/O からメモリへ
0
ONEAD
One アドレス
One Address (初期値 0)
転送がシングルアドレス転送かデュアルアドレス転送かを指定します。
1: シングルアドレス転送
0: デュアルアドレス転送
図 10.3.7 チャネルコントロールレジスタ (4/4)
(注)
データキャッシュをライトバックモードにしたときには、ビット 7 (SNOP) は “0” にしてください。
10-10
第 10 章 DMA コントローラ
チャネルステータスレジスタ (CSRn)
10.3.4
0xFFFE_B01C (ch. 0)、
0xFFFE_B03C (ch. 1)、
0xFFFE_B05C (ch. 2)、
0xFFFE_B07C (ch. 3)
このステータスレジスタ内のすべてのビットは、このレジスタをリードしても、ビットの値
に変化はありません。また、ビットに “0” をライトしても、値は変化しません。チャネルアク
ティブビット (CHNACT)、異常チェイン完了ビット (ABCHC) およびインターナルウェイト
カウンタ (WAITC) 以外のビットに “1” をライトすると、そのビットはクリアされます。チャ
ネルアクティブビットには、コントロールレジスタ (CCRn) の XTACT ビットの値がコピーさ
れています。異常チェイン完了ビット (ABCHC) は、すべてのエラービット (CFERR、CHERR、
DESERR、SORERR) を OR した値になっています。この ABCHC ビットをクリアするため
に、すべてのエラービット (CFERR、CHERR、DESERR、SORERR) をクリアしなくてはな
りません。
31
24 23
16
0
WAITC
: タイプ
: 初期値
R
0x00
15
14
13
WAITC
9
0
R
00
ビット
ニモニック
8
7
6
5
4
CHNACT ABCHC NCHNC NTRNFC EXTDN
R
0
R
0
フィールド名
3
CFERR
2
1
0
CHERR DESERR SORERR
R/WC R/WC R/WC R/WC R/WC R/WC R/WC : タイプ
: 初期値
0
0
0
0
0
0
0
説 明
23 : 14
WAITC
内部ウェイト
カウンタ
Internal Wait Counter (初期値 0x000)
このリードオンリーフィールドは、ソフトウエアによりサイクル間の内部遅延を追
跡するのに使用できます。
8
CHNACT
チャネル
アクティブ
Channel Active (初期値 0)
このビットには、チャネルコントロールレジスタ (CCRn) の XTACT ビット値がコ
ピーされています。
7
ABCHC
異常チェイン
終了
Abnormal Chain Completion (初期値 0)
エラーが発生したかどうかを示します。このビットはエラービット (CFERR、
CHERR、DESERR、SORERR) を OR した値を示します。
1: エラーによりチェイン全体が終了
0: エラービットが最後にクリアされてからチェインはエラーにしていません。
6
NCHNC
正常チェイン
終了
Normal Chain Completion (初期値 0)
1: チェイン全体が正常に終了
0: このビットが最後にクリアされてから以降チェイン動作は正常終了していませ
ん。
5
NTRNFC
正常転送終了
Normal Transfer Completion (初期値 0)
コマンドによるデータ転送が正常に終了したか、または外部 DMADONE*入力によ
り転送が正常に終了したかどうかを示します。
1: 転送が正常に完了
0: このビットが最後にクリアされてから転送は完了していません。
4
EXTDN
外部 DONE
アサート
External Done Asserted (初期値 0)
外部から DMADONE*信号がアサートされたかどうか示します。
1: 外部終了信号がアサート
0: 外部終了信号がアサートされていない
3
CFERR
コンフィギュレー Configuration Error (初期値 0)
ション
コンフィグレーションエラーが起きたかどうか示します。現在のコマンドに相反す
エラー
るコントロール設定がされるとコンフィグレーションエラーが発生します。
1: エラーあり
0: エラーなし
図 10.3.8 チャネルステータスレジスタ (1/2)
10-11
第 10 章 DMA コントローラ
ビット
ニモニック
フィールド名
説 明
2
CHERR
チェインバス
エラー
1
DESERR
デスティネーショ Destination Bus Error (初期値 0)
ンエラー
デスティネーションバスライトオペレーション時にバスエラーが発生したかどうか
示します。
1: バスエラーが発生
0: バスエラーは発生していない
0
SORERR
ソース
バスエラー
Chain Bus Error (初期値 0)
チェイン動作中にメモリが応答しなかったためバスエラーが発生したかどうか示し
ます。
1: バスエラーが発生
0: バスエラーは発生していない
Source Bus Error (初期値 0)
ソースバスリードまたはライトオペレーション時にバスエラーが発生したかどうか
示します。
1: バスエラーが発生
0: バスエラーは発生していない
図 10.3.9 チャネルステータスレジスタ (2/2)
10-12
第 10 章 DMA コントローラ
10.3.5
ソースアドレスレジスタ (SARn)
0xFFFE_B004 (ch. 0)、0xFFFE_B024 (ch. 1)、
0xFFFE_B044 (ch. 2)、0xFFFE_B064 (ch. 3)
31
16
SADDR
: タイプ
: 初期値
R/W

15
0
SADDR
: タイプ
: 初期値
R/W

ビット
31 : 0
ニモニック
SADDR
フィールド名
ソースアドレス
説 明
Source Address (初期値 不定)
ソースアドレスレジスタには、デュアルアドレス転送のためのソース側の物理アド
レスを設定します。シングルアドレス転送ではメモリから I/O、I/O からメモリのど
ちらの転送にも使用され、メモリアドレスを設定します。設定するアドレスは、転
送サイズに合わせてください。たとえば、転送サイズが 32 ビットのワードデータな
らば、下位の 2 ビットを “0” にしてください。
図 10.3.10 ソースアドレスレジスタ
10-13
第 10 章 DMA コントローラ
10.3.6
デスティネーションアドレスレジスタ (DARn)
0xFFFE_B008 (ch. 0)、
0xFFFE_B028 (ch. 1)、
0xFFFE_B048 (ch. 2)、
0xFFFE_B068 (ch. 3)
31
16
DADDR
: タイプ
: 初期値
R/W

15
0
DADDR
: タイプ
: 初期値
R/W

ビット
31 : 0
ニモニック
DADDR
フィールド名
説 明
デスティネーショ Destination Address Registers (初期値 不定)
ンアドレス
デスティネーションアドレスレジスタには、デュアルアドレス転送のためのデステ
ィネーション側の物理アドレスを設定します。このレジスタはシングルアドレス転
送には使用しません。設定するアドレスは、転送サイズに合わせてください。たと
えば転送サイズが 32 ビットのワードデータならば、下位の 2 ビットを 0 にしてくだ
さい。
図 10.3.11 デスティネーションアドレスレジスタ
10-14
第 10 章 DMA コントローラ
10.3.7
チェインアドレスレジスタ (CHARn) 0xFFFE_B000 (ch. 0)、0xFFFE_B020 (ch. 1)、
0xFFFE_B040 (ch. 2)、0xFFFE_B060 (ch. 3)
31
16
CHAR
: タイプ
: 初期値
R/W

15
2
CHAR
31 : 2
(注)
ニモニック
CHAR
: タイプ
: 初期値
フィールド名
チェイン
アドレス
0
0
R/W

ビット
1
説 明
Chain Address
レジスタに次にセットする値が格納される物理アドレスを設定します。現在の転送
が完了すると、CCRn レジスタの CHNEN ビットがセットされている場合はこのア
ドレスから 8 ワードがチャネルの 8 つのレジスタ (CHARn、SARn、DARn、CNTRn、
SAIn 、 DAIn 、 CCRn 、 CSR n ) に ロ ー ド さ れ ま す 。 ロ ー ド さ れ た 値 の 中 で
CCRN.TXACT が “1”にセット されているとき、新たな転送が開始されます。
チェインアドレスレジスタ (CHARn) の最下位 2 ビットに “0” 以外の値をライトすると、コンフィ
グレーションエラーが発生します。 (マスタイネーブル (MCR.MSTEN) が 1、チャネルリセット
(CCRn.CHRST) が 0、転送アクティブ (CCRn.XTACT) が 1 の場合)
チェインアドレスレジスタ (CHARn) が 4 ワード境界の奇数側に存在する場合は、チェインリフィ
ルが 2 回の 4 ワードバーストとして実行されます。
チェインアドレスレジスタが 8 ワード境界上に存在する場合は、チェインリフィルが 1 回の 8 ワ
ードバーストとして実行されます。チェインアドレスレジスタが 4 ワードアライメント上にない
場合には、チェインリフィルは 4 回のシングルリードと 4 ワード境界上の 1 回の 4 ワードバース
トリードが実行されます。
図 10.3.12 チェインアドレスレジスタ
10-15
第 10 章 DMA コントローラ
10.3.8
ソースアドレスインクリメントレジスタ (SAIn) 0xFFFE_B010 (ch. 0)、
0xFFFE_B030 (ch. 1)、
0xFFFE_B050 (ch. 2)、
0xFFFE_B070 (ch. 3)
31
24
23
0
16
SADING
: タイプ
: 初期値
R/W

15
0
SADINC
: タイプ
: 初期値
R/W

ビット
23 : 0
ニモニック
SADINC
フィールド名
説 明
ソースアドレス
インクリメント
Source Address Increment (初期値 不定)
1 回の転送後にソースアドレスに足される増加値を設定します。この値は 24 ビット
符号付データで、バイト数を示します (すなわち、1 ワードデータでは 4)。設定する
値は転送サイズの倍数にしてください。CCR レジスタのミックスドインクリメント
ビット (SRCINC) が “1” にセットされていると、このレジスタ値は奇数ワード境界
のときのアドレスに加算され、偶数ワード境界にあるアドレスに対しては固定増分
値 (4) が使用されます。
図 10.3.13 ソースアドレスインクリメントレジスタ
10-16
第 10 章 DMA コントローラ
10.3.9
デスティネーションアドレスインクリメントレジスタ (DAIn) 0xFFFE_B014 (ch. 0)、
0xFFFE_B034 (ch. 1)、
0xFFFE_B054 (ch. 2)、
0xFFFE_B074 (ch. 3)
31
24
23
0
16
DADINC
: タイプ
: 初期値
R/W

15
0
DADINC
: タイプ
: 初期値
R/W

ビット
23 : 0
ニモニック
DADINC
フィールド名
説 明
デスティネーショ Destination Address Increment (初期値 不定)
ンアドレスインク 1 回の転送後にデスティネーションアドレスに足される増加値を設定します。この
リメント
値は 24 ビット符号付データで、バイト数を示します (すなわち、1 ワードデータで
は 4)。設定する値は転送サイズの倍数にしてください。CCR レジスタのミックスド
インクリメントビット (DSTINC) が “1” にセットされていると、このレジスタ値は
奇数ワード境界のときのアドレスに加算され、偶数ワード境界にあるアドレスに対
しては固定増分値 (4) が使用されます。
図 10.3.14 デスティネーションアドレスインクリメントレジスタ
10-17
第 10 章 DMA コントローラ
10.3.10 カウントレジスタ (CNTRn)
31
0xFFFE_B00C (ch. 0)、0xFFFE_B02C (ch. 1)、
0xFFFE_B04C (ch. 2)、0xFFFE_B06C (ch. 3)
24
23
0
16
CNTR
: タイプ
: 初期値
R/W

15
0
CNTR
: タイプ
: 初期値
R/W

ビット
23 : 0
ニモニック
CNTR
フィールド名
カウント
説 明
Count Register (初期値 不定)
転送するバイト数を設定します。値は 24 ビット符号なしデータで、1 回の転送ごと
に転送サイズ分だけカウントダウンします。設定する値は、転送サイズの倍数にし
てください(例: 32 ビットの場合 4)。
図 10.3.15 カウントレジスタ
10-18
第 10 章 DMA コントローラ
10.4 動作
TX3927 内蔵の DMA コントローラは 4 個の独立したチャネルを持っています。各チャネルには、
8 個の 32 ビットレジスタ (CHARn、SARn、DARn、CNTRn、SAIn、DAIn、CCRn、CSRn) が
あります。その他に、DMAC 全体を制御するマスタコントロールレジスタ (MCR) があります。ま
た、デュアルアドレス転送で使用されるデータ保持レジスタと 8 ワードバッファも持っています。
DMAC 内のすべてのレジスタは 32 ビットのレジスタとしてアクセスしてください。
この DMAC では、デュアルアドレスモードとシングルアドレスモードの両方をサポートしてい
ます。デュアルアドレスモードではソースアドレスをいったん DMAC に格納してからデスティネ
ーションアドレスへ転送します。このためソースアドレスから DMAC にリードするサイクルと
DMAC からデスティネーションアドレスへライトするサイクルの 2 つのバスサイクルが実行され
ます。
これに対してシングルアドレスモードではひとつのバスサイクル内で直接ソースアドレスから
デスティネーションアドレスへデータが転送されます。
•
データの流れとバスサイクル
(1) デュアルアドレスモード
•
1 回目のバスサイクル
ソースアドレス → DMAC
•
2 回目のバスサイクル
DMAC
→ デスティネーションアドレス
(2) シングルアドレスモード
•
1 回目のバスサイクル
ソースアドレス → デスティネーションアドレス
また DMAC はチェイン機能も持っていてあらかじめ次の DMA 転送の設定をメモリなどに格納
して置くことにより、自動的にその設定を DMAC に取り込んで再起動できます。
10.4.1
デュアルアドレスオペレーション
DMAC は、デュアルアドレス転送では、各バスオペレーションごとに常に最低 1 回のリー
ドオペレーションと 1 回のライトオペレーションを実行します。
転送サイズが 8、16、32 ビットのデュアルアドレス転送では、DMAC は各バスオペレーシ
ョンごとにデータを 1 つしか転送しません。このとき DMAC は一時データバッファを使用し
て転送されるデータを保持しますが、2 つの DMA 要求転送間では有効な情報を保持している
とは限りませんので注意してください。
ソースおよびデスティネーションアドレスの両方が、アドレスインクリメントレジスタ
(SAIn、DAIn) の値によって増加します。各バスオペレーションにおいて、チャネルコントロ
ールレジスタ (CCRn) の XFSZ サイズフィールドに設定された転送サイズの単一データ転送の
たびに、カウントレジスタ (CNARn) の値が転送バイト数分デクリメントされます。このカウ
ンタレジスタの値が “0” になるまで転送は実行されます。カウントが “0” になったとき、チェ
インイネーブルビット (CCRn.CHNEN)が “1” にセットされていると、DMAC は自身のレジス
タに新しい値をセットします。
ミックスドアドレスインクリメントでは、アドレスの増加分として、アドレスが奇数ワード
境界にあるときはアドレスインクリメントレジスタ (SAIn、DAIn) の値を使用し、偶数ワード
境界にあるときは固定値 4 を使用します (奇数ワード、偶数ワードの識別は A2 ビットの値に
よって決まります)。ミックスドアドレスインクリメント機能は、32 ビット未満の転送サイズ
では使用しないでください。
デュアルアドレス転送では、4 ワードまたは 8 ワードのバースト転送可能です。ソースまた
はデスティネーションアドレス、アドレスインクリメント、ならびにカウントはワードアライ
メントにしてください。これらの値のひとつでもワード境界になっていなければ、チャネルは
コンフィグレーションエラーを検出し、オペレーションを打ち切ります。デュアルアドレスバ
ースト転送では DMAC 中の 8 ワードのバッファを使用します。このバッファは、現在アクテ
10-19
第 10 章 DMA コントローラ
ィブなチャネル間で共有できる場合とできない場合があります。8 ワードのバッファを共有す
るためには、いかなるチャネルも 2 つのバスオペレーションの間にデータを残せません。もし
残した場合、そのデータは他のチャネルで上書きされてしまう可能性があります。(「10.4.10
DMAC FIFO 使用上の注意事項」参照)
8 ワードバッファを使用する 4 ワードまたは 8 ワードのサイズのデュアルアドレス転送が開
始すると、DMAC は、ソースアドレスレジスタが 4 ワードアライメントになるか、カウント
がゼロに達するか、または転送サイズが 4 ワードのときにバッファに 4 ワードのデータがたま
るかもしくは転送サイズが 8 ワードのときにバッファに 8 ワードのデータがたまるまでシング
ルオペレーションを実行して 1 ワードずつデータをリードします。このシングルワードオペレ
ーション(リードまたはライト)は、デュアルアドレスバーストがイネーブルになった転送の
始まりと終わりのみで発生します。いったんアドレスが 4 ワードアライメントになると、シン
グル転送ではなくバースト転送を実行します。
ソースアドレスが 4 ワードにアライメントされ、最低 4 ワードのリードが残っている場合は、
DMAC は 8 ワードバッファへバーストリードを実行します。転送サイズが 8 ワードに設定さ
れ、ソースアドレスが 8 ワードにアライメントされており、最低 8 ワードの転送が残っており、
しかもバッファが空であると、バーストサイズは 8 ワードになります。この条件がひとつでも
満たされない場合には、バーストサイズは 4 ワードになります。DMAC は、転送の終わりに、
カウントに一致するだけのワードをリードします。これらのリードは、アドレスアライメント
またはカウント値の関係でバーストが行えない場合には、シングルオペレーションとして実行
されます。DMAC は、転送する必要のないワードのリード/ライトは行いません。つまり転
送は設定された最初のワードから始めて最後のワードで終了します。また、アドレスがバース
トのサイズにアライメントされている場合にのみバーストオペレーションを実行します。
最後に、デュアルアドレス転送時にバーストリードが実行される条件をまとめておきます。
すべての条件が満たされたときバーストリードが実行されます。
① 8 ワードバーストリード
•
転送サイズが 8 ワード
•
ソースアドレスが 8 ワードアライメントにある。
•
残り転送データが 8 ワード以上ある。
•
FIFO が使えるよう設定してある。
•
FIFO が空
② 4 ワードバーストリード
•
転送サイズが 4 ワードまたは 8 ワード
•
ソースアドレスが 4 ワードアライメントにある。
•
残り転送データが 4 ワード以上ある。
•
FIFO が使えるよう設定してある。
•
FIFO 上で 4 ワードが空
たとえ 8 ワードの転送サイズを設定しても、以下の条件がひとつでも成り立つと 8 ワードリ
ードではなく 4 ワードリードが実行されます。
•
ソースアドレスが 4 ワードの奇数アドレスにアライメント
•
残り転送サイズが 8 ワード未満 4 ワード以上
•
FIFO の空きが 4 ワードしかない。
デュアルアドレス転送バスオペレーションのライトフェーズで DMAC が実行する手順は、
リードフェーズと同様です。ライトフェーズは、前述のリードオペレーションの後に実行すべ
きリード動作がないときに開始します。カウントは、各リードオペレーションの終わりでデク
レメントされ、最後のライト動作では “0” になっています。カウントが “0” のときには、バッ
10-20
第 10 章 DMA コントローラ
ファ内のすべてのワードがバーストまたはシングルライト転送によりメモリにライトされま
す。カウントが “0” でない場合には、DMAC はデスティネーションアドレスが 4 ワードアラ
イメントになるまでシングルライトを実行します。
もし 4 ワード以上のデータがバッファ内に残っていると、これらは 4 ワードバーストライト
によりメモリにライトされます。4 ワード未満の場合は、バスオペレーションは終了します。
リードの場合と同様に、転送の始まりと終わり以外は、デュアルアドレスバースト転送ではバ
ーストライトを実行します。一方、リードの場合とは異なり、DMAC は同じバスオペレーシ
ョン内で 2 つの 4 ワードライトバーストを連続して実行することがあります。転送サイズが 8
ワードで、デスティネーションが 8 ワードにアライメントされていて、FIFO 中に 8 ワードの
データがあり、そのチャネルで FIFO を使用するよう設定している (MCR.FIFUM ビットで “1”
にセット)と、DMAC は 8 ワードバーストライトを実行します。これに対して、デスティネー
ションアドレスが 4 ワード奇数アドレスにアライメントされていると (その他は同じ条件)、4
ワードバーストライトが 2 回実行されます。
DMA の動作の重要な点は、最初に設定したソースおよびデスティネーションアドレスが転
送サイズに関して同じアライメントになっている場合にのみチャネルが 8 ワードバッファを
共有できる点です。つまり、転送サイズに対するモジュロがソースアドレスとデスティネーシ
ョンアドレスとで等しくなければならないということです。この条件を満たすすべてのチャネ
ルが同時に転送用の 8 ワードバッファを共有できます。
バーストの可能なデュアルアドレス転送のバスオペレーションでバスエラーが発生すると、
そのバスオペレーションが終了され、バッファがクリアされます。
10.4.2
チェインオペレーション
この DMAC は、リンクリストチェイン方式を使用して一連の DMA 転送終了後、次の DMA
転送を自動的に実行することができます。転送カウントが 0 になったとき(あるいは外部転送
終了信号 (DMADONE*) がアサートされたとき)
、コントロールレジスタのチェインイネーブ
ルビット (CCRn.CHNEN) が “1” にセットされていると、DMAC は自動的にチェインレジス
タの示すアドレスから 8 ワードのデータを、8 個のレジスタ (CHARn、SARn、DARn、CNTRn、
SAIn、DAIn、CCRn、CSRn) にロードします。このときのロードの順は CHARn、SARn、
DARn、CNTRn、SAIn、DAIn、CCRn、CSRn の順です。
次に、DMAC は、あたかも CPU がそれらのレジスタをライトしたかのように、新しいレジ
スタの内容で指定された DMA 転送を実行します。ただしこのとき、新しくロードしたデータ
で転送アクティブビット (CCRn.XTACT) が “1” にセットされている必要があります。この一
連の動作は、チェインイネーブル (CCRn.CHNEN) が 0 になっているか、または新しくロード
した転送アクティブビット(CCRn.XTACT) の値が “0” に設定されているまで続行します(エ
ラーまたは外部終了アサートは発生しないとき)。
チェインオペレーションでは、チャネルレジスタのリフィルにデュアルアドレス転送と同様
な規則に従うバーストオペレーションが実行されます。チェインオペレーションは、常に8ワ
ード転送です。
DMAC は、チェインオペレーションの始まりでチェインアドレスが 8 ワード境界にアライ
メントされていると、8 ワードリードバーストを 1 回実行してすべてのチャネルレジスタをリ
フィルします。一方、4 ワード境界にアライメントされていると、4 ワードバーストを 2 回実
行します。4 ワード境界にもアライメントされていないときには、チェインアドレスが 4 ワー
ド境界にアライメントされるまでシングルワードリードを実行し、次に 4 ワードバーストリー
ドを実行し、最後にトータル 8 ワードをリードするまでシングルリードを実行します。
10-21
第 10 章 DMA コントローラ
10.4.3
シングルアドレスオペレーション
シングルアドレスリード転送時に、DMAC はソースアドレスレジスタの指定するアドレス
に対するリードオペレーションを実行しますが、そのリードによって提供されたデータを
DMAC 内部には取り込みません。外部 I/O デバイスは、ACK*信号を使用してデータをサンプ
リングしてください。外部 I/O デバイスは、アサートされた ACK*をサンプリングするクロッ
クと同じクロックの立ち上がりでデータを受信してください。
シングルアドレスライト転送時には、DMAC はソースアドレスレジスタの指定するアドレ
スに対するライトオペレーションを実行します。外部 I/O デバイスに ACK*によりデータを出
力するよう知らせます。外部デバイスは、DMAACK*信号を受信したらデータバスにデータを
出力してください。
また、バーストライト転送では、ACK*アサート後遅くとも 2 クロックサイクル以内に次の
データを出力してください。このプロセスはそのバーストが完了するまで続行します。DMA
サイクルのメモリオペレーションを遅くする方法はないため、シングルアドレス転送の対象と
なる外部 I/O デバイスがその転送に遅れないようにあらかじめ設計してください。
(注)
10.4.4
シングルアドレス転送では、TX3927 はデータバスをドライブしません。
外部 DMADONE*入力による DMA の終了
DMADONE*端子は、入力専用、出力専用、入出力、または Don’t care 端子としてチャネル
ごとに設定することができます。特定のチャネルに対してこの端子が使用されるように設定し
ておくと、そのチャネルの DMAACK がアサートされたときはいつでも DMADONE*信号は
有効になります。すべてのアクティブチャネルが DMADONE*端子を Don’t care 端子として
設定した場合、DMADONE*端子はタイマ出力 (TIMER[0]) 信号として使用可能になります。
DMADONE*をあるチャネルにおいて出力信号として設定すると、現在の転送またはチェイ
ンの転送が完了したときに TX3927 によってアサートされます(Low を出力します)
。DMAC
は、チャネルコントロールレジスタ (CCRn) のチェイン終了ビット (CHDN) の値に応じて
DMADONE*信号が転送の終了時にアサートされるのか、チェイン転送が終了したときにアサ
ートされるのかが選択されます。
DMADONE*信号は、DMAACK がアサートされる期間中の最後のクロックで 1 クロック間
だけアサートされます。DMADONE*の設定をチェイン終了時に設定していると、一連のチェ
イン DMA 転送の最後の DMA 転送における DMAACK のアサート時に DMADONE*信号は
アサートされます。したがってこの後 DMA 転送はもう行われません(再設定するまで)。
一方、DMADONE*の設定をチェイン時ではない設定にしている場合には、現在の設定によ
る DMA 転送に対する最後において DMAACK 信号がアサートされたときに DMADONE*信
号はアサートされます。もしこのときそのチャネルのチェインイネーブルもセットされている
場合には、DMAC はチェインアドレスレジスタ (CHARn) で指定されるアドレスからデータを
読み込みチャネルレジスタにセットして、DMA 転送を続行します。
DMADONE*信号をあるチャネルにおいて入力信号として設定すると、そのチャネルの
DMAACK がアサートされているときに外部デバイスが DMADONE*信号をアサートする(そ
れを Low に駆動する)と、DMA 転送全体が停止します。
DMAC は、チェイン動作イネーブル時でもチャネルコントロールレジスタのチェイン終了
ビット (CCRn.CHDN) の値に関わらず、チェイン転送全体を終了させます。DMADONE*の
外部アサートから DMAC がさらなるオペレーションを禁止するまでには 3 クロックサイクル
を要します。DMAC は、開始したバスサイクルは停止しません(シングル転送、バースト転
送サイクルのいずれであっても)
。
シングルアドレス DMA 転送では、バスサイクルは常に 1 回のバス所有で 1 回しか存在しな
いため、転送の終了時点ははっきりしています。現在の転送が終了すると、このチャネルに対
10-22
第 10 章 DMA コントローラ
する次の転送は行われません (ただし DMADONE*をチェイン転送終了に設定しているか、
DMADONE*を単なる転送終了に設定しているときで転送カウンタが 0 のときです。もし転送
カウンタが 0 でないとその次の DMA 転送が実行されます)。
ノンバーストのデュアルアドレス転送では、DMAC がバスを所有するたびに 1 回のリード
バスサイクルと 1 回のライトバスサイクルが行われます。こ のよう な場合には、外 部
DMADONE*がアサートされると、外部 DMAC はリードおよびライトバスサイクルを両方行
ってから DMA 転送を終了します。
バーストのデュアルアドレス転送では動作はさらに複雑になります。
1 回のバスの所有には、
複数のリードおよびライトサイクルが含まれる可能性があり、バス所有権が移る間に FIFO 内
に有効なデータが残される場合もあります。外部 DMADONE*信号が転送アクティブビット
(CCRn.XTACT) をいったんクリアすると、それ以上リードは行われません。リードサイクル
で外部 DMADONE*がアサートされると、DMAC は対応するライトサイクルを実行して停止
します。
DMADONE*がアサートされるのがライトサイクルまで遅れると、DMAC は現在のライト
動作を実行して停止します。したがってライトサイクルが複数発生する DMA 転送では、後続
のライトサイクルが実行されず、FIFO 内にデータが残ります。ただし、このデータは、バス
権が移る間にデータが正常に残される場合にのみ、DMADONE*のアサート後に FIFO 内に正
しい値として残っています。したがって、これは、FIFO がこのチャネル専用である場合に限
られます。この場合、DMAC レジスタ内には、ソフトウエアが FIFO 内に残っているデータ
をチェックしてその転送が適正に停止されるようにこれらのデータを適正位置に転送できる
だけの情報が存在します。すなわち、リードされたすべてのワードが適正デスティネーション
位置にもライトされます。
DMADONE*端子が、あるチャネルに対して入力と出力の両方になるように設定された場合
には、このチャネルがアクティブになるとオープンドレーン端子になります。DMADONE*
端子をこのように使用する場合には、ボード上でこの端子上に外部プルアップをつけてくださ
い。この端子の出力および入力動作は、それがオープンドレーンであること以外はこれまで説
明したこととまったく同様です。DMADONE*が同じタイミングで外部ロジックと TX3927 に
よって同時にアサートされると、チャネルステータスレジスタ内の外部終了アサートビット
(CSRn.EXTDN) がセットされます。
10.4.5
スタンダードでないアドレスインクリメント値
DMAC のアドレスインクリメント値は様々な転送に対応できるよう非常にフレキシブルで
すが、反面使用上の制限があります。この制限はバースト転送に関してだけです。転送サイズ
が 8 ビット、16 ビットまたは 32 ビットのときには、ソースアドレスおよびデスティネーショ
ンアドレスのインクリメント値に関する制限は、アライメントに関する制限だけです。8 ビッ
ト転送では、アライメントの制限はないのでインクリメント値に制限はありません。16 ビッ
ト転送では、インクリメント値は偶数 (最下位ビットが 0) でなければなりません。32 ビット
転送ではインクリメント値は 4 の倍数 (最下位 2 ビットがともに 0) でなければなりません。
DMAC は転送後、インクリメントレジスタ (SAIn および DAIn) の値を符号拡張してアドレス
に加算します。このインクリメント機能を使うことであるメモリから 3 ワード おきにワード
データをリードして、別のメモリに 5 ワードおきにライトすることができます。
バースト転送の場合、状況はもう少し複雑になります。シングルアドレスのバースト転送で
は、1 ワードの転送ごとにソースアドレスインクリメントレジスタの値を使ってアドレスを計
算し、内部バス上にはこのアドレスが DMAC から出力されています。しかし ROM コントロ
ーラおよび SDRAM コントローラは、バースト転送における転送機能を向上させるために、ア
ドレスを自動的にインクリメントして外部出力します。ROM コントローラではこのときのイ
ンクリメント値は “4” です。したがって DMA コントローラのインクリメント値が 4 以外にな
っていると、転送が期待した通りには行われません。
10-23
第 10 章 DMA コントローラ
バースト動作中、SDRAM コントローラでサポートするインクリメント値は、符号なしの 0
∼255 ワード (0∼1020 バイト) に限られます。SDRAM にハイスピードバーストでアクセスで
きるのはバースト中のロウアドレスが同じ場合だけです。したがって DMAC で設定できるア
ドレスインクリメント値のほとんどは、ノンバースト動作でしか使えません。
10.4.6
デュアルアドレスのバースト転送
デュアルアドレスモードでバースト転送を行う際は、シングルアドレスモードよりもはるか
に制約が増えます。一般に、デュアルアドレスモードでバースト転送するにはアドレスインク
リメント値は “4” バイトだけがサポートされています (たとえバースト対象が SDRAM でもで
す)。したがって、アドレスのインクリメント値が “4” にならないソースアドレスまたはデステ
ィネーションアドレスに対しては、バースト転送でなく、シングル転送を使う必要があります。
デュアルアドレスモードでのバースト転送におけるもう 1 つの制約として、インクリメント
によりアドレスがいつかはバーストのアライメントになる必要があります。シングルアドレス
モードではこの制約はありません。DMAC のバースト終了条件が、このバーストアドレスへ
のアライメントの成立になっているためです。ここでもアドレスのインクリメント値が標準の
“4” バイトになっていれば問題は発生しません。
TX3927 にはチャネルごとにソースアドレス、デスティネーションアドレス用にバースト禁
止ビットがあります。このビットが “1” にセットされると、4 ワードまたは 8 ワードのバース
ト転送を設定していて、アライメントやインクリメント値を制限を守って設定している場合に
もバースト転送ではなく、シングル転送が実行されます。これによりインクリメントアドレス
が標準の “4” バイトになっていないときも、その際の転送をシングル転送にすることで制約を
回避できます。
DMAC をデュアルアドレスで 4 ワードバースト転送に設定すると、1 回の DMAREQ 要求
に対して 5 ワード以上のデータをリードすることはありません。一方、5 ワード以上のデータ
をライトすることはあります。ソースアドレスとデスティネーションアドレスのアライメント
の差により、
DMA 転送中 FIFO に 5 ワード以上のデータが格納されることがあります。
DMAC
は最後の DMAREQ 要求で最後のワードデータ (1∼4 ワードのいずれか) をリードします。そ
して FIFO 上に格納しているすべてのワードデータ (1∼7 ワードのいずれか) をライトします。
FIFO の深さは最大 8 ワードであり、かつ DMAC の設定上の制約により、デュアルアドレス
のバースト転送で転送できるバーストサイズは最大 8 ワードです。
10.4.7
内蔵 I/O との DMA 転送
DMAC のソースまたはデスティネーションとして内蔵 I/O を使用するときはデュアルアド
レス転送モードにしてください。シングルアドレス転送はサポートしていません。
TX3927 がイニシエータアクセスする場合には PCI コントローラ (PCIC) を経由して PCI
上のメモリなどに対しても DMA 転送できますが、このときにも転送モードはデュアルアドレ
ス転送モードにしてください。ターゲットアクセス時には PCIC 自身が DMA 転送を実行し、
内蔵の DMAC には使用しません。
PCI イニシエータ時に DMAC で DMA 転送する際には、PCIC 側に対してはバースト転送
ができませんので注意してください。チャネルコントロールレジスタ (CCRn) のビット 26, 25
(DBINH, SBINH) を “1” にセットしてバースト禁止にしてください。例えば SDRAM のデー
タを PCI 上のデバイスへ、
TX3927 がイニシエータとなって転送する際には、
ソースの SDRAM
に対してはバースト転送できますが、デスティネーションに対してはバーストが転送できませ
ん。したがって、CCRn.DBINH = “1”、CCRn.SBINH = “0” に設定します。また、バースト転
送時には DMAC 内の FIFO を使用しますので、マスタコントロールレジスタ (MCR) のビット
6∼3 (FIFUM) において該当チャネルに対する FIFO 使用をイネーブルにしてください。
SIO を DMA 転送の要求ソースに使用することができます。詳しくは「13.4.19 DMA 転送
モード」を参照してください。
10-24
第 10 章 DMA コントローラ
10.4.8
外部リクエスト (DMAREQ) の受け付けタイミング
外部リクエスト信号 (DMAREQ) を使うことで DMA 転送を起動できます。このリクエスト
信号は GBUSCLK (CPU 動作周波数の半分の周波数) により内部で周期化されます。
外部リクエスト信号 (DMAREQ) はエッジ検出もしくはレベル検出を選択できます。エッジ
検出として DMAREQ 信号を設定した場合、DMA 転送を開始すると (DMAACK がアクティ
ブになるひとつ前のクロックから) 次の DMA 要求を受け付けます。一方レベル検出時には、
DMAACK 信号がデアサートされる 2 クロック前から次の DMA 要求を受付けます (「10.5 タ
イミング図」を参照してください)。
なお、DMAREQ 信号をレベル検出として使用する場合、いったん DMAREQ をアクティブ
にしたら DMA 転送を実行するまでアクティブにしつづけてください。
10.4.9
コンフィグレーションエラー
DMA コントローラを誤った設定にして DMA コントローラをアクティブにする (チャネル
コントロールレジスタ (CCRn) のビット 8 (転送アクティブビット) を “1” にセットする) と、
コンフィグレーションエラーが発生します。コンフィグレーションエラーが発生するのは次の
設定がされているときです。
(1) チェインアドレスレジスタ (CHARn) の最下位 2 ビットが “0” 以外の値のとき
(2) シングルアドレス転送モードにて CCRn レジスタの転送サイズ (XFSZ フィールド) が 8
ビット (000) のとき
(3) デュアルアドレス転送モードにて CCRn レジスタの転送サイズ (XFSZ フィールド) が 16
ワードまたは 32 ワード (11x) のとき
(4) CCRn レジスタの転送サイズ (XFSZ フィールド) が予約 (011) のとき
(5) CCRn レジスタにてリバースバイト (ビット 23) をイネーブルにしている際に、
① シングルアドレス転送モードのとき、もしくは
② デュアルアドレス転送モードで CCRn レジスタの転送サイズ (XFSZ フィールド) が 8
ビットまた 16 ビット (00x) のとき
(6) 転送サイズが 16 ビットの際に、
① ソースアドレスレジスタ (SARn) の最下位ビットが “1” のとき、もしくは
② ソースアドレスインクリメントレジスタ (SAIn) の最下位ビットが “1” のとき、
もしくは
③ デュアルアドレス転送モードでデスティネーションアドレスレジスタ (DARn) の最下
位ビットが “1” のとき、もしくは
④ デュアルアドレス転送モードでデスティネーションアドレスインクリメントレジスタ
(DAIn) の最下位ビットが “1” のとき
(7) 転送サイズが 16 ビットの際に、カウントレジスタ (CNARn) の最下位ビットが “1” のとき
(8) 転送サイズが 32 ビットの際に、
① ソースアドレスレジスタ (SARn) の最下位 2 ビットが “0” でないとき、もしくは
② ソースアドレスインクリメントレジスタ (SAIn) の最下位 2 ビットが “0” でないとき、
もしくは
③ デュアルアドレス転送モードでデスティネーションアドレスレジスタ (DARn) の最下
位 2 ビットが “0” でないとき、もしくは
④ デュアルアドレス転送モードでデスティネーションアドレスインクリメントレジスタ
(DAIn) の最下位 2 ビットが “0” でないとき
(9) 転送サイズが 32 ビットの際に、カウントレジスタ (CNARn) の最下位 2 ビットが “0” で
ないとき
10-25
第 10 章 DMA コントローラ
10.4.10 DMAC FIFO 使用上の注意事項
転送サイズが複数ワードに設定されると、転送能力を上げるためバースト転送をしようとし
ます。このバースト転送は、アドレスが転送ワード数にアライメントしているときにのみ実行
されます。アドレスが転送ワード数境界にないと、最初の DMA 転送ではこのワード数境界ま
でのデータ転送しか行いません。このため転送されるワード数は設定したワード数より少なく
なります。
ここでソースアドレスとデスティネーションアドレスのワードアドレスが異なると、上記の
動作から FIFO 内にデータが一時的に蓄えられた状態が発生します。FIFO はすべてのチャネ
ルで共有します。複数チャネルで FIFO を使用する場合、この残っているデータが上書きされ
る可能性があります。これを避けるにはソースアドレスとデスティネーションアドレスのワー
ドアドレスを同じにしてください。
例 1) 1 ワードデータが FIFO に残る例
設定
・4 ワード転送
・SAR: 0x00800004
・DAR: 0x00800108
動作
① 1 回目の DMA 転送
a 0x00800004 が 4 ワード境界にないのでシングルで 4 ワード境界 (0x0080010 の手前)
まで 3 ワード分のデータをシングルワードリードする。
b 0x00800108 が 4 ワード境界にないのでシンングル 4 ワード境界 (0x0080110 の手前)
まで 2 ワード分のデータをシングルワードライトする。FIFO には 1 ワード分のデー
タが残る。
② 2 回目の DMA 転送
a 0x00800010 が 4 ワード境界なので 4 ワード分バーストリードする。
b 0x00800110 が 4 ワード境界なので 4 ワード分バーストリードする。
③ 3 回目以降の DMA 転送
②と同じくバーストアクセスを実行する。
リード
ライト
0x00800004
0x00800108
0x00800008
0x0080010c
→ 0x0080000c
0x00800110
0x00800010
0x00800114
0x00800014
0x00800118
0x00800018
2 回目のリード
4 ワード境界まで → 0x0080001c
バーストリード
0x00800020
0x0080011c
0x00800024
0x00800128
0x00800028
0x0080012c
1 回目のリード
4 ワード境界まで
0x00800120
0x00800124
1 ワードデータが FIFO に残っている
例 2) 3 ワードデータが FIFO に残る例
設定
・4 ワード転送
・SAR: 0x00800008
・DAR: 0x00800104
10-26
←
1 回目のライト
4 ワード境界まで
2 回目のライト
← 4 ワード境界まで
バーストライト
第 10 章 DMA コントローラ
動作
① 1 回目の DMA 転送
a 0x00800008 が 4 ワード境界にないのでシングルで 4 ワード境界 (0x0080010 の手前)
まで 2 ワード分のデータをシングルワードリードする。
b 0x00800104 が 4 ワード境界にないのでシングルで 4 ワード境界 (0x0080110 の手前)
まで 3 ワード分のデータをシングルワードライトする。しかし、2 ワード分しかリー
ドされていないので 4 ワード境界ではないが、2 ワード分ライトしたところで転送を
終了する。FIFO にはデータが残っていない。
② 2 回目の DMA 転送
a 0x00800010 が 4 ワード境界なので 4 ワード分バーストリードする。
b 0x0080010c が 4 ワード境界にないのでシングルで 4 ワード境界 (0x0080110 の手前)
まで 1 ワード分のデータをシングルワードライトする。FIFO には 3 ワード分のデー
タが残る。
③ 2 回目以降の DMA 転送
a 0x00800020 が 4 ワード境界なので 4 ワード分バーストリードする。
b 0x00800110 が 4 ワード境界なので 4 ワード分バーストライトする。
④ 3 回目以降の DMA 転送
③と同じくバーストアクセスを実行する。
1 回目のリード
4 ワード境界まで
リード
ライト
0x00800008
0x00800104
0x0080000c
0x00800108
→ 0x00800010
0x0080010c
0x00800014
0x00800110
0x00800018
0x00800114
0x0080001c
0x00800118
2 回目のリード
4 ワード境界まで → 0x00800020
バーストリード
0x00800024
0x0080011c
0x00800028
0x00800124
0x0080002c
0x00800128
0x00800120
3 ワードデータが FIFO に残っている
10-27
1 回目のライト
← FIFO にあるデータ分だけライト
← 2 回目のライト
4 ワード境界まで
3 回目のライト
← 4 ワード境界までバーストライト
第 10 章 DMA コントローラ
10.5 タイミング図
タイミング図中、DMAREQ 信号と DMAACK 信号は Low アクティブに設定しています。
10.5.1
シングルアドレスモードの 32 ビットリードオペレーション (ROM)
SDCLK/SYSCLK
CE*
ADDR [19 : 2]
1c040
00040
ACE*
OE*
SWE*
BWE*
f
DATA [31 : 0]
00000100
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.1 1 回のシングルアドレス DMA 転送
(32 ビット ROM メモリから 32 ビットデータのリード)
10-28
10-29
図 10.5.2 1 回のシングルアドレス DMA 転送
(16 ビット ROM メモリからの 32 ビットデータのリード)
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SDCLK/SYSCLK
38080
00080
0000
f
00081
0100
第 10 章 DMA コントローラ
第 10 章 DMA コントローラ
10.5.2
シングルアドレスモードの 32 ビットライトオペレーション (SRAM)
SDCLK/SYSCLK
CE*
ADDR [19 : 2]
1c040
00140
ACE*
OE*
SWE*
BWE*
DATA [31 : 0]
f
0
00000100
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.3 1 回のシングルアドレス DMA 転送
(32 ビット SRAM メモリへの 32 ビットデータのライト)
10-30
f
10-31
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
1c040
00000100
00040
00041
fffffeff
f
00000108
00042
fffffef7
00043
10.5.3
SDCLK/SYSCLK
第 10 章 DMA コントローラ
バーストアドレスモードの 32 ビットリードオペレーション (ROM)
図 10.5.4 バーストシングルアドレス DMA 転送
(32 ビット ROM メモリからのバーストリード)
10-32
(16 ビット SRAM メモリへのバーストライト)
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SDCLK/SYSCLK
f
38080
0000
c
00680
f
0900
c
00681
f
ffff
c
00682
f
f6ff
c
00683
f
0000
c
00684
f
0908
c
00685
f
ffff
c
00686
f
f6f7
c
00687
f
第 10 章 DMA コントローラ
図 10.5.5 バーストシングルアドレス DMA 転送
10-33
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
f
00000100
0
00140
f
fffffeff
0
00141
f
00000108
fffffef7
0
0
f
00143
00142
f
10.5.4
SDCLK/SYSCLK
第 10 章 DMA コントローラ
バーストアドレスモードの 32 ビットライトオペレーション (SRAM)
f
図 10.5.6 バーストシングルアドレス DMA 転送
(32 ビット SRAM メモリへの 32 ビットデータのライト)
第 10 章 DMA コントローラ
10.5.5
シングルアドレスモードの 16 ビットリードオペレーション (ROM)
SDCLK/SYSCLK
CE*
ADDR [19 : 2]
38080
00080
ACE*
OE*
SWE*
BWE*
f
DATA [15 : 0]
0000
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.7 1 回のシングルアドレス DMA 転送
(16 ビット ROM メモリから 16 ビットデータのリード)
10-34
第 10 章 DMA コントローラ
図 10.5.8 1 回のシングルアドレス DMA 転送
(16 ビット SRAM メモリへの 16 ビットライト)
10-35
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15: 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
f
0000
c
00280
f
シングルアドレスモードの 16 ビットライトオペレーション (SRAM)
SDCLK/SYSCLK
10.5.6
第 10 章 DMA コントローラ
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK
1c041
f
fffffeff
00041
シングルアドレス、ハーフスピードモードの 32 ビットリードオペレーション (ROM)
SDCLK
10.5.7
図 10.5.9 1 回のシングルアドレス DMA 転送
(32 ビットハーフスピード ROM メモリからの 32 ビットデータのリード)
10-36
第 10 章 DMA コントローラ
図 10.5.10 1 回のシングルアドレス DMA 転送
(32 ビットハーフスピード SRAM メモリへの 32 ビットデータのライト)
10-37
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
BWE*
SWE*
OE*
ACE*
ADDR [19 : 2]
CE*
SYSCLK
1c041
f
00000100
0
00140
f
シングルアドレス、ハーフスピードモードの 32 ビットライトオペレーション (SRAM)
SDCLK
10.5.8
第 10 章 DMA コントローラ
10.5.9
シングルアドレスモードの 32 ビットリードオペレーション (SDRAM)
SDCLK
CS*
0000
ADDR [19 : 5]
0040
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
00000100
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.11 1 回のシングルアドレス DMA 転送
(32 ビット SDRAM メモリからの 32 ビットデータのリード)
10-38
第 10 章 DMA コントローラ
10.5.10 シングルアドレスモードの 32 ビットライトオペレーション (SDRAM)
SDCLK
CS*
0001
ADDR [19 : 5]
0040
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
00000100
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.12 1 回のシングルアドレス DMA 転送
(32 ビット SDRAM メモリへの 32 ビットデータのライト)
10-39
f
第 10 章 DMA コントローラ
10.5.11 バーストアドレスモードの 16 ビットリードオペレーション (SDRAM)
SDCLK
CS*
0000
ADDR [19 : 5]
0088
0089 008a 008b 008c 008d 008e 008f
0090
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
DATA [15 : 0]
f
c
0000 0110
ffff
f
feef
0000 0118
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.13 バーストシングルアドレス DMA 転送
(16 ビット SDRAM メモリからのバーストリード)
10-40
ffff
fee7
10-41
図 10.5.14 バーストシングルアドレス DMA 転送
(32 ビット SDRAM メモリからのバーストリード)
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE*
WE*
CAS*
RAS*
ADDR [19 : 5]
CS*
SDCLK
f
0000
0040
0041
00000100
0
0042
fffffeff
0043
00000108
0044
fffffef7
f
第 10 章 DMA コントローラ
10.5.12 バーストアドレスモードの 32 ビットリードオペレーション (SDRAM)
10-42
図 10.5.15 バーストシングルアドレス DMA 転送
(32 ビット SDRAM メモリへのバーストライト)
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [31 : 0]
DQM [3 : 0]
OE*
CKE*
WE*
CAS*
RAS*
ADDR [19 : 5]
CS*
SDCLK
f
0001
0040
00000100
0
fffffeff
0041
00000108
0042
fffffef7
0043
f
第 10 章 DMA コントローラ
10.5.13 バーストアドレスモードの 32 ビットライトオペレーション (SDRAM)
第 10 章 DMA コントローラ
10.5.14 シングルアドレスモードの 32 ビット最終シングルリードオペレーション (SDRAM)
SDCLK
CS*
0000
ADDR [19 : 5]
0041
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
f
0
DATA [31 : 0]
f
fffffeff
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.16 1 回のシングルアドレス DMA 転送
(32 ビット SDRAM からの 32 ビットデータのリード)
10-43
第 10 章 DMA コントローラ
図 10.5.17 1 回のシングルアドレス DMA 転送
(16 ビット SDRAM メモリからの 16 ビットデータのリード)
10-44
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15 : 0]
DQM [3 : 0]
OE*
CKE*
WE*
CAS*
RAS*
ADDR [19 : 5]
CS*
SDCLK
f
0000
0080
c
0081
0100
f
10.5.15 シングルアドレスモードの 16 ビットリードオペレーション (SDRAM)
第 10 章 DMA コントローラ
10.5.16 シングルアドレスモードの 16 ビットライトオペレーション (SDRAM)
SDCLK
CS*
0002
ADDR [19 : 5]
0080
0081
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
DATA [15 : 0]
f
c
f
0000
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.18 1 回のシングルアドレス DMA 転送
(16 ビット SDRAM メモリへの 16 ビットデータのライト)
10-45
f
第 10 章 DMA コントローラ
図 10.5.19 1 回のシングルアドレス DMA 転送
(16 ビット SDRAM メモリからの 32 ビットデータのリード)
10-46
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15 : 0]
DQM [3 : 0]
OE*
CKE*
WE*
CAS*
RAS*
ADDR [19 : 5]
CS*
SDCLK
f
0000
0080
c
0000
0081
0100
f
10.5.17 シングルアドレスモードの 32 ビットリードオペレーション (SDRAM)
第 10 章 DMA コントローラ
10.5.18 シングルアドレスモードの 32 ビットライトオペレーション (SDRAM)
SDCLK
CS*
0006
ADDR [19 : 5]
0082
0083
RAS*
CAS*
WE*
CKE*
OE*
DQM [3 : 0]
DATA [15 : 0]
f
c
ffff
f
f6ff
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.20 1 回のシングルアドレス DMA 転送
(16 ビット SDRAM メモリへの 32 ビットデータのライト)
10-47
10-48
図 10.5.21 バーストシングルアドレス DMA 転送
(16 ビット SDRAM メモリへのバーストライト)
DMADONE*
DMAACK
DMAREQ
ACK*
DATA [15 : 0]
DQM [3 : 0]
OE*
CKE*
WE*
CAS*
RAS*
ADDR [19 : 5]
CS*
SDCLK
f
0006
0088
0000
0910
0089
ffff
008a
c
f6ef
008b
0000
008c
0918
008d
ffff
008e
f6e7
008f
f
第 10 章 DMA コントローラ
10.5.19 バーストアドレスモードの 32 ビットライトオペレーション (SDRAM)
第 10 章 DMA コントローラ
10.5.20 デュアルアドレスモードのバーストオペレーション (SRAM → SRAM)
SDCLK
CE*
ADDR [19 : 2]
40 41 42 43 44 45 46
47
80
81
82
83
84
85
86
87
ACE*
OE*
SWE*
BWE*
DATA [31 : 0]
f
f
V X V X V X V X V X V X V X V
f
f
f
f
f
f
Valid Valid Valid Valid Valid Valid Valid Valid
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.22 デュアルアドレス DMA 転送
(32 ビットバス SRAM 間の 8 ワードバースト転送)
SDCLK
CE*
ADDR [19 : 2]
1c04C
40
41
42
43
80
81
82
83
ACE*
OE*
SWE*
f
BWE*
DATA [31 : 0]
V
V
0
V
V
Valid
f
0
f
Valid
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.23 デュアルアドレス DMA 転送
(32 ビット SRAM 間の 4 ワードバースト転送)
10-49
0
Valid
f
0
Valid
f
f
第 10 章 DMA コントローラ
10.5.21 デュアルアドレスモードのバーストオペレーション (SRAM → SDRAM)
SDCLK
CS*
CE*
ADDR [19 : 2]
0cc00
0cc01
0cc02
0cc03
863
3
b
13
1b
RAS*
CAS*
WE*
CKE
OE*
f
DQM[3 : 0]
DATA [31 : 0]
V
X
V
X
0
V
X
V
Valid
f
V
V
V
ACK*
ACE*
SWE*
f
BWE*
DMAREQ
DMAACK
DMADONE*
図 10.5.24 デュアルアドレス DMA 転送
(32 ビット SRAM から 32 ビット SDRAM への 4 ワードバースト転送)
10-50
第 10 章 DMA コントローラ
10.5.22 デュアルアドレスモードのバーストオペレーション (SDRAM → SRAM)
SDCLK
CS*
CE*
V
ADDR [19 : 2]
10800 10801 10802 10803 10804 10805 10806 10807
RAS*
CAS*
WE*
CKE
OE*
DQM[3 : 0]
f
0
f
Valid Valid Valid Valid Valid Valid Valid Valid
DATA [31 : 0]
ACK*
ACE*
SWE*
BWE*
f
f
f
f
f
f
f
f
DMAREQ
DMAACK
DMADONE*
図 10.5.25 デュアルアドレス DMA 転送
(32 ビット SDRAM から 32 ビット SRAM への 8 ワードバースト転送)
10-51
f
第 10 章 DMA コントローラ
10.5.23 デュアルアドレスモードのバーストオペレーション (SDRAM → SDRAM)
SDCLK
CS*
CE*
ADDR[19:2]
7
207
7
20f 217 21f 227 22f 237 23f
407
43f
40f 417 41f 427 42f 437
RAS*
CAS*
WE*
CKE
OE*
DQM[3:0]
f
0
DATA[31:0]
f
0
V V V V V V V V
f
Valid V V V V V V V
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.26 デュアルアドレス DMA 転送
(32 ビット SDRAM 間の 8 ワードバースト転送)
SDCLK
CS*
CE*
ADDR [19 : 2]
7
227
22f 237 23f
7
427
42f 437
43f
RAS*
CAS*
WE*
CKE
OE*
DQM[3 : 0]
DATA [31 : 0]
f
f
0
V
V
V
V
0
Valid
ACK*
DMAREQ
DMAACK
DMADONE*
図 10.5.27 デュアルアドレス DMA 転送
(32 ビット SDRAM 間の 4 ワードバースト転送)
10-52
f
V
V
V
第 10 章 DMA コントローラ
10.5.24 デュアルアドレスモードのノンバーストオペレーション (SDRAM → ROMC デバイス)
SDCLK
CS*
CE*
ADDR[19:2]
207
2f 37 3f
1c000
0
0
0
0
Valid
Valid
RAS*
CAS*
WE*
CKE
OE*
DQM[3:0]
DATA[31:0]
f
0
f
V V V V
Valid
Valid
ACK*
ACE*
SWE*
BWE*
f
0
f
0
f
0
f
0
f
DMAREQ
DMAACK
DMADONE*
図 10.5.28 デュアルアドレス DMA 転送
(32 ビット SDRAM (バースト) から 32 ビット ROMC デバイス (ノンバースト) への 4 ワード転送)
10-53
第 10 章 DMA コントローラ
10.5.25 デュアルアドレスモードのノンバーストオペレーション (ROMC デバイス → SDRAM)
SDCLK
CS*
CE*
ADDR[19:2]
0
0
0
0
27
2f 37
3f
RAS*
CAS*
WE*
CKE
OE*
DQM[3:0]
DATA[31:0]
f
V
V
0
V
V
f
Valid V V V
ACK*
ACE*
SWE*
f
BWE*
DMAREQ
DMAACK
DMADONE*
図 10.5.29 デュアルアドレス DMA 転送
(32 ビット ROMC デバイス (ノンバースト) から 32 ビット SDRAM (バースト) への 4 ワード転送)
10-54
第 11 章 割り込みコントローラ (IRC)
第11章 割り込みコントローラ (IRC)
11.1 特長
TX3927 内蔵の割り込みコントローラ (IRC) は、TX3927 内蔵周辺の割り込み要求と外部割り込
み要求に対して、TX39/H2 プロセッサコアに割り込み要求を発生します。
割り込みコントローラの特長は、以下の通りです。
•
8 個の内蔵割り込みと最高 6 個の外部割り込み
•
各割り込み入力ごとに 8 つの優先割り込みレベル (レベル 0-7) の 1 つを設定可能
•
各外部割り込みは、割り込み検出にエッジまたはレベルを選択可能
11.2 ブロック図
IRC
TX39/H2 コア
外部割り込み
検出回路
信号 (INT [5 : 0])
6
割り込み要求
6
PCIC
割り込みレベル設定
1
割り込みマスク設定
2
SIO
内部割り込み
ノンマスカブル
優先度処理
TMR
信号
3
割り込み要求
DMA
1
PIO/Flag
1
ライトオペレーション時のバスエラー
ウォッチドッグタイマ割り込み
ノンマスカブル割り込み信号
(NMI*)
TMR2
CCFG.WR
図 11.2.1 割り込みコントローラのブロック図
「検出回路」は、外部割り込み要求信号(INT[5:0])のアクティブ状態を検出します。アクティブ
状態は、立ち上がりエッジ、立ち下がりエッジ、High レベル、Low レベル、の 4 種類から選択で
き、割り込み検出モードレジスタ 0 (IRDMR0) で設定します。
「IRC」は割り込みコントローラで、外部割り込み 6 本、内部割り込み 8 本の優先度調停を行い、
最も優先度の高い割り込みを TX39/H2 コアに通知します。
11-1
第 11 章 割り込みコントローラ (IRC)
11.3 レジスタ
11.3.1
レジスタマップ
割り込みコントローラのベースアドレスは 0xFFFE_C000 です。割り込みコントローラ内の
すべてのレジスタは、ワードアクセスしてください。また、未定義ビットに対しては、示して
ある値を書き込んでください。
表 11.3.1 割り込みコントローラレジスタ
アドレス
レジスタ記号
レジスタ名
0xFFFE_C0A0
IRCSR
割り込みカレントステータスレジスタ
0xFFFE_C080
IRSSR
割り込みソースステータスレジスタ
0xFFFE_C060
IRSCR
割り込みステータスコントロールレジスタ
0xFFFE_C040
IRIMR
割り込みマスクレジスタ
0xFFFE_C02C
IRILR7
割り込みレベルレジスタ 7
0xFFFE_C028
IRILR6
割り込みレベルレジスタ 6
0xFFFE_C024
IRILR5
割り込みレベルレジスタ 5
0xFFFE_C020
IRILR4
割り込みレベルレジスタ 4
0xFFFE_C01C
IRILR3
割り込みレベルレジスタ 3
0xFFFE_C018
IRILR2
割り込みレベルレジスタ 2
0xFFFE_C014
IRILR1
割り込みレベルレジスタ 1
0xFFFE_C010
IRILR0
割り込みレベルレジスタ 0
0xFFFE_C008
IRCR1
割り込み制御モードレジスタ 1
0xFFFE_C004
IRCR0
割り込み制御モードレジスタ 0
0xFFFE_C000
IRCER
割り込み制御イネーブルレジスタ
11-2
第 11 章 割り込みコントローラ (IRC)
11.3.2
割り込み制御イネーブルレジスタ (IRCER)
0xFFFE_C000
31
16
0
: タイプ
: 初期値
15
1
0
0
ICE
R/W : タイプ
: 初期値
0
ビット
ニモニック
0
ICE
フィールド名
割り込み
コントロール
イネーブル
説 明
Interrupt Control Enable (初期値 0)
割り込み検出をイネーブルにします。
0: 割り込み検出停止
1: 割り込み検出開始
図 11.3.1 割り込み制御イネーブルレジスタ
11-3
第 11 章 割り込みコントローラ (IRC)
11.3.3
割り込み制御モードレジスタ 0 (IRCR0)
0xFFFE_C004
31
16
0
: タイプ
: 初期値
15
14
13
12
11
10
8
7
6
5
4
3
2
1
0
IC6
IC5
IC4
IC3
IC2
IC1
IC0
R/W
00
R/W
00
R/W
00
R/W
00
R/W
00
R/W
00
R/W
00
R/W
00
ビット
ニモニック
15 : 14
IC7
割り込み
ソース
コントロール 7
13 : 12
IC6
割り込み
ソース
コントロール 6
11 : 10
IC5
割り込み
ソース
コントロール 5
9:8
IC4
割り込み
ソース
コントロール 4
7:6
IC3
割り込み
ソース
コントロール 3
5:4
IC2
割り込み
ソース
コントロール 2
(注)
9
IC7
フィールド名
説 明
Interrupt Source Control 7 (初期値 00)
SIO [1] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
Interrupt Source Control 6 (初期値 00)
SIO [0] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
Interrupt Source Control 5 (初期値 00)
INT [5] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
Interrupt Source Control 4 (初期値 00)
INT [4] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
Interrupt Source Control 3 (初期値 00)
INT [3] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
Interrupt Source Control 2 (初期値 00)
INT [2] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
IC7 と IC6 は、ローレベルアクティブ (00) に設定してください。
図 11.3.2 割り込み制御モードレジスタ 0 (1/2)
11-4
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
ビット
ニモニック
フィールド名
3:2
IC1
割り込み
ソース
コントロール 1
1:0
IC0
割り込み
ソース
コントロール 0
説 明
Interrupt Source Control 1 (初期値 00)
INT [1] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
Interrupt Source Control 0 (初期値 00)
INT [0] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: High レベルアクティブ
10: 立ち下がりアクティブ
11: 立ち上がりアクティブ
図 11.3.3 割り込み制御モードレジスタ 0 (2/2)
11-5
第 11 章 割り込みコントローラ (IRC)
11.3.4
割り込み制御モードレジスタ 1 (IRCR1)
0xFFFE_C008
31
16
0
: タイプ
: 初期値
15
IC15
14
13
12
IC14
R/W
00
R/W
00
11
10
IC13
9
8
7
00
6
5
00
R/W
00
4
3
2
IC8
R/W
00
R/W
00
R/W
00
ニモニック
フィールド名
説 明
15 : 14
IC15
割り込み
ソース
コントロール 15
Interrupt Source Control 15 (初期値 00)
TMR [2] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
13 : 12
IC14
割り込み
ソース
コントロール 14
Interrupt Source Control 14 (初期値 00)
TMR [1] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
11 : 10
IC13
割り込み
ソース
コントロール 13
Interrupt Source Control 13 (初期値 00)
TMR [0] 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
5:4
IC10
割り込み
ソース
コントロール 10
Interrupt Source Control 10 (初期値 00)
PCI 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
3:2
IC9
割り込み
ソース
コントロール 9
Interrupt Source Control 9 (初期値 00)
PIO/フラグ割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
1:0
IC8
割り込み
ソース
コントロール 8
Interrupt Source Control 8 (初期値 00)
DMA 割り込みのアクティブ状態を指定します。
00: Low レベルアクティブ
01: 禁止
10: 禁止
11: 禁止
IC15∼IC8 は、ローアクティブ (00) に設定してください。
図 11.3.4 割り込み制御モードレジスタ 1
11-6
0
IC9
ビット
(注)
1
IC10
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.5
割り込みレベルレジスタ 0 (IRILR0)
0xFFFE_C010
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL1
3
0
ニモニック
フィールド名
10 : 8
IL1
割り込みレベル 1
2:0
IL0
割り込みレベル 0
0
IL0
R/W
000
ビット
2
R/W
000
説 明
Interrupt Level of INT [1] (初期値 000)
INT [1] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
Interrupt Level of INT [0] (初期値 000)
INT [0] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.5 割り込みレベルレジスタ 0
11-7
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.6
割り込みレベルレジスタ 1 (IRILR1)
0xFFFE_C014
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL3
3
0
ニモニック
フィールド名
10 : 8
IL3
割り込みレベル 3
2:0
IL2
割り込みレベル 2
0
IL2
R/W
000
ビット
2
R/W
000
説 明
Interrupt Level of INT [3] (初期値 000)
INT [3] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
Interrupt Level of INT [2] (初期値 000)
INT [2] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.6 割り込みレベルレジスタ 1
11-8
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.7
割り込みレベルレジスタ 2 (IRILR2)
0xFFFE_C018
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL5
3
0
ニモニック
フィールド名
10 : 8
IL5
割り込みレベル 5
2:0
IL4
割り込みレベル 4
0
IL4
R/W
000
ビット
2
R/W
000
説 明
Interrupt Level of INT [5] (初期値 000)
INT [5] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
Interrupt Level of INT [4] (初期値 000)
INT [4] の割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.7 割り込みレベルレジスタ 2
11-9
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.8
割り込みレベルレジスタ 3 (IRILR3)
0xFFFE_C01C
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL7
3
0
ニモニック
フィールド名
10 : 8
IL7
割り込みレベル 7
2:0
IL6
割り込みレベル 6
0
IL6
R/W
000
ビット
2
R/W
000
説 明
Interrupt Level of INT [7] (初期値 000)
SIO [1] 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
Interrupt Level of INT [6] (初期値 000)
SIO [0] 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.8 割り込みレベルレジスタ 3
11-10
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.9
割り込みレベルレジスタ 4 (IRILR4)
0xFFFE_C020
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL9
3
0
2
0
IL8
R/W
000
R/W
000
ビット
ニモニック
フィールド名
説 明
10 : 8
IL9
割り込みレベル 9
Interrupt Level of INT [9] (初期値 000)
PIO/フラグ割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
2:0
IL8
割り込みレベル 8
Interrupt Level of INT [8] (初期値 000)
DMA 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.9 割り込みレベルレジスタ 4
11-11
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.10 割り込みレベルレジスタ 5 (IRILR5)
0xFFFE_C024
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
000
3
0
2
0
IL10
R/W
000
ビット
ニモニック
2:0
IL10
フィールド名
説 明
割り込みレベル 10 Interrupt Level of INT [10] (初期値 000)
PCI 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.10 割り込みレベルレジスタ 5
11-12
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.11 割り込みレベルレジスタ 6 (IRILR6)
0xFFFE_C028
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL13
3
0
ニモニック
10 : 8
IL13
0
000
: タイプ
: 初期値
R/W
000
ビット
2
フィールド名
説 明
割り込みレベル 13 Interrupt Level of INT [13] (初期値 000)
TMR [0] 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.11 割り込みレベルレジスタ 6
11-13
第 11 章 割り込みコントローラ (IRC)
11.3.12 割り込みレベルレジスタ 7 (IRILR7)
0xFFFE_C02C
31
16
0
: タイプ
: 初期値
15
11
10
0
8
7
IL15
3
0
ニモニック
10 : 8
IL15
2:0
IL14
0
IL14
R/W
000
ビット
2
R/W
000
フィールド名
説 明
割り込みレベル 15 Interrupt Level of INT [15] (初期値 000)
TMR [2] 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
割り込みレベル 14 Interrupt Level of INT [14] (初期値 000)
TMR [1] 割り込みの割り込みレベルを指定します。
000: 割り込みレベル 0 (割り込みディセーブル)
001: 割り込みレベル 1
010: 割り込みレベル 2
011: 割り込みレベル 3
100: 割り込みレベル 4
101: 割り込みレベル 5
110: 割り込みレベル 6
111: 割り込みレベル 7
図 11.3.12 割り込みレベルレジスタ 7
11-14
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.3.13 割り込みマスクレジスタ (IRIMR)
0xFFFE_C040
31
16
0
: タイプ
: 初期値
15
3
0
2
0
IML
R/W
0
ビット
ニモニック
2 :0
IML
フィールド名
割り込み
マスクレベル
: タイプ
: 初期値
説 明
Interrupt Mask Level (初期値 000)
割り込みマスクレベルを指定します。マスクレベルよりも優先順位の低い割り込み
要求がマスクされます。
000: 割り込みマスクレベル 0 (割り込みディセーブル)
001: 割り込みマスクレベル 1 (レベル 1-7 が許可)
010: 割り込みマスクレベル 2 (レベル 2-7 が許可)
011: 割り込みマスクレベル 3 (レベル 3-7 が許可)
100: 割り込みマスクレベル 4 (レベル 4-7 が許可)
101: 割り込みマスクレベル 5 (レベル 5-7 が許可)
110: 割り込みマスクレベル 6 (レベル 6-7 が許可)
111: 割り込みマスクレベル 7 (レベル 7 が許可)
図 11.3.13 割り込みマスクレジスタ
11-15
第 11 章 割り込みコントローラ (IRC)
11.3.14 割り込みステータスコントロールレジスタ (IRSCR)
0xFFFE_C060
31
16
0
: タイプ
: 初期値
15
9
0
8
EICIrE
7
4
3
0
0
EICIr
R/W
0
R/W
0000
: タイプ
: 初期値
ビット
ニモニック
フィールド名
説 明
8
EIClrE
割り込み
クリアイネーブル
3:0
EIClr
Edge Interrupt Clear Enable for Sources (初期値 0)
EICIr 内で指定された割り込み要求をクリアします。
0: クリアしません。
1: クリア
“1” をライトした後で “0” に戻ります。このビットをリードすると、常に値が “0” に
なります。
Edge Interrupt Clear for Sources (初期値 0x0)
クリアする割り込み番号を指定します。
1111: TMR [2] 割り込み
1110: TMR [1] 割り込み
1101: TMR [0] 割り込み
1100: (予約)
1011: (予約)
1010: PCI 割り込み
1001: PIO/フラグ割り込み
1000: DMA 割り込み
0111: SIO [1] 割り込み
0110: SIO [0] 割り込み
0101: INT [5] 割り込み
0100: INT [4] 割り込み
0011: INT [3] 割り込み
0010: INT [2] 割り込み
0001: INT [1] 割り込み
0000: INT [0] 割り込み
割り込み
クリアソース
図 11.3.14 割り込みステータスコントロールレジスタ
11-16
第 11 章 割り込みコントローラ (IRC)
11.3.15 割り込みソースステータスレジスタ (IRSSR)
0xFFFE_C080
IRILR 7∼0 と IRIMR の値に関係なく各割り込み要求のステータスを示します。
31
16
0
: タイプ
: 初期値
15
IS15
14
IS14
13
IS13
12
0
11
0
10
IS10
9
IS9
8
IS8
7
IS7
6
IS6
5
IS5
4
IS4
3
IS3
2
IS2
1
IS1
0
IS0
R
−
R
−
R
−
R
R
R
−
R
−
R
−
R
−
R
−
R
−
R
−
R
−
R
−
R
−
R
−
ビット
ニモニック
フィールド名
15
IS15
割り込み
ステータス 15
14
IS14
割り込み
ステータス 14
13
IS13
割り込み
ステータス 13
10
IS10
割り込み
ステータス 10
9
IS9
割り込み
ステータス 9
8
IS8
割り込み
ステータス 8
7
IS7
割り込み
ステータス 7
6
IS6
割り込み
ステータス 6
5
IS5
割り込み
ステータス 5
4
IS4
割り込み
ステータス 4
説 明
IRINTREQ [15] ステータス
TMR [2] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [14] ステータス
TMR [1] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [13] ステータス
TMR [0] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [10] ステータス
PCI 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [9] ステータス
PIO/フラグ割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [8] ステータス
DMA 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [7] ステータス
SIO [1] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [6] ステータス
SIO [0] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [5] ステータス
INT [5] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [4] ステータス
INT [4] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
図 11.3.15 割り込みソースステータスレジスタ (1/2)
11-17
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
ビット
ニモニック
フィールド名
3
IS3
割り込み
ステータス 3
2
IS2
割り込み
ステータス 2
1
IS1
割り込み
ステータス 1
0
IS0
割り込み
ステータス 0
説 明
IRINTREQ [3] ステータス
INT [3] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [2] ステータス
INT [2] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [1] ステータス
INT [1] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
IRINTREQ [0] ステータス
INT [0] 割り込みのステータスを示します。
1: 割り込み要求あり
0: 割り込み要求なし
図 11.3.16 割り込みソースステータスレジスタ (2/2)
11-18
第 11 章 割り込みコントローラ (IRC)
11.3.16 割り込みカレントステータスレジスタ (IRCSR)
0xFFFE_C0A0
31
17
0
16
IF
R
1
15
11
10
0
8
7
ILV
5
4
0
ニモニック
16
IF
10 : 8
ILV
0
IVL
R
000
ビット
R
11111
フィールド名
説 明
割り込みフラグ
Interrupt Flag (初期値 1)
割り込み発生状況を示します。
0: 割り込み要求が発生している
1: 割り込み要求は発生していない
割り込み
レベルベクタ
Interrupt Level Vector (初期値 000)
TX39/H2 コアに通知された割り込み要求のレベルを示します。
000: 割り込みレベル 0
001: 割り込みレベル 1
: :
111: 割り込みレベル 7
4:0
IVL
割り込みベクタ
Interrupt Vector (初期値 0x1F)
TX39/H2 コアに通知された割り込み要因を示します。
00000: INT [0] 割り込み
01001: PIO/フラグ割り込み
00001: INT [1] 割り込み
01010: PCI 割り込み
00010: INT [2] 割り込み
01011: (予約)
00011: INT [3] 割り込み
01100: (予約)
00100: INT [4] 割り込み
01101: TMR [0] 割り込み
00101: INT [5] 割り込み
01110: TMR [1] 割り込み
00110: SIO [0] 割り込み
01111: TMR [2] 割り込み
00111: SIO [1] 割り込み
10000∼11111: (予約)
01000: DMA 割り込み
図 11.3.17 割り込みカレントステータスレジスタ
11-19
: タイプ
: 初期値
: タイプ
: 初期値
第 11 章 割り込みコントローラ (IRC)
11.4 動作
11.4.1
割り込みソース
TX3927 には、8 個の内部割り込み要因と 6 個の外部割り込み要因があります。外部割り込
み信号のうち INT [5 : 4] は SIO と端子を兼用しています。これらの端子を割り込みとして使
用する方法については「3.3 ピンマルチプレクス」を参照してください。
表 8.4.1 に、TX3927 の割り込み要因を示します。割り込みコントローラはこれらの割り込
み要因の優先度を調停し、最高の優先順位の割り込み要求を TX39/H2 CPU コアに通知します。
0 番∼15 番の割り込みが TX39/H2 コアに通知されると、TX39/H2 コアの Cause レジスタの
IP[5]が 1 にセットされるとともに IP[4:0]に割り込み番号が示されます。割り込みが発生する
と、 TX39/H2 コアの Status レジスタの BEV ビットの値に従って割り込み例外ベクタアドレ
スへジャンプします。BEV=0 のときは 0x00000080 番地へ、 BEV=1 のときは 0x1FC00180
番地へジャンプします(物理アドレス)。
表 11.4.1
優先順位*
割り込み番号
IP [5 : 0]
HIGH
0
100000
INT [0] 割り込み
1
100001
INT [1] 割り込み
2
100010
INT [2] 割り込み
3
100011
INT [3] 割り込み
4
100100
INT [4] 割り込み
5
100101
INT [5] 割り込み
6
100110
SIO [0] 割り込み
7
100111
SIO [1] 割り込み
8
101000
DMA 割り込み
9
101001
PIO 割り込み
10
101010
PCI 割り込み
11
101011
(予約)
12
101100
(予約)
13
101101
TMR [0] 割り込み
14
101110
TMR [1] 割り込み
15
101111
TMR [2] 割り込み
LOW
(注)
割り込みソース
この表の優先順位は、割り込みレベルが同じ割り込み要因の優先度を示します。
11-20
第 11 章 割り込みコントローラ (IRC)
11.4.2
割り込み要求検出
割り込み検出をイネーブルにするには、各レジスタの初期設定後に割り込みコントローラ
IRDER. ICE を “1” にセットします。IRCR0 と IRCR1 は、各割り込み要因のアクティブ状態
を設定できます。アクティブ状態には、High レベル、Low レベル、立ち上がり、立ち下がり
があります。デフォルトは Low レベルです。なお、内部割り込み要因はかならず Low レベル
のままにしておいてください。
IRC は、割り込み要求を認識すると、TX39/H2 コアに割り込みを通知します。割り込み番
号は、TX39/H2 コアのコンフィグレジスタの IP フィールド内に示されています。割り込み要
求が複数あった場合、IRC は、IRC レジスタ内で設定された優先処理によって最高の優先順位
の割り込み要因のみを TX39/H2 コアに通知します。割り込み要求のクリアはソフトウエアで
処理します。アクティブ状態が High レベルまたは Low レベルに設定されている場合には、外
部割り込み要求をアサートしている外部回路に対してその要求をデアサートするよう操作し
てください。アクティブ状態が立ち上がりまたは立ち下がりに設定さている場合は、割り込み
要因番号を IRSCR. EICIr にライトして EICIrE を “1” にセットすると、割り込み要求がクリ
アされます。
また、内部モジュールによる割り込み要求に対しても同様にソフトウエアで割り込み要求元
の割り込み要求をクリアしてください。
11.4.3
優先処理
•
各割り込み要因ごとに 8 つの優先レベルがサポートされています。レベルは、レジスタ
IRILR 7∼0 で設定できます。各レジスタには、レベル 0 (000) ∼ 7 (111) を指定するための
3 ビットフィールドがあります。7 は最高レベル、1 は最低レベルです。0 は割り込みがデ
ィセーブルであることを意味します。2 つの割り込み要求のレベルが同じであると、割り
込み番号の小さい方の優先順位が高くなります。
•
IRC には、IRIMR を使用する割り込みマスク方式があります。3 ビットフィールドの
IRIMR. IML はマスクレベルを指定します。IML よりもレベルの低い要求はマスクされま
す。同じレベルはマスクされません。IML が “000” に設定されると、すべての割り込みが
ディセーブルになります。
•
複数の割り込み要求が存在すると、IRC はレベルと割り込み番号に従って最高の優先順位
の割り込み要求を TX39/H2 コアに通知します。
•
ある割り込み要求を処理している間にそれよりも高いレベルの割り込み要求が発生する
と、IRC は割り込み通知番号を優先順位の高いものに変更します。同じレベルのときはた
とえ割り込み番号が若くても変化しません。
•
割り込みレベルレジスタで割り込みレベルを “0” (または現在の設定値よりも低い値) にし
ただけでは、割り込みカレントステータスレジスタで通知される割り込み要因番号の値が
変わらないことがありますので注意してください。(注) これは、ある割り込み要求を検出
後、割り込みレベルが同じかそれより低い別の割り込み要求が発生した場合に起きます。
割り込みレベルレジスタで割り込みレベルを “0” に書き込む時点で同じか、もしくはそれ
より低い割り込みレベルの別の割り込みが発生していると、最初に検出した割り込み要因
の割り込みレベルレジスタで割り込みレベルを “0” (または現在の設定値よりも低い値) に
しても、割り込みカレントステータスレジスタで通知される割り込み要因の値は最初に検
出した割り込み要因のままで、あとから発生した割り込み要因を示しません。最初の割り
込み要因をクリアすれば、割り込みベクタの値はあとから発生した割り込み要因に変わり
ます。
もし割り込みレベルを “0” にすることで割り込みをマスクしたい場合には、いったん
IRIMR レジスタで割り込みマスクレベルの値を現在検出している割り込みをマスクでき
る割り込みレベル設定し、その後もとの値に戻してください。こうすることで割り込みに
マスクがかかります。
11-21
第 11 章 割り込みコントローラ (IRC)
設定例) 次の順で処理してください。
(1) IRIMR : 割り込みマスクレベル 7 (割り込み禁止) に設定。もしくは現在検出してい
る割り込みをマスクできるレベルに設定
(2) IRILR
: 現在検出されている割り込み番号に対応した割り込みレベルを割り込みレ
ベル 0 に設定 (割り込み禁止)
(3) IRIMR : 元の割り込みマスクレベルに戻す
(1)と(2)は順序が逆でもかまいません。
(注)
これに対して、IRIMR、IML で割り込みマスクレベルを高くした場合には、マスク
レベルよりも低い割り込みの要因番号が通知されることはありません。
11-22
第 12 章 PCI コントローラ (PCIC)
第12章 PCI コントローラ (PCIC)
*** 本章の表記法 ***
注意: TX39/H2 コアのマニュアルでは、以下のような用語の定義が使用されています。
バイト = 8 ビット
ハーフワード = 16 ビット
ワード = 32 ビット
ただし、PCI 仕様では以下の定義を使用しています。
バイト = 8 ビット
ワード = 16 ビット
ダブルワード (D ワード) = 32 ビット
PCI 仕様に準拠するために、本章に限り、ハーフワード (16 ビット) はワード、ワード (32 ビット) は
D ワードとして表記します。
12.1 特長
TX3927 に内蔵された PCI コントローラ (以降 “PCIC” と表記) は組み込み型 PCI コアです。
TX3927 の TX39/H2 プロセッサコアは、内部のローカルバス (G-Bus) を使用して、PCIC にアク
セスします。
TX3927 の内蔵 PCI コントローラは、PCI バスをコントロールし、TX3927 メモリコントローラ
(SDRAMC と ROMC) を使用してデータを転送します。
•
“PCI Local Bus Specification Revision 2.1” 準拠 (32 ビットバス、33 MHz)
•
イニシエータ/ターゲット/バスアービタ機能をサポート
•
最大 4 つの外部バスマスタに接続可能
•
PCI クロック入力モード/出力モードをサポート
(注意) TX39/H2 コアにはリトライ機能がないため、PCI のトランザクション要求が発行された場
合、TX3927 内部のバスオペレーションは終了しません。相手側デバイスも同様の性質を
有する場合、システムとしてデッドロックする (お互いにリトライを繰り返す) ことがあり
ます。なお、タイムアウトエラー機能を有効にしておくとバスエラーによりデッドロック
は解除されます。
12.1.1
インタフェース機能
•
0∼33 MHz オペレーション
•
独立したイニシエータおよびターゲットコントローラ
•
追加機能を持つフル PCI コンフィグレーションレジスタを実装
•
ローカルバス (G-Bus) と PCI バス間のアドレスマッピングをプログラムで設定可能
•
ローカルバス (G-Bus) 用のクロックと PCI バス用クロックを独立
12-1
第 12 章 PCI コントローラ (PCIC)
12.1.2
12.1.3
12.1.4
イニシエータ機能
•
ローカルバス (G-Bus) と PCI バス間のシングルワードトランザクション
•
メモリ、I/O、コンフィグレーション、スペシャルサイクル、割り込みアクノリッジトラ
ンザクションをサポート。
•
PCI ライトトランザクションがローカルバス (G-Bus) から実行されます。
•
ダイレクトおよびインダイレクトモード
ターゲット機能
•
PCI およびローカルバス (G-Bus) 間でデータストリーミングを自動で実行するため、
FIFO の深さを超えるデータブロックを転送するのに CPU その他のロジックのサポート
は不要
•
2 個の 16 × 32 ビット FIFO
•
ゼロウェイトのリードおよびライトバースト転送
•
ローカルバス (G-Bus) および PCI バスのバースト長をプログラマブルに設定可能。また、
システムに最適なプリフェッチモードを設定可能。
•
PCI およびローカルバス (G-Bus) で同時にリードおよびライトが可能
•
PCI ライトトランザクションは PCI バスから実行
•
高速バックツーバックトランザクション
•
ビックエンディアンバイトスワッピングが可能
PCI アービタ/パークマスタ機能
•
4 個の外部 PCI バスマスタをサポートする PCI バスアービタを内蔵
•
Programmable Fairness アルゴリズム: 4 個のラウンドロビンリクエスト/グラントペアを
有する優先順位の異なる 2 つのレベルを所有
•
パークマスタは Most Recently Used アルゴリズムを採用
•
独立した PCI バスアービタ/パークマスタモジュール
•
パワーオンリセット後、未使用スロットとブロークンマスタを自動的にディセーブル可能
•
内蔵のアービトレーション機能をディセーブルにし、外部アービタを使用することも可能
•
バスパーキングをサポート
12-2
第 12 章 PCI コントローラ (PCIC)
12.2 ブロック図
PCI バス
PCIC
TX39/H2 コア
アービタ/パークマスタ
イニシエータモジュール
G-Bus
バスリクエスト
/リトライ
PIO ポート
ローカルバス
アービタ、
ローカルバス
インタフェース
イニシエータ
ステートマシン
リトライタイマ
エラー検知ハンド
リング、パリティ生
成/チェック
レイテンシタイマ
ターゲットモジュール
エラー検知ハンド
リング、パリティ生
成/チェック
ターゲット
ステートマシン
PCI リード
リトライタグ
ターゲット
ストリーミング
機構
コンフィグレーション
レジスタ
IFIFO
OFIFO
図 12.2.1 PCIC ブロック図
12-3
メモリコン
トローラ
(SDRAMC,
ROMC)
第 12 章 PCI コントローラ (PCIC)
12.3 レジスタ
PCIC には、PCI コンフィグレーション空間レジスタとローカルバススペシャルレジスタの 2 種
類のレジスタがあります。
1.
PCI コンフィグレーション空間レジスタ (0xFFFE_D0FF∼0xFFFE_D000)
•
PCI コンフィグレーションヘッダ領域レジスタ
•
イニシエータコンフィグレーション空間レジスタ
•
ターゲットコンフィグレーション空間レジスタ
上記のレジスタは、TX39/H2 コアと PCI バスマスタのどちらからもアクセス可能です。PCI
バスからこれらのレジスタへのアクセスを禁じるには、LBC.EPCAD を 1 に設定します。
2.
ローカルバススペシャルレジスタ (0xFFFE_D1FF∼0xFFFE_D100)
•
PCI バスアービタ/パークマスタレジスタ
•
ローカルバススペシャルレジスタ
上記のレジスタは、TX39/H2 コアのみからアクセス可能です。
予約されたビットまたはレジスタからリードされた値は未定となっている場合があります。ソフ
トウエアでレジスタにライトする場合は、予約されたビットやレジスタに不要にライトすることの
ないようにしてください。
(注)
PCIC はレジスタのリトルエンディアンアドレッシング方式を使用します。したがって、
CPU がビックエンディアンモードにあるときは、32 ビット以外のレジスタをアクセスする
ときはアドレスが異なります。これらのレジスタは、バイト、ワード (16 ビット)、または
ダブルワード (32 ビット) としてアクセスできますが、CPU でアクセスする際にはエンディ
アンの違いに配慮しなければなりません。マルチバイト数値フィールドのすべてが “リトル
エンディアン” 配列を使用します (すなわち、下位アドレスはフィールドの最下位部分を含
みます)。
リード時には、ソフトウエアは任意の特定な値をとる予約済みビットをマスクして、適正
なビットだけを抽出してください。ライト時には、ソフトウエアは予約済みビットの値に
誤った値を書き込まないよう注意してください。すなわち、予約済みビットの値をまず最
初にリードし、他のビット位置の新しい値とマージした後でライトバックしてください。
RESET*信号でハードウエアリセットされると、PCIC の内部コンフィグレーションレジスタは
あらかじめ決められたデフォルト状態に初期化されます。このデフォルト状態は、システムを適正
に設定するために必要な最小限の機能です。ただし、それは最適システムコンフィグレーションと
はならない可能性があります。該当する動作パラメータとオプションシステム機能を適正に決定し、
それに応じてシステム初期設定ソフトウエア (通常は BIOS)により PCIC レジスタをプログラムし
てください。
12-4
第 12 章 PCI コントローラ (PCIC)
12.3.1
レジスタマップ
レジスタアドレスは、ビックエンディアンおよびリトルエンディアンアドレスの両方で表現
されます。表内の最初のアドレスは CPU がビックエンディアンモードのときに使用するアド
レスです。括弧内のアドレスは、リトルエンディアンモードでの 0xFFFE_D000 からのオフセ
ットです。
例: DID レ ジ ス タ に ア ク セ ス す る に は ビ ッ ク エ ン デ ィ ア ン モ ー ド で は ア ド レ ス は
0xFFFE_D000 になります。一方、リトルエンディアンモードでは、0xFFFE_D002 に
なります。これらの違いは 32 ビット以外のアクセスにのみ適用されます。
表 12.3.1 PCI コンフィグレーションヘッダ領域レジスタ一覧
アドレス
ニモニック
レジスタ名
0xFFFE_D03F (+03c)
IL
PCI 割り込みラインレジスタ
0xFFFE_D03E (+03d)
IP
PCI 割り込み端子レジスタ
0xFFFE_D03D (+03e)
MG
最小グラントレジスタ
0xFFFE_D03C (+03f)
ML
最大レイテンシレジスタ
0xFFFE_D037 (+034)
CAPPTR
ケイパビリティポインタ
0xFFFE_D030 (+030)

(予約)
0xFFFE_D02E (+02c)
SSVID
サブシステムベンダ ID レジスタ
0xFFFE_D02C (+02e)
SVID
システムベンダ ID レジスタ
0xFFFE_D028 (+028)

(予約)
0xFFFE_D014 (+014)
MBA
ターゲットメモリベースアドレスレジスタ
0xFFFE_D010 (+010)
IOBA
ターゲット I/O ベースアドレスレジスタ
0xFFFE_D00F (+00c)

(予約)
0xFFFE_D00E (+00d)
MLT
マスタレイテンシタイマレジスタ
0xFFFE_D00D (+00e)
HT
ヘッダタイプレジスタ
0xFFFE_D00C (+00f)

(予約)
0xFFFE_D00B (+008)
RID
リビジョン ID レジスタ
0xFFFE_D00A (+009)
RLPI
レジスタレベルプログラミングインタフェースレジスタ
0xFFFE_D009 (+00a)
SCC
サブクラスコードレジスタ
0xFFFE_D008 (+00b)
CC
クラスコードレジスタ
0xFFFE_D006 (+004)
PCICMD
PCI コマンドレジスタ
0xFFFE_D004 (+006)
PCISTAT
PCI ステータスレジスタ
0xFFFE_D002 (+000)
VID
ベンダ ID レジスタ
0xFFFE_D000 (+002)
DID
デバイス ID レジスタ
表 12.3.2 イニシエータコンフィグレーション空間レジスタ一覧
アドレス
ニモニック
レジスタ名
0xFFFE_D068 (+068)
ILBIOMAR
イニシエータローカルバス I/O マッピングアドレスレジスタ
0xFFFE_D064 (+064)
ILBMMAR
イニシエータローカルバスメモリマッピングアドレスレジスタ
0xFFFE_D060 (+060)
IPBIOMAR
イニシエータ PCI バス I/O マッピングアドレスレジスタ
0xFFFE_D05C (+05c)
IPBMMAR
イニシエータ PCI バスメモリマッピングアドレスレジスタ
0xFFFE_D04C (+04c)
RRT
リトライ/リコネクトタイマレジスタ
0xFFFE_D048 (+048)
IIM
イニシエータ割り込みマスクレジスタ
0xFFFE_D044 (+044)
ISTAT
イニシエータステータスレジスタ
0xFFFE_D040 (+040)

(予約)
12-5
第 12 章 PCI コントローラ (PCIC)
表 12.3.3 ターゲットコンフィグレーション空間レジスタ一覧
アドレス
ニモニック
レジスタ名
0xFFFE_D0E4 (+0e4)
PWMNGSR
パワーマネージメントサポートレジスタ
0xFFFE_D0E0 (+0e0)
PWMNGR
パワーマネージメントレジスタ
0xFFFE_D0D0 (+0d0)
TBL
ターゲットバースト長レジスタ
0xFFFE_D0CC (+0cc)
SC_BE
スペシャルサイクルバイトイネーブルレジスタ
0xFFFE_D0C8 (+0c8)
SC_MSG
スペシャルサイクルメッセージレジスタ
0xFFFE_D0C4 (+0c4)
TLBIOMA
ターゲットローカルバス I/O マッピングアドレスレジスタ
0xFFFE_D0C0 (+0c0)
TLBMMA
ターゲットローカルバスメモリマッピングアドレスレジスタ
0xFFFE_D0BC (+0bc)
TLBIAP
ターゲットローカルバス IFIFO アドレスレジスタ
0xFFFE_D0B8 (+0b8)
TLBOAP
ターゲットローカルバス OFIFO アドレスレジスタ
0xFFFE_D0A8 (+0a8)
PCIRRDT
PCI リードリトライディスカードタイマレジスタ
0xFFFE_D0A4 (+0a4)
PCIRRT_CMD
PCI リードリトライタイマコマンドレジスタ
0xFFFE_D0A0 (+0a0)
PCIRRT
PCI リードリトライタグレジスタ
0xFFFE_D09C (+09c)
TCCMD
ターゲットカレントコマンドレジスタ
0xFFFE_D098 (+098)
TIM
ターゲット割り込みマスクレジスタ
0xFFFE_D094 (+094)
TSTAT
ターゲットステータスレジスタ
0xFFFE_D090 (+090)
TC
ターゲットコントロールレジスタ
表 12.3.4 PCI バスアービタ/パークマスタレジスタ一覧
アドレス
ニモニック
レジスタ名
0xFFFE_D11C (+11c)
PBACS
PCI バスアービタカレントステートレジスタ
0xFFFE_D118 (+118)
CPCIBGS
カレント PCI バスグラントステータスレジスタ
0xFFFE_D114 (+114)
CPCIBRS
カレント PCI バスリクエストステータスレジスタ
0xFFFE_D110 (+110)
BM
ブロークンマスタレジスタ
0xFFFE_D10C (+10c)
PBAPMIM
PCI バスアービタ/パークマスタ割り込みマスクレジスタ
0xFFFE_D108 (+108)
PBAPMS
PCI バスアービタ/パークマスタステータスレジスタ
0xFFFE_D104 (+104)
PBAPMC
PCI バスアービタ/パークマスタコントロールレジスタ
0xFFFE_D100 (+100)
REQ_TRACE
リクエストトレースレジスタ
表 12.3.5 ローカルバススペシャルレジスタ一覧
アドレス
ニモニック
レジスタ名
0xFFFE_D158 (+158)
IPCICBE
イニシエータインダイレクトコマンド/バイトイネーブルレジスタ
0xFFFE_D154 (+154)
IPCIDATA
イニシエータインダイレクトデータレジスタ
0xFFFE_D150 (+150)
IPCIADDR
イニシエータインダイレクトアクセスレジスタ
0xFFFE_D14C (+14c)
IOMAS
イニシエータ I/O マッピングアドレスサイズレジスタ
0xFFFE_D148 (+148)
MMAS
イニシエータメモリマッピングアドレスサイズレジスタ
0xFFFE_D144 (+144)
ISCDP
イニシエータスペシャルサイクルデータポートレジスタ
0xFFFE_D140 (+140)
IIADP
イニシエータ割り込みアクノリッジデータポートレジスタ
0xFFFE_D13C (+13c)
ICDR
イニシエータコンフィグレーションデータレジスタ
0xFFFE_D138 (+138)
ICAR
イニシエータコンフィグレーションアドレスレジスタ
0xFFFE_D134 (+134)
PCISTATIM
PCI ステータス割り込みマスクレジスタ
0xFFFE_D130 (+130)
LBIM
ローカルバス割り込みマスクレジスタ
0xFFFE_D12C (+12c)
LBSTAT
ローカルバスステータスレジスタ
0xFFFE_D128 (+128)
LBC
ローカルバスコントロールレジスタ
0xFFFE_D124 (+124)
MBAS
ターゲットメモリベースアドレスサイズレジスタ
0xFFFE_D120 (+120)
IOBAS
ターゲット I/O ベースアドレスサイズレジスタ
12-6
第 12 章 PCI コントローラ (PCIC)
12.3.2
PCI コンフィグレーションヘッダ領域レジスタ
12.3.2.1 デバイス ID レジスタ (DID) 0xFFFE_D000 (+002)
31
16
DID
R
:タイプ
0x000A
:初期値
15
0
VID
:タイプ
:初期値
ビット
ニモニック
31 : 16
DID
フィールド名
デバイス ID 番号
説 明
Device Identification Number
このレジスタは、デバイスに割り当てられる ID を示します
TX3927 では 0x000A です。
図 12.3.1 デバイス ID レジスタ
12-7
第 12 章 PCI コントローラ (PCIC)
12.3.2.2 ベンダ ID レジスタ (VID) 0xFFFE_D002 (+000)
31
16
DID
:タイプ
:初期値
15
0
VID
ビット
ニモニック
15 : 0
VID
R
:タイプ
0x102F
:初期値
フィールド名
ベンダ ID 番号
説 明
Vender Identification Number
このレジスタは、PCI SIG によって割り当てられるデバイス製品を示しています。
TX3927 では東芝 VID の 0x102F です。
図 12.3.2 ベンダ ID レジスタ
12-8
第 12 章 PCI コントローラ (PCIC)
12.3.2.3 PCI ステータスレジスタ (PCISTAT) 0xFFFE_D004 (+006)
この 16 ビットステータスレジスタは、PCI マスタアボート、PCI ターゲットアボート、
およびデータパリティエラーが発生したことを知らせます。また、PCIC により設定され
る DEVSEL*信号のタイミングも示します。
31
30
29
28
27
DECPE SIGSE RECMARECTA SIGTA
26
25
DSTIM
24
23
PERPT FBBCP
R
R/WC R/WL
R/WC R/WC R/WC R/WC R/WC
0
0
0
0
0
01
0
0
22
0
21
USPCP
20
CL
R/WL
R
:タイプ
0
1
:初期値
15
16
0
0
PCICMD
:タイプ
:初期値
ビット
ニモニック
フィールド名
説 明
31
DECPE
パリティエラー
検出
Detect Parity Error (初期値 0)
パリティエラーを検出したことを示します。これは、PCIC イニシエータ/ターゲッ
トがデータパリティエラーを検出したとき(PCI コマンドレジスタのパリティエラー
応答イネーブルビット (PCICMD.PEREN) が “0” にクリアされていても) はいつで
も、PCIC イニシエータ/ターゲットによって “1” にセットされます。
1: パリティエラーを検出しました。
次の 3 つの場合にパリティエラーを検出します。
1. PCIC イニシエータは PCI リードを実行していて、データパリティエラーを検
出
2. PCIC ターゲットは PCI ライトを実行していて、データパリティエラーを検出
3. PCI ターゲットがアドレスパリティエラーを検出
0: パリティエラーを検出していません。
30
SIGSE
システムエラー
通知
Signaled System Error (初期値 0)
SERR*信号の状態を示します。このビットは、PCIC ターゲットがアドレスパリテ
ィエラ ーまた はス ペシャ ルサイクルデー タパリ ティ エラー を検出した とき に
SERR*信号をアサートすると、 “1” にセットされます。
1: SERR*信号をアサートしました。
0: SERR*信号をアサートしませんでした。
29
RECMA
マスタアボート
受信
Received Master Abort (初期値 0)
このビットは、PCIC イニシエータモジュールがそのホスト-PCI トランザクション
(スペシャルサイクルを除く) をマスタアボートによって終了すると、“1” に設定され
ます。
28
RECTA
ターゲットアボー
ト受信
Received Target Abort (初期値 0)
このビットは、PCIC イニシエータモジュールがターゲットアボートによってトラン
ザクション終了されると “1” に設定されます。
1: ターゲットアボートによりバスマスタのトランザクションが終了しました。
0: ターゲットアボートによりバスマスタのトランザクションが終了していません。
27
SIGTA
ターゲットアボー
ト通知
Signal Target Abort (初期値 0)
このビットは、PCIC ターゲットモジュールがそのトランザクションをターゲットア
ボートによって終了すると、このターゲットモジュールによって “1” に設定されま
す。
1: ターゲットアボートによりバスマスタのトランザクションを終了させました。
0: ターゲットアボートによりバスマスタのトランザクションが終了させていませ
ん。
図 12.3.3 PCI ステータスレジスタ (1/2)
12-9
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
26 : 25
DSTIM
DEVSEL
タイミング
Device Select (DEVSEL) Timing (初期値 01)
PCI 2.1 仕様は、DEVSEL アサートのための 3 つのタイミングを定義しています
(00b = 高速、01b = 中速、10b = 低速、11b = 予約)。
これらのビットはリードオンリーで、PCIC ターゲットがコンフィグレーションリー
ドとコンフィグレーションライトを除く任意のバスコマンドに対して DEVSEL 信
号をアサートして PCI バスマスタに応答する最も遅い時間を示しています。TX3927
は 「01: 中速」 で動作します。
24
PERPT
パリティエラー
報告
Parity Error Reported (初期値 0)
このビットは、PCIC イニシエータがシステムソフトウエアにパリティエラーを報告
するためのものです。ターゲットがこのビットを設定することは決してありません。
このビットは、以下の 3 条件をすべて満たしたときに “1” に設定されます。
• PCIC イニシエータはリードトランザクション内で PERR をアサートしたか、ま
たはライトトランザクション内のターゲットエイジェントによってアサートさ
れた PERR をサンプリング
• PCIC イニシエータは、エラーが発生したオペレーションのバスマスタ
• PCICMD レジスタ内の PEREN ビットは “1” に設定
23
FBBCP
高速バックツーバ
ック可能
Fast Back-to-Back Capable (初期値 0)
このビットは、PCIC が高速バックツーバックトランザクションを実行できるか否か
を示します。アプリケーションに応じて、このビットは “1” または “0” に設定できま
す。デフォルト値は 0 です。
1: 高速バックツーバック処理が可能です。
0: 高速バックツーバック処理は不可能です。
21
USPCP
アップスピード
可能
Up Speed Capable (初期値 0)
これは 66 MHz 動作を可能にします。ただし TX3927 では 66 MHz 動作はできませ
んので注意してください。
20
CL
ケイパビリティ
リスト
Capbilities List (初期値 1)
パワーマネージメント機能がインプリメントされていることを示します。
図 12.3.4 PCI ステータスレジスタ (2/2)
(注)
ビット 31, 30, 29, 28, 27, 24 はバス上で発生した事象を記録するためのものです。事象が発生す
ると “1” にセットされます。これらのビットをクリアするためには、ビットに “1” を書き込みます。
“0” を書き込んでも値は変化しません。また値が “0” のとき “1” を書き込んでも “1” になりません。
12-10
第 12 章 PCI コントローラ (PCIC)
12.3.2.4 PCI コマンドスレジスタ (PCICMD) 0xFFFE_D006 (+004)
この 16 ビットステータスレジスタは、PCI サイクルに応答する PCIC の機能を基本制
御します。
31
16
PCISTAT
:タイプ
:初期値
15
10
0
9
8
FBBEN SEEN
7
0
6
PEREN
5
0
4
3
2
1
0
MWIEN SCREC MEN MACEN IACEN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
R/W :タイプ
:初期値
0
ビット
ニモニック
フィールド名
説 明
9
FBBEN
高速バックツーバ
ックイネーブル
Fast Back-to-Back Enable (初期値 0)
2 つのバストランザクション間に一定の条件が成立している場合、トランザクショ
ンを連続して行うことが可能です。これを高速バックツーバックトランザクション
といいます。FBBEN ビットは、高速バックツーバックトランザクションをイネーブ
ル/ディセーブルにします。
1: イネーブル
0: ディセーブル
8
SEEN
SERR*イネーブル SERR* Enable (初期値 0)
SERR*信号をイネーブル/ディセーブルにします。PCIC が PCI バスアドレスパリテ
ィエラーまたはスペシャルサイクルデータパリティエラーにより SERR*をアサー
トするためには PEREN ビットも “1” にセットしてください。SEEN = 0 の場合には、
SERR*は決してアサートされません。
1: イネーブル
0: ディセーブル
6
PEREN
PERR*イネーブル Parity Error Response Enable (初期値 0)
PEREN は、PCI アドレス/データパリティエラー発生時の PCIC の動作をコントロ
ールします。PEREN ビットは、SEEN ビットとともに作用して、PCIC が PCI アド
レス/データパリティエラーを検出すると SERR*アサートします。このビットがク
リアされていると、PCIC はすべてのパリティエラーを無視し、パリティが正しいか
のようにそのトランザクションを終了します。このビットが “1” にセットされてい
ると、PCIC はパリティエラー検出時に PERR*をアサートします。
1: パリティエラー検出時に PERR*信号をアサートします。また SEEN ビットが “1”
にセットされているときに、PCI アドレス/データパリティエラーを検出すると
SERR*をアサートします。
0: パリティエラーが発生しても無視します。
4
MWIEN
メモリライト
アンド
インバリデート
イネーブル
Memory Write and Invalidate Enable (初期値 0)
マスタ・デバイスがメモリライトアンドインバリデートコマンドを使用するかどう
かを制御します。ただし TX3927 ではこのビットは機能しません。
3
SCREC
スペシャルサイク
ル認識
Special Cycle Recognition (初期値 0)
1: PCIC ターゲットは PCI スペシャルサイクルを監視します。
0: PCIC ターゲットは PCI スペシャルサイクルを監視せず、無視します。
2
MEN
マスタイネーブル
Master Enable (初期値 0)
1: PCIC イニシエータモジュールがバスマスタとして動作します。
0: PCIC イニシエータモジュールがバスマスタとして動作しません。
図 12.3.5 PCI コマンドレジスタ (1/2)
12-11
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
1
MACEN
メモリアクセス
イネーブル
Memory Access Enable (初期値 0)
1: PCIC ターゲットモジュールがメモリアクセスに応答します。
0: PCIC ターゲットモジュールはメモリアクセスに応答しません。
0
IACEN
I/O アクセス
イネーブル
I/O Access Enable (初期値 0)
1: PCIC ターゲットモジュールは I/O アクセスに応答します。
0: PCIC ターゲットモジュールは I/O アクセスに応答しません。
図 12.3.6 PCI コマンドレジスタ (2/2)
12-12
第 12 章 PCI コントローラ (PCIC)
12.3.2.5 クラスコードレジスタ (CC) 0xFFFE_D008 (+00b)
31
24
23
16
CC
SCC
R/WL
:タイプ
0x06
:初期値
15
8
7
0
RLPI
RID
:タイプ
:初期値
ビット
ニモニック
31 : 24
CC
フィールド名
クラスコード
説 明
Class Code for PCIC (初期値 0x6)
デバイスの種類の大分類を行います。初期値は PCIC をブリッジデバイスとして定
義する 06h です。
図 12.3.7 クラスコードレジスタ
12-13
第 12 章 PCI コントローラ (PCIC)
12.3.2.6 サブクラスコードレジスタ (SCC) 0xFFFE_D009 (+00a)
31
24
23
16
CC
SCC
15
8
R/WL
:タイプ
0x00
:初期値
7
0
RLPI
RID
:タイプ
:初期値
ビット
ニモニック
フィールド名
説 明
23 : 16
SCC
サブクラスコード
Sub-Class Code for PCIC (初期値 0x00)
同じクラスに属するデバイスの細分類を行います。デフォルト値は、PCIC をホスト
ブリッジとして定義する 00h です。
図 12.3.8 サブクラスコードレジスタ
12-14
第 12 章 PCI コントローラ (PCIC)
12.3.2.7 レジスタレベルプログラミングインタフェースレジスタ (RLPI)
31
24
0xFFFE_D00A (+009)
23
CC
16
SCC
:タイプ
:初期値
15
8
7
RLPI
ビット
ニモニック
15 : 8
RLPI
0
RID
R
:タイプ
0x00
:初期値
フィールド名
レジスタレベル
プログラミング
インタフェース
レジスタ
説 明
Register-Level Programming Interface (初期値 0x00)
プログラミングインタフェースについて互換性を備えた業界標準のインタフェース
が存在するとき、その種類を分類します。
このレジスタは、TX3927 では使用されません。このレジスタにリードすると、値
が “0” になります。
図 12.3.9 レジスタレベルプログラミングインタフェースレジスタ
12-15
第 12 章 PCI コントローラ (PCIC)
12.3.2.8 リビジョン ID レジスタ (RID) 0xFFFE_D00B (+008)
31
24
23
16
CC
SCC
:タイプ
:初期値
15
8
7
0
RLPI
RID
R/WL
:タイプ
:初期値
ビット
ニモニック
7:0
RID
フィールド名
リビジョン ID
説 明
Revision Identification Number for PCIC
デバイスのリビジョン ID を示します。値については当社技術部にお問い合わせくだ
さい。
図 12.3.10 リビジョン ID レジスタ
12-16
第 12 章 PCI コントローラ (PCIC)
12.3.2.9 ヘッダタイプレジスタ (HT) 0xFFFE_D00D (+00e)
31
24
0
15
8
23
MFUNS
22
16
HT
R
R
:タイプ
0
0x00
:初期値
7
0
MLR
CLS
:タイプ
:初期値
ビット
ニモニック
フィールド名
説 明
23
MFUNS
マルチファンクシ
ョン
Multi-Function statue (初期値 0)
0: デバイスは単機能です。
22 : 16
HT
ヘッダタイプ
Header Type (初期値 0x00)
ヘッダタイプを示します。TX3927 では 0x00 のみです。
000000: ヘッダタイプ 0。PCI-PCI ブリッジヘッダフォーマットではありません。
図 12.3.11 ヘッダタイプレジスタ
12-17
第 12 章 PCI コントローラ (PCIC)
12.3.2.10 マスタレイテンシタイマレジスタ (MLT) 0xFFFE_D00E (+00d)
MLT レジスタは 8 ビットレジスタで、PCIC がバスマスタとして PCI バスを占有して
データをバーストできる時間の長さをコントロールします。MLT は、PCIC が PCI バス
マスタになったときに使用され、PCIC が FRAME*信号をアサートしないときはクリア
されます。
PCIC が FRAME*信号をアサートすると、カウンタがイネーブルになり、カウントを
開始します。カウントが終了する前に PCIC がそのトランザクションを終了すると、MLT
カウントは無視されます。
トランザクションが完了する前にカウントが終了した場合、PCIC は GNT*信号がネゲ
ートされるとただちに終了トランザクションを開始します。MLT 内でプログラムされて
いるクロック数は PCIC に割り当てられた保証タイムスライス (PCI クロック単位) を示
し、このタイムスライス後、PCIC はその GNT*信号がネゲートされるとただちにバスを
明け渡さなくてはなりません。マスタレイテンシタイマレジスタ内のクロック数は、カウ
ントフィールド値の 8 倍になります。
31
24
23
0
16
HT
:タイプ
:初期値
15
11
10
MLT
8
7
0
0
CLS
R
:タイプ
0x1F
:初期値
ビット
ニモニック
フィールド名
説 明
15 : 11
MLT
マスタレイテンシ
タイマ
Master Latency Timer Count Value (初期値 0x1F)
マスタレイテンシタイマの値を設定します。バーストサイクル開始後に GNT*がデ
アサートされると、PCIC はそのバーストサイクルの実行時間をこのフィールドの 8
倍の値によって指定される PCI バスクロック数に制限します。
図 12.3.12 マスタレイテンシタイマレジスタ
12-18
第 12 章 PCI コントローラ (PCIC)
12.3.2.11 ターゲット I/O ベースアドレスレジスタ (IOBA) 0xFFFE_D010 (+010)
31
16
IBA
R/W
:タイプ
0x0000
:初期値
15
2
IBA
1
0
0
IMAI
R/W
R
:タイプ
0x0000
1
:初期値
ビット
ニモニック
フィールド名
説 明
31 : 2
IBA
I/O ベース
アドレス
I/O Base Address Space for Target (初期値 0x00000000)
ターゲット用の I/O 空間領域のベースアドレス (IBA) を設定します。その領域のサイ
ズは、ターゲット I/O ベースアドレスサイズレジスタ (IOBAS) で設定します。
0
IMAI
I/O ベース
アドレス指示
I/O Base Address Space Indicator (固定値 1)
1: このベースアドレスレジスタが I/O 空間であることを示します。
図 12.3.13 ターゲット I/O ベースアドレスレジスタ
12-19
第 12 章 PCI コントローラ (PCIC)
12.3.2.12 ターゲットメモリベースアドレスレジスタ (MBA) 0xFFFE_D014 (+014)
31
16
MBA
R/W
:タイプ
0x0000
:初期値
15
4
ビット
ニモニック
31 : 4
MBA
3
PF
2:1
0
MBA
3
PF
R/W
0x000
フィールド名
2
MTY
1
0
MBAI
R
R
R
:タイプ
1
00
0
:初期値
説 明
メモリベース
アドレス
Target Memory Base Address (初期値 0x0000000)
ターゲット用のメモリ空間領域のベースアドレスを設定します。その領域のサイズ
は、ターゲットメモリベースアドレスサイズレジスタ (MBAS) で設定します。
プリフェッチ可能
Prefetchable (固定値 1)
1: メモリはプリフェッチ可能であることを示します。
次の 2 つの条件が満たされると、デバイスはそのメモリ範囲をプリフェッチ可能と
判断します。
1. リード時デバイスはバイトイネーブルとは関係なくすべてのバイトを返しま
す。
2. このメモリスペースからのリードが、他へ影響を及ぼさない。
グラフィックスデバイス上のリニアフレームバッファは、プリフェッチ可能なメモ
リの一例です。
MTY
メモリタイプ
Memory Type (固定値 00)
00: メモリを 32 ビットアドレス領域に配置していることを示します。
MBAI
メモリベース
アドレス指示
Address Space Indicator (固定値 0)
0: このベースアドレスレジスタがメモリ空間用であることを示します。
図 12.3.14 ターゲットメモリベースアドレスレジスタ
12-20
第 12 章 PCI コントローラ (PCIC)
12.3.2.13 システムベンダ ID レジスタ (SVID) 0xFFFE_D02C (+02e)
31
16
SVID
R/WL
:タイプ
0x0000
:初期値
15
0
SSVID
:タイプ
:初期値
ビット
ニモニック
31 : 16
SVID
フィールド名
説 明
システムベンダ ID System Vender ID Value (初期値 0x0000)
このレジスタは、PCI デバイスのあるサブシステムあるいはアドインボードの認識
に使用されます。
値はシステムベンダにより、PCI SIG から得られます。
図 12.3.15 システムベンダ ID レジスタ
12-21
第 12 章 PCI コントローラ (PCIC)
12.3.2.14 サブシステムベンダ ID レジスタ (SSVID) 0xFFFE_D02E (+02c)
31
16
SVID
:タイプ
:初期値
15
0
SSVID
ビット
ニモニック
15 : 0
SSVID
R/WL
:タイプ
0x0000
:初期値
フィールド名
サブシステム
ベンダ ID
説 明
Sub-System Vender ID Value (初期値 0x0000)
このレジスタは、PCI デバイスのあるサブシステムあるいはアドインボードの認識
に使用されます。
値はシステムベンダにより、PCI SIG から得られます。
図 12.3.16 サブシステムベンダ ID レジスタ
12-22
第 12 章 PCI コントローラ (PCIC)
12.3.2.15 ケイパビリティポインタ (CAPPTR) 0xFFFE_D034 (+037)
31
24
23
16
:タイプ
:初期値
15
8
7
0
CAPPTR
ビット
ニモニック
7:0
CAPPTR
フィールド名
ケイパビリティ
ポインタ
R
:タイプ
0xE0
:初期値
説 明
Capabilities Pointer (初期値 0xE0)
TX3927 でサポートしているパワーマネージメント機能に使用するレジスタ群の開
始アドレスをオフセット値で示します。
図 12.3.17 ケイパビリティポインタ
12-23
第 12 章 PCI コントローラ (PCIC)
12.3.2.16 最大レイテンシレジスタ (ML) 0xFFFE_D03C (+03f)
このレジスタは、デバイスが PCI バスにアクセスできなくてはならない頻度を指定し
ます。その値は、PCICLK を 33 MHz のクロックレートと仮定し 250 ns (1/4 µs) 単位で
指定されます。この値は、バスアービタが PCIC イニシエータに割り当てる優先レベルを
決定するためにコンフィグレーションソフトウエアによって使用されます。
31
24
23
16
ML
MG
R/WL
:タイプ
0xFF
:初期値
15
8
7
0
IP
IL
:タイプ
:初期値
ビット
ニモニック
31 : 24
ML
フィールド名
最大レイテンシ
説 明
Maximum Latency value (初期値 0xFF)
00h:
PCI バスの優先順位の決定にこのレジスタを使用しません。
01h-FFh: バスの使用権を要求する時間間隔を指定します。
PCICLK は 33 MHz と仮定し、単位は 250 ns です。
図 12.3.18 最大レイテンシレジスタ
12-24
第 12 章 PCI コントローラ (PCIC)
12.3.2.17 最小グラントレジスタ (MG) 0xFFFE_D03D (+03e)
このレジスタは、デバイスによって必要とされるバースト周期を指定します。その値は、
PCICLK を 33 MHz のクロックレートと仮定し、250 ns (1/4 µs) の単位で指定されます。
この値はレイテンシタイマ値を決定するために使用され、カスタムアプリケーション専用
です。
31
24
23
16
ML
MG
15
8
R/WL
:タイプ
0xFF
:初期値
7
0
IP
IL
:タイプ
:初期値
ビット
ニモニック
23 : 16
MG
フィールド名
最小グラント
説 明
Minimum Grant value (初期値 0xFF)
レイテンシタイマ値の算出には使用しません。
00h:
01h-FFh: バースト転送に必要な時間を設定します。
PCICLK は 33 MHz と仮定し、単位は 250 ns です。
図 12.3.19 最小グラントレジスタ
12-25
第 12 章 PCI コントローラ (PCIC)
12.3.2.18 割り込み端子レジスタ (IP) 0xFFFE_D03E (+03d)
PCIC が割り込み要求を生成するときに使用します。このレジスタは、PCIC が INTA*
から INTD*までのどの割り込み端子に接続されているかを識別します。
31
24
23
16
ML
MG
:タイプ
:初期値
15
8
7
0
IP
ビット
ニモニック
15 : 8
IP
IL
R/WL
:タイプ
0x01
:初期値
フィールド名
割り込みピン
説 明
Interrupt Pin value (初期値 0x01)
有効な値は 00h∼04h です。
割り込みピンはデバイスによって使用しません。
00h:
割り込み端子 INTA*を使用。
01h:
割り込み端子 INTB*を使用。
02h:
割り込み端子 INTC*を使用。
03h:
割り込み端子 INTD*を使用。
04h:
05h∼FFh: 予約。
図 12.3.20 割り込み端子レジスタ
12-26
第 12 章 PCI コントローラ (PCIC)
12.3.2.19 割り込みラインレジスタ (IL) 0xFFFE_D03F (+03c)
割り込みラインレジスタは、割り込みコントローラ上のシステム割り込み要求ラインの
どれにデバイスの PCI 割り込み要求端子 (割り込み端子レジスタ内で指定されます) が接
続されているを識別するために使用されます。
オペレーションシステムまたはデバイスドライバは、デバイスの割り込みラインレジス
タを検証してそのデバイスがサービス要求を出す際に使用するシステム割り込み要求ラ
インを決定することができます。
31
24
23
16
ML
MG
:タイプ
:初期値
15
8
7
0
IP
ビット
ニモニック
7:0
IL
IL
フィールド名
割り込みライン
R/W
:タイプ
0x00
:初期値
説 明
Interrupt Line Value (初期値 0x00)
割り込みライン (IL) の値は、システムアーキテクチャ専用です。
00h∼FEh: デバイスが接続されている割り込みライン番号。
00h ==> IRQ0
01h ==> IRQ1
0Eh ==> IRQ14
0Fh ==> IRQ15
FFh:
デバイス入力ラインは、システム割り込みコントローラに接続されていま
せん。
図 12.3.21 割り込みラインレジスタ
12-27
第 12 章 PCI コントローラ (PCIC)
12.3.3
イニシエータコンフィグレーション空間レジスタ
12.3.3.1 イニシエータステータスレジスタ (ISTAT) 0xFFFE_D044 (+044)
31
16
0
:タイプ
:初期値
15
13
0
12
IDICC
R/WC
0
11
0
10
9
IDTRT IDTDC
8
0
0
:タイプ
R/WC R/WC
0
:初期値
0
ビット
ニモニック
フィールド名
説 明
12
IDICC
インダイレクト
イニシエータ
コマンド完了
Indirect Initiator Command Complete (初期値 0)
このビットは、インダイレクトイニシエータコマンドが完了するとセットされます。
このビットに “1” をライトするとクリアされます。
10
IDTRT
ターゲット
リトライ
サイクル検知
Initiator Detected Target Retry Cycle (初期値 0)
1: ターゲットによるリトライサイクルを検知しました。
このビットに “1” をライトするとクリアされます。
9
IDTDC
ディスコネクト
サイクル検知
Initiator Detected Target Disconnect Cycle (初期値 0)
1: ターゲットによるディスコネクトサイクルを検知しました。
このビットに “1” をライトするとクリアされます。
図 12.3.22 イニシエータステータスレジスタ
12-28
第 12 章 PCI コントローラ (PCIC)
12.3.3.2 イニシエータ割り込みマスクレジスタ (IIM) 0xFFFE_D048 (+048)
これらのレジスタビットに “1” を設定していると、イニシエータステータスレジスタ
(ISTAT) 内の対応するステータスビットが “1” にセットされたときに、割り込みが発生し
ます。
31
16
0
:タイプ
:初期値
15
13
0
12
IDICCIE
11
0
10
9
IDRIE IDDIE
8
0
0
R/W
R/W
R/W
:タイプ
0
0
0
:初期値
ビット
ニモニック
フィールド名
説 明
12
IDICCIE
インダイレクト
イニシエータ
コマンド完了割り
込みイネーブル
Indirect Initiator Command Complete Interrupt Enable (初期値 0)
インダイレクトイニシエータコマンドが完了した際に割り込みを発生させます。
1: 割り込みを発生します。
0: 割り込みを発生しません。
10
IDRIE
ターゲットリトラ
イサイクル割り込
みイネーブル
Initiator Detected Target Retry Cycle Interrupt Enable (初期値 0)
ターゲットによるリトライサイクルを検出した際に割り込みを発生させます。
1: 割り込みを発生します。
0: 割り込みを発生しません。
9
IDDIE
ディスコネクトサ
イクル検出割り込
みイネーブル
Initiator Detected Target Disconnect Cycle Interrupt Enable (初期値 0)
ディスコネクトを検出した際に割り込みを発生させます。
1: 割り込みを発生します。
0: 割り込みを発生しません。
図 12.3.23 イニシエータ割り込みマスタレジスタ
12-29
第 12 章 PCI コントローラ (PCIC)
12.3.3.3 リトライ/リコネクトタイマレジスタ (RRT) 0xFFFE_D04C (+04c)
31
16
0
:タイプ
:初期値
15
8
7
0
0
ビット
7:0
ニモニック
RRT
RRT
フィールド名
R/W
:タイプ
0x00
:初期値
説 明
1
リトライ/リコネク Initiator Auto Retry/Reconnect Timer (初期値 0x00)
ターゲットによるリトライあるいはディスコネクトに対して再度トランザクション
トタイマ
を要求するまでの時間 (PCICLK) を設定します。このタイマは、ターゲットが PCIC
イニシエータのリトライまたはディスコネクトを実行すると自動的にカウントダウ
ンを開始します。
イニシエータはこのタイマが 0 になると同じトランザクションを要求します。イニ
シエータステータスレジスタ (ISTAT) をリードして、発生したターゲット終了の種
類がリトライかディスコネクトか知ることができます。
図 12.3.24 リトライ/リコネクトタイマレジスタ
(注 1) PCI Local Bus Specification Revision 2.1 では、2 から 33 PCI クロックが提案されています。
12-30
第 12 章 PCI コントローラ (PCIC)
12.3.3.4 イニシエータ PCI バスメモリマッピングアドレスレジスタ (IPBMMAR)
0xFFFE_D05C (+05c)
31
16
IPBMMA
R/W
:タイプ
0x0000
:初期値
15
4
IPBMMA
3
0
0
R/W
:タイプ
0x000
:初期値
ビット
ニモニック
フィールド名
説 明
31 : 4
IPBMMA
イニシエータ PCI
バスメモリ
マッピング
アドレス
Initiator PCI Bus Memory Mapping Address (初期値 0x0000000)
ダイレクトイニシエータメモリサイクルにおける PCI バス上の空間を設定します。
このメモリ空間の有効範囲 (サイズ) は、イニシエータメモリマッピングアドレスサ
イズレジスタ (MMAS) によって指定します。この IPBMMA レジスタの値は PCI バ
スアドレスの上位部分を指定し、下位アドレスはローカルバス (内部 G-Bus) アドレ
ス使用します。
このレジスタは、PCI メモリリード/ライトコマンドに使用されます。このときイニ
シエータメモリマッピングアドレスサイズレジスタ (MMAS) により内部的にマスク
されるため、IPBMMA を設定する前に MMAS を設定してください。
図 12.3.25 イニシエータ PCI バスメモリマッピングアドレスレジスタ
12-31
第 12 章 PCI コントローラ (PCIC)
12.3.3.5 イニシエータ PCI バス I/O マッピングアドレスレジスタ (IPBIMAR)
0xFFFE_D060 (+060)
31
16
IPBIOMA
R/W
:タイプ
0x0000
:初期値
15
2
IPBIOMA
ビット
ニモニック
31 : 2
IPBIOMA
0
0
R/W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
PCI バス
I/O マッピング
アドレス
1
説 明
Initiator PCI Bus I/O Mapping Address (初期値 0x00000000)
ダイレクトイニシエータメモリサイクルにおける PCI 空間バス上の I/O 空間を設定
します。この I/O 空間の有効範囲 (サイズ) は、イニシエータ I/O マッピングアドレ
スサイズレジスタ (IOMAS) によって指定します。この IPBIOMA レジスタの値は PCI
バスアドレスの上位部分を指定し、下位アドレスはローカルバス (内部 G-Bus) アド
レスを使用します。
このレジスタは、PCI I/O リード/ライトコマンドに使用されます。このときイニシ
エータ I/O マッピングアドレスサイズレジスタ (IOMAS) により内部的にマスクされ
るため、IPBIOMA を設定する前に IOMAS を設定してください。
図 12.3.26 イニシエータ PCI バス I/O マッピングアドレスレジスタ
12-32
第 12 章 PCI コントローラ (PCIC)
12.3.3.6 イニシエータローカルバスメモリマッピングアドレスレジスタ (ILBMMAR)
0xFFFE_D064 (+064)
31
16
ILBMMA
R/W
:タイプ
0x0000
:初期値
15
4
3
ILBMMA
0
0
R/W
:タイプ
0x000
:初期値
ビット
ニモニック
フィールド名
説 明
31 : 4
ILBMMA
イニシエータ
ローカルバス
メモリマッピング
アドレス
Initiator Local Bus Memory Mapping Address (初期値 0x0000000)
ダイレクトイニシエータメモリサイクルにおけるローカルバス (G-Bus) アドレス
(ILBMMA) を指定します。設定の有効範囲 (サイズ) は、イニシエータメモリマッピ
ングアドレスサイズレジスタ (MMAS) によって設定します。ローカルバス (G-Bus)
アドレスがこのレジスタと MMAS によって指定されたアドレスに一致すると、PCIC
イニシエータは単一 PCI メモリトランザクションを実行します。このときの PCI バ
ス上のアドレスは、イニシエータ PCI バスメモリマッピングアドレスレジスタ
(IPBMMAR) の値が上位アドレス、ローカルバス (G-Bus) アドレスが下位アドレスに
なります。
MMAS によって ILBMMA の値はマスクされるため、ILBMMA を設定する前に MMAS
を設定してください。
図 12.3.27 イニシエータローカルバスメモリマッピングアドレスレジスタ
12-33
第 12 章 PCI コントローラ (PCIC)
12.3.3.7 イニシエータローカルバス I/O マッピングアドレスレジスタ (ILBIOMA)
0xFFFE_D068 (+068)
31
16
ILBIOMA
R/W
:タイプ
0x0000
:初期値
15
2
ILBIOMA
ビット
ニモニック
31 : 2
ILBIOMA
0
0
R/W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
ローカルバス
I/O マッピング
アドレス
1
説 明
Initiator Local Bus I/O Mapping Address (初期値 0x00000000)
ダイレクトイニシエータ I/O サイクルにおけるローカルバス (G-Bus) アドレス
(ILBIOMA) を指定します。設定の有効範囲 (サイズ) は、イニシエータ I/O マッピン
グアドレスサイズレジスタ (IOMAS) によって指定します。ローカルバス (G-Bus) ア
ドレスがこのレジスタと IOMAS によって指定されたアドレスに一致すると、PCIC
イニシエータは単一 PCI I/O トランザクションを実行します。このときの PCI バス
上 の ア ドレ ス は、 イ ニシ エ ータ PCI バス I/O マッ ピン グ アド レ スレ ジ ス タ
(IPBIOMAR) の値が上位アドレスになり、ローカルバス (G-Bus) アドレスが下位ア
ドレスになります。
IOMAS よって ILBIOMA の値はマスクされるため、ILBIOMA を設定する前に IOMAS
を設定してください。
図 12.3.28 イニシエータローカルバス I/O マッピングアドレスレジスタ
12-34
第 12 章 PCI コントローラ (PCIC)
第12章
12.3
PCI コントローラ (PCIC)
12.3.4
ターゲットコンフィグレーション空間レジスタ
12.3.4.1 ターゲットコントロールレジスタ (TC) 0xFFFE_D090 (+090)
31
20
0
13
0
12
11
10
9
8
7
OFPFO SWGSE TOBFR TIBFR OFARD IFARD
5
4
OF16E IF8E
R/W
R/W
R/W
0
0
0
15
FTRED
14
FTA
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
0
0
0
0
フィールド名
6
0
19
18
17
16
OFCAD OFNTE IFNTE ISPRE
3
2
OF8E DOBDT
1
0
R/W :タイプ
:初期値
0
0
IF16D
R/W :タイプ
:初期値
0
ビット
ニモニック
説 明
19
OFCAD
OFIFO
キャッシング
イネーブル
OFIFO Caching Capability Disable (初期値 0)
OFIFO キャッシュを制御します。
1: PCI トランザクションの完了後、未使用 OFIFO データは破棄
0: 未使用 OFIFO データを保持します。次の PCI リードですでに OFIFO 内にあるデ
ータが必要な場合は、そのデータはただちに返されます。不必要な場合は、OFIFO
がリセットされ (OFIFO データがフラッシュされ)、新しいデータがローカルバス
からフェッチされます。IFIFO に対する PCI ライトのアドレスが現在 OFIFO 内に
あるデータのアドレス範囲内に含まれる場合は、OFIFO がリセットされます (こ
れは、OFIFO へ取り込んだ後で同じアドレスのデータが書き替えられた場合に古
いデータを返さないようにするための措置です)。
18
OFNTE
OFIFO
16/8 クロック
ネバータイム
アウトイネーブル
OFIFO 16/8 Clocks Never Time Out Enable (初期値 0)
「16 クロックルール」 および「8 クロックルール」 を守るかどうかを指定します。
1: OFIFO 16 クロックルールがイネーブルの場合 (OF16E=1) にも、最初のデータに
対する PCI 16 クロックルールによるタイムアウトはおきません。また 8 クロッ
クルールがイネーブルの場合 (OF8E=1) にも全データに対する PCI 8 クロックル
ールに対するタイムアウトは発生しません。いずれの場合にも、ターゲットは PCI
イニシエータにリトライまたはディスコネクト命令を発生しません。
0: OFIFO 16/8 クロックルールがイネーブルの場合 (OF16E=1/OF8E=1) には、
OFIFO は 16/8 クロックルールに従い、タイムアウトが発生した時点で PCI イニ
シエータにリトライまたはディスコネクト命令をそれぞれ発行します。
17
IFNTE
IFIFO
8 クロックネバー
タイムアウト
イネーブル
IFIFO 8 clocks Never Time Out Enable (初期値 0)
1: IFIFO 8 クロックルールがイネーブルの場合 (IF8E=1) にも、IFIFO は 8 クロック
ルールに従わず、タイムアウトしても PCI イニシエータにディスコネクト命令を
発行しません。
0: IFIFO 8 クロックルールがイネーブルになると、IFIFO は 8 クロックルールに従い、
タイムアウトが発生した時点で PCI イニシエータにディスコネクト命令を発行し
ます。
図 12.3.29 ターゲットコントロールレジスタ (1/3)
12-35
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
16
ISPRE
I/O 空間
プリフェッチ
イネーブル
15
FTRED
強制ターゲット
Force Target Retry/Disconnect (初期値 0)
リトライ/ディスコ この機能は、トランザクションをソフトウエアで終了するために使用します。この
ネクト
機能は、システムホストの終了準備が整い、現在の PCI トランザクションを強制終
了したい場合に便利です。
1: リトライ終了 (トランザクションの始まり) またはディスコネクト終了 (トランザ
クションのなかば) をターゲットモジュールは生成します。このビットは、ター
ゲット終了オペレーションの終わりで自動的に 0 にリセットされます。
0: “0” を設定しても無効です。
14
FTA
12
I/O Space Prefetch Enable (初期値 0)
1: I/O 空間がプリフェッチ可能です。I/O 空間リードライトコマンドは、メモリ空間
リードライトコマンドと同一です。
0: I/O 空間はプリフェッチできません。
強制ターゲット
アボート
Force Target Abort (初期値 0)
この機能は、トランザクションをソフトウエアでアボートするために使用します。
この機能は、現在の PCI トランザクションを強制終了したい場合に便利です。
1: ターゲットモジュールはターゲットアボート終了を生成します。このビットは、
オペレーションの終わりで自動的に 0 にリセット
0: “0” を設定しても無効です。
OFPFO
シングルバースト
イネーブル
Single Burst Enable (初期値 0)
1: OFIFO は、ローカルバス上でシングルリードトランザクションのみを実行しま
す。リードバーストのサイズは、ターゲットバースト長レジスタ (TBL) によって
決定します。
0: OFIFO は、ローカルバスから OFIFO 内にデータをストリーミングします。OFIFO
は、一杯になるか、または PCI トランザクションが完了するまで OFIFO へのデ
ータリードを続行します。その PCI トランザクションが進行中であるか、または
後続の PCI トランザクションが進行中である (この場合には、OFIFO キャッシン
グが OFCAE = 0 によってイネーブル) と、OFIFO はローカルバスデータバースト
を受け入れるだけの余地があればさらにデータリードを続行 (ターゲットバース
ト長レジスタの設定により) します。
11
SWGSE
ソウフトウエア
システムエラー
生成イネーブル
Software Generated System Error (初期値 0)
1: PCI コマンドレジスタの SERR イネーブル (SEEN) ビットが “1” にセットされて
いるときに、このビットに “1” をライトすると SERR*信号をアサート
0: このビットに “0” をライトしても無効です。
10
TOBFR
ターゲットアウト
バウンド FIFO
リセット
Target Out-Bound FIFO Reset (初期値 0)
このビットを “1” にセットすると、“0” がライトされるまで “1” のままです。
1: ターゲット OFIFO をリセット
0: ターゲット OFIFO のリセットを解除
9
TIBFR
ターゲットイン
バウンド FIFO
リセット
Target In-Bound FIFO Reset
このビットを “1” にセットすると、“0” がライトされるまで “1” のままです。
1: ターゲット IFIFO をリセット
0: ターゲット IFIFO のリセットを解除
8
OFARD
OFIFO
アドレスレンジ
チェック
ディセーブル
OFIFO Address Range Check Disable (初期値 0)
ターゲットメモリベースアドレス (MBA) およびターゲット I/O ベースアドレス
(IOBA) は、PCIC アドレス空間を指定します。この空間の最後の 4 つの D ワードは、
PCIC 用に予約されています。このビットがクリアされた場合、外部 PCI マスタが
アドレス境界を越えるか、または予約エリアにアクセスすると、PCIC はターゲット
アボート命令を発行します。
1: OFIFO アドレスレンジチェックをディセーブル
0: OFIFO アドレスレンジチェックをイネーブル
図 12.3.30 ターゲットコントロールレジスタ (2/3)
12-36
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
7
IFARD
IFIFO
アドレスレンジ
チェック
ディセーブル
IFIFO Address Range Check Disable (初期値 0)
ターゲットメモリベースアドレス (MBA) およびターゲット I/O ベースアドレス
(IOBA) は、PCIC アドレス空間を指定します。この空間の最後の 4 つの D ワードは、
PCIC 用に予約されています。このビットがクリアされた場合、外部 PCI マスタが
アドレス境界を越えるか、または予約エリアにアクセスすると、PCIC はターゲット
アボート命令を発行します。
1: IFIFO アドレスレンジチェックをディセーブル
0: IFIFO アドレスレンジチェックをイネーブル
5
OF16E
OFIFO
16 クロック
ルール
イネーブル
OFIFO (PCI Read) 16 clocks Rule Enable (初期値 0)
「16 クロックルール」 に関する動作を設定します。
1: マスタからのリード要求に対して OFIFO に最初のデータを送信する準備が整っ
ていないときに、16 クロックまでマスタを待たせます。16 PCI クロックたって
もデータが用意できない場合にはリトライを要求します。16 PCI クロックが経過
すると、ターゲットステートマシンは PCI バスマスタをディスコネクトします。
(このモードは、最初の READ データを 16 PCI クロックで PCI バスに送信するこ
とができる高速メモリ用です)
0: ターゲットモジュールは、OFIFO の準備が整っていないと直ちに PCI バスマスタ
にリトライを要求します。 (このモードは、最初の READ データを 16 PCI クロッ
クで PCI バスに送信することができない低速メモリ用です)
いずれの場合にも、PCI マスタは、OFIFO ディスカードタイマが終了するか、また
はトランザクションがディスカードされる前に再びリトライする必要があります。
4
IF8E
IFIFO8 クロック
ルールイネーブル
IFIFO (PCI Write) 8-clock Rule Enable (初期値 0)
1: ターゲット IFIFO 8 クロックルールチェックをイネーブル
0: ターゲット IFIFO 8 クロックルールチェックをディセーブル
3
OF8E
OFIFO8 クロック
ルールイネーブル
OFIFO (PCI Read) 8-clock Rule Enable (初期値 0)
1: ターゲット OFIFO 8 クロックルールチェックをイネーブル
0: ターゲット OFIFO 8 クロックルールチェックをディセーブル
2
DOBDT
アウトバウンド
ディスカード
タイマ
ディセーブル
Disable Out-Bound (Read) Discard Timer (初期値 0)
1: リードディスカードタイマをディセーブル
0: リードディスカードタイマをイネーブル
0
IF16D
IFIFO16 クロック
ルール
ディセーブル
IFIFO (Write) 16 clocks Rule Disable (初期値 0)
1: ターゲットは、IFIFO に準備が整っていないとただちに PCI バスマスタをリトラ
イ要求します。
0: IFIFO に準備が整っていない (すなわち、前のトランザクションがローカルバス上
で完了していない) ときに、ターゲットは 16 PCI クロック待ってから PCI イニシ
エータにリトライ要求します。
図 12.3.31 ターゲットコントロールレジスタ (3/3)
12-37
第 12 章 PCI コントローラ (PCIC)
12.3.4.2 ターゲットステータスレジスタ (TSTAT) 0xFFFE_D094 (+094)
ターゲット割り込みマスクレジスタ (TIM) 内の対応するビットが “1” にセットされて
いるときに、TSTAT レジスタのビットに、 “1” がセットされると、割り込みを発生しま
す。
31
24
18
0
17
16
SPCYROFREO
R/WC R/WC :タイプ
:初期値
0
0
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
IFREO OFDIO IFDIO OFABO IFABO PRDTO TASEL OBFBS OBFFL IBFFL OBFEM IBFEM OBFOV IBFOV OBFUN IBFUN
R/WC R/WC R/WC R/WC R/WC R/WC
0
0
0
0
0
0
R
R
R
R
0
0
0
0
R/WC R/WC R/WC R/WC R/WC R/WC :タイプ
:初期値
1
1
0
0
0
0
ビット
ニモニック
フィールド名
説 明
17
SPCYR
スペシャルサイク
ル受信
Special Cycle Received (初期値 0)
このビットは、スペシャルサイクルデータが受信されると “1” に設定されます。
1: スペシャルサイクルのデータを受信しました。
0: スペシャルサイクルのデータを受信していません。
16
OFREO
OFIFO リトライ
発生
OFIFO Retry Occurred (初期値 0)
このビットは、ターゲットステートマシンが PCI リードトランザクション中にリト
ライ要求を発行すると “1” に設定されます。
1: リトライ要求を発行しました。
0: リトライ要求を発行していません。
15
IFREO
IFIFO リトライ
発生
IFIFO Retry Occurred (初期値 0)
このビットは、ターゲットステートマシンが PCI ライトトランザクション中にリト
ライ要求を発行すると “1” に設定されます。
1: リトライ要求を発行しました。
0: リトライ要求を発行していません。
14
OFDIO
OFIFO ディスコネ OFIFO Disconnect Occurred (初期値 0)
クト発生
このビットは、ターゲットステートマシンが PCI リードトランザクション中にディ
スコネクト要求を発行すると “1” に設定されます。
1: ディスコネクト要求を発行しました。
0: ディスコネクト要求を発行していません。
13
IFDIO
IFIFO ディスコネ
クト発生
IFIFO Disconnect Occurred (初期値 0)
このビットは、ターゲットステートマシンが PCI ライトトランザクション中にディ
スコネクト要求を発行すると “1” に設定されます。
1: ディスコネクト要求を発行しました。
0: ディスコネクト要求を発行していません。
12
OFABO
OFIFO アボート
発生
OFIFO Abort Occurred (初期値 0)
このビットは、マスタがメモリ境界を越える PCI リードを実行しようとすることを
ターゲットが検知すると “1” にセットされます。
11
IFABO
IFIFO アボート発
生
IFIFO Abort Occurred (初期値 0)
このビットは、マスタがメモリ境界を越える PCI ライトを実行しようとすることを
ターゲットが検知すると “1” にセットされます。
図 12.3.32 ターゲットステータスレジスタ (1/2)
12-38
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
10
PRDTO
PCI リードディス
カードタイマ
タイムアウト
PCI Read Discard Timer Time Out (初期値 0)
このビットは、リードディスカードタイマがタイムアウトすると “1” にセットされ
ます。ターゲットコントロールレジスタ内のディセーブルアウトバウンド (リード)
ディスカードタイマが “0” のとき有効です。
1: ディガードタイムアウトが発生しました。
0: ディガードタイムアウトは発生していません。
9
TASEL
ターゲット選択
Target Selected (初期値 0)
PCIC の DEVSEL*信号の状態を示します。
このビットは、ターゲットとして選択されると “1” にセットされます。
このビットは、トランザクションが終了する (FRAME*がデアサートされます) と自
動的にクリアされます。ローカルホストは、ターゲットカレントコマンドレジスタ
(TCCMD) をリードして PCI コマンドを知ることができます。
8
OBFBS
アウトバウンド
FIFO ビジー
Out-Bound (PCI Read) FIFO Busy (初期値 0)
このビットは、ターゲットが選択され、コマンドがメモリ/I/O リードコマンドであ
ると、 “1” にセットされます。そして、マスタによるトランザクションが終了 (現在
の PCI コマンドの完了) するまで “1” のままです。
OBFBS が 1 の状態であると、新たなアウトバウンドメモリ/I/O コマンド (C_BE0*
信号 = 0) は PCI リードリトライタグレジスタ (PCIRRT) 内にラッチされません。
7
OBFFL
アウトバウンド
FIFO フル
Out-Bound FIFO Full Flag (初期値 0)
1: OFIFO はフル状態です。
0: OFIFO はフル状態ではありません。
6
IBFFL
インバウンド FIFO In-Bound FIFO Full Flag (初期値 0)
フル
1: IFIFO はフル状態です。
0: IFIFO はフル状態ではありません。
5
OBFEM
アウトバウンド
FIFO エンプティ
4
IBFEM
インバウンド FIFO In-Bound FIFO Empty Flag (初期値 1)
エンプティ
1: IFIFO は空です。
0: IFIFO は空ではありません。
3
OBFOV
アウトバウンド
FIFO オーバラン
Out-Bound FIFO Overrun Flag (初期値 0)
このビットは、OFIFO フルフラグがアサートされているとき (OBFFL = 1) に、OFIFO
にライトしようとすると “1” がセットされます。データが壊れるため、SERR*信号ま
たはソフトウエアによるターゲットアボートを使用して PCI バスマスタに通知して
ください。対応するターゲット割り込みマスクイネーブルビットが “1” に設定されて
いると、割り込みが発生します。
2
IBFOV
インバウンド
FIFO オーバラン
In-Bound FIFO Overrun Flag (初期値 0)
このビットは、IFIFO フルフラグがアサートされているとき (IBFFL = 1) に、IFIFO に
ライトしようとすると “1” にセットされます。データが壊れるため、SERR*信号また
はソフトウエアによるターゲットアボートを使用して PCI バスマスタに通知してく
ださい。対応するターゲット割り込みマスクイネーブルビットが “1” に設定されてい
ると、割り込みが発生します。
1
OBFUN
アウトバウンド
Out-Bound FIFO Underrun Flag (初期値 0)
FIFO アンダーラン このビットは、OFIFO 空白フラグがアサートされているとき (OBFEM = 1) に、OFIFO
にリードしようとすると “1” にセットされます。データが壊れるため、SERR*信号ま
たはソフトウエアによるターゲットアボートを使用して PCI バスマスタに通知して
ください。対応するターゲット割り込みマスクイネーブルビットが “1” に設定されて
いると、割り込みが発生します。
0
IBFUN
インバウンド FIFO In-Bound FIFO Underrun Flag (初期値 0)
アンダーラン
このビットは、IFIFO 空白フラグがアサートされているとき (IBFEM = 1) に、IFIFO
にリードしようとすると “1” にセットされます。データが壊れるため、SERR*信号ま
たはソフトウエアによるターゲットアボートを使用して PCI バスマスタに通知して
ください。対応するターゲット割り込みマスクイネーブルビットが “1” に設定されて
いると、割り込みが発生します。
Out-Bound FIFO Empty Flag (初期値 1)
1: OFIFO は空です。
0: OFIFO は空ではありません。
図 12.3.33 ターゲットステータスレジスタ
12-39
第 12 章 PCI コントローラ (PCIC)
12.3.4.3 ターゲットカレントコマンドレジスタ (TCCMD) 0xFFFE_D09C (+09c)
31
16
0
:タイプ
:初期値
15
4
3
0
ビット
ニモニック
フィールド名
3:0
TCCMD
ターゲット
カレントコマンド
レジスタ
0
TCCMD
R
:タイプ
0x0
:初期値
説 明
Target Current Command (初期値 0x0)
ターゲット PCIC のアクセス中、実行中の PCI コマンドを示します。
図 12.3.34 ターゲットカレントコマンドレジスタ
12-40
第 12 章 PCI コントローラ (PCIC)
12.3.4.4 ターゲット割り込みマスクレジスタ (TIM) 0xFFFE_D098 (+098)
このレジスタに “1” を設定していると、ターゲットステータスレジスタ (TSTAT) の対
応するステータスビットが “1” にセットされたときに割り込み要求が発生します。
31
18
0
17
16
SCRIE OROIE
R/WC R/WC :タイプ
:初期値
0
0
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
IROIE ODOIE IDOIE OAOIE IAOIE PDTIE TASIE OFBIE OFFIE IFFIE OFEIE IFEIE OFOIE IFOIE OFUIE IFUIE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
R/W :タイプ
:初期値
0
ビット
ニモニック
フィールド名
説 明
17
SCRIE
スペシャルサイク
ル受信割り込みイ
ネーブル
16
OROIE
OFIFO リトライ発 OFIFO Retry Occurred Interrupt Enable (初期値 0)
生割り込みイネー 1: PTSR.OFREO ビットが 1 にセットされると割り込み要求を発生します。
ブル
0: PTSR.OFREO ビットが 1 にセットされても割り込み要求は発生しません。
15
IROIE
IFIFO リトライ発
生割り込みイネー
ブル
14
ODOIE
OFIFO ディスコネ OFIFO Disconnect Occurred Interrupt Enable (初期値 0)
クト発生割り込み 1: PTSR.OFDIO ビットが 1 にセットされると割り込み要求を発生します。
イネーブル
0: PTSR.OFDIO ビットが 1 にセットされても割り込み要求は発生しません。
13
IDOIE
IFIFO ディスコネ
クト発生割り込み
イネーブル
12
OAOIE
OFIFO アボート発 OFIFO Abort Occurred Interrupt Enable (初期値 0)
生割り込みイネー 1: PTSR.OFABO ビットが 1 にセットされると割り込み要求を発生します。
ブル
0: PTSR.OFABO ビットが 1 にセットされても割り込み要求は発生しません。
11
IAOIE
IFIFO アボート発
生割り込みイネー
ブル
IFIFO Abort Occurred Interrupt Enable (初期値 0)
1: PTSR.IFABO ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.IFABO ビットが 1 にセットされても割り込み要求は発生しません。
10
PDTIE
PCI リードディス
カードタイマタイ
ムアウト割り込み
イネーブル
PCI Read Discard Timer Time Out Interrupt Enable (初期値 0)
1: PTSR.PRDTO ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.PRDTO ビットが 1 にセットされても割り込み要求は発生しません。
9
TASIE
ターゲット選択割
り込みイネーブル
Target Selected Interrupt Enable (初期値 0)
1: PTSR.TASEL ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.TASEL ビットが 1 にセットされても割り込み要求は発生しません。
8
OFBIE
アウトバウンド(リ Out-Bound (Read) FIFO Busy Interrupt Enable (初期値 0)
ード)FIFO ビジー 1: PTSR.OBFBS ビットが 1 にセットされると割り込み要求を発生します。
割り込みイネーブ 0: PTSR.OBFBS ビットが 1 にセットされても割り込み要求は発生しません。
ル
7
OFFIE
アウトバウンド
Out-Bound FIFO Full (初期値 0)
FIFO フル割り込み 1: PTSR.OBFFL ビットが 1 にセットされると割り込み要求を発生します。
イネーブル
0: PTSR.OBFFL ビットが 1 にセットされても割り込み要求は発生しません。
Special Cycle Received Interrupt Enable (初期値 0)
1: PTSR.SPCYR ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.SPCYR ビットが 1 にセットされても割り込み要求は発生しません。
IFIFO Retry Occurred Interrupt Enable (初期値 0)
1: PTSR.IFREO ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.IFREO ビットが 1 にセットされても割り込み要求は発生しません。
IFIFO Disconnect Occurred Interrupt Enable (初期値 0)
1: PTSR.IFDIO ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.IFDIO ビットが 1 にセットされても割り込み要求は発生しません。
図 12.3.35 ターゲット割り込みマスタレジスタ (1/2)
12-41
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
6
IFFIE
インバウンド FIFO In-Bound FIFO Full Interrupt Enable (初期値 0)
フル割り込みイネ 1: PTSR.IBFFL ビットが 1 にセットされると割り込み要求を発生します。
ーブル
0: PTSR.IBFFL ビットが 1 にセットされても割り込み要求は発生しません。
5
OFEIE
アウトバウンド
Out-Bound Empty Interrupt Enable (初期値 0)
FIFO エンプティ割 1: PTSR.OBFEM ビットが 1 にセットされると割り込み要求を発生します。
り込みイネーブル 0: PTSR.OBFEM ビットが 1 にセットされても割り込み要求は発生しません。
4
IFEIE
インバウンド FIFO In-Bound FIFO Empty Interrupt Enable (初期値 0)
エンプティ割り込 1: PTSR.IBFEM ビットが 1 にセットされると割り込み要求を発生します。
みイネーブル
0: PTSR.IBFEM ビットが 1 にセットされても割り込み要求は発生しません。
3
OFOIE
アウトバウンド
FIFO オーバラン
(オーバフロー)割
り込みイネーブル
2
IFOIE
インバウンド FIFO In-Bound FIFO Overrun (overflow) Interrupt Enable (初期値 0)
オーバラン(オーバ 1: PTSR.IBFOV ビットが 1 にセットされると割り込み要求を発生します。
フロー)割り込みイ 0: PTSR.IBFOV ビットが 1 にセットされても割り込み要求を発生しません。
ネーブル
1
OFUIE
アウトバウンド
Out-Bound FIFO Underrun (underflow) Interrupt Enable (初期値 0)
FIFO アンダーラン 1: PTSR.OBFUN ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.OBFUN ビットが 1 にセットされても割り込み要求を発生しません。
(アンダーフロー)
割り込みイネーブ
ル
0
IFUIE
インバウンド FIFO In-Bound FIFO Underrun (underflow) Interrupt Enable (初期値 0)
アンダーラン(アン 1: PTSR.IBFUN ビットが 1 にセットされると割り込み要求を発生します。
ダーフロー)割り込 0: PTSR.IBFUN ビットが 1 にセットされても割り込み要求は発生しません。
みイネーブル
Out-Bound FIFO Overrun (overflow) Interrupt Enable (初期値 0)
1: PTSR.OBFOV ビットが 1 にセットされると割り込み要求を発生します。
0: PTSR.OBFOV ビットが 1 にセットされても割り込み要求は発生しません。
図 12.3.36 ターゲット割り込みマスクレジスタ (2/2)
12-42
第 12 章 PCI コントローラ (PCIC)
12.3.4.5 PCI リードリトライタグレジスタ (PCIRRT) 0xFFFE_D0A0 (+0a0)
31
16
PCIRRT
R/W
:タイプ
0x0000
:初期値
15
0
PCIRRT
ビット
ニモニック
31 : 0
PCIRRT
R/W
:タイプ
0x0000
:初期値
フィールド名
PCI リード
リトライ
タグアドレス
説 明
PCI Read Retry Tag Address (初期値 0x00000000)
リードリトライを発生させたコマンドのタグアドレスを保持します。
図 12.3.37 PCI リードリトライタグレジスタ
12-43
第 12 章 PCI コントローラ (PCIC)
12.3.4.6 PCI リードリトライタイマコマンドレジスタ (PCIRRT_CMD) 0xFFFE_D0A4 (+0a4)
31
16
0
:タイプ
:初期値
15
4
3
0
ビット
ニモニック
3:0
PCIRRT_CMD
フィールド名
PCI リード
リトライ
タイマコマンド
0
PCIRRT_CMD
R
:タイプ
0x0
:初期値
説 明
PCI Read Retry Timer Command (初期値 0x0)
リードリトライを発生させた PCI コマンドのコマンド情報を保持します。
図 12.3.38 PCI リードリトライタイマコマンドレジスタ
12-44
第 12 章 PCI コントローラ (PCIC)
12.3.4.7 PCI リードリトライディスカードタイマレジスタ (PCIRRDT) 0xFFFE_D0A8 (+0a8)
31
16
0
:タイプ
:初期値
15
0
14
0
PCIRRDT
ビット
ニモニック
14 : 0
PCIRRDT
R/W
:タイプ
0x7FFF
:初期値
フィールド名
PCI リード
リトライ
ディスカード
タイマ
説 明
PCI Read Retry Discard Timer (初期値 0x7FFF)
リトライ要求によるリードトランザクションの再実行までの有効時間 (PCICLK 数)
を設定します。アウトバウンド遅延トランザクションの始まりで、この値がロード
され、カウントダウンを開始します。バスマスタは、カウンタが 0 になるまでに遅
延トランザクションを再実行する必要があります。そうしないと、ターゲットモジ
ュールが FIFO のデータを破棄します。また同時に TSTAT レジスタの PCI リードデ
ィスカードタイマタイムアウト (PRDTO) ビットを “1” にセットします。
図 12.3.39 PCI リードリトライディスカードレジスタ
12-45
第 12 章 PCI コントローラ (PCIC)
12.3.4.8 ターゲットローカルバス OFIFO アドレスポインタ (TLBOAP) 0xFFFE_D0B8 (+0b8)
31
16
TLOAP
15
R
:タイプ
0x0000
:初期値
8
TLOAP
ビット
ニモニック
31 : 2
TLOAP
2
OFIFO
アドレスポインタ
0
0
R
:タイプ
0x0000
:初期値
フィールド名
ターゲット
ローカルバス
1
説 明
Target Local Bus Out-Bound FIFO Address Pointer (初期値 0x00000000)
ローカルバス (G-Bus) アドレスによる OFIFO のアドレスポインタです。上位アドレ
スは、ターゲットが受信した PCI コマンドに応じて、ターゲットローカルバスメモ
リマッピングアドレスレジスタ (TLBMMAR) またはターゲットローカルバス I/O マ
ッピングアドレスレジスタ (TLBIOMAR) のいずれかになります。下位アドレスは、
外部 PCI バスマスタのアドレスになります。
図 12.3.40 ターゲットローカルバス OFIFO アドレスポインタ
12-46
第 12 章 PCI コントローラ (PCIC)
12.3.4.9 ターゲットローカルバス IFIFO アドレスポインタ (TLBIAP) 0xFFFE_D0BC (+0bc)
31
16
TLIAP
R
:タイプ
0x0000
:初期値
15
2
TLIAP
ビット
ニモニック
31 : 2
TLIAP
1
0
0
R
:タイプ
0x0000
:初期値
フィールド名
説 明
ターゲット
Target Local Bus In-Bound FIFO Address Pointer (初期値 0x00000000)
ローカルバス FIFO ローカルバス (G-Bus) アドレスによる IFIFO のアドレスポインタです。上位アドレ
アドレスポインタ スは、ターゲットが受信した PCI コマンドに応じて、ターゲットローカルバスメモ
リマッピングアドレスレジスタ (TLBMMAR) またはターゲットローカルバス I/O マ
ッピングアドレスレジスタ (TLBIOMAR) のいずれかになります。下位アドレスは、
外部 PCI バスマスタのアドレスになります。
図 12.3.41 ターゲットローカルバス IFIFO アドレスポインタ
12-47
第 12 章 PCI コントローラ (PCIC)
12.3.4.10 ターゲットローカルバスメモリマッピングアドレスレジスタ
(TLBMMAR) 0xFFFE_D0C0 (+0c0)
31
16
TLMMA
R/W
:タイプ
0x0000
:初期値
15
4
TLMMA
ビット
ニモニック
31 : 4
TLMMA
0
0
R/W
:タイプ
0x000
:初期値
フィールド名
ターゲット
ローカル
バスメモリ
マッピング
アドレス
3
説 明
Target Local Bus Memory Address Mapping (初期値 0x0000000)
これは、ターゲットメモリサイクルにおけるローカルバス (G-Bus) 上のメモリ空間
を指定します。設定の有効範囲 (サイズ) は、ターゲットメモリベースアドレスサイ
ズレジスタ (MBAS) で指定します。このレジスタの値がローカルバス (G-Bus) アド
レスになり、PCI アドレスがローカルバス (G-Bus) の下位アドレスになります。
レジスタは、PCI メモリリード/ライトコマンドを受け取ると使用します。ターゲッ
トメモリベースアドレスサイズレジスタ (MBAS) により内部的にマスクされるた
め、TLMMA を設定する前に MBAS を設定してください。
図 12.3.42 ターゲットローカルバスメモリマッピングアドレスレジスタ
12-48
第 12 章 PCI コントローラ (PCIC)
12.3.4.11 ターゲットローカルバス I/O マッピングアドレスレジスタ
(TLBIOMAR) 0xFFFE_D0C4 (+0c4)
31
16
TLIOMA
R/W
:タイプ
0x0000
:初期値
15
2
TLIOMA
ビット
ニモニック
31 : 2
TLIOMA
0
0
R/W
:タイプ
0x0000
:初期値
フィールド名
ターゲット
ローカルバス
I/O マッピング
アドレス
1
説 明
Target Local Bus IO Address Mapping Address (初期値 0x00000000)
ターゲットメモリサイクルにおけるローカルバス (G-Bus) 上の I/O 空間を設定しま
す。設定の有効範囲 (サイズ)は、ターゲット I/O ベースアドレスサイズレジスタ
(IOBAS) で指定します。このレジスタの値がローカルバス (G-Bus) の上位アドレス
になり、PCI アドレスがローカルバス (G-Bus) の下位アドレスになります。
レジスタは、PCI I/O リード/ライトコマンドを受け取ると使用します。ターゲット
I/O ベースアドレスサイズレジスタ (IOBAS) により内部的にマスクされるため、
TLIOMA を設定する前に IOBAS を設定してください。
図 12.3.43 ターゲットローカルバス I/O マッピングアドレスレジスタ
12-49
第 12 章 PCI コントローラ (PCIC)
12.3.4.12 スペシャルサイクルメッセージレジスタ (SC_MSG) 0xFFFE_D0C8 (+0c8)
31
16
SCMSG
R
:タイプ
0x0000
:初期値
15
0
SCMSG
ビット
ニモニック
31 : 0
SCMSG
R
:タイプ
0x0000
:初期値
フィールド名
スペシャル
サイクル
メッセージ
説 明
Special Cycle Message (初期値 0x00000000)
このレジスタは、スペシャルサイクルコマンドがターゲットによって検知されたと
きにスペシャルサイクルメッセージを格納するためのものです。スペシャルサイク
ルメッセージをこのレジスタに格納するためには、PCI コマンドレジスタ (PCICMD)
のスペシャルサイクル認識 (SCREC) ビットを “1” に設定しなければなりません。
図 12.3.44 スペシャルサイクルメッセージレジスタ
12-50
第 12 章 PCI コントローラ (PCIC)
12.3.4.13 スペシャルサイクルバイトイネーブルレジスタ (SC_BE) 0xFFFE_D0CC (+0cc)
31
16
:タイプ
:初期値
15
4
3
0
ビット
ニモニック
3:0
SC_BE
フィールド名
スペシャル
サイクルバイト
イネーブル
0
SC_BE
R
:タイプ
0x0
:初期値
説 明
Special Cycle Byte Enable (初期値 0x0)
このレジスタは、スペシャルサイクルコマンドが検知されたときにスペシャルサイ
クルメッセージのバイトイネーブルを格納するためのものです。スペシャルサイク
ルメッセージのバイトイネーブルをこのレジスタに格納するためには、PCI コマン
ドレジスタ (PCICMD) のスペシャルサイクル認識 (SCREC) ビットを 1 に設定しな
ければなりません。
図 12.3.45 スペシャルサイクルバイトイネーブルレジスタ
12-51
第 12 章 PCI コントローラ (PCIC)
12.3.4.14 ターゲットバースト長レジスタ (TBL) 0xFFFE_D0D0 (+0d0)
31
16
0
:タイプ
:初期値
15
12
0
ビット
ニモニック
11 : 8
TBL_IFIFO
11
8
7
4
3
0
2
0
TBL_IFIFO
TBL_OFIFO
R/W
R/W
R/W
:タイプ
0x0
0x0
000
:初期値
フィールド名
IFIFO
ローカル
バスバースト長
PB_OFIFO
説 明
IFIFO local bus Burst Length (初期値 0x0)
ローカルバスにデータをライトするために IFIFO にデータが何 D-ワード必要かを指
定します。ビット 11 は、バースト転送モードをイネーブルにするために使用します。
0000: 1D-ワード。1D-ワード以上のデータが IFIFO にあると、ただちにローカル
バスに 1D-ワード分のデータをライトします。
以下の設定では、高速シングルアクセスをくり返すことにより複数のワードのライ
トを行います。
0001: 2D-ワード。2D-ワード以上のデータが IFIFO にあると、ただちにローカル
バスに 2D-ワード分のデータをライトします。
0010: 4D-ワード。4D-ワード以上のデータが IFIFO にあると、ただちにローカル
バスに 4D-ワード分のデータをライトします。
0011: 8D-ワード。8D-ワード以上のデータが IFIFO にあると、ただちにローカル
バス 8D-ワード分のデータをライトします。
01XX: 16D-ワード。16D-ワード以上のデータが IFIFO にあると、ただちにローカ
ルバス 16D-ワード分のデータをライトします。
以下の設定では、バーストライトを実行します。
1X00: 4D-ワード。4D-ワード以上のデータが IFIFO にあると、ただちにローカル
バスに 4D-ワード分のデータをバーストライトします。
1X01: 8D-ワード。8D-ワード以上のデータが IFIFO にあると、ただちにローカル
バス 8D-ワード分のデータをバーストライトします。
1X1X: 16D-ワード。16D-ワード以上のデータが IFIFO にあると、ただちにローカ
ルバス 16D-ワード分のデータ以上のデータがバーストライトします。
(注 1) IFIFO は空きがある限り PCI マスタからデータを受けとります。IFIFO が一杯になるとディスコネ
クトを PCI マスタに要求します。その後は、IFIFO に空きができるまで PCI マスタに対してリトラ
イを要求します。
(注 2) IFIFO に書き込まれたワード数が設定したバースト長サイズに満たないで PCI ライトサイクルが終
了した場合には、PCI ライトサイクル終了時点で 32 ビットのシングルライト動作を IFIFO に書き
込まれたワード数分実行して、IFIFO 中のデータをローカルメモリにライトします。このため IFIFO
にデータが残ったままということは起りません。
図 12.3.46 ターゲットバースト長レジスタ (1/2)
12-52
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
7:4
TBL_OFIFO
OFIFO
ローカル
バスバースト長
OFIFO Local Bus Burst Length (初期値 0x0)
ローカルバスから D-ワードデータをリードするために OFIFO に何 D-ワードの空が
必要かを指定します。プリフェッチ不可能な PCI リードコマンド (プリフェッチ不
可能なメモリリードおよび I/O リード PCI コマンド) では、自動的に 000b を使用し
ます。ビット 7 は、バースト転送モードをイネーブルにするために使用します。
以下の設定では、高速シングルアクセスをくり返すことにより複数ワードのリード
を行います。
000X: 2D-ワード。2D-ワード以上の空が OFIFO 内にあると、ただちに 2D-ワード
分のデータをローカルバスからリードします。
0010: 4D-ワード。4D-ワード以上の空が OFIFO 内にあると、ただちに 4D-ワード
分のデータをローカルバスからリードします。
0011: 8D-ワード。8D-ワード以上の空が OFIFO 内にあると、ただちに 8D-ワード
分のデータをローカルバスからリードします。
01XX: 16D-ワード。16D-ワード以上の空が OFIFO 内にあると、ただちに 16D-ワ
ード分のデータをローカルバスからリードします。
以下の設定では、バーストリードを実行します。
1X00: 4D-ワード。4D-ワード以上の空が OFIFO 内にあると、ただちに 4D-ワード
分のデータをローカルバスからバーストリードします。
1X01: 8D-ワード。8D-ワード以上の空が OFIFO 内にあると、ただちに 8D-ワード
分のデータをローカルバスからバーストリードします。
1X1X: 16D-ワード。16D-ワード以上の空が OFIFO 内にあると、ただちに 16D-ワ
ード分のデータをローカルバスからバーストリードします。
2:0
PB_OFIFO
OFIFO
PCI バス
バースト長
OFIFO PCI Bus Burst Length (初期値 0x0)
PCI バスにデータを出力するために OFIFO にデータが何 D-ワード必要かを指定し
ます。
000:
1D-ワード。1D-ワード以上のデータが OFIFO 内にあると、ただちに PCI
バスに 1D-ワード分のデータを出力します。
001:
2D-ワード。2D-ワード以上のデータが OFIFO 内にあると、ただちに PCI
バスに 2D-ワード分のデータを出力します。
100:
4D-ワード。4D-ワード以上のデータが OFIFO 内にあると、ただちに PCI
バスに 4D-ワード分のデータを出力します。
101:
8D-ワード。8D-ワード以上のデータが OFIFO 内にあると、ただちに PCI
バスに 8D-ワード分のデータを出力します。
11X:
16D-ワード。16D-ワード以上のデータが OFIFO 内にあると、ただちに PCI
バスに 16D-ワード分のデータを出力します。
図 12.3.47 ターゲットバースト長レジスタ (2/2)
12-53
第 12 章 PCI コントローラ (PCIC)
12.3.4.15 パワーマネージメントレジスタ (PWMNGR) 0xFFFE_D0E0 (+0e0)
31
27
PMCPME
26
R
0
0
0
25
24
0
0
31 : 27
PMCPME
26
20
0
19
18
R
R
R
0
1
0
16
PMCV
PMCPMEC
0
8
ニモニック
21
PMCDSI
R
15
ビット
22
0
PMCD2 PMCD1
:タイプ
R
0
0
7
1
:初期値
0
PMCNP
PMCID
R
R
:タイプ
0x00
0x01
:初期値
フィールド名
説 明
パワーマネージ
メントイベント
Power Management Event (初期値 00000)
TX3927 ではサポートしていません。
PMCD2
D2 ステート
D2 State (初期値 0)
TX3927 ではサポートしていません。
25
PMCD1
D1 ステート
D1 State (初期値 0)
TX3927 ではサポートしていません。
21
PMCDSI
デバイス
スペシフィック
イニシャライ
ゼーション
Device Specific Initialization (初期値 1)
PCIC の初期化が必要かどうか示します。
TX3927 では、PCIC を初期化すると PCIC は D0 uninitialized ステートになりますの
で、かならず PCIC を初期設定してください。
19
PMCPMEC
パワーマネージ
メントイベント
クロック
Power Management Event Clock (初期値 0)
TX3927 では、パワーマネージメントイベント信号 (PME#) を生成するための PCI
クロックが必要ないことを示します。
18 : 16
PMCV
バージョン
Version (初期値 001)
PCI パワーマネージメント仕様のバージョン 1.1 に準拠しています。
15 : 8
PMCNP
ネクストポインタ
Next Pointer (初期値 0x00)
ケイパビリティリスト中の次のアイテムを示すポインタです。
TX3927 では、これ以上ありませんので “0x00” です。
7:0
PMCID
ID
ID (初期値 0x01)
TX3927 では、ケイパビリティリストが PCI パワーマネージメントであることを示
します。
図 12.3.48 パワーマネージメントレジスタ
12-54
第 12 章 PCI コントローラ (PCIC)
12.3.4.16 パワーマネージメントサポートレジスタ (PWMNGSR) 0xFFFE_D0E4 (+0e4)
31
24
23
16
PWRD
15
PMES
14
13
DSCL
R
R
0
R
:タイプ
0x00
:初期値
DSLCT
8
PMEE
R
R
0
0x0
0
ビット
ニモニック
フィールド名
31 : 24
PWRD
パワーデータ
Power Data (初期値 0x00)
このレジスタ中の DSCL ビットと DSLCT ビットの値を反映します。TX3927 ではサ
ポートしていません。
15
PMES
PME ステータス
PME Status (初期値 0)
TX3927 では D3cold での PME 信号をサポートしていません。
14 : 13
DSCL
データスケール
Data Scale (初期値 00)
PWRD フィールドに示されるスケーリングファクタを示します。
TX3927 ではサポートしていません。
12 : 9
DSLCT
データセレクト
Data Select (初期値 0x0)
PWRD フィールドに示されるデータを示します。
TX3927 ではサポートしていません。
8
PMEE
PME イネーブル
PME Enable (初期値 0)
TX3927 では D3cold での PME 信号をサポートしていません。
1:0
PWRST
パワーステート
Power State (初期値 00)
現在のパワーステートを示します。
ここに値を書き込むことでパワーステートの状態を変えることができます。
00: D0 (変化なし)
01: D1 (設定禁止)
10: D2 (設定禁止)
0
0
12
9
7
2
0
1
0
PWRST
:タイプ
R/W
0
0
:初期値
説 明
11: D3hot
図 12.3.49 パワーマネージメントサポートレジスタ
12-55
第 12 章 PCI コントローラ (PCIC)
第12章
12.3
PCI コントローラ (PCIC)
12.3.5
PCI バスアービタ/パークマスタレジスタ
(注) 外部アービタモード (PCIXARB ブートコンフィグレーション信号を “0” に設定したとき)
では、これらのレジスタは使用されません。
12.3.5.1 リクエストトレースレジスタ (REQ_TRACE) 0xFFFE_D100 (+100)
31
0
15
0
30
28
ReqAP
27
0
26
24
ReqBP
23
0
22
20
ReqCP
19
0
18
16
ReqDP
R/W
R/W
R/W
R/W
:タイプ
111
110
101
100
:初期値
14
12
ReqWP
11
0
10
8
ReqXP
7
0
6
4
ReqYP
3
0
2
0
ReqZP
R/W
R/W
R/W
R/W
:タイプ
011
010
001
000
:初期値
このレジスタは、入力要求ポート (PCIC および REQ[3 : 0]) が内部 PCI バスアービタ
要求ポート (マスタ A∼D, W∼Z) にどのように接続されるかを指定します。このレジスタ
(REQ_TRACE) によって入力要求ポートの優先順位を指定します。対応する GNT トレー
スは自動的に設定されます。このレジスタが変更されたときは、かならず BM レジスタ
に “0” にライトしなければなりません。
ビット
ニモニック
フィールド名
説 明
30 : 28
ReqAP
リクエスト A
ポート
Request A Port (初期値 111)
内部 PCI バスアービタ要求 A ポート (マスタ A) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ A とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ A とします。
010: REQ*[2] をマスタ A とします。
001: REQ*[1] をマスタ A とします。
000: REQ*[0] をマスタ A とします。
26 : 24
ReqBP
リクエスト B
ポート
Request B Port (初期値 110)
内部 PCI バスアービタ要求 B ポート (マスタ B) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ B とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ B とします。
010: REQ*[2] をマスタ B とします。
001: REQ*[1] をマスタ B とします。
000: REQ*[0] をマスタ B とします。
図 12.3.50 リクエストトレースレジスタ (1/3)
12-56
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
22 : 20
ReqCP
リクエスト C
ポート
Request C Port (初期値 101)
内部 PCI バスアービタ要求 C ポート (マスタ C) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ C とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ C とします。
010: REQ*[2] をマスタ C とします。
001: REQ*[1] をマスタ C とします。
000: REQ*[0] をマスタ C とします。
18 : 16
ReqDP
リクエスト D
ポート
Request D Port (初期値 100)
内部 PCI バスアービタ要求 D ポート (マスタ D) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ D とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ D とします。
010: REQ*[2] をマスタ D とします。
001: REQ*[1] をマスタ D とします。
000: REQ*[0] をマスタ D とします。
14 : 12
ReqWP
リクエスト W
ポート
Request W Port (初期値 011)
内部 PCI バスアービタ要求 W ポート (マスタ W) に接続する PCI バスマスタを設定
します。
111: PCIC をマスタ W とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ W とします。
010: REQ*[2] をマスタ W とします。
001: REQ*[1] をマスタ W とします。
000: REQ*[0] をマスタ W とします。
10 : 8
ReqXP
リクエスト X
ポート
Request X Port (初期値 010)
内部 PCI バスアービタ要求 X ポート (ポート X) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ X とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ X とします。
010: REQ*[2] をマスタ X とします。
001: REQ*[1] をマスタ X とします。
000: REQ*[0] をマスタ X とします。
6:4
ReqYP
リクエスト Y
ポート
Request Y Port (初期値 001)
内部 PCI バスアービタ要求 Y ポート (ポート Y) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ Y とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ Y とします。
010: REQ*[2] をマスタ Y とします。
001: REQ*[1] をマスタ Y とします。
000: REQ*[0] をマスタ Y とします。
図 12.3.51 リクエストトレースレジスタ (2/3)
12-57
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
2:0
ReqZP
フィールド名
リクエスト Z
ポート
説 明
Request Z Port (初期値 000)
内部 PCI バスアービタ要求 Z ポート (ポート Z) に接続する PCI バスマスタを設定し
ます。
111: PCIC をマスタ Z とします。
110: 設定禁止
101: 設定禁止
100: 設定禁止
011: REQ*[3] をマスタ Z とします。
010: REQ*[2] をマスタ Z とします。
001: REQ*[1] をマスタ Z とします。
000: REQ*[0] をマスタ Z とします。
図 12.3.52 リクエストトレースレジスタ (3/3)
12-58
第 12 章 PCI コントローラ (PCIC)
12.3.5.2 PCI バスアービタ/パークマスタコントロールレジスタ (PBAPMC) 0xFFFE_D104 (+104)
31
16
0
:タイプ
:初期値
15
3
0
ビット
ニモニック
2
RPBA
1
0
フィールド名
2
1
0
RPBA PBAEN BMCEN
R/W
R/W
0
0
R/W :タイプ
:初期値
0
説 明
リセット PCI
バスアービタ
Reset PCI Bus Arbiter (初期値 0)
PCI バスアービタ (RPBA) をリセットします。
1: PCI バスアービタのラウンドロビン機能はリセット中です。
0: PCI バスアービタのラウンドロビン機能をリセット中ではありません。
PBAEN
PCI バスアービタ
イネーブル
PCI Bus Arbiter Enable (初期値 0)
バスアービタのイネーブルビットです。リセット後、PCI アービタに対する外部 PCI
バスリクエストは、このビットが “1” にセットされるまで受け付けられません。リ
セット後のデフォルトのパーキングマスタは PCIC です。
1: PCI バスアービタをイネーブル
0: PCI バスアービタをディセーブル
BMCEN
ブロークン
マスタチェック
イネーブル
Broken Master Check Enable (初期値 0)
PCI バスがアイドル状態になって、PCI バスマスタがバスを要求して許可されると、
このマスタは FRAME*信号を 16 PCI クロック以内にアサートしてトランザクショ
ンを開始しなければなりません。そうでないと、PCIC の PCI バスアービタは、そ
れをブロークン PCI バスマスタとして処理します。このブロークンマスタチェック
イネーブルビットが設定されていると、ブロークンマスタレジスタ (BM) のブロー
クンマスタに対応するビットが “1” にセットされます。
1: ブロークン PCI バスマスタチェックをイネーブル
0: ブロークン PCI バスマスタチェックをディセーブル
図 12.3.53 PCI バスアービタ/パークマスタコントロールレジスタ
12-59
第 12 章 PCI コントローラ (PCIC)
12.3.5.3 PCI バスアービタ/パークマスタステータスレジスタ (PBAPMS) 0xFFFE_D108 (+108)
31
16
0
:タイプ
:初期値
15
1
0
0
BMD
R/WC :タイプ
:初期値
0
ビット
ニモニック
フィールド名
説 明
0
BMD
ブロークンマスタ
検出
Broken Master Detected (初期値 0)
このビットは、ブロークンマスタが検出されたことを示します。ブロークンマスタ
レジスタ (BM) のどれか 1 ビットでも “1” に設定されると、このビットが “1” 設定さ
れます。
1: BMR.BM の少なくともいずれか 1 ビットが “1” にセットされたことを示します。
0: BMR.BM のいずれのビットも “1” にセットされていないことを示します。
図 12.3.54 PCI バスアービタ/パークマスタステータスレジスタ
12-60
第 12 章 PCI コントローラ (PCIC)
12.3.5.4 PCI バスアービタ/パークマスタ割り込みマスクレジスタ (PBAPMIM)
0xFFFE_D10C (+10c)
31
16
0
:タイプ
:初期値
15
1
0
0
BMDI
R/WC :タイプ
:初期値
0
BMDI ビットを “1” にセットすると、PCI バスアービタ/パークマスタステータスレジ
スタ (PBAPMS) のブロークンマスタ検出ビット (BMD) が “1” にセットされたときに割
り込み要求が発生します。
ビット
ニモニック
フィールド名
0
BMDI
ブロークンマスタ
検出割り込み
イネーブル
説 明
Broken Master Detected Interrupt Enable (初期値 0)
図 12.3.55 PCI バスアービタ/パークマスタ割り込みマスクレジスタ
12-61
第 12 章 PCI コントローラ (PCIC)
12.3.5.5 ブロークンマスタレジスタ (BM) 0xFFFE_D110 (+110)
このレジスタは、現在のブロークンマスタステータスを示します。このレジスタは、
PCI バスアービタ/パークマスタコントロールレジスタ (PBAPMC) 内のブロークンマス
タチェックイネーブル (BMCEN) ビットが “1” にセットされていると、ブロークン PCI
マスタに対応するビットを “1” にセットします。このレジスタ内の各ビットは、PCI マス
タを示します。ブロークンマスタが PCIC アービタによって認識されると、それ以降アー
ビトレーションループから取りのぞかれます。PCI バスアービタ/パークマスタコントロ
BM レジスタのビットに “1”
ールレジスタ (PBAPMC) BMCEN ビットの値にかかわらず、
を強制的にライトすると、アービトレーションループから PCI バスが削除されてしまい
ますので注意してください。このレジスタは、REQ_TRACE レジスタが変更されたとき
はかならずクリアしなければなりません。
31
16
0
:タイプ
:初期値
15
8
0
ビット
7:0
(注)
ニモニック
フィールド名
BM [7 : 0]
ブロークンマスタ
7
6
5
4
3
2
1
0
BM [7] BM [6] BM [5] BM [4] BM [3] BM [2] BM [1] BM [0]
R/W
:タイプ
0x00
:初期値
説 明
Broken Master (初期値 0x00)
各 PCI バスマスタがブロークンマスタになっているか否かを示します。
BM[7 : 0] はマスタ A∼Z に対応しています。
1: ブロークンマスタとして認識されました。
0: ブロークンマスタとして認識されていません。
0FFh をライトすると、PCI バスアービタがフリーズします。
図 12.3.56 ブロークンマスタレジスタ
12-62
第 12 章 PCI コントローラ (PCIC)
12.3.5.6 カレント PCI バスリクエストステータスレジスタ (CPCIBRS) 0xFFFE_D114 (+114)
31
16
0
:タイプ
:初期値
15
8
7
0
0
CPCIBRS
R/W
:タイプ
0x00
:初期値
ビット
ニモニック
フィールド名
説 明
7:0
CPCIBRS
カレント PCI バス
リクエスト
ステータス
Current PCI Bus Request Status (初期値 0x00)
このレジスタは、現在の PCI バスリクエスト入力信号 (PCIC および REQ* [3 : 0]) の
ステータスを示します。CPCIBRS [7] が PCIC に、CPCIBRS [3 : 0] が REQ*[3 : 0] に
対応します。
図 12.3.57 カレント PCI バスリクエストステータスレジスタ
12-63
第 12 章 PCI コントローラ (PCIC)
12.3.5.7 カレント PCI バスグラントステータスレジスタ (CPCIBGS) 0xFFFE_D118 (+118)
31
16
0
:タイプ
:初期値
15
8
7
0
ビット
ニモニック
7:0
CPCIBGS
フィールド名
カレント PCI
グラント
ステータス
0
CPCIBGS
R/W
:タイプ
0x80
:初期値
説 明
Current PCI Bus Grant Status (初期値 0x80)
このレジスタは、現在の PCI バスグラント出力信号 (PCIC および GNT* [3 : 0]) のス
テータスを示します。CPCIBGS [7] が PCIC に、CPCIBGS [3 : 0] が GNT*[3 : 0] に
対応します。
図 12.3.58 カレント PCI バスグラントステータスレジスタ
12-64
第 12 章 PCI コントローラ (PCIC)
12.3.5.8 PCI バスアービタカレントステートレジスタ (PBACS) 0xFFFE_D11C (+11c)
31
16
0
:タイプ
:初期値
15
8
0
ビット
ニモニック
7
ObPSM
4:0
CPAS
7
ObPSM
カレント PCI バス
アービタステート
5
4
0
3
2
CPAS
1
0
R/W
R
:タイプ
0
0x03
:初期値
フィールド名
オブサーブ
PCI ステート
マシン
6
説 明
Observe PCI State Machine (初期値 0)
どのステートマシンを観察するかを指定します。
1: レベル 1 のステートマシンを観察します。
0: レベル 2 のステートマシンを観察します。
Current PCI Bus Arbiter State. (初期値 0x03)
ObPSM で設定したステートマシンを表示します。
エージェント/グラント A∼W、およびレベル 2 の説明は図 12.3.50 および 12.4.3 を
参照してください。
以下に ObPSM=1 の場の状態を示します。ObPSM=0 のときは、A→W、B→X、C
→Y、D→Z、レベル 2→該当なし、となります。
ObPSM=1 のとき:
0x00: PCI エージェント A にバス権を譲渡する準備ステートです。
0x01: PCI バス権を誰かが所有しているとき PCI エージェント A にグラント A を与
えるステートです。
0x02: PCI バス権を誰も所有していないとき PCI エージェント A にグラント A を与
えるステートです。
0x03: グラント A を与えられたエージェントはこのステートに存在しています。バ
ス権があると PCI バスアービタは他のエージェントにバス権を譲渡する準備
をします。
0x04: PCI エージェント B にバス権を譲渡する準備ステートです。
0x05: PCI バス権を誰かが所有しているとき PCI エージェント B にグラント B を与
えるステートです。
0x06: PCI バス権を誰も所有していないとき PCI エージェント B にグラント B を与
えるステートです。
0x07: グラント B を与えられたエージェントはこのステートに存在しています。バ
ス権があると PCI バスアービタは他のエージェントにバス権を譲渡する準備
をします。
0x08: PCI エージェント C にバス権を譲渡する準備ステートです。
0x09: PCI バス権を誰かが所有しているとき PCI エージェント C にグラント C を与
えるステートです。
0x0A: PCI バス権を誰も所有していないとき PCI エージェント C にグラント C を与
えるステートです。
0x0B: グラント C を与えられたエージェントはこのステートに存在しています。バ
ス権があると PCI バスアービタは他のエージェントにバス権を譲渡する準備
をします。
0x0C: PCI エージェント D にバス権を譲渡する準備ステートです。
0x0D: PCI バス権を誰かが所有しているとき PCI エージェント D にグラント D を与
えるステートです。
0x0E: PCI バス権を誰も所有していないとき PCI エージェント D にグラント D を与
えるステートです。
0x0F: グラント D を与えられたエージェントはこのステートに存在しています。バ
ス権があると PCI バスアービタは他のエージェントにバス権を譲渡する準備
をします。
図 12.3.59 PCI バスアービタカレントステートレジスタ (1/2)
12-65
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
0x10: PCI エージェントレベル 2 にバス権を譲渡する準備ステートです。
0x11: PCI バス権を誰かが所有しているとき PCI エージェントレベル 2 にグラント
レベル 2 を与えるステートです。
0x12: PCI バス権を誰も所有していないとき PCI エージェントレベル 2 にグラント
レベル 2 を与えるステートです。
0x13: グラントレベル 2 を与えられたエージェントはこのステートに存在していま
す。バス権があると PCI バスアービタは他のエージェントにバス権を譲渡す
る準備をします。
図 12.3.60 PCI バスアービタカレントステートレジスタ (2/2)
12-66
第 12 章 PCI コントローラ (PCIC)
12.3.6
ローカルバススペシャルレジスタ
ローカルバススペシャルレジスタは、特殊な機能を実行するため、PCI コンフィグレーショ
ン空間内には常駐していません。
12.3.6.1 ターゲット I/O ベースアドレスサイズレジスタ (IOBAS) 0xFFFE_D120 (+120)
31
16
IOBAS
R/W
:タイプ
0xFF00
:初期値
15
2
IOBAS
ビット
ニモニック
31 : 2
IOBAS
0
0
R/W
:タイプ
0x0000
:初期値
フィールド名
ターゲット I/O
ベースアドレス
サイズ
1
説 明
Target IO Base Address Size (初期値 0xFF000000)
このレジスタは、ターゲット I/O ベースアドレス (IOBAS) およびターゲットローカ
ルバス I/O マッピングアドレスレジスタ (TLBIOMAR) の有効範囲 (サイズ) を定義し
ます。値が “0” のときは、ターゲット I/O ベースアドレス (IOBA) が使用されていな
い (ディセーブル) ことを示します。リセット後のデフォルト値は、16 M バイト
(FF000000h) です。リーガルな値は、IOBA にすべて “1” をライトした後でそれをリ
ードしたときに外部 PCI バスマスタが受け取る値と同じです。このレジスタは、
TLBMMAR および MBA レジスタを内部的にマスクするため、それに先立って設定
してください。また、サイズは 2 の累乗でなくてはなりません。設定されたサイズ
が 2 の累乗でないときは、ローカルバスステータスレジスタ (LBSTAT) 内のイリー
ガルアドレスサイズステータスビット (IAS) が “1” にセットされます。このとき対応
する割り込みマスクビット (LBOIM.IASIE) が設定されていると割り込みが発生しま
す。
00000000h: IOBA がディセーブル
FFFFFFFFC: 4 バイト
FFFFFFFF8: 8 バイト
FFFFFFF0h: 16 バイト
FFFFFFE0h: 32 バイト
FFFFFFC0h: 64 バイト
FFFFFF80h: 128 バイト
FFFFFF00h: 256 バイト
:
FE000000h: 32 M バイト
FC000000h: 64 M バイト
F8000000h: 128 M バイト
F0000000h: 256 M バイト
E0000000h: 512 M バイト
C0000000h: 1 G バイト
80000000h: 2 G バイト
図 12.3.61 ターゲット I/O ベースアドレスサイズレジスタ
12-67
第 12 章 PCI コントローラ (PCIC)
12.3.6.2 ターゲットメモリベースアドレスサイズレジスタ (MBAS) 0xFFFE_D124 (+124)
31
16
MBA
R/W
:タイプ
0x8000
:初期値
15
4
3
MBA
0
0
R/W
:タイプ
0x000
:初期値
ビット
ニモニック
フィールド名
説 明
31 : 4
MBA
ターゲットメモリ
ベースアドレス
サイズ
Target Memory Base Address Size (初期値 0x80000000)
このレジスタは、ターゲットメモリベースアドレス (MBA) およびターゲットローカ
ルバスメモリマッピングアドレスレジスタ (TLBMMAR) の有効範囲 (サイズ) を定義
します。値が “0” のときは、MBA が使用されていない (ディセーブル) ことを示しま
す。リセット後のデフォルト値は、2 G バイト (80000000h) です。リーガルな値は、
MBA にすべて “1” をライトした後でそれをリードしたときに外部 PCI バスマスタが
受け取る値と同じです。このレジスタは、TLBMMAR および MBA レジスタを内部
的にマスクするため、それに先立って設定してください。また、サイズは 2 の累乗
でなくてはなりません。設定されたサイズが 2 の累乗でないときは、ローカルバス
ステータスレジスタ (LBSTAT) 内のイリーガルアドレスサイズステータスビット
(IAS) が設定されます。このとき対応する割り込みマスクビット (LBIM.IASIE) が設
定されていると割り込みが発生します。
例:
00000000h: MBA がディセーブルです。
FFFFFFF0h: 16 バイト
FFFFFFE0h: 32 バイト
FFFFFFC0h: 64 バイト
FFFFFF80h: 128 バイト
FFFFFF00h: 256 バイト
:
FE000000h: 32 M バイト
FC000000h: 64 M バイト
F8000000h: 128 M バイト
F0000000h: 256 M バイト
E0000000h: 512 M バイト
C0000000h: 1 G バイト
80000000h: 2 G バイト
図 12.3.62 ターゲットメモリベースアドレスサイズレジスタ
12-68
第 12 章 PCI コントローラ (PCIC)
12.3.6.3 ローカルバスステータスレジスタ (LBSTAT) 0xFFFE_D12C (+12c)
LBSTAT レジスタ内の任意のビットが、“1” にセットされ、かつローカルバス割り込み
マスクレジスタ (LBIM) の対応するビットも “1” に設定されていた場合に TX3927 の
CPU に対する割り込みが発生します。
31
16
0
:タイプ
:初期値
15
6
0
5
4
3
2
PEROc SEROc GEROc IAS
1
RstOc
R/WC R/WC R/WC R/WC R/WC
0
フィールド名
0
0
0
1
0
1
:タイプ
:初期値
ビット
ニモニック
説 明
5
PEROc
パリティエラー
発生
PERR* occurred. (初期値 0)
このビットは、PCIC もしくは外部エージェントが PERR*をアサートすると設定さ
れます。
1: PERR*がアサートされました。
0: PERR*はアサートされていません。
4
SEROc
システムエラー
発生
SERR* occurred. (初期値 0)
このビットは、PCIC もしくは外部エージェントが SERR*をアサートすると設定さ
れます。
1: SERR*がアサートされました。
0: SERR*はアサートされていません。
3
GEROc
G バスエラー発生
G-Bus Error Occurred. (初期値 0)
G-Bus マスタであるときに G-Bus でバスエラーが発生したことを示します。
2
IAS
イリーガル
アドレスサイズ
Illegal Address Size. (初期値 0)
このビットは、不正な IOBAS、MBAS、IOMAS、MMAS サイズが発見されたときに
設定されます。
1
RstOc
リセット発生
RESET occurred (初期値 1)
PCI が初期化されたことを示します。
図 12.3.63 ローカルバスステータスレジスタ
12-69
第 12 章 PCI コントローラ (PCIC)
12.3.6.4 ローカルバスコントロールレジスタ (LBC) 0xFFFE_D128 (+128)
31
16
0
:タイプ
:初期値
15
0
14
13
IBSE TIBSE
TMFBSE
12
11
HRst
10
9
8
7
6
5
4
3
SRst EPCADMSDSE CRR ILMDE ILIDE TPIIC DDRAD
2
0
0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
:タイプ
0
0
0
0
0
0
0
0
0
0
0
0
:初期値
ビット
ニモニック
フィールド名
説 明
14
IBSE
イニシエータ
バイトスワップ
イネーブル
Initiator Byte Swap Enable (初期値 0)
イニシエータ時に PCI バス上のデータをバイトスワップするかどうかを指定しま
す。メモリアクセス、I/O アクセス、コンフィグレーションアクセス、割り込みアク
ノリッジ、スペシャルサイクルのすべてに適用されます。
0: イニシエータ時にはバイトスワップしない。
1: イニシエータ時にバイトスワップする。
13
TIBSE
ターゲット I/O
アクセス時
バイトスワップ
イネーブル
Target I/O Byte Swap Enable (初期値 0)
ターゲット I/O アクセス時に PCI バス上のデータをバイトスワップするかどうかを
指定します。
0: ターゲット I/O アクセス時にはバイトスワップしない。
1: ターゲット I/O アクセス時にバイトスワップする。
12
TMFBSE
ターゲットメモリ
フルエリア
バイトスワップ
イネーブル
Target Memory Full area Byte Swap Enable (初期値 0)
このレジスタの MSDSE ビットを “1” にセットすることでターゲットメモリ時に
PCI バス上のデータをバイトスワップすることができます。
このビットは、そのときのバイトスワップ領域を指定します。
0: 指定したターゲットメモリ空間の上位アドレス側半分の領域だけでバイトスワッ
プされます。
例: ターゲットメモリベースアドレスサイズレジスタ (MBAS) が 0x80000000 (2 G
バイト) に設定され、この MSDSE ビットが “1” であると仮定します。AD [30]
= “1” のときは、アドレス空間が上位の 1 G バイトですのでデータがスワップさ
れます。AD [30] = “0” のときは、アドレス空間が下位の 1 G バイトですのでデー
タはスワップされません。
下位 2G アドレス空間の場合
上位 2G アドレス空間の場合
0x7FFF_FFFF
0xFFFF_FFFF
スワップ領域
0x4000_0000
0x3FFF_FFFF
0xC000_0000
0xBFFF_FFFF
ノンスワップ領域
0x0000_0000
0x8000_0000
1: 指定したターゲットメモリ空間の領域でバイトスワップされます。
図 12.3.64 ローカルバスコントロールレジスタ (1/3)
12-70
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
11
HRst
ハードリセット
Hard Reset (初期値 0)
このリセットの効果は、ハードリセットおよびリセットと同じです。このビットに
“1” をライトすると、16 PCI クロック幅のリセット信号が生成されリセットされま
す。その後このビットは自動的に “0” になります。
リセットがいつ終了するかを調べるためにこのビットをポーリングすることはでき
ません。リセット進行中にこのレジスタをリードしようとすると、ローカルバスエ
ラーが発生します。
10
SRst
ソフトリセット
Soft Reset (初期値 0)
このビットに “1” を書き込むことにより PCI を初期化します。ソフトリセットは、
PCI コンフィグレーションヘッダ領域レジスタや R/WC アクセス属性を持つすべて
のステータスレジスタのリセットは行いません。
9
EPCAD
外部 PCI コンフィ
グレーション
アクセス
ディセーブル
External PCI Configuration Access Disable (初期値 0)
1: 外部 PCI コンフィグレーションアクセスをディセーブル
(主にシステムホスト-PCI ブリッジアプリケーション用)
0: 外部 PCI バスマスタがコンフィグレーションレジスタにアクセス可能
8
MSDSE
メモリ空間
ダイナミック
スワップ
イネーブル
Memory Space Dynamic Swap Enable (初期値 0)
1: PCI メモリリード/ライトコマンドのダイナミックワードスワッピングをイネー
ブル
(スワップできる領域は TMFBSE ビットで指定します。)
バイトスワッピングの仕組みを以下に示します。
LITTLE ENDIAN バス
BIG ENDIAN バス
バイト 0 ビット 7 : 0
バイト 1 ビット 15 : 8
<-->
n
o
<-->
h
ビット 31 : 24
ビット 23 : 16
バイト 2 ビット 23 : 16
h
<-->
o
ビット 15 : 8
バイト 3 ビット 31 : 24
n
バイト 2
<-->
J
ビット 7 : 0
バイト 3
J
バイト 0
バイト 1
入力ワードが “John” であると、出力ワードは “nhoJ” になります。
0: ダイナミックワードスワッピングがディセーブル
(何もスワップされません。)
7
CRR
コンフィグレーシ
ョンレジスタ
レディ
Configuration Registers Ready for Access (初期値 0)
1: コンフィグレーションレジスタはアクセス可能。外部 PCI バスマスタは、ターゲ
ットコンフィグレーションレジスタにアクセスすることができます。
0: コンフィグレーションレジスタはアクセス不可。外部 PCI バスマスタがターゲッ
トコンフィグレーションレジスタにアクセスをしようとすると、PCIC はターゲ
ットリトライ終了を実行します。ソフトウエアがこのビットを 1 に設定すると、
コンフィグレーションレジスタアクセスが可能になります。
図 12.3.65 ローカルバスコントロールレジスタ (2/3)
12-71
第 12 章 PCI コントローラ (PCIC)
ビット
ニモニック
フィールド名
説 明
6
ILMDE
イニシエータ
ローカルバス
メモリアドレス
空間デコード
イネーブル
Initiator Local Bus Memory Address Space Decoder Enable (初期値 0)
G-Bus 上のアドレスを IPBMMAR に設定された値と比較するかどうかを指定しま
す。このビットをイニシエータメモリマッピングアドレスサイズレジスタ (MMAS)
とともに使用します。このビットがイネーブルになると、G-Bus 上のアドレスと
IPBMMAR に設定された値を比較します。一致すると、イニシエータは PCI メモリ
リード/ライトオペレーションを発生します。
1: PCIC イニシエータローカルバスメモリアドレスデコーダをイネーブル
0: PCIC イニシエータローカルバスメモリアドレスデコーダをディセーブル
(オペレーションは発生しません。)
5
ILIDE
イニシエータ
ローカルバス I/O
アドレス空間
デコード
イネーブル
Initiator Local Bus I/O Address Space Decoder Enable (初期値 0)
G-Bus 上のアドレスを IPBIOMAR に設定された値と比較するかどうかを指定しま
す。このビットをイニシエータ I/O マッピングアドレスサイズレジスタ (IOMAS) と
ともに使用します。このビットがイネーブルになると、G-Bus 上のアドレスと
IPBIOMAR に設定された値とを比較します。一致すると、イニシエータは PCI I/O
リード/ライトオペレーションを発生します。
1: イニシエータローカルバス I/O アドレスデコーダをイネーブル
0: イニシエータローカルバス I/O アドレスデコーダをディセーブル
(オペレーションは発生しません。)
4
TPIIC
テスト
Test (初期値 0)
テスト用です。“0” に固定しておいてください。
3
DDRAD
デバイス依存領域
アクセス
ディセーブル
Device Dependent Region Access Disable (初期値 0)
外部 PCI バスバスタが、PCI コンフィグレーション空間中の TX3927 のローカル側
の設定を行うレジスタ (40h∼dfh, e8h∼ffh) にアクセスできるかどうかを指定します。
このビットは LBC[9]が “1” のときのみ有効です。
0: 外部 PCI バスマスタは PCI コンフィグレーション空間中の TX3927 のローカル側
の設定を行うレジスタ (40h∼dfh, e8h∼ffh) にアクセス可能
1: 外部 PCI バスマスタは PCI コンフィグレーション空間中の TX3927 のローカル側
の設定を行うレジスタ (40h∼dfh, e8h∼ffh) にアクセス不可能
このとき上記のアドレスにあるレジスタをリードするとデバイス ID レジスタの
値が読めます。またライトは無視されます。
図 12.3.66 ローカルバスコントロールレジスタ (3/3)
12-72
第 12 章 PCI コントローラ (PCIC)
12.3.6.5 ローカルバス割り込みマスクレジスタ (LBIM) 0xFFFE_D130 (+130)
このレジ スタのビットを 1 に セッ トする と、ローカルバスス テータスレジ スタ
(LBSTAT) 内の対応するステータスビットがセットされた時点で割り込みが発生します。
31
16
0
:タイプ
:初期値
15
6
0
ビット
5
4
3
2
PERIE SERIE GERIE IASIE
1
ROIE
0
0
R/W
R/W
R/W
R/W
R/W
:タイプ
0
0
0
0
0
:初期値
ニモニック
フィールド名
5
PERIE
パリティエラー発
生割り込みイネー
ブル
PERR* occurred Interrupt Enable (初期値 0)
1: LBSTAT.PEROc に 1 がセットされると割り込み要求を発生します。
0: LBSTAT.PEROc に 1 がセットされても割り込み要求を発生しません。
説 明
4
SERIE
システムエラー発
生割り込みイネー
ブル
SERR* occurred Interrupt Enable (初期値 0)
1: LBSTAT.SEROc に 1 がセットされると割り込み要求を発生します。
0: LBSTAT.SEROc に 1 がセットされても割り込み要求を発生しません。
3
GERIE
G バスエラー発生
割り込みイネーブ
ル
G-Bus Error occurred Interrupt Enable (初期値 0)
1: LBSTAT.GEROc に 1 がセットされると割り込み要求を発生します。
0: LBSTAT.GEROc に 1 がセットされても割り込み要求を発生しません。
2
IASIE
イリーガルアドレ
スサイズ割り込み
イネーブル
Illegal BARS Size Interrupt Enable (初期値 0)
1: LBSTAT.ISA に 1 がセットされると割り込み要求を発生します。
0: LBSTAT.ISA に 1 がセットされても割り込み要求を発生しません。
1
ROIE
リセット発生割り
込みイネーブル
RESET occurred Interrupt Enable (初期値 0)
1: LBSTAT.RstOc に 1 がセットされると割り込み要求を発生します。
0: LBSTAT.RstOc に 1 がセットされても割り込み要求を発生しません。
図 12.3.67 ローカルバス割り込みマスタレジスタ
12-73
第 12 章 PCI コントローラ (PCIC)
12.3.6.6 PCI ステータス割り込みマスクレジスタ (PCISTATIM) 0xFFFE_D134 (+134)
このレジスタのビットを 1 にセットすると、PCI ステータスレジスタ (PCISTAT) 内の
対応するステータスビットがセットされた時点で割り込み生成が発生します。
31
16
0
:タイプ
:初期値
15
14
13
12
11
DPIE SSEIE RMAIE RTAIE STAIE
10
9
0
8
PRIE
7
0
0
R/W
R/W
R/W
R/W
R/W
R/W
:タイプ
0
0
0
0
0
0
:初期値
ビット
ニモニック
15
DPIE
14
SSEIE
13
RMAIE
12
RTAIE
11
STAIE
8
PRIE
フィールド名
説 明
ディテクテットパ Detected Parity Error Interrupt Enable (初期値 0)
リティエラー割り 1: PCISTAT.DECPE に 1 がセットされると割り込み要求を発生します。
込みイネーブル
0: PCISTAT.DECPE に 1 がセットされても割り込み要求を発生しません。
信号システムエラ Signaled System Error Interrupt Enable (初期値 0)
ー割り込みイネー 1: PCISTAT.SIGSE に 1 がセットされると割り込み要求を発生します。
ブル
0: PCISTAT.SIGSE に 1 がセットされても割り込み要求を発生しません。
受信マスタアボー Received Master Abort Interrupt Enable (初期値 0)
ト割り込みイネー 1: PCISTAT.RECMA に 1 がセットされると割り込み要求を発生します。
ブル
0: PCISTAT.RECMA に 1 がセットされても割り込み要求を発生しません。
受信ターゲットア Received Target Abort Interrupt Enable (初期値 0)
ボート割り込みイ 1: PCISTAT.RECTA に 1 がセットされると割り込み要求を発生します。
ネーブル
0: PCISTAT.RECTA に 1 がセットされても割り込み要求を発生しません。
信号ターゲットア Signaled Target Abort Interrupt Enable (初期値 0)
ボート割り込みイ 1: PCISTAT.SIGTA に 1 がセットされると割り込み要求を発生します。
ネーブル
0: PCISTAT.SIGTA に 1 がセットされても割り込み要求を発生しません。
パリティエラー報 Parity Error Reported Interrupt Enable. (初期値 0)
告割り込みイネー 1: PCISTAT.PERPT に 1 がセットされると割り込み要求を発生します。
ブル
0: PCISTAT.PERPT に 1 がセットされても割り込み要求を発生しません。
図 12.3.68 PCI ステータス割り込みマスクレジスタ
12-74
第 12 章 PCI コントローラ (PCIC)
12.3.6.7 イニシエータコンフィグレーションアドレスレジスタ (ICA) 0xFFFE_D138 (+138)
31
24
23
16
0
15
BusNu
11
10
8
R/W
:タイプ
0x00
:初期値
7
2
1
0
DevNu
FunNu
RegNu
TypNu
R/W
R/W
R/W
R/W
:タイプ
0x00
000
0x00
00
:初期値
ビット
ニモニック
フィールド名
説 明
23 : 16
BusNu
バス番号
Bus Number (初期値 0x00)
ターゲット PCI バス番号 (256 個の 1 つ) を示します。
15 : 11
DevNu
デバイス番号
Device Number (初期値 0x00)
ターゲット物理デバイス番号 (32 個のうちの 1 つですが、PCIC はそれらのうちの
21 個しか使用しません) を識別するために使用します。上位 21 アドレスラインの
AD [31 : 11] は、タイプゼロのコンフィグレーションアクセスのアドレスフェーズで
は使用されず、PCIC はこれらの信号ラインを様々な物理 PCI パッケージ (それらの
うちの 21 個まで) に対する IDSEL 信号として使用します。
0x00: AD [11]を IDSEL として使用します。
0x01: AD [12]を IDSEL として使用します。
0x02: AD [13]を IDSEL として使用します。
0x03: AD [14]を IDSEL として使用します。
0x04: AD [15]を IDSEL として使用します。
0x05: AD [16]を IDSEL として使用します。
0x06: AD [17]を IDSEL として使用します。
0x07: AD [18]を IDSEL として使用します。
0x08: AD [19]を IDSEL として使用します。
0x09: AD [20]を IDSEL として使用します。
0x0A: AD [21]を IDSEL として使用します。
0x0B: AD [22]を IDSEL として使用します。
0x0C: AD [23]を IDSEL として使用します。
0x0D: AD [24]を IDSEL として使用します。
0x0E: AD [25]を IDSEL として使用します。
0x0F: AD [26]を IDSEL として使用します。
0x10: AD [27]を IDSEL として使用します。
0x11: AD [28]を IDSEL として使用します。
0x12: AD [29]を IDSEL として使用します。
0x13: AD [30]を IDSEL として使用します。
0x14: AD [31]を IDSEL として使用します。
0x15∼0x1f の ICAR [15 : 11] 値は使用されません。
10 : 8
FunNu
機能番号
Function Number (初期値 000)
ターゲット論理ファンクション番号 (8 個の 1 つ) を識別するために使用します。
7:2
RegNu
レジスタ番号
Register Number (初期値 0x00)
ターゲット機能のコンフィグレーション空間内のターゲットダブルワード (64 個の
1 つ) を識別するために使用します。
1:0
TypNu
タイプ番号
Type Number (初期値 00)
ターゲット機能のコンフィグレーションサイクルのアドレスフェーズにおけるアド
レスのタイプを識別するために使用します。
図 12.3.69 イニシエータコンフィグレーションアドレスレジスタ
12-75
第 12 章 PCI コントローラ (PCIC)
12.3.6.8 イニシエータコンフィグレーションデータレジスタ (ICDR) 0xFFFE_D13C (+13c)
31
16
ICD
R/W
:タイプ
0x0000
:初期値
15
0
ICD
R/W
:タイプ
0x0000
:初期値
ビット
ニモニック
フィールド名
説 明
31 : 0
ICD
イニシエータ
コンフィグレーシ
ョンデータ
Initiator Configuration Data Register (初期値 0x00000000)
コンフィグレーションアクセスを行う際のデータポートです。このレジスタにリー
ドまたはライトすると、該当する PCI コンフィグレーショントランザクションが開
始します。
図 12.3.70 イニシエータコンフィグレーションデータレジスタ
12-76
第 12 章 PCI コントローラ (PCIC)
12.3.6.9 イニシエータ割り込みアクノリッジデータポートレジスタ (IIADP) 0xFFFE_D140 (+140)
31
16
IIADP
R
:タイプ
0x0000
:初期値
15
0
IIADP
ビット
ニモニック
31 : 0
IIADP
R
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
割り込み
アクノリッジ
アドレスポート
説 明
Initiator Interrupt Acknowledge Address Port (初期値 0x0000)
このレジスタをリードすると、PCI バス上に割り込みアクノリッジサイクルが発生
します。このリードによって返されたデータがその割り込みアクノリッジのデータ
になります。
図 12.3.71 イニシエータ割り込みアクノリッジデータポートレジスタ
12-77
第 12 章 PCI コントローラ (PCIC)
12.3.6.10 イニシエータスペシャルサイクルデータポートレジスタ (ISCDP) 0xFFFE_D144 (+144)
31
16
ISCDP
W
:タイプ
0x0000
:初期値
15
0
ISCDP
ビット
ニモニック
31 : 0
ISCDP
W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
スペシャル
サイクル
データポート
説 明
Initiator Special Cycle Data Port (初期値 0x00000000)
このレジスタにライトすると、ライトされたデータによって PCI バス上にスペシャ
ルサイクルが発生します。
図 12.3.72 イニシエータスペシャルサイクルデータポートレジスタ
12-78
第 12 章 PCI コントローラ (PCIC)
12.3.6.11 イニシエータメモリマッピングアドレスサイズレジスタ (MMAS) 0xFFFE_D148 (+148)
31
16
MMAS
R/W
:タイプ
0x0000
:初期値
15
4
3
MMAS
ビット
ニモニック
31 : 4
MMAS
0
0
R/W
:タイプ
0x000
:初期値
フィールド名
イニシエータ
メモリ
マッピング
アドレスサイズ
説 明
Initiator Memory Mapping Address Size (初期値 0x0000000)
このレジスタは、イニシエータ PCI バスメモリマッピングアドレスレジスタ
(IPBMMAR) およびイニシエータローカルバスメモリマッピングアドレスレジスタ
(ILBMMAR) の有効範囲 (サイズ) を定義します。値が “0” のときは、IPBMMAR を使
用していない (ディセーブル) ことを示します。このレジスタは、ILBMMAR および
IPBMMAR レジスタを内部的にマスクするため、それらに先立って設定してくださ
い。設定されたサイズが 2 の累乗でないときは、ローカルバスステータスレジスタ
(LBSTAT) 内のイリーガルアドレスサイズステータスビット (IAS) が “1” にセットさ
れます。このとき対応する割り込みマスクビット (LBIM.IASIE) がセットされている
と割り込みが発生します。
00000000h: ILBMMAR アドレスデコーダがディセーブルです (デフォルトの POR
値)。
FFFFFFF0h: 16 バイト
FFFFFFE0h: 32 バイト
FFFFFFC0h: 64 バイト
FFFFFF80h: 128 バイト
FFFFFF00h: 256 バイト
:
:
FF000000h: 16 M バイト
FE000000h: 32 M バイト
FC000000h: 64 M バイト
F8000000h: 128 M バイト
F0000000h: 256 M バイト
E0000000h: 512 M バイト
C0000000h: 1 G バイト
80000000h: 2 G バイト
図 12.3.73 イニシエータメモリマッピングアドレスサイズレジスタ
12-79
第 12 章 PCI コントローラ (PCIC)
12.3.6.12 イニシエータ I/O マッピングアドレスサイズレジスタ (IOMAS) 0xFFFE_D14C (+14c)
31
16
IOMAS
R/W
:タイプ
0x0000
:初期値
15
2
IOMAS
ビット
ニモニック
31 : 2
IOMAS
0
0
R/W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
I/O マッピング
アドレスサイズ
1
説 明
Initiator IO Mapping Address Size (初期値 0x0000000)
こ の レ ジス タ は、 イ ニシ エ ータ PCI バス I/O マッ ピン グ アド レ スレ ジ ス タ
(IPBIOMAR) およびイニシエータローカルバス I/O マッピングアドレスレジスタ
(ILBIOMAR) の有効範囲 (サイズ) を定義します。値が “0” のときは IPBIOMAR を使
用していない (ディセーブル) ことを示します。このレジスタは、ILBIOMAR および
IPBIOMAR レジスタを内部的にマスクするため、それらに先立って設定してくださ
い。設定されたサイズが 2 の累乗でないときは、ローカルバスステータスレジスタ
(LBSTAT) 内のイリーガルアドレスサイズステータスビット (IAS) が設定されます。
このとき対応する割り込みマスクビット (LBIM.IASIE) が設定されていると割り込
みが発生します。
00000000h: ILBIOMAR アドレスデコーダがディセーブルです (デフォルトの POR
値)。
FFFFFFF0h: 16 バイト
FFFFFFE0h: 32 バイト
FFFFFFC0h: 64 バイト
FFFFFF80h: 128 バイト
FFFFFF00h: 256 バイト
:
:
FF000000h: 16 M バイト
FE000000h: 32 M バイト
FC000000h: 64 M バイト
F8000000h: 128 M バイト
F0000000h: 256 M バイト
E0000000h: 512 M バイト
C0000000h: 1 G バイト
80000000h: 2 G バイト
図 12.3.74 イニシエータ I/O マッピングアドレスサイズレジスタ
12-80
第 12 章 PCI コントローラ (PCIC)
12.3.6.13 イニシエータインダイレクトアドレスレジスタ (IPCIADDR) 0xFFFE_D150 (+150)
31
16
IPCIADDR
R/W
:タイプ
0x0000
:初期値
15
0
IPCIADDR
ビット
ニモニック
31 : 0
IPCIADDR
R/W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
インダイレクト
アドレス
説 明
Initiator Indirect Address (初期値 0x00000000)
このレジスタは、インダイレクトイニシエータサイクルに使用される PCI サイクル
アドレス (IPCIADDR) を指定します。
図 12.3.75 イニシエータインダイレクトアドレスレジスタ
12-81
第 12 章 PCI コントローラ (PCIC)
12.3.6.14 イニシエータインダイレクトデータレジスタ (IPCIDATA) 0xFFFE_D154
31
16
IPCIDATA
R/W
:タイプ
0x0000
:初期値
15
0
IPCIDATA
ビット
ニモニック
31 : 0
IPCIDATA
R/W
:タイプ
0x0000
:初期値
フィールド名
イニシエータ
インダイレクト
データ
説 明
Initiator Indirect Data (初期値 0x00000000)
このレジスタは、インダイレクトイニシエータ PCI サイクルのデータ (IPCIDATA) を
指定します。
リードサイクルでは、そのサイクルのデータフェーズでリードしたデータになりま
す。
ライトサイクルでは、このデータはそのサイクルのデータフェーズで PCIAD バス上
に出力されます。
図 12.3.76 イニシエータダイレクトデータレジスタ
12-82
第 12 章 PCI コントローラ (PCIC)
12.3.6.15 イニシエータインダイレクトコマンド/バイトイネーブルレジスタ (IPCICBE)
0xFFFE_D158
このレジスタにライトすると、インダイレクトイニシエータサイクルが開始します。
ISTAT レジスタの IDICC は、このサイクルが完了するとセットされます。
31
16
0
:タイプ
:初期値
15
8
7
0
ビット
ニモニック
7:4
ICMD
3:0
IBE
フィールド名
4
3
0
ICMD
IBE
R/W
R/W
:タイプ
0x0
0x0
:初期値
説 明
イニシエータ
インダイレクト
コマンド
Initiator Indirect Command (初期値 0x0)
これは、
実行されるサイクルのイニシエータインダイレクト PCI コマンド (ICMD) で
す。設定した値がそのまま C_BE[3:0]に出力されます。
イニシエータ
インダイレクト
バイトイネーブル
Initiator Indirect Byte Enable (初期値 0x0)
これらは、実行されるサイクルのイニシエータインダイレクトバイトイネーブル
(IBE) です。設定した値がそのまま C_BE[3:0]に出力されます。
図 12.3.77 イニシエータインダイレクトコマンド/バイトイネーブルレジスタ
12-83
第 12 章 PCI コントローラ (PCIC)
12.4 動作
12.4.1
転送モード
PCI コントローラ (PCIC) は、イニシエータ側の PIO モードおよびターゲット側のストリー
ミングモードをサポートしています。
•
イニシエータ PIO モード
イニシエータモジュールは、PCI メモリ、I/O トランザクションのための一般ライトバ
ッファを持っています。図 12.4.1にある PIO ポートを通じて PCI バスとのデータ転送を
行います。PIO モード時、PCIC は G-Bus スレーブとなります。またイニシエータモジュ
ールは PCI サイクルに対してダイレクトおよびインダイレクトモードをサポートしてい
ます。
PCIC のイニシエータモードでは、TX39/H2 コアの RF の設定を “x1(00)” で使用してく
ださい。これ以外の設定では正しく動作しないことがあります。
ダイレクト:
このモードでは、ローカルバス (G-Bus) アドレス空間の一部が直接 PCI
バスにマッピングされます。この空間をリードすると、PCI バス上にリ
ードサイクルが発生します。ローカルバス (G-Bus) サイクルは、PCI バ
スサイクルが終わるまでは終了しません。
ライトでは、1-D ワードバッファがあります。したがって、このアドレ
ス空間にライトすると、データがラッチされ、PCI ライトサイクルが非
同期に実行されます。この空間にさらにローカルバス (G-Bus) ライトを
行うと、前の PCI ライトが終了してライトバッファが利用可能になるま
でそのライトは終了しません。
インダイレクト: このモードは、イニシエータ PCI サイクルがローカルバス (G-Bus) に対
して非同期に動作します。リードの場合は、
希望の PCI アドレスと C_BE
を IPCIADDR および IPCICBE レジスタに設定し、その後ステータスビ
ット (または割り込み) をポーリングします。PCIC は、PCI サイクルを
実行し、IPCIDATA レジスタ内にデータを格納し、ステータスビットを
セットします。その後、CPU はデータをリードできるようになります。
ライトの場合も、アドレス/C_BE レジスタに書き込む前に、ライトする
データをレジスタに書いておく点を除いて同様に動作します。PCI アド
レスではマッピングは起こりません。
(注)
•
イニシエータサイクルのダイレクト方式には、TX3927 のトランザクションと同時
にターゲットデバイスが TX3927 にデータを要求し、それ自体の要求が終了する
まで TX3927 の要求に応じない場合にはデッドロックの可能性があります。この
場合、ダイレクト PCI 要求の終了を待ってローカルバス (G-Bus) がロックされて
いるため、TX3927 は応答することができません。したがって、両デバイスはデッ
ドロックしてその PCI 要求をリトライします。この場合 (ターゲットデバイスもマ
スタになることができ、それ自体に対する要求が完了する前に TX3927 にデータ
を要求するような場合) には、インダイレクト方式を使用してください。
ターゲットストリーミングモード
PCI コントローラがターゲットである時、PCIC の内蔵 FIFO バッファを使用してアク
セスが可能です。ターゲットストリーミングモードでは、PCIC は TX3927 内のバスマス
タとなり、データはメモリ→OFIFO→PCI バスまたは PCI バス→IFIFO→メモリの順に
転送することができます (図 12.2.1 参照)。このとき TX3927 の内蔵 DMA コントローラは
介在しません。ターゲットモジュールが PCI コマンドを受け取ると、PCIC は 「12.4.3 ア
ドレス変換方式」 に示すアドレス変換を行い、データを転送します。
12-84
第 12 章 PCI コントローラ (PCIC)
12.4.2
コンフィグレーションサイクル
イニシエータ PIO モードの PCI コンフィグレーショントランザクションを開始するには、
TX39/H2 コアからイニシエータコンフィグレーションデータレジスタ (ICDR) をリードまた
はライトします。ICDR をリードまたはライトする前に、かならずイニシエータコンフィグレ
ーションアドレスレジスタ (ICAR) を設定してください。TX3927 は “タイプ 0” コンフィグレ
ーショントランザクションを使用して動作します。
12.4.3
アドレス変換方式
PCIC 内部レジスタの設定により、PCI バス上のアドレスが G-Bus 上のアドレスに変換され、
逆に G-Bus 上のアドレスが PCI バス上のアドレスに変換されます。
•
ダイレクトイニシエータのとき (G バス→PCI バスアドレス変換)
TX39/H2 コアが PCI バス上のメモリにアクセスすると、PCIC は TX39/H2 コアによる
G-Bus アドレス出力を ILBMMAR レジスタの内容と比較します。比較するアドレス範囲
は、MMAS レジスタの内容によって指定されます。2 つのアドレスが一致すると、
IPBMMAR レジスタの内容を上位アドレスとして、G-Bus アドレスを下位アドレスとし
て PCI バスアドレスが生成されます。アクセスターゲットがメモリではなく I/O になると、
ILBMMAR レジスタ、MMAS レジスタ、IPBMMAR レジスタの代わりに図 12.4.1の括弧
内に示されたレジスタがアドレス変換に使用されます。
31
0
G-Bus アドレス
比較
31
0
ILBMMAR
(ILBIOMAR)
31
0
MMAS
(IOMAS) 1 1 1 1 … 1 1 1 0 0 0 0 0 0 … … … … 0 0 0 0 0 0 0 0
31
0
31
0
IPBMMAR
(IPBIOMAR)
PCI バス
アドレス
図 12.4.1 ダイレクトイニシエータ時のアドレス変換 (G バス→PCI バスアドレス変換)
12-85
第 12 章 PCI コントローラ (PCIC)
•
PCIC がターゲットのとき (PCI バス→G バスアドレス変換)
PCI バス上のバスマスタが G-Bus 上のメモリコントローラによって管理されているメ
モリにアクセスすると、PCIC は PCI アドレスを MBA レジスタ (ターゲットメモリベー
スアドレスレジスタ内のターゲットメモリベースアドレスフィールド) の内容と比較しま
す。比較するアドレスは、MBAS レジスタによって指定します。2 つのアドレスが一致す
ると、TLBMMA レジスタの内容を上位アドレスとして、PCI バスアドレスを下位アドレ
スとして G-Bus 上のアドレスが生成されます。アクセスターゲットがメモリではなく I/O
の場合には、MBA レジスタ、MBAS レジスタ、TLBMMA レジスタの代わりに図 12.4.2
の括弧内に示されたレジスタがアドレス変換に使用されます。
31
0
PCI バス
アドレス
比較
31
0
MBA
(IOBA)
31
0
MBAS
(IOBAS) 1 1 1 1 … 1 1 1 0 0 0 0 0 0 … … … … 0 0 0 0 0 0 0 0
31
0
31
0
TLBMMA
(TLBIOMA)
G-Bus アドレス
図 12.4.2 PCI バス→G バスアドレス変換
12.4.4
PCIC クロック
PCI 外部クロック信号 PCICLK は、入力または出力の切り替えが可能です。外部 RESET*
信号立ち上がり時の ADDR[18]信号 (PCICLKEN ブートコンフィグレーション信号) の値によ
り、PCI クロック信号が入力か、出力かが決定します。
PCICLKEN = 1 の場合、PCICLK0∼3 は出力モードに設定され、PCIC 内部基準クロック
(CLKPCI) を出力します。PCIC 内部基準クロックは G-Bus クロック (GBUSCLK) を分周し
たクロックです。分周比は 2 分周、3 分周の選択が可能です。このクロックは、CPU が停止し
ているときも動作します。分周比の設定は、CCFG.PCI3 ビット、または RESET*信号立ち上
がり時の ADDR[17]信号 (PCI3*ブールコンフィグレーション信号) で行います。
PCICLEKN が “0” に設定されると、PCICLK は入力モードに設定され、PCIC は PCICLK0
からのクロック入力で動作します。このとき PCICLK は使用できません。
12-86
第 12 章 PCI コントローラ (PCIC)
12.4.5
アービタ機能
内部的には PCIC アービタが 8 個のバスマスタをコントロールすることができますが、その
うちの 3 つは未使用で、PCIC 自体と 4 つの外部バスマスタ (REQ [3 : 0] *および GNT [3 : 0] *
端子に接続されています) が使用されます。
この内部アービタは、RESET*信号立ち上がり時の ADDR[11]信号 (PCIXARB ブートコン
フィグレーション信号)の値を “0” にすることによってディセーブルにすることができます。こ
のとき、REQ [0] は出力となり、GNT [0] は入力となります。REQ [1] が割り込み出力になり、
その状態は PIO モジュールフラグオペレーションによってコントロールされます。
内部アービタのバス要求の優先順位を決定するアービトレーションアルゴリズムとしては、
図 12.4.3に示す通り、2 つのラウンドロビンシーケンスの組み合わせです。優先順位の低いラ
ウンドロビン (レベル 2) はマスタ W∼Z で構成され、優先順位の高いラウンドロビン (レベル 1)
はマスタ A∼D およびレベル 2 のマスタで構成されます。バスマスタを 8 個もっているのは、
将来の拡張性を考慮しているためです。TX3927 PCIC は 8 個のマスタのうちの 5 個を使用し
ます。リクエストトレースレジスタ (REQ_TRACE) は、PCIC と 4 つの外部バスマスタをマ
スタ A∼D および W∼Z のうちのどこに割り当てるか指定します。
図 12.4.3に、アービトレーションアルゴリズムを示します。
レベル 1
(優先順位: 高い)
マスタ B
マスタ C
マスタ A
マスタ D
レベル 2
レベル 2
(優先順位: 低い)
マスタ W
マスタ Z
マスタ X
マスタ Y
図 12.4.3 PCI バスアービトレーション/パークマスタの優先順位
バスマスタの優先順位は、レベル 1 のラウンドロビンシーケンスに基づいて決定されます。
ただし、レベル 2 がレベル 1 内で使用されると、レベル 2 のバスマスタの優先順位はレベル 2
のラウンドロビンシーケンスに基づいて決定されます。
TX3927 上では 8 個のバスマスタのすべてを使用することはできませんが、仮に 8 個のバス
マスタすべてが使用できるデバイスを仮定した場合、8 個のバスマスタのすべて (マスタ A∼D
お よ び W∼Z) が バ ス を 同 時 に 要 求 す る と 、 そ の 優 先 順 位 は 次 の よ う に な り ま す :
A→B→C→D→W→A→B→ C→D→X→A→B→C→D→Y→A→B→C→D→Z→ (はじめに戻り
ます)。
12-87
第 12 章 PCI コントローラ (PCIC)
優先順位は上記の矢印 (あるいは図 12.4.3の矢印) の方向にしか遷移しませんので、仮に 3
つのバスマスタ A、B、W が存在するときに、マスタ B が最初にバスを要求し、次に A と W
が同時にバスを要求した場合の優先順位は B→W→A の順になります。
ラウンドロビンの状態は、PCI バスアービタ/パークマスタコントロールレジスタの RPBA
ビットを “1” に設定することによりリセットできます。
12.4.6
FIFO の深さ
ターゲットストリーミングモードをサポートするために、PCIC は入力用と出力用の 2 つの
16 段のターゲット FIFO バッファを内蔵しています。IFIFO は、PCI バスからメモリへデー
タを転送するために使用されます。OFIFO は、メモリから PCI バスへデータを転送するため
に使用されます。
12.4.7
ターゲットモジュールへのアクセス
ターゲットモジュールは、次の 2 つの方法のいずれかによって PCI バスからアクセス可能
です。
1.
FIFO アクセス
FIFO アクセスは、I/O サイクルまたはメモリサイクルを使用して実行されます。この
タイプのアクセスを使用すると、メモリから PCI バスまたは PCI バスからメモリへデー
タを転送することができます。
2.
レジスタアクセス
レジスタアクセスは、コンフィグレーションサイクルまたはスペシャルサイクルを使用
して実行されます。
12.4.8
レジスタアクセス
PCI コンフィグレーション空間レジスタは、
•
PCI コンフィグレーションヘッダ領域レジスタ
•
イニシエータコンフィグレーション空間レジスタ
•
ターゲットコンフィグレーション空間レジスタ
で構成されています。
PCI バスマスタは、これらのレジスタにアクセスできます。それらは、256 バイトの PCI
コンフィグレーション空間 (0xFFFE_D0FF∼0xFFFE_D000) にあります。その他のレジスタ
は、0xFFFE_D1FF∼0xFFFE_D100 にあります。それらは、TX39/H2 コアによってアクセス
可能ですが、PCI バスマスタからはアクセスできません。
12.4.9
ローカルバスと PCI バス間のアドレスマッピング
ローカルバスと PCI バス間のアドレス空間マッピング (変換) は、双方でマッピングアドレ
スレジスタを使用することによって実現されます。リニアアドレスマッピングが使用されます。
アドレス空間サイズは常に 2 の累乗でなければなりません。TX39/H2 コアは、メモリ空間の
どのセクションがメモリまたは I/O 空間に属するかを確認しなくてはなりません。
12-88
第 12 章 PCI コントローラ (PCIC)
12.4.10 ACPI (Advanced Configuration and Power Interface) パワーマネージメント
TX3927 では ACPI パワーマネージメント仕様に一部対応しています。
ここでは TX3927 で対応している ACPI 仕様について説明します。
12.4.10.1 パワーマネージメントインタフェース
パワーマネージメントに関連する PCI コンフィグレーションレジスタについて説明し
ます。
PCI ステータスレジスタ (PCISTAT) の CL ビットが、ケイパビリティリストが存在す
るかどうかを示します。TX3927 では ACPI パワーマネージメント仕様に対応したケイパ
ビリティリストを持つのでこのビットは “1” が読み出せます。
ケイパビリティリストのレジスタ位置を示すものとしてケイパビリティポインタレジ
スタ (CAPPTR) があります。このレジスタの8ビットの CAPPTR フィールドは、ACPI
パワーマネージメント機能で使用するレジスタ群の開始アドレスを PCIC のベースアド
レス 0xFFFE_D000 に対するオフセットで示します。TX3927 では CAPPTR フィールド
の値は 0xE0 です。
また、パワーマネージメントレジスタ (PWMNGR) には 8 ビットの PMCID フィール
ドがあります。このフィールドはサポートしているケイパビリティリストの ID を示しま
す。TX3927 では ACPI パワーマネージメント機能をサポートしているのでこのフィール
ドの値は “01” です。
ACPI パワーマネージメント機能で使用するレジスタとして、パワーマネージメントレ
ジスタ (PWMNGR) とパワーマネージメントサポートレジスタ (PWMNGSR) の 2 つのレ
ジスタがあります。
12.4.10.2 パワーステート
PCI では D0 から D3 までの4つのパワーステートが定義されています。D0 が最もパ
ワーの大きい状態で、D3 が最もパワーの少ない状態です。D1 と D2 がこの中間になりま
す。
TX3927 では D1 と D2 はサポートしていません。
初期化時には D0 になります。パワーオンリセットもしくは D3hot から D0 に遷移した
ときには、初期化されていない状態です。ここで PCIC の初期化を行うと D0 Active 状態
になります。リセットされると初期化されていない D0 状態になります。
パワーマネージメントサポートレジスタ (PWMNGSR) のパワーステートフィールド
(PWRST)に “11”をセットすると、D3hot ステートになります。このステートでは PCIC
のイニシエータ機能および、ターゲットメモリもしくはターゲット I/O のデコーダ回路が
ディセーブルになります。
12-89
第 12 章 PCI コントローラ (PCIC)
D3 の状態には D3hot と D3cold の 2 つがあります。両者の差は電源が供給されている
かいないかの違いです。D3hot ステートのときに、パワーマネージメントサポートレジス
タ (PWMNGSR) のパワーステートフィールド (PWRST) に “00” をセットするか、もし
くは、リセット信号(RESET*)をアサートすると D0 uninitialized ステートになります。
リセット信号(RESET*)をアサートした場合には TX3927 全体が初期化されます。
D3cold ステートからはリセット信号 (RESET*) のアサートによる復帰だけが可能です。
このとき PCIC は D0 uninitialized ステートになります。
図 7.5.4 にステートの遷移を示します。
Power On reset
D0
uninitializeded
RESET*
D3cold
RESET*
D0 Active
VCC
Removed
D3hot
図 12.4.4 ステートの遷移
12.4.11 バイトスワップ機能
TX3927 ではバイトスワップ機能をサポートしています。ローカルバスコントロール(LBC)
の制御ビットの設定によりバイトスワップ機能をイネーブルにもディセーブルにもできます。
イニシエータ時にバイトスワップするかどうかはローカルバスコントロール(LBC)のビット
14(IBSE)で指定します。このビットの設定は、イニシエータメモリアクセス、イニシエータ
I/O アクセス、イニシエータコンフィグレーションアクセス、イニシエータ割込みアクノリッ
ジ、イニシエータスペシャルサイクルのすべてに適用されます。
ターゲット I/O アクセス時にバイトスワップするかどうかはローカルバスコントロール
(LBC)のビット 13(TIBSE)で指定します。
また、ターゲットメモリアクセス時にバイトスワップするかどうかはローカルバスコントロ
ール(LBC)のビット 8(MSDSE)で指定します。このときローカルバスコントロール(LBC)のビ
ット 12(TMBSE)の設定により指定したターゲットメモリ空間の全領域でバイトスワップする
か、上位側の半分の領域のみバイトスワップするかを指定できます。
このように TX3927 でサポートしている PCI の各種コマンドのうち、ターゲット時のコン
フィグレーションサイクルを除いてバイトスワップをイネーブルすることが可能です。
バイトスワップが適用される範囲をまとめると次のようになります。
12-90
第 12 章 PCI コントローラ (PCIC)
C/BE の値
PCI コマンド
TX3927 がイニシエータのとき TX3927 がターゲットのとき
0000
割込みアクノリッジ
{

0001
スペシャルサイクル
{

0010
I/O リード
{
{
0011
I/O ライト
{
{
0100
(予約)


0101
(予約)


0110
メモリリード
{
{
0111
メモリライト
{
{
1000
(予約)


1001
(予約)


1010
コンフィグレーションリード
{
×
1011
コンフィグレーションライト
{
×
1100
メモリリードマルチプル

{
1101
デュアルアドレスサイクル


1110
メモリリードライン

{
1111
メモリライトアンドインバリデート

{
凡例: { バイトスワップ設定可能
×
バイトスワップしない
 TX3927 としてサポートしないコマンド
(注)
TX3927 の CPU から、TX3927 内の PCIC のレジスタへのアクセスはバイトスワップしません。
バイトスワップ時のデータ、アドレスおよびバイトイネーブル信号の動作例を次に示します。
TX3927 をビッグエンディアンで使用した際の、バイトスワップをイネーブルにしたときと
ディセーブルにしたときにおける、データ、アドレスおよびバイトイネーブル信号の動作を以
下に示します。
TX3927 のデータバスにはアドレスの最下位 2 ビットである A[1:0]はありませんが、バイト
オフセットを明確にするためあったと仮定した場合のアドレスを記載してあります。
また、データバスは 32 ビットで表示してあり、Data 中、下線をつけた部分が有効なデータ
となります。
(1) バイトスワップをディセーブルにしたときの I/O アクセス
Big Endian
No swap
TX3927データバス
PCI-bus
A[1:0]
BE
Data
A[1:0]
BE
Data
---------------------------------------------------------------------------------------------------0
7
01234567
3
7
01234567
1
B
01234567
2
B
01234567
2
D
01234567
1
D
01234567
3
E
01234567
0
E
01234567
0
3
01234567
2
3
01234567
2
C
01234567
0
C
01234567
0
0
01234567
0
0
01234567
12-91
第 12 章 PCI コントローラ (PCIC)
(2) バイトスワップをイネーブルにしたときの I/O アクセス
Big Endian
byte swap
TX3927データバス
PCI-bus
A[1:0]
BE
Data
A[1:0]
BE
Data
---------------------------------------------------------------------------------------------------0
7
01234567
0
E
67452301
1
B
01234567
1
D
67452301
2
D
01234567
2
B
67452301
3
E
01234567
3
7
67452301
0
3
01234567
0
C
67452301
2
C
01234567
2
3
67452301
0
0
01234567
0
0
67452301
(3) バイトスワップをディセーブルにしたときのメモリアクセス
Big Endian
No swap
TX3927データバス
PCI-bus
A[1:0]
BE
Data
A[1:0]
BE
Data
---------------------------------------------------------------------------------------------------0
7
01234567
0
7
01234567
1
B
01234567
0
B
01234567
2
D
01234567
0
D
01234567
3
E
01234567
0
E
01234567
0
3
01234567
0
3
01234567
2
C
01234567
0
C
01234567
0
0
01234567
0
0
01234567
(4) バイトスワップをイネーブルにしたときのメモリアクセス
Big Endian
byte swap
TX3927データバス
PCI-bus
A[1:0]
BE
Data
A[1:0]
BE
Data
---------------------------------------------------------------------------------------------------0
7
01234567
0
E
67452301
1
B
01234567
0
D
67452301
2
D
01234567
0
B
67452301
3
E
01234567
0
7
67452301
0
3
01234567
0
C
67452301
2
C
01234567
0
3
67452301
0
0
01234567
0
0
67452301
12.4.12 PCI のコンフィグレーション空間の一部マスク
TMPR3927AF では、TMPR3927F に対して PCI コントローラに新規に 1 ビット追加するこ
とにより、PCI のコンフィグレーション空間のうち、先頭の 64B の PCI コンフィグレーショ
ンヘッダ領域と ACPI 用のレジスタ以外の PCI コンフィグレーション空間に対して外部の PCI
マスタからアクセスできないようにすることができます。
PCI コントローラのローカルバスコントロールレジスタ (LBC) のビット 3 が TMPR3927AF
で新規に追加されています。このビットが “0” のときには TMPR3927F と同様に外部 PCI マ
スタはすべての PCI コンフィグレーション空間 (00h∼ffh) にアクセスすることができます。一
方、このビットを “1” にセットすると、外部 PCI マスタは PCI コンフィグレーションヘッダ
領域 (00h∼3fh) と ACPI 用のレジスタ (e0h∼e7h) にのみアクセスすることができます。これ以
12-92
第 12 章 PCI コントローラ (PCIC)
外の PCI コンフィグレーション空間 (TX3927 のローカル側の設定を行うレジスタ) にアクセ
スするとリード時には 00h のデータが読め、ライトは無視されます。
このビットはリセットにより “0” に初期化されます。したがって、“1” に設定しない限りは
TMPR3927F と同じ動作をします。
LBC レジスタの設定のよる、PCI コンフィグレーション空間へのアクセス可否について表
12.4.1にまとめます。
表 12.4.1 PCI コンフィグレーション空間へのアクセス可否
LBC レジスタ
LBC[9]
TMPR3927F
TMPR3927AF
PCI コンフィグレーション空間
LBC[3]
0-3f
40-df
e0-e7
e8-ff
0

○
○
○
○
1

×
×
×
×
0
0
○
○
○
○
1
○
×
○
×
0/1
×
×
×
×
0
1
○: 外部 PCI マスタはレジスタへアクセス可能です。
×: 外部 PCI マスタはリード時には 00h のデータが読め、ライトは無視されます。
12-93
第 12 章 PCI コントローラ (PCIC)
12.5 タイミング図
12.5.1~12.5.6に PCIC のイニシエータとしての動作を、12.5.7~12.5.9に PCIC のターゲットと
しての動作を示します。なお TX3927 の内部アービタを使用しています。
12.5.1
イニシエータコンフィグレーションリード
PCICLK
FRAME*
PCIAD[31:0]
Adress
Data
A
BE
CBE[3:0]
IRDY*
TRDY*
DEVSEL*
Valid
PAR*
Valid
STOP*
PERR*
SERR*
図 12.5.1 イニシエータコンフィグレーションリード
12.5.2
イニシエータメモリリード
PCICLK
FRAME*
PCIAD[31:0]
CBE[3:0]
Adress
Data
6
BE
IRDY*
TRDY*
DEVSEL*
PAR*
Valid
Valid
STOP*
PERR*
SERR*
図 12.5.2 イニシエータメモリリード
12-94
第 12 章 PCI コントローラ (PCIC)
12.5.3
イニシエータメモリライト
PCICLK
FRAME*
PCIAD[31:0]
Adress
CBE[3:0]
Data
7
BE
IRDY*
TRDY*
DEVSEL*
Valid
PAR*
Valid
STOP*
PERR*
SERR*
図 12.5.3 イニシエータメモリライト
12.5.4
イニシエータ IO リード
PCICLK
FRAME*
PCIAD[31:0]
CBE[3:0]
Adress
Data
2
BE
IRDY*
TRDY*
DEVSEL*
PAR*
Valid
STOP*
PERR*
SERR*
図 12.5.4 IO リード
12-95
Valid
第 12 章 PCI コントローラ (PCIC)
12.5.5
イニシエータ IO ライト
PCICLK
FRAME*
PCIAD[31:0]
Adress
CBE[3:0]
Data
3
BE
IRDY*
TRDY*
DEVSEL*
Valid
PAR*
Valid
STOP*
PERR*
SERR*
図 12.5.5 IO ライト
12.5.6
スペシャルサイクル
PCICLK
FRAME*
PCIAD[31:0]
CBE[3:0]
Don’t Care
Data
1
BE
IRDY*
TRDY*
DEVSEL*
PAR*
Valid
STOP*
PERR*
SERR*
図 12.5.6 スペシャルサイクル
12-96
第 12 章 PCI コントローラ (PCIC)
12.5.7
ターゲットコンフィグレーションリード
PCICLK
FRAME*
PCIAD[31:0]
CBE[3:0]
Data
Address
A
BE
IRDY*
TRDY*
DEVSEL*
IDSEL
PAR*
Valid
Valid
STOP*
PERR*
SERR*
REQ*
GNT*
図 12.5.7 ターゲットコンフィグレーションリード
12-97
12-98
図 12.5.8 SDRAM から PCI への 8 ワードバースト転送 (tRCD = 2, tCASL = 2)
6
f
0
0
f
0
Valid Valid Valid Valid Valid Valid Valid Valid
Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7
f
(注 2) 2 回目の SDRAM からのバーストリードは PCI コントローラのプリフェッチ動作による SDRAM からのリードサイクルです。
(注 1) PCI コントローラでネバータイムアウトをイネーブルに設定したときのタイミング図です。またPCI コントローラが最速でローカルバスを獲得したときのタイ
ミングです。CPU や DAMC などの競合によりタイミングは変ることがあります。
ACK*
DATA [31 : 0]
DQM [3 : 0]
WE*
CAS*
RAS*
ADDR [19 : 5]
SDCS*
SDCLK
GNT*
REQ*
STOP*
PAR
TRDY*
DEVSEL*
IRDY*
C_BE[3 : 0]
Address
12.5.8
PCIAD [31 : 0]
FRAME*
PCICLK
第 12 章 PCI コントローラ (PCIC)
SDRAM から PCI への 8 ワードバースト転送
12-99
図 12.5.9 PCI から SDRAM への 8 ワードバースト転送 (tRCD = 2, tCASL = 2)
7
f
Valid Valid Valid Valid Valid Valid Valid Valid
0
Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7
0
f
ミングです。CPU や DAMC などの競合によりタイミングは変ることがあります。
(注 1) PCI コントローラでネバータイムアウトをイネーブルに設定したときのタイミング図です。また PCI コントローラが最速でローカルバスを獲得したときのタイ
ACK*
DATA [31 : 0]
DQM [3 : 0]
WE*
CAS*
RAS*
ADDR [19 : 5]
SDCS*
SDCLK
GNT*
REQ*
STOP*
PAR
TRDY*
DEVSEL*
IRDY*
C_BE[3 : 0]
Address
12.5.9
PCIAD [31 : 0]
FRAME*
PCICLK
第 12 章 PCI コントローラ (PCIC)
PCI から SDRAM への 8 ワードバースト転送
第 12 章 PCI コントローラ (PCIC)
12-100
第 13 章 シリアル I/O ポート (SIO)
第13章 シリアル I/O ポート (SIO)
13.1 特長
TX3927 の非同期シリアルインタフェースには、SIO0 と SIO1 の 2 個の全二重 UART チャネル
があります。
UART の特長は、以下の通りです。
(1) 全二重送信 (同時送受信)
(2) ボーレートジェネレータ内蔵
(3) モデムフローコントロール (CTS/RTS)
(4) FIFO
•
トランスミッタ FIFO: 8 段 × 8 ビット
•
レシーバ FIFO: 16 段 × 13 ビット (データ 8 ビットとステータス 5 ビット)
(5) マルチコントローラシステム対応
•
マスタ/スレーブモード
13-1
第 13 章 シリアル I/O ポート (SIO)
13.2 ブロック図
IMCLK
ボーレート
SIOCLK
SCLK
ボーレート
コントロール
レジスタ
IM バス
受信データ
レジスタ
レシーバ
RTS*
リード
レシーバ
バッファ シフトレジスタ
RXD
受信データ FIFO
DMA/INT
コントロール
レジスタ
割り込み I/F
READ
/WRITE
リセット*
DMA/INT
ステータス
レジスタ
FIFO
コントロール
レジスタ
ステータス
変化割り込み
ステータス
レジスタ
ライン
コントロール
レジスタ
要求
コントロール
送信データ
レジスタ
送信データ FIFO
トランスミッタ
CTS*
トランスミッタ
TEMP
バッファ シフトレジスタ
TXD
図 13.2.1 SIO 内部ブロック図
13-2
第 13 章 シリアル I/O ポート (SIO)
“0” ライト
SITXDACK
DMAC
R
SITXDREQ*
SIDICR.TDE
SIDSR.TDIS
SITXIREQ*
SIDICR.TIE
SISCISR.OERS
SIDICR.STIE[5]
R
“0” ライト
CTS 端子
SISCISR.CTSS
SIDICR.STIE[4]
S
SIDICR.CTSAC
SISTIREQ*
SISCISR.RBRKD (ブレーク受信中)
SIDICR.STIE[3]
SISCISR.TRDY (送信 FIFO に空き)
SIDICR.STIE[2]
SISCISR.STIS
R
“0” ライト
SISCISR.TXALS (送信 FIFO、送信レジスタすべて空き)
SIDICR.STIE[1]
SISCISR.UBRKD
SIDICR.STIE[0]
R
“0” ライト
SIDISR.UFER
R
受信 FIFO リード
SIDISR.UPER
SIDISR.FRI
IRC へ
SISPIREQ*
SIDICR.SPIE R
“0” ライト
SIDISR.UOER R
受信 FIFO リード
R
受信 FIFO リード
SIDISR.TOUT
R
“0” ライト
SIRXIREQ*
SIDICR.RIE
SIDISR.RDIS
SIRXDREQ
DMAC
SIRXDACK
SIDICR.RDE
“0” ライト
R
図 13.2.2 ステータスビットと割り込み信号の関係
13-3
第 13 章 シリアル I/O ポート (SIO)
13.3 レジスタ
13.3.1
レジスタマップ
シリアル I/O ポート内のすべてのレジスタは必要ない限りワードアクセスしてください。ま
た、未定義ビットに対しては、示してある値を書き込んでください。
表 13.3.1 SIO レジスタ一覧
アドレス
レジスタ記号
レジスタ名
SIO1 (チャネル 1)
0xFFFE_F420
SIRFIFO1
受信 FIFO レジスタ 1
0xFFFE_F41C
SITFIFO1
送信 FIFO レジスタ 1
0xFFFE_F418
SIBGR1
ボーレートコントロールレジスタ 1
0xFFFE_F414
SIFLCR1
フローコントロールレジスタ 1
0xFFFE_F410
SIFCR1
FIFO コントロールレジスタ 1
0xFFFE_F40C
SISCISR1
ステータス変化割り込みステータスレジスタ 1
0xFFFE_F408
SIDISR1
DMA/割り込みステータスレジスタ 1
0xFFFE_F404
SIDICR1
DMA/割り込みコントロールレジスタ 1
0xFFFE_F400
SILCR1
ラインコントロールレジスタ 1
0xFFFE_F320
SIRFIFO0
受信 FIFO レジスタ 0
0xFFFE_F31C
SITFIFO0
送信 FIFO レジスタ 0
0xFFFE_F318
SIBGR0
ボーレートコントロールレジスタ 0
0xFFFE_F314
SIFLCR0
フローコントロールレジスタ 0
0xFFFE_F310
SIFCR0
FIFO コントロールレジスタ 0
0xFFFE_F30C
SISCISR0
ステータス変化割り込みステータスレジスタ 0
0xFFFE_F308
SIDISR0
DMA/割り込みステータスレジスタ 0
0xFFFE_F304
SIDICR0
DMA/割り込みコントロールレジスタ 0
0xFFFE_F300
SILCR0
ラインコントロールレジスタ 0
SIO0 (チャネル 0)
13-4
第 13 章 シリアル I/O ポート (SIO)
13.3.2
ラインコントロールレジスタ (SILCRn)
0xFFFE_F300 (Ch. 0)
0xFFFE_F400 (Ch. 1)
このレジスタは、非同期送信/受信データのフォーマットを指定します。
31
16
不定
: タイプ
: 初期値
15
14
13
RWUB TWUB UODE
R/W
0
ビット
R/W
1
12
7
0
5
SCS
R/W
0
ニモニック
6
R/W
00
フィールド名
4
3
2
UEPS UPEN USBL
R/W
0
R/W
0
R/W
0
1
0
UMODE
R/W
00
: タイプ
: 初期値
説 明
15
RWUB
受信ウェイク
アップビット
14
TWUB
送信ウェイク
アップビット
Wake Up Bit for Transmit (初期値 1)
マルチコントローラシステムモードで自局がマスタコントローラである場合にそ
の送信アドレス (ID)/データに付加するウェイクアップビットを指定します。
0: データフレーム転送
1: アドレス (ID) フレーム転送 (デフォルト)
13
UODE
オープンドレイン
イネーブル
TXD Open Drain Enable (初期値 0)
マルチコントローラシステムモードでは、スレーブコントローラは TXD をオープ
ンドレーンにしなければなりません。
0: TXD オープンドレーンがディセーブル
1: TXD オープンドレーンがイネーブル
6:5
SCS
クロックセレクト
SIO Clock Select (初期値 00)
シリアル転送クロックを選択します。シリアル転送クロックは、ボーレート (bps) の
16 倍の周波数のクロックです。
00: 内部システムクロック (IMCLK (133 MHz CPU クロックの 1/4))
01: ボーレートジェネレータ (入力クロック: IMCLK)
10: 外部クロック (SCLK)
11: ボーレートジェネレータ (入力クロック: SCLK)
4
UEPS
イーブンパリティ
セレクト
UART Even Parity Select (初期値 0)
パリティモードを偶数 (Even) パリティにします。
0: 奇数パリティ
1: 偶数パリティ
機能
UPEN
UEPS
奇数パリティ
1
0
偶数パリティ
1
1
パリティディセーブル
0
*
3
UPEN
パリティチェック
イネーブル
UART Parity Enable (初期値 0)
0: パリティチェックをディセーブル
1: パリティチェックをイネーブル
マルチコントロールシステムモード (UMODE = 10, 11) では “0” でなければなりま
せん。
Wake Up Bit for Receive (初期値 0)
0: マルチコントローラシステムモードで自局がスレーブコントローラである場合
に、自局が選択されたときに “0” にセットしてください。RWUB が 0 のとき、ス
レーブコントローラはマスタコントローラからデータを受信します。
1: マルチコントローラシステムモードで自局がスレーブコントローラである場合
すなわちマスタコントローラからアドレス (ID) フレーム受信を実行している場
合に “1” にセットします。受信データフレームの WUB が “1” (アドレスフレーム)
のときは、それを受信するとホストに対して割り込みが発生します。WUB が 0
(データフレーム) のときは、受信したデータは読み捨てます。
図 13.3.1 ラインコントロールレジスタ (1/2)
13-5
第 13 章 シリアル I/O ポート (SIO)
ビット
ニモニック
フィールド名
説 明
2
USBL
ストップビット長
UART Stop Bit Length (初期値 0)
ストップビット長を指定します。
1: 1 ビット
0: 2 ビット
1:0
UMODE
モード
UART Mode (初期値 00)
SIO モードを設定します。
00: 8 ビットデータ長
01: 7 ビットデータ長
10: マルチコントローラ 8 ビットデータ長
11: マルチコントローラ 7 ビットデータ長
図 13.3.2 ラインコントロールレジスタ (2/2)
13-6
第 13 章 シリアル I/O ポート (SIO)
13.3.3
DMA/割り込みコントロールレジスタ (SIDICRn)
0xFFFE_F304 (Ch. 0)
0xFFFE_F404 (Ch. 1)
DMA または割り込みによってホストインタフェースを実行するために指定します。
31
16
不定
: タイプ
: 初期値
15
TDE
14
RDE
13
TIE
12
RIE
11
SPIE
10
9
CTSAC
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
R/W
00
8
6
5
0
0
STIE
R/W
000000
: タイプ
: 初期値
ビット
ニモニック
フィールド名
説 明
15
TDE
送信データ DMA
要求 (SITXDREQ)
14
RDE
受信データ DMA
要求 (SIRXDREQ)
13
TIE
送信データ
割り込み要求
(SITXIREQ)
12
RIE
受信データ
割り込み要求
(SIRXIREQ)
11
SPIE
特別受信データ
割り込み要求
(SISPIREQ)
10 : 9
CTSAC
5:0
STIE
Transmit DMA Enable (初期値 0)
SIDISR. TDIS が 1 になると SITXDREQ をアサートします。
0: ディセーブル
1: イネーブル
Receive DMA Enable (初期値 0)
SIDISR. RDIS が 1 になると SIRXDREQ をアサートします。ただし、SIDISR.ERI
が 1 になると、SIRXDREQ をアサートしません。
0: ディセーブル
1: イネーブル
Transmit Interrupt Enable (初期値 0)
SIDISR. TDIS が 1 になると SITXIREQ をアサートします。
0: ディセーブル
1: イネーブル
Receive Interrupt Enable (初期値 0)
DMA 受信モード時 (RDE = 1)
SIDISR の ERI または TOUT が 1 になると SIRXIREQ をアサートします。
0: イネーブル
1: ディセーブル (設定禁止)
DMA 受信モード以外 (RDE = 0)
SIDISR の TOUT または RDIS が 1 になると SIRXIREQ をアサートします。
0: ディセーブル
1: イネーブル
Special Receive Interrupt Enable (初期値 0)
SIDISR. ERI が 1 になると SISPIREQ をアサートします。
0: ディセーブル
1: イネーブル
CTSS Active Condition (初期値 00)
ステータス変化割り込みステータスの CTSS にて、ステータス変化割り込み要求
(SISTIREQ)のアサート条件を指定します。
00: ディセーブル
01: CTS 端子の立ち上がりエッジ
10: CTS 端子の立ち下がりエッジ
11: CTS 端子の両エッジ
Status Change Interrupt Enable Channel 1 (初期値 0x00)
SIDISR. STIS のアクティブ条件をステータス変化割り込みステータス(SISCISR)
より選択します。(複数選択可能)
STIS が “1” になると、SISTIREQ をアサートします。
000000: ディセーブル
1* * * * *: OERS が 1 になると STIS に 1 をセットします。
* 1* * * *: CTSS に CTSAC で設定した条件の変化が起こると STIS に 1 をセットします。
* * 1* * *: RBRKD が 1 になると STIS に 1 をセットします。
* * * 1* *: TRDY が 1 になると STIS に 1 をセットします。
* * * * 1*: TXALS が 1 になると STIS に 1 をセットします。
* * * * *1: UBRKD が 1 になると STIS に 1 をセットします。
CTSS アクティブ
条件
ステータス変化
割り込み要求
(SISTIREQ)
(注) 設定の組み合わせについては、表 13.4.3を参照してください。
図 13.3.3 DMA/割り込みコントロールレジスタ
13-7
第 13 章 シリアル I/O ポート (SIO)
13.3.4
DMA/割り込みステータスレジスタ (SIDISRn)
0xFFFE_F308 (Ch. 0)
0xFFFE_F408 (Ch. 1)
DMA または割り込みのステータス情報を示します。
31
16
不定
: タイプ
: 初期値
15
14
13
12
11
UBRK UVALID UFER UPER UOER
R
0
ビット
R
1
R
0
ニモニック
R
0
R
0
10
ERI
R/W
0
9
8
TOUT TDIS
R/W
0
R/W
1
7
RDIS
6
STIS
R/W
0
R/W
0
フィールド名
5
0
4
0
RFDN
R/W
00000
: タイプ
: 初期値
説 明
15
UBRK
ブレーク受信
14
UVALID
受信 FIFO
アベイラブル
ステータス
UART Available Data (初期値 1)
受信 FIFO (SIRFIFO)内のデータの有無を示します。
0: データあり
1: データなし
13
UFER
フレームエラー
UART Frame Error (初期値 0)
受信 FIFO に格納している先頭のフレームエラーステータスを示します。ステータ
スは、受信 FIFO レジスタ (SIRFIFO)をリードすることによって更新されます。
0: フレームエラーなし
1: フレームエラーあり
12
UPER
パリティエラー
UART Parity Error (初期値 0)
受信 FIFO に格納している先頭のパリティエラーステータスを示します。ステータ
スは、受信 FIFO レジスタ (SIRFIFO)をリードすることによって更新されます。
0: パリティエラーなし
1: パリティエラーあり
11
UOER
オーバランエラー
UART Overrun Error (初期値 0)
受信 FIFO に格納している先頭のオーバランエラーステータスを示します。ステー
タスは、受信 FIFO レジスタ (SIRFIFO) をリードすることによって更新されます。
0: オーバランエラーなし
1: オーバランエラーあり
10
ERI
エラー割り込み
Error Interrupt (初期値 0)
受信エラー (フレームエラー、パリティエラー、およびオーバランエラー) が検出さ
れると、ただちに “1” がセットされます。
このビットに “0” をライトすると、クリアされます。“1” をライトしても無視されま
す。
9
TOUT
受信タイムアウト
Time Out (初期値 0)
受信タイムアウトが発生すると、“1” がセットされます。
このビットに “0” をライトすると、クリアされます。“1” をライトしても無視されま
す。
UART Break (初期値 0)
受信 FIFO に格納している先頭のブレーク受信ステータスを示します。ステータス
は、受信 FIFO レジスタ (SIRFIFO)をリードすることによって更新されます。
0: ブレークなし
1: ブレークを検出
図 13.3.4 DMA/割り込みステータスレジスタ (1/2)
13-8
第 13 章 シリアル I/O ポート (SIO)
ビット
ニモニック
フィールド名
説 明
8
TDIS
送信データ
エンプティ
Transmit DMA/Interrupt Status (初期値 1)
送信 FIFO に SIFCR. TDIL で設定した数の空きができると、“1” がセットされます。
• 割り込みモード (SIDICR. TIE = 1)
このビットが “1” になると、SITXIREQ がアサートされます。
このビットに “0” をライトすると、クリアされ、SITXIREQ がデアサートされま
す。
• DMA 送信モード (SIDICR. TDE = 1)
このビットが “1” になると、SITXDREQ がアサートされます。
SITXDACK 信号が入力されると、このビットがクリアされ、SITXDREQ がデア
サートされます (図 13.5.2を参照)。
7
RDIS
受信データフル
Receive DMA/Interrupt Status (初期値 0)
受信 FIFO に SIFCR. RDIL で設定された数の有効データが格納されると、“1” がセ
ットされます。
• 割り込みモード (SIDICR. RIE = 1)
このビットが “1” になると、SIRXIREQ*がアサートされます。
このビットに “0” をライトすると、クリアされ、SIRXIREQ がデアサートされま
す。
• DMA 受信モード (SIDICR. RDE = 1)
このビットが “1” になると、SIRXDREQ がアサートされます。
SIRXDACK 信号が入力されると、このビットがクリアされ、SIRXDREQ がデア
サートされます (図 13.5.2を参照)。
6
STIS
ステータース変化
Status Change Interrupt Status (初期値 0)
SIDICR. STIE で選択されたステータスが “1” になると、“1” がセットされます。
このビットが “1” になると、SISTIREQ がアサートされます。このビットに “0” を
ライトすると、クリアされ、SISTREQ がデアサートされます。
4:0
RFDN
受信データ段数
ステータス
Receive FIFO Data Number (初期値 00000)
受信 FIFO に受信データが何段たまっているかを示します。(0~16 段)
図 13.3.5 DMA/変化割り込みステータスレジスタ (2/2)
13-9
第 13 章 シリアル I/O ポート (SIO)
13.3.5
ステータス変化割り込みステータスレジスタ (SISCISRn)
0xFFFE_F30C (Ch. 0)
0xFFFE_F40C (Ch. 1)
31
16
不定
: タイプ
: 初期値
15
6
0
5
4
3
2
1
0
OERS CTSS RBRKD TRDY TXALS UBRKD
R/W
0
R
0
R
0
R
1
R
1
R/W : タイプ
: 初期値
0
ビット
ニモニック
フィールド名
説 明
5
OERS
オーバランエラー
Overrun Error Status (初期値 0)
オーバランエラーが検出されると、“1” がセットされます。“0” をライトすると、ク
リアされます。
4
CTSS
送信許可
ステータス
CTS Terminal Status (初期値 0)
CTS 信号のステータスを示します。
1: CTS 信号が High
0: CTS 信号が Low
3
RBRKD
ブレーク受信
Receive Break (初期値 0)
RXD 信号のブレークを監視します。
1: ブレークステータス中です。
0: ブレークステータス中ではありません。
2
TRDY
送信データ
エンプティ
Transmit Ready (初期値 1)
送信 FIFO に最低 1 段でも空きがあると、“1” がセットされます。
1
TXALS
送信完了
Transmit All Sent (初期値 1)
送信 FIFO と送信シフトレジスタがすべて空になると、“1” がセットされます。
0
UBRKD
ブレーク発見
UART Break Detect (初期値 0)
ブレークが検出されると、“1” がセットされます。
“0” をライトすると、クリアされます。
図 13.3.6 ステータス変化割り込みステータスレジスタ
13-10
第 13 章 シリアル I/O ポート (SIO)
13.3.6
FIFO コントロールレジスタ (SIFCRn)
0xFFFE_F310 (Ch. 0)
0xFFFE_F410 (Ch. 1)
送信/受信 FIFO バッファのコントロールを設定します。
31
16
不定
: タイプ
: 初期値
15
9
0
SWRST
7
RDIL
R/W
0
ビット
8
6
5
4
0
R/W
00
ニモニック
フィールド名
3
TDIL
R/W
00
2
1
0
TFRST RFRST FRSTE
R/W
0
R/W
0
R/W : タイプ
0
: 初期値
説 明
ソフトウエア
リセット
Software Reset (初期値 0)
SIO 全体のソフトウエアリセットを行います。このビットに “1” をセットすると、
SIO 全体を初期化します。初期化が終わるとこのビットは “0” に戻ります。
0: 通常動作
1: SIO ソフトウエアリセット
15
SWRST
8:7
RDIL
受信 FIFO
リクエストトリガ
レベル
Receive FIFO DMA/Interrupt Trigger Level (初期値 00)
受信 FIFO からの受信データ転送レベルを設定します。
00: 1 バイト
01: 4 バイト
10: 8 バイト
11: 12 バイト
4:3
TDIL
送信 FIFO
リクエストトリガ
レベル
Transmit FIFO DMA/Interrupt Trigger Level (初期値 00)
送信 FIFO への送信データ転送レベルを設定します。
00: 1 バイト
01: 4 バイト
10: 8 バイト
11: 設定禁止
2
TFRST
送信 FIFO
リセット
Transmit FIFO Reset (初期値 0)
このビットに “1” をライトすると、送信 FIFO バッファがリセットされます。FRSTE
が “1” のとき有効です。
1: 送信用 FIFO リセット
1
RFRST
受信 FIFO
リセット
Receive FIFO Reset (初期値 0)
このビットに “1” をライトすると、受信 FIFO バッファがリセットされます。FRSTE
が “1” のとき有効です。
1: 受信用 FIFO リセット
0
FRSTE
FIFO リセット
イネーブル
FIFO Reset Enable (初期値 0)
送信/受信 FIFO バッファのリセットイネーブル。TFRST と RFRST と組み合わせる
ことによって FIFO をリセットします。
1: リセットイネーブル
図 13.3.7 FIFO コントロールレジスタ
13-11
第 13 章 シリアル I/O ポート (SIO)
13.3.7
フローコントロールレジスタ (SIFLCRn)
0xFFFE_F314 (Ch. 0)
0xFFFE_F414 (Ch. 1)
31
16
不定
: タイプ
: 初期値
15
13
0
12
RCS
11
TES
R/W
0
R/W
0
10
0
9
8
7
RTSSC RSDE TSDE
R/W
0
R/W
1
6
5
4
0
R/W
1
R/W
0001
0
TBRK
R/W : タイプ
: 初期値
0
ビット
ニモニック
12
RCS
RTS 端子制御
セレクト
RTS Control Select (初期値 0)
RTS 信号のコントロールを選択します。
0: ソフトウエアによって RTS をコントロール (RTSSC ビット)。
1: ソフトウエアとハードウエア (RTSTL ビット) の 2 要因の OR によって RTS をコ
ントロール。
11
TES
送信要求セレクト
Transmit Enable Select (初期値 0)
送信要求を選択します。
0: 送信要求コマンド (TSDE) にて制御します。
1: 送信要求コマンドと CTS 端子 (ハード制御) の 2 要因の OR によって制御します。
9
RTSSC
RTS ソフト制御
RTS Software Control (初期値 0)
RTS 信号をソフト的にコントロールします。
0: RTS 信号を Low にします。
1: RTS 信号を High にします。
8
RSDE
シリアルデータ
受信要求
Receive Serial Data Enable (初期値 1)
シリアルデータ受信要求。1 をセットすると受信データを読み捨てます。
0: イネーブル
1: ディセーブル
7
TSDE
シリアルデータ
送信要求
Transmit Serial Data Enable (初期値 1)
シリアルデータ送信要求。1 をセットすると送信を停止します。送信中の場合は、
現在のデータ送信完了後停止します。
0: イネーブル
1: ディセーブル
4:1
RTSTL
RTS アクティブ
トリガレベル
RTS Trigger Level (初期値 0001)
RTS ハード制御のアサートレベルを受信 FIFO の受信データ段数にて設定します。
0000: 設定禁止
0
TBRK
フィールド名
1
RTSTL
ブレーク送信
説 明
0001: 1
:
1111: 15
Break Transmit (初期値 0)
ブレークを送信します。
0: ディセーブル
1: イネーブル
図 13.3.8 フローコントロールレジスタ
13-12
第 13 章 シリアル I/O ポート (SIO)
13.3.8
ボーレートコントロールレジスタ (SIBGRn)
0xFFFE_F318 (Ch. 0)
0xFFFE_F418 (Ch. 1)
ボーレートジェネレータに与えるクロックの選択と分周値の設定を行います。
31
16
不定
: タイプ
: 初期値
15
10
0
9
8
7
0
BCLK
BRD
R/W
11
R/W
0xFF
フィールド名
: タイプ
: 初期値
ビット
ニモニック
説 明
9:8
BCLK
ボーレート生成
クロック
Baud Rate Generator Clock (初期値 11)
ボーレートジェネレータの入力クロックを指定します。
00: プリスケーラ出力 T0 (IMCLK/2) を選択
01: プリスケーラ出力 T2 (IMCLK/8) を選択
10: プリスケーラ出力 T4 (IMCLK/32) を選択
11: プリスケーラ出力 T6 (IMCLK/128) を選択
7:0
BRD
ボーレート分周値
Baud Rate Divide Value (初期値 0xFF)
ボーレートジェネレータの分周値 BRG を設定します。2 進数値で指定します。
図 13.3.9 ボーレートコントロールレジスタ
13-13
第 13 章 シリアル I/O ポート (SIO)
13.3.9
送信 FIFO レジスタ (SITFIFOn)
0xFFFE_F31C (Ch. 0)
0xFFFE_F41C (Ch. 1)
31
16
不定
: タイプ
: 初期値
15
8
7
0
0
TxD
W

ビット
ニモニック
7:0
TxD
フィールド名
送信データ
説 明
Transmit Data
送信データを送信 FIFO に書き込みます。
図 13.3.10 送信 FIFO レジスタ
13-14
: タイプ
: 初期値
第 13 章 シリアル I/O ポート (SIO)
13.3.10 受信 FIFO レジスタ (SIRFIFOn)
0xFFFE_F320 (Ch. 0)
0xFFFE_F420 (Ch. 1)
31
16
不定
: タイプ
: 初期値
15
8
7
0
0
RxD
R

ビット
ニモニック
7:0
RxD
フィールド名
受信データ
説 明
Receive Data
受信データを受信 FIFO から読み出します。
受信データの更新は、このレジスタを読み出すことで行います。
図 13.3.11 受信 FIFO レジスタ
13-15
: タイプ
: 初期値
第 13 章 シリアル I/O ポート (SIO)
13.4 動作
13.4.1
概要
TX3927 SIO は、RXD 信号に入力される外部からのシリアルデータをシフトレジスタによ
ってパラレルデータに変換します。変換されたパラレルデータは、受信 FIFO バッファ内に格
納されます。FIFO バッファ内に格納されたパラレルデータは、CPU または DMA 転送によっ
て取り出されます。
送信時、パラレルデータは CPU または DMA 転送によって送信 FIFO バッファ内にライト
され、順次シフトレジスタにロードされます。パラレルデータは、シフトレジスタによってシ
リアルデータに変換され、TXD 信号から出力されます。
ボーレートジェネレータは、送信および受信の基本となるクロックを生成します。このクロ
ックは、送信ボーレートの 16 倍の周波数で生成されます。この周波数レートは、レジスタに
よって設定します。
13.4.2
データフォーマット
TX3927 SIO は、以下のデータフォーマットを使用できます。
データ長: 9、8、ならびに 7 ビット (9 ビットデータはマルチコントロールシステムをサ
ポートしています)
ストップビット: 1 および 2 ビット
パリティビット: あり/なし
パリティ方式: 偶数/奇数
スタートビットは 1 ビットに固定されています。
図 13.4.1に、データフレームコンフィグレーションを示します。
13-16
第 13 章 シリアル I/O ポート (SIO)
8 ビットデータ
転送方向
1
2
3
4
5
6
7
8
9
10
11
12
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
Parity
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
Parity
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
stop
1
2
3
4
5
6
7
8
9
10
11
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
Parity
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
Parity
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
stop
7 ビットデータ
12
WUB = ウェイクアップビット
1: アドレス (ID) フレーム
0: データフレーム
8 ビットデータ マルチコントロールシステム
1
2
3
4
5
6
7
8
9
10
11
12
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
WUB
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
WUB
stop
7 ビットデータ マルチコントロールシステム
1
2
3
4
5
6
7
8
9
10
11
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
WUB
stop
stop
Start
bit0
bit1
bit2
bit3
bit4
bit5
bit6
WUB
stop
図 13.4.1 データフレームコンフィグレーション
13-17
12
第 13 章 シリアル I/O ポート (SIO)
13.4.3
シリアルクロックジェネレータ
SIOCLK (シリアル転送レートを決定する送信/受信クロック) は、ボーレートジェネレータ
回路の出力、内部システムクロック (IMCLK)、または外部クロック入力 (SCLK) から選択可
能です。IMCLK は、CPU の通常のクロック周波数の 1/4 です (すなわち、CPU の周波数が
133 MHz であると、IMCLK は 33.25 MHz になります)。
SCLK は IMCLK の半分未満の周波数で使用してください。(「第 17 章 電気的特性」を参
照)
T0
T2
IMCLK
T4
SIOCLK
fc
T6
SCLK
セレクタ
プリスケーラ
セレクタ
分周器
CLK 選択
ボーレート
分周値
SIBGR. BCLK
SIOCLK 選択
SIBGR. BRD
SILCR. SCS [1]
ボーレートジェネレータ
セレクタ
SIOCLK 選択
SILCR. SCS [0]
図 13.4.2 ボーレートジェネレータと SIOCLK ジェネレータ
13.4.4
ボーレートジェネレータ
ボーレートジェネレータは、シリアル I/O の転送スピードを制御する送信/受信クロックを生
成するための回路です。
ボーレート =
ボーレートジェネレータの入力クロック
÷ 16
ボーレートジェネレータの分周値
ボーレートジェネレータに対する入力クロックは、プリスケーラの T0、T2、T4、および T6
から選択して入力します。言い換えれば、ボーレートジェネレータの入力クロックは、選択さ
れたプリスケーラ値で fc を割った値に等しくなります。ただし、fc は IMCLK または外部クロ
ック (SCLK) 入力に等しい値です。
選択されたボーレートジェネレータ入力クロックは、ボーレートコントロールレジスタで設
定された値で分周されます (1、2、3、…………255 分周)。
送信/受信 SIO クロックは、ボーレート (bps) の 16 倍のクロックです。表 13.4.1に、分周ラ
ッチの値とボーレートとの関係を示します。表 13.4.2に、代表的なボーレートに対する分周値
の設定を示します。
13-18
第 13 章 シリアル I/O ポート (SIO)
表 13.4.1 分周ラッチの値とボーレート (単位: kbps)
ボーレートジェネレータ出力クロック
IMCLK
BRG
T0
T2
T4
T6
[MHz]
デバイダ
fc/2
fc/8
fc/32
fc/128
33.25
33.25
33.25
33.25
33.25
33.25
32.00
32.00
32.00
32.00
24.57
24.57
24.57
24.57
24.57
16.00
16.00
18
28
54
72
108
216
26
52
104
208
10
20
40
80
160
26
52
57.73
37.11
19.24
14.43
9.62
4.81
38.46
19.23
9.62
4.81
76.78
38.39
19.20
9.60
4.80
19.23
9.62
14.43
9.28
4.81
3.61
2.41
1.20
9.62
4.81
2.40
1.20
19.20
9.60
4.80
2.40
1.20
4.81
2.40
3.61
2.32
1.20
0.90
0.60
0.30
2.40
1.20
0.60
0.30
4.80
2.40
1.20
0.60
0.30
1.20
0.60
0.90
0.58
0.30
0.23
0.15
0.08
0.60
0.30
0.15
0.08
1.20
0.60
0.30
0.15
0.07
0.30
0.15
表 13.4.2 分周値設定例
IMCLK
[MHz]
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
33.25
kbps
0.11
0.15
0.3
0.6
1.2
2.4
4.8
9.6
14.4
19.2
28.8
38.4
57.6
76.8
fc/2
216
108
72
54
36
27
18
14
13-19
fc/8
216
108
54
27
18
14
9
7
5
3
fc/32
216
108
54
28
14
7
5
3
2
2
1
fc/128
148
108
54
28
14
6
4
2
1
第 13 章 シリアル I/O ポート (SIO)
13.4.5
受信制御部
受信制御部は、SIFLCR. RSDE が “1” にセットされると、RXD 信号のスタートビット検出
後に受信動作を開始します。
受信コントローラは、スタートビットの検出を RXD の “1” から “0” への遷移時に行うため、
SIFLCR. RSDE が “1” にセットされたときは RXD の値が “0” でもこれをスタートビットとは
見なしません。スタートビットが検出されると、RXD 信号からデータをサンプリングします。
データ受信は、多数決論理によって実行されます。スタートビットと各データビットは、ボ
ーレートの 16 倍の周波数の SIOCLK でサンプリングされます。7 番目、8 番目、9 番目のク
ロックの 3 つの結果で多数決論理を行います(3 つのデータの内、2 つ以上等しいデータに決ま
ります)。
13.4.6
受信シフトレジスタ
これは 8 ビットのシフトレジスタです。受信された最初のデータビットがビット 0 (最下位
ビット) になるようにシフトインします。
13.4.7
受信リードバッファ
これは、受信シフトレジスタと受信 FIFO バッファ間にあるバッファです。データフレーム
受信後、そのデータはこのバッファ内に格納され、パリティチェックが実行されます。
13.4.8
送信制御部
送信シフトレジスタが前のデータのすべてを送り出すと、送信 FIFO バッファから送信シフ
トレジスタに 1 データフレームが送られます。SIOCLK 16 クロックごとに 1 ビットが送出さ
れます。
13.4.9
送信シフトレジスタ
これは 8 ビットのシフトレジスタです。最下位ビットから順にシフトアウトしてデータを送
信します。
13.4.10 ホスト I/F
送信 FIFO への送信データ書き込みは、送信データエンプティによる割り込み処理または
DMA 転送によって行われます。SIFCR. TDIL で設定しているだけ、送信 FIFO に空きがあれ
ば、要求を発生させメモリから送信用データを取り込みます。
受信 FIFO からの受信データ読み出しは、受信データフルによる割り込み処理または DMA
転送によって実行されます。SIFCR. RDIL で設定しているだけ受信 FIFO にデータがたまる
と要求を発生させメモリに受信データを書き込みます。
表 13.4.3 レジスタビット設定と送信/受信動作
TDE
RDE
TIE
RIE
送 信
受 信
0
0
0
0
TDIS ポーリング
RDIS ポーリング
割り込み
(注)
0
0
0
1
TDIS ポーリング
0
0
1
0
割り込み
RDIS ポーリング
0
0
1
1
割り込み
割り込み
0
1
0
0
TDIS ポーリング
DMA
0
1
1
0
割り込み
1
0
0
0
DMA
DMA
RDIS ポーリング
1
0
0
1
DMA
割り込み
1
1
0
0
DMA
DMA
上記以外の組み合わせは設定禁止です。
13-20
第 13 章 シリアル I/O ポート (SIO)
13.4.11 フロー制御部
データ送信では、送信イネーブルはソフトウエア (SILCLR. TSDE) による制御またはソフ
トウエアとハードウエア (CTS 信号) の組み合わせ (2 要因の OR) による制御が可能です。どち
らの制御を選択するかは、SIFLCR. TES によって決定します。
送信イネーブル (SIFLCR. TSDE) が “1” になると、現在送信中のデータを送信完了後このビ
ットが Low になるまで送信を停止します。
CTS 端子のステータスは監視可能で、ステータス変化割り込みを発生させることもできます。
データ受信では、RTS 制御 (SIFLCR. RSDE) によるソフトウエア制御または、ソフト制御
と受信 FIFO データ段数によるハードウエアの制御 (SIFLCR. RTSTL) の 2 要因の OR で RTS
端子を制御します。
ハード制御はフロー制御レジスタ (SIFLCR) の RTSTL ビットで設定したレベルだけ受信
FIFO にデータがたまると、RTS 端子を High にします。
データ受信では、RTS*信号を High にすることにより、トランスミッタに対する送信を一
時停止することを要求します。レシーバがレディになったときに、RTS*信号を Low にするこ
とにより、送信を再開します。
トランスミッタをハードウエア制御 (SIFLCR. TSE = 1) として設定し、レシーバを 1 バイト
転送 (SIFLCR. RTSTL = 0001) として設定することにより、データ転送を 1 フレーム (ハンド
シェイク) 単位で実行することができます。
13.4.12 パリティ制御部
送信オペレーションでは、送信シフトレジスタに書き込まれたデータによってパリティ制御
回路が自動的にパリティを生成します。そのパリティはデータ長が 7 ビットの場合は送信シフ
トレジスタのビット 7 (最上位) に格納され、データ長が 8 ビットの場合はラインコントロール
レジスタの TWUB に格納されます。
受信オペレーションでは、受信シフトレジスタから受信リードバッファにデータが書き込ま
れるとパリティチェックを行います。データ長が 7 ビットのときはリードバッファのビット 7
(最上位) のパリティビットと、データ長が 8 ビットのときはラインコントロールレジスタの
RWUB 内に格納されたパリティビットと比較します。そして、比較した結果が一致しない場
合は、パリティエラーが発生します。
13.4.13 エラーフラグ
•
オーバランエラー
16 段の受信 FIFO バッファがすべて一杯のときに、次のデータが受信リードバッファ
に転送されたときオーバランエラーが発生します。このときオーバランステータスビット
は、受信 FIFO の 16 段目にセットされます。
•
パリティエラー
パリティエラーは、受信データに付加されたパリティビットにより、パリティエラーを
検出すると発生します。
•
フレーミングエラー
フレーミングエラーは、受信データのストップビットで “0” が検出されると (SIOCLK
の 7、8、9 番目のクロックにおけるサンプリングでは多数決論理) 発生します。
(送信側でストップビット長を 2 と設定してもサンプリングタイミングは変わりませ
ん。)
13-21
第 13 章 シリアル I/O ポート (SIO)
13.4.14 ブレーク検出
ブレークは、受信データにフレーミングエラーが発生し、かつ 1 フレーム内のすべてのデー
タが “0” の場合に検出されます。このとき SSCISR. RBRKD がセットされます。
また、このとき受信 FIFO に 0x00 のデータが 2 フレーム分格納されます。
13.4.15 受信タイムアウト
受信タイムアウトは、受信 FIFO に最低 1 バイト受信データが存在する状態で最後のデータ
を受信してから 2 バイト分のデータ受信時間が経過したときに発生します。SIDISR. TOUT
は受信タイムアウトがセットされ、タイムアウトが発生したことを示します。
タイムアウト時間は、受信データを受けとると再スタートします。また、受信 FIFO のデー
タをすべて読み出すとリセットされ、次にデータを受信するまでカウントを開始しません。
13.4.16 受信データ転送と受信 FIFO のステータスビットの取り扱いについて
•
受信データだけでなく、以下のステータス情報も受信 FIFO に格納します。
ブレーク受信 (UBRK)
•
受信 FIFO アベイラブルステータス (UVALID)
•
フレーミングエラー (UFER)
•
パリティエラー (UPER)
•
オーバランエラー (UOER)
ステータスは SIDISR レジスタからリード可能で、受信 FIFO (SIRFIFO) をリードするこ
とによって更新されます。
受信データ転送要求 (SIRXIREQ*) によりステータスを読み出した後、受信データを読み出
すことによって、受信エラーの追い越しが発生しない時系列的な受信データ転送処理が可能で
す 。 た だ し 特 別 受 信 割 り 込 み 要 求 (SISPIREQ*) お よ び ス テ ー タ ス 変 化 割 り 込 み 要 求
(SISTIREQ*)を使用して、受信エラーの追い越しを発生させることもできます。
DMA 転送モードでは、受信エラーのない受信データのみを転送します。エラー (フレーミン
グエラー、パリティエラー、またはオーバランエラー) および受信タイムアウト (TOUT) が発
生すると、受信データ転送要求 (SIRXIREQ*) をアサートして、受信エラーを通知します。
DMA 転送モードで、受信エラーが発生したときは受信 FIFO をクリアしてください。
(注)
受信 FIFO の 16 バイト目に取り込んだデータに対しては UVALID フラグが立ってしま
いますので注意してください。RFDN には FIFO 中の残りデータ数が正しく表示されま
すので、こちらを参考にしてください。
13.4.17 マルチコントローラシステム
SILCR. UMODE が “10” または “11” のとき、マルチコントローラシステムモードになりま
す。マルチコントローラシステムでは、マスタコントローラがスレーブコントローラに対して
アドレス (ID) を送信してスレーブコントローラを選択した後、選択されたスレーブコントロ
ーラにデータを送信します。選択されなかったスレーブコントローラは、そのデータを無視し
ます。アドレス (ID) の送信は、データフレームの WUB を “1” にして行います。データの送
信は WUB を “0” にして行います。ID の比較は、ソフトウエアによって実行されます (スレー
ブコントローラが受信した ID とソフトウエアが認識しているスレーブコントローラの ID と
の比較)。
13-22
第 13 章 シリアル I/O ポート (SIO)
13.4.17.1 プロトコル
(1) マスタおよびスレーブコントローラは、ラインコントロールレジスタの UMODE を
“10” または “11” に設定することによってマルチコントローラシステムモードにしま
す。
(2) スレーブコントローラは、ラインコントロールレジスタの RWUB を “1” に設定する
ことによって、アドレス (ID) フレームをマスタコントローラからの受信可能な状態
にします。
(3) マスタコントローラは、送信フレームの WUB を “1” にセットすることによって (ラ
インコントロールレジスタ TWUB = 1)、スレーブコントローラのアドレス (ID) (8 ビ
ットまたは 7 ビット) を送信します。
(4) スレーブコントローラは、
RWUB が “1” のときに、
受信データフレームの WUB が “1”
の場合に (受信データがアドレスフレーム) ホストに対する割り込みを発生します。ホ
ストは、受信されたデータ (アドレス (ID)) と自分のアドレス (ID) を比較し、それら
が一致すると RWUB を “0” にします。
(5) マスタコントローラは、指定されたスレーブコントローラにデータフレームを送信し
ます。このとき、データフレームの WUB は “0” にします (ラインコントロールレジ
スタ TWUB = 0)。
(6) RWUB が “0” のスレーブ (選択されたスレーブコントローラ) は、データを受信しま
す。RWUB が “1” のままのスレーブ (選択されていないスレーブコントローラ) は、
受信データフレームの WUB が “0” であるため割り込みを発生しません。したがって、
受信データを無視します。
(7) スレーブコントローラからのデータ送信は、マスタコントローラに対してのみ可能で
す。
図 13.4.3に、マルチコントローラシステムの構成例を示します。
マスタ
TXD RXD
RXD TXD
スレーブ#1
RXD TXD
スレーブ#2
RXD TXD
スレーブ#3
図 13.4.3 マルチコントローラシステムの構成例
スレーブの出力 (TXD) はオープンドレーンでなくてはなりません。ラインコントロー
ルレジスタの UODE が “1” にセットされると、TXD はオープンドレーンになります。
UODE が “0” に設定されると、TXD は CMOS 出力になります。
13.4.18 ソフトウエアリセット
FIFO コントロールレジスタのビット 15、SWRST ビットを “1” にセットすることで SIO 全
体を初期化することができます。このビットは初期化が終わると自動的に “0” に戻ります。次
の場合には FIFO をクリアしてもテンポラリバッファにはデータが残っていますので、ソフト
ウエアリセットをしてください。
1. 送信データを FIFO などにセット後送信を開始したが、途中で送信を止めた場合
2. 受信時のオーバランが発生した場合
13-23
第 13 章 シリアル I/O ポート (SIO)
13.4.19 DMA 転送モード
SIO の FIFO を利用して SIO の受信データおよび送信データを DMA 転送することができま
す。SIO のチャネルごとの受信、送信それぞれに対して DMA 転送できる DMA チャネルは一
意に決まっています。DMA の各チャネルについて、DMA 要求ソースに外部の DMA リクエス
ト信号 (DMAREQ[3:0])を使うか、
SIO を使うかはピンコンフィグレーションレジスタ (PCFG)
のビット 7~4 (INTDMA[3:0]) で設定します。
SIO チャネル 0 受信
DMA チャネル 0
SIO チャネル 1 受信
DMA チャネル 1
SIO チャネル 0 受信
DMA チャネル 2
SIO チャネル 1 受信
DMA チャネル 3
SIO から出される DMA 要求、および SIO が認識する DMA のアクノリッジ信号はローアク
ティブです。DMA コントローラ (DMAC) のリクエスト、アクノリッジの極性はローアクティ
ブに設定してください (CCRn.ACKPOL=0b, CCRn.REQPL=0b)。
1 回の DMA 転送要求で何バイト転送するかは SIO の FIFO コントロールレジスタ (SIFCR)
で設定します。このとき、DMAC の設定は 1 回のデータサイズを 1 バイト (CCRn.XFZ=000b)
のデュアルアドレス転送 (CCRn.ONEAD=0b) にしてください。したがって DMAC のソース
アドレスレジスタもしくはデスティネーションレジスタに設定する SIO のレジスタアドレス
としてはバイトアドレスを設定する必要があります。
DMA 転送モードを使用する際、DMA 転送終了の判断に SIO の受信タイムアウトエラーを
使用しないでください (DMA 転送終了を一定時間受信データが入力されないことで判断しよ
うとして)。受信タイムアウトエラーは DMA 転送モードのときもそうでないときもエラーの発
生条件は同じです。受信タイムアウトエラーは受信 FIFO に最低 1 バイト受信データが存在す
る状態で最後のデータを受信してから 2 バイト分のデータ受信時間、受信 FIFO のデータを読
み出さないときに発生します。したがって、DMA が受信データを読み出して受信 FIFO に受
信データがなくなると受信タイムアウトエラーは発生しません。
13-24
第 13 章 シリアル I/O ポート (SIO)
13.5 タイミング図
受信時の動作 (7 および 8 ビットデータ長)
13.5.1
1
7
8
9
10 11
16
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
SIOCLK
SIN
bit0
bit7
Parity bit
有効ビット 0
data
Stop bit
有効ビット 7
SIDISR. UOER = 1
SIRXIREQ*
オーバランエラー
SIDISR. ERI = 1
SIRXIREQ*
パリティエラーが発生した場合
フレーミング
エラーが
発生した場合
SIDISR. ERI = 1
SIRXIREQ*
図 13.5.1 受信のタイミング
DMAI/F 時の SITXDREQ/SITXDACK, SIRXDREQ/SIRXDACK のタイミング
(DMA レベル 4 の場合)
13.5.2
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
SIOCLK
SIN
Start
Start
Stop
Data Byte 1
Stop
Start
Stop
Start
Data Byte 3
Data Byte 2
Stop
Start
Stop
Start
Stop
Start
Stop
Data Byte 4
Storeto to RCV
FIFO
SITXDREQ,
SIRXDREQ
SITXDACK,
SIRXDACK
図 13.5.2 DMA への要求信号とアクノリッジ信号 (DMA レベル 4 の場合)
3 回目の DMAACK のアサートを確認して SDMAREQ をデアサートする。
SDMAACK のサンプリングは IMCLK で行う。
DMAI/F 時の SITXDREQ/SITXDACK, SIRXDREQ/SIRXDACK のタイミング
(DMA レベル 8 の場合)
13.5.3
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
1
16
SIOCLK
SIN
Start
Stop
Data Byte 6
Start
Stop
Data Byte 7
Start
Stop
Data Byte 8
Start
Stop
Start
Stop
Start
Stop
Data Byte 9
Storeto to RCV
FIFO
SITXDREQ,
SIRXDREQ
SITXDACK,
SIRXDACK
図 13.5.3 DMA への要求信号とアクノリッジ信号 (DMA レベル 8 の場合)
13-25
Start
Stop
第 13 章 シリアル I/O ポート (SIO)
13.5.4
1
受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
ID 受信待機時 RWUB = “1”)
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
SIOCLK
SIN
bit0
ウェイクアップビット = 1
bit7
有効ビット 0
data
ストップビット
有効ビット 7
SIDISR. ERI = 1
SISPIREQ*
オーバランエラー
フレーミング
エラーが
発生した場合
SIDISR. ERI = 1
SISPIREQ*
図 13.5.4 受信のタイミング
13.5.5
1
受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
データ受信待機時 RWUB = “0”)
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
SIOCLK
SIN
bit0
ウェイクアップビット = 0
bit7
有効ビット 0
data
ストップビット
有効ビット 7
SISPIREQ**
オーバランエラー
SIDISR. ERI
フレーミング
エラーが
発生した場合
SIDISR. ERI
SISPIREQ**
図 13.5.5 受信のタイミング
13.5.6
1
受信時の動作 (7 および 8 ビットデータ長のマルチコントローラシステム、
データ読み飛ばし RWEB = “1”)
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
1
7
8
9
10 11
16
SIOCLK
SIN
bit0
有効ビット 0
data
ストップビット
有効ビット 7
SIDISR. ERI = 1
SISPIREQ*
ウェイクアップビット = 0
bit7
オーバランエラー
High
SIDISR. ERI = 1
SISPIREQ*
図 13.5.6 受信のタイミング
13-26
フレーミング
エラーが
発生した場合
第 13 章 シリアル I/O ポート (SIO)
13.5.7
送信時の動作
16
1
16
1
16
1
16
1
16
1
16
1
16
SIOCLK
Shift-Out Timing
スタートビット
SOUT
bit0
bit n
パリティビット
bit7
ストップビット
(ウェイクアップビット)
送信 FIFO から
送信シフトレジ
スタへ
図 13.5.7 送信のタイミング
13.5.8
CTS*による送信停止タイミング
16
1
16
1
16
1
16
1
16
SIOCLK
CTS*
Shift-Out Timing
SOUT
ストップビット
スタートビット
bit0
bit n
送信 FIFO から
送信シフトレジ
スタへ
送信停止
送信開始
図 13.5.8 CTS*のタイミング
データ送信中に CTS*が High になると、そのデータバイトの転送まで実行され、転送完了
後、送信が停止します。ただし、次のデータは FIFO から送信シフトレジスタに転送されてい
ます。
CTS*が Low になると、最初のシフトアウト開始タイミングで送信が再開されます。
13-27
第 13 章 シリアル I/O ポート (SIO)
13-28
第 14 章 タイマ/カウンタ
第14章 タイマ/カウンタ
14.1 特長
TX3927 は 24 ビットのタイマ/カウンタを3チャネル内蔵しています。
各チャネル(タイマ 0, 1, 2)は 24 ビットアップカウンタを使用したインタバルタイマとして動
作します。
またタイマ 0 と 1 はパルスジェネレータとしても、タイマ 2 はウォッチドックタイマとしても使
用可能です。
(1) インタバルタイマモード
•
定期的割り込みを発生させます。
(2) パルスジェネレータモード
•
フリップフロップ出力モードです。
(3) ウォッチドッグタイマモード
•
システムの暴走監視用タイマです。
カウント用のクロックは内部クロック(IMCLK)の 1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/256
および外部クロック(TCLK)の9種類から選択できます。内部クロック(IMCLK)は G-Bus クロック
の半分の周波数です。詳しくは「第 6 章 クロック」を参照してください。
3チャネルのタイマ 0, 1, 2 で同じ外部クロック(TCLK)を使用しています。
この外部クロック(TCLK)は DMAREQ[2]/PIO[13]の端子(127 ピン)と同じピンを使用してい
ます。このピンを DMAREQ[2]または PIO[13]として使用したときは、タイマのクロックとして外
部クロック(TCLK)を指定しないでください。
外部入力クロック(TCLK)を使うことで外部イベントをカウントすることができます。
外部入力クロック(TCLK)ではクロックの立ち上がり/立ち下がりカウントを選択できます。
外部入力クロック(TCLK)の周波数は内部クロック(IMCLK)の 1/2 以下にしてください。
14-1
第 14 章 タイマ/カウンタ
14.2 ブロック図
IM-BUS I/F 信号
カウンタ入力クロック
タイマ割り込み 0
IM-BUS I/F 信号
カウンタ入力クロック
タイマ割り込み 1
IM-BUS I/F 信号
カウンタ入力クロック
タイマ割り込み 2
Timer-0
Interval Timer Mode
Timer-1
Interval Timer Mode
Timer-2
Interval Timer Mode
Watchdog Timer Mode
セレクタ
NMI*
W DTOUT
内部リセット
チップコンフィグレーション
レジスタ(CCFG.WR)
図 14.2.1 TX3927 内部でのタイマモジュールの接続
IM-BUS
タイマ
Register R/W Control Logic
リセット信号
CLOCK
Divider
クロック信号
x1/21/256
Timer Read Register
CLEAR
24-bit Counter
CLOCK
Select
Compare
Register A
Interval Mode Reg.
Pulse Gen. Mode Reg.
Watchdog Mode Reg.
Compare
Register B
Comparetor (=)
TMINTREQ*
Timer Control Register
Interrupt
Control Logic
Interupt Control Register
TMFFOUT
WDTINTREQ*
図 14.2.2 タイマ内部ブロック図
14-2
タイマ割り込み
要求信号 (内部割り込み)
タイマフリップ
フロップ出力
ウォッチドッグ
割り込み要求信号
第 14 章 タイマ/カウンタ
14.3 レジスタ
14.3.1
レジスタマップ
タイマ内のレジスタはワードアクセスしてください。また、未定義ビットに対しては、示し
てある値を書き込んでください。
表 14.3.1 タイマレジスタ一覧
アドレス
レジスタ記号
レジスタ名称
タイマ2(TMR2)
0xFFFE_F2F0
TMTRR2
タイマリードレジスタ 2
0xFFFE_F240
TMWTMR2
ウォッチドッグタイマモードレジスタ 2
0xFFFE_F230
TMPGMR2
(予約)
0xFFFE_F220
TMCCDR2
分周レジスタ 2
0xFFFE_F210
TMITMR2
インタバルタイマモードレジスタ 2
0xFFFE_F20C
TMCPRB2
(予約)
0xFFFE_F208
TMCPRA2
コンペアレジスタ A 2
0xFFFE_F204
TMTISR2
タイマ割り込みステータスレジスタ 2
TMTCR2
タイマコントロールレジスタ 2
0xFFFE_F1F0
TMTRR1
タイマリードレジスタ 1
0xFFFE_F140
TMWTMR1
(予約)
0xFFFE_F130
TMPGMR1
パルスジェネレータモードレジスタ 1
0xFFFE_F120
TMCCDR1
分周レジスタ 1
0xFFFE_F110
TMITMR1
インタバルタイマモードレジスタ 1
0xFFFE_F10C
TMCPRB1
コンペアレジスタ B 1
0xFFFE_F108
TMCPRA1
コンペアレジスタ A 1
0xFFFE_F104
TMTISR1
タイマ割り込みステータスレジスタ 1
TMTCR1
タイマコントロールレジスタ 1
0xFFFE_F0F0
TMTRR0
タイマリードレジスタ 0
0xFFFE_F040
TMWTMR0
(予約)
0xFFFE_F030
TMPGMR0
パルスジェネレータモードレジスタ 0
0xFFFE_F020
TMCCDR0
分周レジスタ 0
0xFFFE_F010
TMITMR0
インタバルタイマモードレジスタ 0
0xFFFE_F00C
TMCPRB0
コンペアレジスタ B 0
0xFFFE_F008
TMCPRA0
コンペアレジスタ A 0
0xFFFE_F004
TMTISR0
タイマ割り込みステータスレジスタ 0
0xFFFE_F000
TMTCR0
タイマコントロールレジスタ 0
0xFFFE_F200
タイマ1(TMR1)
0xFFFE_F100
タイマ0(TMR0)
注:
上記の各レジスタに対してワード書き込みが可能です。
14-3
第 14 章 タイマ/カウンタ
14.3.2
タイマコントロールレジスタ (TMTCRn)
0xFFFE_F000 (Ch. 0)
0xFFFE_F100 (Ch. 1)
0xFFFE_F200 (Ch. 2)
31
16
0
: タイプ
: 初期値
15
8
0
7
TCE
R/W
0
ビット
ニモニック
7
TCE
6
6
5
CCDE CRE
R/W
0
フィールド名
4
0
R/W
0
3
2
ECES CCS
R/W
0
R/W
0
1
0
TMODE
R/W
00
: タイプ
: 初期値
説 明
タイマカウンタ
イネーブル
Timer Count Enable (初期値 0)
カウンタの動作を制御します。CRE によってカウンタ停止時の動作が異なります。
0: カウンタ停止 (CRE = 1 のときリセットも行われます)
1: カウンタ作動
CCDE
カウンタクロック
分周器イネーブル
Counter Clock Divide Enable (初期値 0)
内部クロック (IMCLK) の分周動作のイネーブル設定です。ディセーブルにセットす
ると分周回路が停止します。
0: ディセーブル
1: イネーブル
5
CRE
カウンタリセット
イネーブル
Counter Reset Enable (初期値 0)
24 ビットカウンタのリセットを制御します。CRE が 1 のとき、TCE を 0 にすると
カウンタ停止とリセット。CRE が 0 のとき、TCE を 0 にするとカウンタ停止のみ。
3
ECES
外部クロックエッ
ジ選択
External Clock Edge Select (初期値 0)
外部入力クロックを使用するときのカウンタの動作エッジを指定します。
0: 立ち下がりエッジ
1: 立ち上がりエッジ
2
CCS
カウンタクロック
選択
Counter Clock Select (初期値 0)
タイマクロックを指定します。
0: 内部クロック(IMCLK)
1: 外部入力クロック(TCLK)
1:0
TMODE
タイマモード
Timer Mode(初期値 00)
タイマの動作モードを指定します。
11: 設定禁止
10: ウォッチドッグタイマモード(ch2 のみ設定可)
01: パルスジェネレータモード (ch0, 1 のみ設定可)
00: インタバルタイマモード
図 14.3.1 タイマコントロールレジスタ
14-4
第 14 章 タイマ/カウンタ
14.3.3
タイマ割り込みステータスレジスタ (TMTISRn)
0xFFFE_F004 (Ch. 0)
0xFFFE_F104 (Ch. 1)
0xFFFE_F204 (Ch. 2)
31
16
0
: タイプ
: 初期値
15
4
0
3
2
1
TWIS TPIBS TPIAS
R/W
0
ビット
ニモニック
3
TWIS
2
TPIBS
1
TPIAS
0
TIIS
(注)
フィールド名
R/W
0
R/W
0
0
TIIS
R/W : タイプ
0
: 初期値
説 明
ウォッチドッグ
タイマ割り込み
ステータス
Timer Watchdog Interrupt Status (初期値 0)
カウンタ値がコンペアレジスタ TMCPRA と一致したとき TWIS がセットされ、
TWIE がイネーブルのときに TMWDTREQ*がアサートされます。
TWIS に 0 を書き込むことによって TMWDTREQ*はネゲートします。
1 の書き込みは無効です。
リード時
0: 割り込みは発生していない
1: コンペアレジスタと一致して割り込み発生
ライト時
0: 割り込みをネゲート
1: 無効
パルスジェネレー Timer Pulse Generator Interrupt by TMCPRB Status (初期値 0)
タ TMCPRB 割り込 カウンタ値がコンペアレジスタ TMCPRB と一致したとき TPIBS がセットされ、
みステータス
TPIBE がイネーブルのときに TMINTREQ*がアサートされます。TPIBS に 0 を書き
込むことによって TMINTREQ*はネゲートします。
1 の書き込みは無効です。
リード時
0: 割り込みは発生していない
1: コンペアレジスタと一致して割り込みが発生
ライト時
0: 割り込みをネゲート
1: 無効
パルスジェネレー Timer Pulse Generator Interrupt by TMCPRA Status (初期値 0)
タ TMCPRA 割り込 カウンタ値がコンペアレジスタ TMCPRA と一致したとき TPIAS がセットされ、
みステータス
TPIAE がイネーブルのとき TMINTREQ*がアサートされます。
TPIAS に 0 を書き込むことによって TMINTREQ*はネゲートします。
1 の書き込みは無効です。
リード時
0: 割り込みは発生していない
1: コンペアレジスタと一致して割り込みが発生
ライト時
0: 割り込みをネゲート
1: 無効
インタバルタイマ Timer Interval Interrupt Status (初期値 0)
割り込みステータ カウンタ値がコンペアレジスタ TMCPRA と一致したとき TIIS がセットされ、TIIE
ス
がイネーブルのとき TMINTREQ*がアサートされます。
TIIS に 0 を書き込むことによって TMINTREQ*はネゲートします。
1 の書き込みは無効です。
リード時
0:割り込みは発生していない
1:コンペアレジスタと一致して割り込み発生
ライト時
0:割り込みをネゲート
1:無効
図 14.3.2 タイマ割り込みステータスレジスタ
ビット 3 は ch2 のみ、ビット 2, 1 は ch0, 1 のみ有効です。
14-5
第 14 章 タイマ/カウンタ
14.3.4
コンペアレジスタ A (TMCPRAn)
31
0xFFFE_F008 (Ch. 0)
0xFFFE_F108 (Ch. 1)
0xFFFE_F208 (Ch. 2)
24
23
0
16
TCVA
: タイプ
: 初期値
R/W
0xFF
15
0
TCVA
: タイプ
: 初期値
R/W
0xFFFF
ビット
ニモニック
23:0
TCVA
フィールド名
タイマ比較値 A
説 明
Timer Compare Value A (初期値 0xffffff)
タイマのコンペア値を設定します。24 ビットの 2 進値で設定します。各モードで使
用します。
図 14.3.3 コンペアレジスタ A
14-6
第 14 章 タイマ/カウンタ
14.3.5
コンペアレジスタ B (TMCPRBn)
31
0xFFFE_F00C (Ch. 0)
0xFFFE_F10C (Ch. 1)
24
23
0
16
TCVB
: タイプ
: 初期値
R/W
0xFF
15
0
TCVB
: タイプ
: 初期値
R/W
0xFFFF
ビット
23:0
ニモニック
TCVB
フィールド名
タイマ比較値 B
説 明
Timer Compare Value B (初期値 0xffffff)
コンペアレジスタ B はパルスジェネレータモードのとき使用します。コンペアレジ
スタ A よりも大きい値を設定してください。24 ビットの 2 進値で設定します。
図 14.3.4 コンペアレジスタ B
14-7
第 14 章 タイマ/カウンタ
14.3.6
インタバルタイマモードレジスタ (TMITMRn)
0xFFFE_F010 (Ch. 0)
0xFFFE_F110 (Ch. 1)
0xFFFE_F210 (Ch. 2)
31
16
0
: タイプ
: 初期値
15
TIIE
14
1
0
0
TZCE
R/W : タイプ
0
: 初期値
R/W
0
ビット
ニモニック
フィールド名
説 明
15
TIIE
インタバル
タイマ割り込み
許可
Timer Interval Interrupt Enable (初期値 0)
インタバルタイマモード時の割り込みイネーブル/ディセーブルを設定します。
0: ディセーブル (マスク)
1: イネーブル
0
TZCE
インタバル
タイマ 0 クリア
許可
Interval Timer Zero Clear Enable (初期値 0)
カウント値がコンペアレジスタ A と一致した後、カウンタを 0 にクリアするかしな
いかを指定します。クリアしない場合、その値でカウントを停止します。カウンタ
停止中で TZCE が 0 のときに割り込みの復帰があった場合、再度の割り込み発生は
ありません。
0: ディセーブル (マスク)
1: イネーブル
図 14.3.5 インタバルタイマモードレジスタ
14-8
第 14 章 タイマ/カウンタ
14.3.7
分周レジスタ (TIMCCDRn)
0xFFFE_F020 (Ch. 0)
0xFFFE_F120 (Ch. 1)
0xFFFE_F220 (Ch. 2)
31
16
0
: タイプ
: 初期値
15
3
0
2
0
CCD
R/W
000
: タイプ
: 初期値
ビット
ニモニック
フィールド名
説 明
2:0
CCD
カウンタクロック
分周器
Counter Clock Divide (初期値 000)
カウンタ入力クロックソースに内部クロック (IMCLK) を使用するとき、その分周値
を指定します。
2 進値 n によって 2n + 1 分周されます。
000: 21 分周
001: 22 分周
010: 23 分周
011: 24 分周
100: 25 分周
101: 26 分周
110: 27 分周
111: 28 分周
図 14.3.6 分周レジスタ
14-9
第 14 章 タイマ/カウンタ
14.3.8
パルスジェネレータモードレジスタ (TMPGMRn) 0xFFFE_F030 (Ch. 0)
0xFFFE_F130 (Ch. 1)
31
16
0
: タイプ
: 初期値
15
14
TPIBE TPIAE
R/W
0
ビット
13
1
0
R/W : タイプ
: 初期値
0
R/W
0
ニモニック
0
FFI
フィールド名
説 明
15
TPIBE
TMCPRB 割り込み Timer Pulse Generator Interrupt by TMCPRB Enable (初期値 0)
イネーブル
パルスジェネレータモード時に TMCPRB とカウンタ値が一致したときの割り込み
イネーブル/ディセーブルを設定します。
0: マスクする
1: マスクしない
14
TPIAE
TMCPRA 割り込み Timer Pulse Generator Interrupt by TMCPRA Enable (初期値 0)
イネーブル
パルスジェネレータモード時に TMCPRA とカウンタ値が一致したときの割り込み
イネーブル/ディセーブルを設定します。
0: マスクする
1: マスクしない
0
FFI
フリップフロップ
初期値
Timer Flip-Flop Initial (初期値 0)
タイマフリップフロップの初期値を指定します。
0: Low
1: High
図 14.3.7 パルスジェネレータモードレジスタ
14-10
第 14 章 タイマ/カウンタ
14.3.9
タイマリードレジスタ (TMTPRn)
31
0xFFFE_F0F0 (Ch. 0)
0xFFFE_F1F0 (Ch. 1)
0xFFFE_F2F0 (Ch. 2)
24
23
16
0
TCNT
: タイプ
: 初期値
R
0x00
15
0
TCNT
: タイプ
: 初期値
R
0x0000
ビット
ニモニック
フィールド名
説 明
23:0
TCNT
タイマカウント値
Timer Count (初期値 0x000000)
24 ビットカウンタの値がこのレジスタにコピーされます。このレジスタをリードす
るとカウント値が分かります。
タイマリードレジスタはリード専用レジスタです。ライトしないよう注意してくだ
さい。ライト時の動作は保証できません。
図 14.3.8 タイマリードレジスタ
14-11
第 14 章 タイマ/カウンタ
14.3.10 ウォッチドッグタイマモードレジスタ (TMWTMR2)
0xFFFE_F240 (Ch. 2)
31
16
0
: タイプ
: 初期値
15
TWIE
14
8
0
R/W
0
7
WDIS
6
1
0
R/W : タイプ
0
: 初期値
R/W
0
フィールド名
0
TWC
ビット
ニモニック
説 明
15
TWIE
ウォッチドッグ
タイマ割り込み
イネーブル
Timer Watchdog Interrupt Enable (初期値 0)
ウォッチドッグタイマモード時の割り込みイネーブル/ディセーブルを設定します。
0: ディセーブル (マスク)
1: イネーブル
7
WDIS
ウォッチドッグ
タイマディセーブ
ル
Watchdog Timer Disable (初期値 0)
WDIS に 1 をセットしてタイマコントロールレジスタの TCE に 0 をセットするとウ
ォッチドッグタイマモードをディセーブルできます。ディセーブル後 WDIS は 0 に
自動でクリアされます。WDIS への 0 の書き込みは無効です。
0
TWC
ウォッチドッグ
タイマクリア
Timer Watchdog Clear (初期値 0)
1: TWC に 1 をセットするるとカウンタはクリアされます。クリア後 TWC は自動的
に 0 にリセットされます。TWC への 0 の書き込みは無効です。
図 14.3.9 ウォッチドッグタイマモードレジスタ
14-12
第 14 章 タイマ/カウンタ
14.4 動作
タイマ 0, 1, 2 とも同一の動作をしますので、タイマ 0 の場合について説明します。ただしウォ
ッチドッグ機能が使えるのはタイマ 2 だけですので注意してください。
チャネルによる違いがあるときはその都度説明します。
14.4.1
インタバルタイマモード
タイマコントロールレジスタの Timer Mode (TMODE) = 00 でインタバルタイマモードに設
定されます。
TMTCR レジスタの CCS によって内部クロック (IMCLK) を使うか外部入力クロックを使
うかを指定します。
内部クロック (IMCLK) を選択したときには、それを分周したクロックが 24 ビットカウン
タの入力となります。分周値の設定は TMTCR の Counter Clock Divide Enable (CCDE) = 1
のとき分周レジスタの Counter Clock Divide (CCD)によって行われます。
内部クロック (IMCLK) の 21 分周から 28 分周まで設定できます。外部入力クロックを選択
したときには、カウント動作を実行するクロックエッジを TMTCR レジスタの ECES で選択
することができます。
TMTCR の Timer Count Enable (TCE) を 1 にセットすると 24 ビットカウンタはカウント
を始めます。
カウント値がコンペアレジスタ A (TMCPRA) の値と一致したときタイマ割り込みステータ
スレジスタ (TMTISR) の Timer Interval Interrupt Status (TIIS)にフラグ (“1”) を立てます。
割り込みコントロールロジックはインタバルタイマモードレジスタ (TMITMR) の Timer
Interval Interrupt Enable (TIIE) に 1 がセットされているときタイマ割り込みが発生します。
TIIE に 0 がセットされているときタイマ割り込みは発生されません。タイマ割り込みステー
タスレジスタの TIIS に 0 を書き込んだとき TIIS はクリアされてタイマ割り込みは終了します。
TIIS への 1 の書き込みは無視されます。
TIIE に 0 がセットされている状態でカウント値がコンペアレジスタの値と一致したとき、
内部の TIIS は割り込みが発生したものと認識します。そのままの状態で TIIE に 1 をセット
するとタイマ割り込みが発生してしまうので一度 TIIS に 0 を書き込みクリアする必要があり
ます。
TMITMR の Timer Zero Clear Enable (TZCE)が 1 にセットされているときはカウント値が
TMCPRA の値と一致すると 24 ビットカウンタは 0 にクリアされ割り込みは繰り返し発生し
ます。TZCE が 0 のときはカウント値が TMCPRA の値と一致したときカウント動作を停止し
ます。割り込み要求の発生について表 14.4.1にまとめます。
表 14.4.1 TIIE と TZCE による割り込み制御
TIIE TZCE
カウンタが設定値に達したときの割り込み動作
0
*
割り込み発生しない
1
0
割り込み発生。
割り込み復帰時 (TIIS に 0 をライト) に TZCE=0 ならば再度の割り込み発生はありません。
TZCE = 1 とした後に割り込みから復帰した場合、再び割り込みが発生します。TIIE=1、TZCE=1 の場合
と同じです。
1
1
割り込み発生
14-13
第 14 章 タイマ/カウンタ
カウンタの値はタイマリードレジスタ (TMTRR) をリードすることでできます。
TMTRR をリードした値は 24 ビットカウンタのカウント値をコピーしたものです。
図 14.4.1にインタバルタイマモードでのカウント動作と割り込み発生の概略を示します。
図 14.4.2に外部入力クロックを使用したときの動作を示します。
Count Value
TMCPRA Reg.
Compare Value
0x000000
Time
TMODE = 00
CCS = 0
TCE = 1
TCE = 0 TCE = 1 TCE = 0 TCE = 1
CRE = 0
CRE = 1
CRE = 0
TZCE = 1
TZCE = 0 TZCE = 1
TIIE = 1
TIIE = 0 TIIE = 1
タイマ割り込み*
TIIS = 0
TIIS = 0
TIIS = 0
TIIS = 0
図 14.4.1 インタバルタイマの動作例 (内部クロック使用)
Count Value
TMCPRA Reg.
Compare Value
0x000000
Time
TMODE = 00
TCE = 0 TCE = 1
TCE = 1
CRE = 0
CCS = 0
TZCE = 1
TIIE = 1
ECES = 1
TIIE = 0
EXTCLK
TMINTREQ*
TIIS = 1
図 14.4.2 インタバルタイマの動作例 (外部入力クロック; 立ち上がりエッジ動作)
14-14
第 14 章 タイマ/カウンタ
内部クロック (IMCLK) を使ったときのカウント時間を表 14.4.2に示します。この例では
CPU 動作周波数は 133 MHz、内部クロック (IMCLK) が 33 MHz 動作時の時間を示していま
す。
表 14.4.2 分周値とカウント数
デバイダ
14.4.2
システムクロック = 33 MHz
10 進
TMCCDR
<CCD>
freq. (Hz)
Resolution (s)
2
4
8
16
32
64
128
256
000
001
010
011
100
101
110
111
16.50E + 6
8.25E + 6
4.13E + 6
2.06E + 6
1.03E + 6
515.63E + 3
257.81E + 3
128.91E + 3
60.61E − 9
121.21E − 9
242.42E − 9
484.85E − 9
969.70E − 9
1.94E − 6
3.88E − 6
7.76E − 6
24 ビット
Count of 1s
Max time (s)
1.02
2.03
4.07
8.1
16.3
32.5
65.1
130.2
16500000
8250000
4125000
2062500
1031250
515625
257813
128906
パルスジェネレータモード
タイマ 0 と 1 はこのモードを使用できますが、タイマ 2 は使用できませんので注意してくだ
さい。
TMTCR レジスタの TMODE が 01 のときパルスジェネレータモードになります。
パルスジェネレータモードでは 2 つのコンペアレジスタ TMCPRA と TMCPRB を使って任意
周期、任意デューティの方形波を出力することができます。
TMTCR レジスタの TCE に 1 にセットすると、24 ビットカウンタはカウントを始めます。
TMCPRA レジスタに設定された値とカウンタ値が一致したときタイマフリップフロップを反
転します。
タイマフリップフロップの出力は TIMER[0] (タイマ1のときは TIMER[1]) 端子に出力され
ます。TMCPRA レジスタと一致した後もカウンタはそのままカウントを続けます。TMCPRB
レジスタに設定された値とカウンタ値が一致したときタイマフリップフロップを反転させて
カウンタをクリアします。したがって2つのレジスタの値は、TMCPRA < TMCPRB でなけれ
ばなりません。またタイマフリップフロップの初期状態は TMPGMR レジスタの FFI で設定
することができます。
カウンタ値が TMCPRA の値と一致したとき、TMTISR レジスタの TPIAS にフラグ(“1”)を
立てます。
割り込みコントロールロジックは TMPGMR レジスタの TPIAE に 1 がセットされていると
き、タイマ割込み要求 TMINTREQ*をアサートします。TPIAE に 0 がセットされているとき、
TMINTREQ*はアサートされません。TMTISR レジスタの TPIAS に 0 を書き込むことによっ
て TPIAS はクリアされ、TMINTREQ*はデアサートします。
TMPGMR レジスタの TPIBE が 1 に設定されているときは、TMCPRB レジスタと一致し
たところで TMTISR レジスタ TPIBS にフラグ(“1”)を立て、TMINTREQ*をアサートします。
TPIBS に 0 を書き込むことによって TPIBS はクリアされ TMINTREQ*はデアサートされ
ます。
TPIAE (TPIBE) に 0 がセットされている状態でカウント値がコンペアレジスタの値と一致
したとき、内部の TPIAS (TPIBS) は割り込みが発生したものと認識します。そのままの状態
で TPIAE (TPIBE) に 1 をセットするとタイマ割り込みが発生してしまうので一度 TPIAS
(TPIBS) に 0 を書き込みクリアする必要があります。
カウンタクロックは内部クロック (IMCLK) と外部入力クロック(TCLK)を選択できます。ク
ロックの選択は TMTCR レジスタの CCS で行います。
14-15
第 14 章 タイマ/カウンタ
内部クロック (IMCLK) を使うときはそれを分周することができます。分周値の設定は
TMTCR レジスタの CCDE = 1 のとき、TMCCDR レジスタの CCD フィールドによって行わ
れます。内部クロック(IMCLK)の 21 分周から 28 分周まで設定することができます。カウント
動作はクロックの立ち上がりで行われます。
外部入力クロック (TCLK) を使うときは、TMTCR レジスタの ECES でクロックのエッジを
選択することができます。
Count Value
TMCPRB
Compare Value
TMCPRA
Compare Value
0x000000
TMODE = 01
CCS = 0
FFI = 1
TIIE = 1
TCE = 1
CRE = 0
Time
TCE = 0 TCE = 1
TMFFOUT
図 14.4.3 パスルジェネレータモードの動作例
14.4.3
ウォッチドッグタイマモード
TX3927 ではウォッチドッグタイマモードを使用できるのはタイマ 2 だけです。
ウォッチドッグタイマ割り込み要求は、内部の NMI*あるいはリセット回路に接続すること
が可能です。
ウォッチドッグタイマ割り込み要求信号の接続先の選択は CCFG レジスタの WR
ビットで行います。この CCFG レジスタの WR ビットが “1”のとき、ウォッチドッグタイマ割
り込みが発生すると TX3927 はリセットされます。 “0”のときは NMI*割り込みになります。
TMTCR の TMODE が 10 のときウォッチドッグタイマモードになります。TMTCR の TCE
を 1 にすると 24 ビットカウンタはカウントを始めます。コンパレータはカウント値が
TMCPRA の値と一致したとき TMTISR の Timer Watchdog Interrupt Status (TWIS)にフラ
グ(“1”)を立てます。割り込みコントロールロジックは TMTCR の Timer Watchdog Interrupt
Enable (TWIE)に 1 がセットされているときウォッチドッグタイマ割り込みを発生します。
TWIE に 0 がセットされているときウォッチドッグタイマ割り込みは発生されません。ウォッ
チドッグタイマ割り込みの終了は TWIS に 0 を書き込むことで行われます。
なお、TWIS への 1 の書き込みは無視されます。
TWIE に 0 がセットされている状態でカウント値がコンペアレジスタの値と一致したとき、
内部の TWIS は割り込みが発生したものと認識します。そのままの状態で TWIE に 1 をセッ
トするとタイマ割り込みが発生してしまうので一度 TWIS に 0 を書き込みクリアする必要があ
ります。
ウォッチドッグタイマモードレジスタ (TMWTMR) の Timer Watchdog Clear (TWC) に 1
をセットすると 24 ビットカウントはクリアされます。TWC は 24 ビットカウンタクリア後自
動的に 0 にリセットされます。
14-16
第 14 章 タイマ/カウンタ
ウォッチドッグタイマは TMWTMR の Watchdog Timer Disable (WDIS) に 1 をセットした
状態で TCE を 0 にするとディセーブル (カウンタ停止) することができます。WDIS が 0 の状
態では TCE を 0 にしてもカウンタ動作を停止させることはできません。他に WDIS = 1 の状
態で TMTISR の TWIE に 0 をセットしてもウォッチドッグタイマをディセーブル (割り込み
のマスク) することができます。
WDIS = 0 のときは TWIE を 0 にすることはできません。
WDIS
はウォッチドッグタイマが上記いずれかの方法でディセーブル状態となったとき自動的に 0
にクリアされます。
カウンタの値は TMTRR をリードすることで知ることができます。
Count Value
TMCPRA
Compare Value
0x000000
Time
TMODE = 10
TMODE = 10
TCE = 1
TCE = 0 TCE = 1
TCE = 0 TCE = 1
TWC = 1
TWC = 1
TWC = 1
TWIE = 0 TWIE = 1
TWIE = 1
TWIE = 1
WDIS = 1
TWDIS = 1
WDIS = 1
TWIS = 0
TWIS = 1
CRE = 0
ウォッチドッグ
タイマ割り込み
Reset State
Reset State
図 14.4.4 ウォッチドッグタイマモードの動作例
14-17
第 14 章 タイマ/カウンタ
14.5 タイミング図
14.5.1
インタバルタイマモード割り込みタイミング
IMCLK
タイマ入力クロック
TMTCR. TCE
カウント値
0
1
2
3
0
1
2
3
TMITMR. TIIE = 0
TMITMR. TIIE = 1
割り込み要求信号
TMTISR. TIIS
図 14.5.1 インタバルタイマタイミング (内部クロック)
上図は TMCPRA = 3、カウンタクロック IMCLK/2 の場合です。一致を検出した IMCLK の
次の立ち上がりでレジスタ TMTISR. TIIS がセットされて内部システムクロックに同期して
TMINTREQ*がアサートされます。
また同時にカウンタも 0 クリアされます (レジスタ TMITMR. TZCE = 1)。
IMCLK
タイマ入力クロック
TMTCR. TCE
カウント値
0
1
2
3
0
1
2
3
TMITMR. TIIE = 0
TMITMR. TIIE = 1
割り込み要求信号
TMTISR. TIIS
図 14.5.2 インタバルタイマタイミング (外部入力クロック)
上図は TMCPRA = 3、カウンタクロックに外部入力クロックを選択した場合です。
一致を検出した IMCLK の次の立ち上がりで TMTISR レジスタの TIIS がセットされて
TMINTREQ*がアサートされます。
また同時にカウンタも 0 クリアされます (TMITMR レジスタの TZCE =1)。
14-18
第 14 章 タイマ/カウンタ
14.5.2
パルスジェネレータモード F/F 出力タイミング
外部クロック
TMTCR. TCE
カウント値
0
1
2
3 0
1
2
3 0
1
2
3 0
1
2
3 0
1
2
3
TMTISR. TIIS
図 14.5.3 パルスジェネレータタイミング
上図はパルスジェネレータタイミングモードで TMCPRA = 2、TMCPRB = 3 とした場合で
す。
タイマ F/F の初期値を 0 に設定しています。
タイマ F/F の初期化は TMPGMR レジスタに書き込まれたときに行われます。
14.5.3
ウォッチドッグタイマモード割り込みタイミング
タイマ入力
クロック
TMTCR. TCE
カウント値
0
1
2
3
0
1
2
3
TMWTMR. TWIE = 0
TMWTMR. TWIE = 1
WDTINTREQ*
TMTISR. TWIS
図 14.5.4 ウォッチドッグタイマタイミング
14-19
第 14 章 タイマ/カウンタ
14-20
第 15 章 パラレル I/O ポート (PIO)
第15章 パラレル I/O ポート (PIO)
15.1 特長
TX3927 には、16 ビットの汎用パラレルポート端子があります。
その特長は、以下の通りです。
•
PIO1~PIO15 はシリアル、タイマ、DMAC の機能信号と兼用になっています。どちらの
機能を使うかは各端子ごとに設定できます。
•
各端子ごとに入出力の方向を指定できます。
•
各端子ごとにトーテムポールまたはオープンドレインを選択できます。
•
入出力方向や機能設定には関係なく 16 個の PIO 端子すべてをリードできます。
•
16 ビットフラグレジスタが全デバイスに対する汎用リード/ライトレジスタまたは特殊用
途のフラグレジスタとして利用できます。
•
フラグビットのいずれかの極性によって割り込みを発生させることができます。極性の選
択は 16 ビット極性レジスタで設定します。
•
16 ビットマスクレジスタの該当するビットによって、16 個のフラグ割り込みのすべてが
ビットごとに独立してマスクできます。
•
割り込み信号は CPU への割り込み信号と、PCI バス上の 2 本があります。どちらもすべ
てのフラグ割り込み要求の OR になっています。CPU への割り込み信号は、割り込みコ
ントローラを経由して CPU の内部割り込みに接続されています。一方 PCI バス上の割り
込み出力は、外部アービタモードの場合にのみ有効です。このとき PCI コントローラによ
って外部割り込み要求として出力されます。2 本の割り込みに対応して、2 つのマスクレ
ジスタがあり、その一方は CPU 割り込み、他方は PCI 割り込みに対応しています。これ
らの 2 本の割り込み要求は、極性制御ビットにより割り込みを発生させる極性を選択でき
ます。
15.2 レジスタ
15.2.1
レジスタマップ
PIO のすべてのレジスタはワードアクセスしてください。また、未定義ビットに対しては、
示してある値を書き込んでください。
表 15.2.1 PIO レジスタマップ
アドレス
ニモニック
レジスタ名
0xFFFE_F524
XPIOMASKEXT
外部割り込みマスクレジスタ
0xFFFE_F520
XPIOMASKCPU
CPU 割り込みマスクレジスタ
0xFFFE_F51C
XPIOINT
割り込みコントロールレジスタ
0xFFFE_F518
XPIOPOL
フラグ極性コントロールレジスタ
0xFFFE_F514
XPIOFLAG1
フラグ 1 レジスタ
0xFFFE_F510
XPIOFLAG0
フラグ 0 レジスタ
0xFFFE_F50C
XPIOOD
オープンドレインコントロールレジスタ
0xFFFE_F508
XPIODIR
方向コントロールレジスタ
0xFFFE_F504
XPIODI
入力データレジスタ
0xFFFE_F500
XPIODO
出力データレジスタ
注 1: すべてのレジスタがリード可能です。
注 2: レジスタはワードアクセスのみ可能です。
15-1
第 15 章 パラレル I/O ポート (PIO)
15.2.2
PIO 出力データレジスタ (XPIODO)
0xFFFE_F500
31
16
0
: タイプ
: 初期値
15
PDO
[15]
R/W
0
ビット
15 : 0
14
PDO
[14]
R/W
0
13
PDO
[13]
R/W
0
ニモニック
PDO [15:0]
12
PDO
[12]
R/W
0
11
PDO
[11]
R/W
0
10
PDO
[10]
R/W
0
9
PDO
[9]
R/W
0
8
PDO
[8]
R/W
0
7
PDO
[7]
R/W
0
フィールド名
Data Out
6
PDO
[6]
R/W
0
5
PDO
[5]
R/W
0
4
PDO
[4]
R/W
0
説 明
Port Data Output [15:0] (初期値 0x0000)
PIO 端子 (PIO [15:0]) に出力するデータです。
図 15.2.1 PIO 出力データレジスタ
15-2
3
PDO
[3]
R/W
0
2
PDO
[2]
R/W
0
1
PDO
[1]
R/W
0
0
PDO
[0]
R/W : タイプ
0
: 初期値
第 15 章 パラレル I/O ポート (PIO)
15.2.3
PIO 入力データレジスタ (XPIODI)
0xFFFE_F504
31
16
0
: タイプ
: 初期値
15
PDI
[15]
14
PDI
[14]
13
PDI
[13]
12
PDI
[12]
11
PDI
[11]
10
PDI
[10]
9
PDI
[9]
8
PDI
[8]
7
PDI
[7]
6
PDI
[6]
5
PDI
[5]
4
PDI
[4]
R
不定
ビット
ニモニック
15 : 0
PDI [15:0]
フィールド名
Data In
2
PDI
[2]
1
PDI
[1]
0
PDI
[0]
: タイプ
: 初期値
説 明
Port Data Input [15:0] (初期値 不定)
PIO 端子 (PIO [15:0]) に入力するデータです。
図 15.2.2 PIO 入力データレジスタ
15-3
3
PDI
[3]
第 15 章 パラレル I/O ポート (PIO)
15.2.4
PIO 方向コントロールレジスタ (XPIODIR)
0xFFFE_F508
31
16
0
: タイプ
: 初期値
15
14
PDIR PDIR
[15]
[14]
13
12
PDIR PDIR
[13]
[12]
11
10
PDIR PDIR
[11]
[10]
ビット
ニモニック
フィールド名
15 : 0
PDIR [15:0]
Direction Control
9
8
7
PDIR PDIR PDIR
[9]
[8]
[7]
R/W
0x0000
6
5
PDIR PDIR
[6]
[5]
4
PDIR
[4]
3
2
PDIR PDIR
[3]
[2]
: タイプ
: 初期値
説 明
Port Direction Control [15:0] (初期値 0x0000)
PIO 端子 (PIO [15:0]) の入出力方向を設定します。
0: 入力 (リセット)
1: 出力
図 15.2.3 PIO 方向コントロールレジスタ
15-4
1
0
PDIR PDIR
[1]
[0]
第 15 章 パラレル I/O ポート (PIO)
15.2.5
PIO オープンドレインコントロールレジスタ (XPI00D) 0xFFFE_E50C
31
16
0
: タイプ
: 初期値
15
POD
[15]
14
POD
[14]
13
POD
[13]
ビット
ニモニック
15 : 0
POD [15:0]
12
POD
[12]
11
POD
[11]
10
POD
[10]
9
POD
[9]
8
7
POD POD
[8]
[7]
R/W
0x0000
フィールド名
Open Drain
Control
6
POD
[6]
5
POD
[5]
4
POD
[4]
3
POD
[3]
2
POD
[2]
1
POD
[1]
0
POD
[0]
: タイプ
: 初期値
説 明
Port Open Drain Control [15:0] (初期値 0x0000)
PIO 端子 (PIO [15:0]) をオープンドレインとして使うかどうかを設定します。
0: オープンドレイン (リセット)
1: トーテムポール
図 15.2.4 PIO オープンドレインコントロールレジスタ
15-5
第 15 章 パラレル I/O ポート (PIO)
15.2.6
PIO フラグレジスタ 0 (XPI0FLAG0)
0xFFFE_F510
31
16
0
: タイプ
: 初期値
15
PF0
[15]
ビット
15 : 0
14
PF0
[14]
13
PF0
[13]
ニモニック
PF0 [15:0]
12
PF0
[12]
11
PF0
[11]
10
PF0
[10]
9
PF0
[9]
8
7
PF0
PF0
[8]
[7]
R/W
0x0000
フィールド名
Flag 0
6
PF0
[6]
5
PF0
[5]
4
PF0
[4]
3
PF0
[3]
2
PF0
[2]
1
PF0
[1]
0
PF0
[0]
: タイプ
: 初期値
説 明
PIO Flag 0 [15:0] (初期値 0x0000)
汎用のフラグレジスタ。フラグレジスタ 0 およびフラグジレスタ 1 は、実際には同
じレジスタを使用します。フラグレジスタ 0 からは 0 も 1 も書き込めます。フラグ
レジスタ 1 の場合には、書き込みに制限がつきます。
図 15.2.5 PIO フラグレジスタ 0
15-6
第 15 章 パラレル I/O ポート (PIO)
15.2.7
PIO フラグレジスタ 1 (XPIOFLAG1)
0xFFFE_F514
31
16
0
: タイプ
: 初期値
15
PF1
[15]
14
PF1
[14]
13
PF1
[13]
ビット
ニモニック
15 : 0
PF1 [15:0]
注:
12
PF1
[12]
11
PF1
[11]
10
PF1
[10]
9
PF1
[9]
8
7
PF1
PF1
[8]
[7]
R/W
0x0000
フィールド名
Flag 1
6
PF1
[6]
5
PF1
[5]
4
PF1
[4]
3
PF1
[3]
2
PF1
[2]
1
PF1
[1]
0
PF1
[0]
: タイプ
: 初期値
説 明
PIO Flag 1 [15:0] (初期値 0x0000)
特殊用途向けのフラグレジスタです。フラグレジスタ 0 およびフラグレジスタ 1 は、
実際は同じレジスタを使用します。フラグレジスタ 1 の場合には以下の特長があり
ます。
・書き込み
・CPU からの書き込み
1: フラグビットをセット
0: 変化なし
・その他のデイバス (DMAC、PCIC) からの書き込み
1: フラグビットをクリア
0: 変化なし
・読み出し: フラグビットをリード
フラグレジスタ 1 は、フラグビット (PF1 [15:0]) に“0”をライトしても無効です。CPU がフラグビ
ット (PF1 [15:0]) に“1”をライトするとそのビットがセットされ、その他のデバイス (バスマスタ)
がフラグビット (PF1 [15:0]) に“1”をライトするとそのビットがクリアされます。フラグレジスタ 1
は、すべてのデバイスによってリード可能です。
図 15.2.6 PIO フラグレジスタ 1
15-7
第 15 章 パラレル I/O ポート (PIO)
15.2.8
PIO フラグ極性コントロールレジスタ (XPIOPOL)
0xFFFE_F518
31
16
0
: タイプ
: 初期値
15
FPC
[15]
14
FPC
[14]
13
FPC
[13]
ビット
ニモニック
15 : 0
FPC [15:0]
12
FPC
[12]
11
FPC
[11]
10
FPC
[10]
9
FPC
[9]
8
7
FPC FPC
[8]
[7]
R/W
0x0000
フィールド名
Flag Polarity
Control
6
FPC
[6]
5
FPC
[5]
4
FPC
[4]
3
FPC
[3]
2
FPC
[2]
1
FPC
[1]
0
FPC
[0]
: タイプ
: 初期値
説 明
Flag Polarity Control [15:0] (初期値 0x0000)
割り込み発生するフラグビットの極性を指定します。FPC ビットとフラグビットの
XOR が“1”のとき割り込み要求が発生します。
フラグビット
割り込み要求
FPC ビット
なし
0
0
あり
0
1
あり
1
0
なし
1
1
図 15.2.7 PIO フラグ極性コントロールレジスタ
15-8
第 15 章 パラレル I/O ポート (PIO)
15.2.9
PIO 割り込みコントロールレジスタ (XPIOINT)
0xFFFE_F51C
31
16
0
: タイプ
: 初期値
15
3
0
EXT INT
2
1
0
INTPC
R/W
0
R/W
11
: タイプ
: 初期値
ビット
ニモニック
フィールド名
説 明
2
EXT INT
EXT Interrupt OD
Control
EXT Interrupt OD Control (初期値 0)
外部割り込み信号をオープンドレイン端子にするかどうか指定します。
0: オープンドレイン (リセット)
1: トーテムポール
1:0
INTPC [1:0]
Interrupt Polarity
Control
Interrupt Polarity Control (初期値 11)
割り込み要求の極性を指定します。
フラグビットと FPC ビットの XOR 値である割り込み要求とこの INTPC ビットとの
XOR をとり、結果が “1” のときに割り込みが発生します。2 ビットありますが、ビ
ット 0 が CPU 側の割り込みに、ビット 1 が外部バスマスタの割り込みに対応してい
ます。
割り込み要求
割り込み
INTPC ビット
なし
0
0
あり
0
1
あり
1
0
なし
1
1
図 15.2.8 PIO 割り込みコントロールレジスタ
15-9
第 15 章 パラレル I/O ポート (PIO)
15.2.10 CPU 割り込みマスクレジスタ (XPIOMASKCPU) 0xFFFE_F520
31
16
0
: タイプ
: 初期値
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU MCPU
[15]
[14]
[13]
[12]
[11]
[10]
[9]
[8]
[7]
[6]
[5]
[4]
[3]
[2]
[1]
[0]
R/W
: タイプ
0x0000
: 初期値
ビット
ニモニック
フィールド名
15 : 0
MCPU [15:0]
Mask Bits
説 明
Mask CPU [15:0] (初期値 0x0000)
対応するフラグビットを CPU 割り込み要因として使用するかどうかを指定します。
“0” のとき割り込み要因はマスクされます。
0: マスク (リセット)
1: マスクしない
図 15.2.9 CPU 割り込みマスクレジスタ
15-10
第 15 章 パラレル I/O ポート (PIO)
15.2.11 外部割り込みマスクレジスタ (XPIOMASKEXT)
0xFFFE_F524
31
16
0
: タイプ
: 初期値
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT MEXT
[15]
[14]
[13]
[12]
[11]
[10]
[9]
[8]
[7]
[6]
[5]
[4]
[3]
[2]
[1]
[0]
R/W
: タイプ
0x0000
: 初期値
ビット
ニモニック
15 : 0
MEXT [15:0]
フィールド名
Mask Bits
説 明
Mask EXT [15:0] (初期値 0x0000)
対応するフラグビットを外部バスマスタ割り込みの要因として使用するかどうかを
指定します。“0”のとき割り込み要因はマスクされます。
0: マスク (リセット)
1: マスクしない
図 15.2.10 外部割り込みマスクレジスタ
15-11
第 15 章 パラレル I/O ポート (PIO)
15.3 動作
15.3.1
PIO 端子のセットアップ
TX3927 には、16 ビット PIO チャネルが 1 個あります。これらのうち、PIO [0]端子以外の
PIO [15:1]はシリアル、タイマ、DMAC の信号機能と兼用になっています。どちらの信号とし
て使うかは、ピンコンフィグレーションレジスタで設定します。このコンフィグレーションレ
ジスタで PIO 機能が選択されると、その端子は PIO レジスタ内の設定に従って機能します。
兼用端子の機能については、「3.3 ピンマルチプレクス」を参照してください。
15.3.2
汎用パラレルポート
PIO の信号は、ビットごとに入力/出力を PIO 方向コントロールレジスタによって選択でき
ます。入力に設定した信号の状態は、PIO データ入力レジスタに示されます。出力に設定した
信号は、PIO データ出力レジスタに書き込まれた値を出力します。
15.3.3
割り込み要求
割り込み要求には、CPU 割り込み要求、外部割り込み要求の 2 つがあります。極性コント
ロールレジスタ、マスクレジスタ、割り込みコントロールレジスタおよびフラグレジスタを使
って割り込みの設定を行います。割り込みは下の等式が満たされたときに発生します。
CPU 割り込み要求 = |( (XPIOFLAG[15:0] ^ XPIOPOL[15:0] ) & XPIOMASKCPU[15:0] )^
XPIOINT[0]
外部割り込み要求 = |( (XPIOFLAG[15:0] ^ XPIOPOL[15:0] ) & XPIOMASKEXT[15:0] )^
XPIOINT[1]
注: “^” は排他的 OR、“|”はすべての 16 ビットをまとめて OR 処理するリダクション演算子
です。
パワーオンまたはリセット時には、いずれの割り込み要求も 1 になります。
外部割り込み要求は PCI 外部アービタモードでのみ使用できます。このとき割り込み出力端
子として REQ[1]端子を使用します。
CPU 割り込み要求は、割り込みコントローラの割り込み番号 9 の PIO 割り込みがこれに相
当します。
フラグレジスタには、フラグレジスタ 0 とフラグレジスタ 1 の 2 つがあります。この 2 つの
レジスタは、アドレスが別になっていますが実態はひとつです。したがってどちらのジレスタ
を読んでも値は同じです。違いは書き込みにあります。フラグレジスタ 0 には“0”も “1”書き込
むことができます。これに対してフラグレジスタ 1 の場合には、CPU からは“1”を書き込むこ
とができますが、“0”は書き込めません。一方 CPU 以外の DMAC または PCIC では“1”を書い
たビットが“0”クリアされます。このとき“0”を書いてもビットの値は変化しません。
15.3.4
PIO 端子のリード/ライト
16 個の PIO 端子は端子の機能や方向とは関係なくいつでもリード可能です。
15-12
第 16 章 パワーオンシーケンス
第16章 パワーオンシーケンス
TX3927 を正常に動作させるために、ここで説明するタイミングを守って CLKEN 入力、RESET
入力信号を切り替えてください。このタイミングが守られないと次のようになる可能性があります。
c
PLL が正しく動作しない
d
正しくリセットされない
tSUP
Vdd
XIN
tXIN
CLKEN
tPLL
SYSCLK
/SDCLK [4 : 0]
tRST
RESET*
(注 1) tSUP: 電源投入後、電源が安定するまでの時間
(注 2) tXIN: XIN から入力するクロックの発振安定時間
(注 3) tPLL: 内蔵 PLL のロックアップ時間 (発振安定時間)
PLL の逓倍値によって変わります。
PLLM
1
0
1
0
1
1
n
16401
2051
(注 4) tRST: CLKEN 信号のアサートから RESET*信号解除までの時間
tPLL + 256 SDCLK サイクル (SDCLK は CPU の 1/2 の周波数)
図 16.1 パワーオン時の初期化シーケンス
TX3927 の内蔵クロックジェネレータの初期化を CLKEN 信号で行います。電源投入時、電源が
安定し、XIN の入力クロックが安定するまで CLKEN 信号を “Low” にしてください。CLKEN が
アサートされると、内蔵の PLL が発振を開始します。PLL の発振が安定するまで時間がかかりま
すが、TX3927 はカウンタを内蔵し、PLL の発振安定時間を自動で計測して、発振安定時間後に内
部クロックおよび SYSCLK 出力、SDCLK 出力が発振されます。このカウンタの基準クロックは
XIN から入力されるクロックです。このカウンタの値はブート信号 PLLM [1 : 0] で指定した PLL
の逓倍値によって変わります。
表 16.1 PLL の逓倍数とカウンタ数の関係
PLL 逓倍数
PLLM [1 : 0] 端子の設定
カウンタ数
2倍
01
16401
16 倍
11
2051
16-1
第 16 章 パワーオンシーケンス
16-2
第 17 章 電気的特性
第17章 電気的特性
17.1 絶対最大定格 (*1)
項目
記号
定格
単位
VDD2*
−0.3 ~ 4.5
−0.3 ~ 3.6
V
V
VIN1
−0.3 ~ 6.7
V
その他の入力信号
VIN2
−0.3 ~ VDDS + 0.3V
V
保存温度
TSTG
−40 ~ 125
°C
2.0
W
供給電圧
VDDS
入力電圧
RXD [1 : 0], CTS [1 : 0], PCIAD [31 : 0],
PCICLK [3 : 0], GNT [3 : 0], REQ [3 : 0],
C_BE [3 : 0], IDSEL, FRAME*,
IRDY*, TRDY*, DEVSEL*,
STOP*, PERR*, SERR*, PAR
最大消費電力
(*1)
PD
絶対最大定格とは、瞬時たりとも超えてはならない規格であり、どの 1 つの項目も超え
ることができない規格です。絶対最大定格を超えると、破壊や劣化の原因となり、破壊・
燃焼による傷害を負うことがあります。したがって、かならず絶対最大定格を超えない
ように、応用機器の設計を行ってください。
*: PLLVDD を含む
17.2 推奨動作条件 (*2)
項目
供給電圧
I/O
内部回路
動作温度 (パッケージ温度)
記号
条件
Max.
単位
V
3.0
3.6
TLB 未使用
2.3
2.7
TLB 使用時
2.4
2.7
0
70
VDDS
VDD2*
Min.
Tc
V
°C
(注)
本製品は主用途を OA 機器として設計しています。OA 機器以外の用途に使用される場
合は当社技術部までご連絡ください。
(*2)
推奨動作条件とは、製品が一定の品質を保って正常に動作するために推奨する使用条件
です。推奨動作条件のどの一つ項目でも条件から外れる動作条件で使用した場合、誤動
作が生じる恐れがあります。したがってご使用の条件に対して、かならず推奨動作条件
の範囲を超えないように、応用機器の設計を行ってください。
*: PLLVDD を含む
17-1
第 17 章 電気的特性
17.3 DC 特性
17.3.1
PCI インタフェース以外の端子の DC 特性
(Tc = 0 ~ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V, VSS = 0V)
項目
記号
低レベル入力電圧
高レベル入力電圧
低レベル出力電流
高レベル出力電流
動作電流
条件
VIL1
RXD [1 : 0], CTS [1 : 0] 以外
VIL2
RXD [1 : 0], CTS [1 : 0]
VIH1
RXD [1 : 0], CTS [1 : 0] 以外
VIH2
RXD [1 : 0], CTS [1 : 0]
IOL1
(注 1) VOL = 0.4V
IOL2
(注 2) VOL = 0.4V
IOH1
(注 1) VOH = 2.4V
IOH2
(注 2) VOH = 2.4V
I/O
IDDS
f = 133 MHz, VDDS = 3.6V
内部
IDD2
f = 133 MHz, VDD2 = 2.7V
入力リーク電流
Max.
単位
VDDS× 0.2
V
0.8
VDDS × 0.8
VDDS + 0.3
2.0
5.5
8
16
−8
−16
V
mA
mA
mA
mA
120
mA
420
IIL
−10
−10
10
10
µA
µA
RST
50
300
kΩ
IIH
プルアップ抵抗
Min.
(注 1) 下記 (注 2) 以外の信号
(注 2) ADDR [19 : 5], SDCLK [4 : 0], DQM [3 : 0], DATA [31 : 0], CAS*, RAS*, CKE, WE*, OE*,
SYSCLK, GDCLK, ACK*
(注 3) f: CPU コアの動作周波数
17.3.2
PCI インタフェース端子の DC 特性
(Tc = 0 ∼ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V, VSS = 0V)
項目
記号
条件
Min.
Max.
単位
低レベル入力電圧
VIL3
−0.5
VDDS × 0.3
V
高レベル入力電圧
VIH3
VDDS × 0.5
5.5
V
高レベル出力電圧
VOH
IOUT = −500uA
低レベル出力電圧
VOL
IOUT = 1500uA
入力リーク電流
IIH
0 < VIN < 5V
IIL
17-2
VDDS × 0.9
−10
−10
V
VDDS × 0.1
V
10
10
µA
µA
第 17 章 電気的特性
17.4 水晶発振特性
17.4.1
推奨発振条件 (16 逓倍使用時)
TX3927F
XIN
XOUT
X’tal
CIN
項目
記号
水晶振動子 発振周波数
外部コンデンサ
17.4.2
fIN
CIN, COUT
水晶発振器
立ち上がり時間
立ち下がり時間
(1)
COUT
tr
tf
推奨値
単位
6.25 ~ 8.33
MHz
T.B.D.
pF
5(1)
5(1)
ns
ns
参考値です。水晶発振器メーカーが発行する最新情報を参考にしてください。
推奨入力クロック条件 (2 逓倍使用時)
2逓倍で使用するときは、XIN からクロックを入力してください。このとき XOUT はオー
プンにしてください。
項目
記号
入力クロック 周波数
17.4.3
fIN
推奨値
単位
50 ~ 66.67
MHz
電気特性
(Tc = 0 ∼ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V, VSS = 0V)
項目
水晶発振開始時間
記号
tSTA
条件
f=6.25∼8.33 MHz
17-3
MIN.
TYP.
MAX.
単位

1
10
ms
第 17 章 電気的特性
17.5 PLL フィルタ回路
TX3927 の内蔵 PLL のフィルタ回路として、Filter[1 : 0]端子にコンデンサをつけてください。
Filter0
項目
外部コンデンサ
Filter1
記号
推奨値
単位
CFilter
1800 (16 逓倍時)
220 (2 逓倍時)
pF
17-4
第 17 章 電気的特性
17.6 AC 特性 (PCI インタフェース以外の端子)
17.6.1
AC 特性表
(Tc = 0 ∼ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V, VSS = 0V, CL = 50pF)
項目
信号
Min
説明
Max
単位
tsys
SYSCLK/SDCLK[4 : 0]
Cycle Time (Full-speed bus mode)
15
ns
tsysh
SYSCLK
Cycle Time (Half-speed bus mode)
30
ns
tsysm
SYSCLK/SDCLK[4 : 0]
Min High/Low Level
5
ns
tsysmh
SYSCLK
Min Half-Speed High/Low Level
12
ns
td
(1)
Output Delay
toh
(1)
Output Hold
1
ns
tsu
(2)
Input Setup
7
ns
tih
(2)
Input Hold
0
tdaz
DATA[31 : 0], ACK*
Data Active to Hi-Z
tdza
DATA[31 : 0], ACK*
Data Hi-Z to Active
7
ns
ns
7
ns
1
ns
(1) ACK*, DATA[31 : 0], ROMCE[7:0]*, OE*, ACE*, SWE*, BWE[3 : 0]*, ADDR[19 : 2], DMAACK[3 : 0],
DMADONE*, PIO[15 : 0], TIMER[1 : 0]
(2) ACK*, DATA[31 : 0], NMI*, INT[5 : 0], DMAREQ[3 : 0], DMADONE*, PIO[15 : 0]
17.6.2
SDRAM インタフェース AC 特性表
(Tc = 0 ∼ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V, VSS = 0V, CL = 50 pF for SDCLK[4:0])
項目
信号
50pF
説明
Min
100pF
Max
Min
Max
150pF
Min
Max
単位
tsdclk
SDCLK[4 : 0]/SYSCLK
Cycle Time
15
15
15
ns
tsdclkm
SDCLK[4 : 0]/SYSCLK
Minimum High/Low Level
5
5
5
ns
tsd
(3)
Output Delay
tsdd
DATA[31 : 0]
Output Delay
tsoh
(4)
Output Hold
1
1
1
ns
tssu1
DATA[31 : 0]
Input Setup (Internal clock)
7
7
7
ns
tssu2
DATA[31 : 0]
Input Setup (Pin feed-back clock)
2
2
2
ns
tsih
DATA[31 : 0]
Input Hold
0
0
0
ns
tsdaz
DATA[31 : 0]
Data Active to Hi-Z
tsdza
DATA[31 : 0]
Data Hi-Z to Active
7
8
8
10
7
1
9
12
7
1
7
1
(3) SDCS[7 : 0], RAS*, CAS*, WE*, CKE, OE*, DSF, ADDR[19 : 5], DQM[3 : 0]
(4) SDCS[7 : 0], RAS*, CAS*, WE*, CKE, OE*, DSF, ADDR[19 : 5], DQM[3 : 0], DATA[31 : 0]
17-5
ns
ns
ns
ns
第 17 章 電気的特性
17.7 AC 特性 (PCI インタフェース端子)
AC 特性表
17.7.1
(PCI_CLK speed = 33 MHz, Tc = 0 ∼ 70°C, VDDS = 3.3V ± 0.3V, VDD2 = 2.5V ± 0.2V,
VSS = 0V, CL = 50pF)
項目
Min.
説明
Max.
単位
tcyc
PCI_CLK サイクル時間
30
ns
thigh
PCI_CLK High 時間
11
ns
tlow
PCI_CLK Low 時間
11
ns

tval
PCI_CLK スルーレイト
1
4
V/ns
PCI_CLK からの有効出力の遅延(bus 結線)
2
11
ns
tval(ptp)
PCI_CLK からの有効出力の遅延(p-p 結線)
2
12
ns
ton
Hi-Z → Active 遅延
2
toff
Active → Hi-Z 遅延
28
ns
ns
tsu
PCI_CLK に対する入力セットアップ(bus 結線)
7
ns
tsu(ptp)
PCI_CLK に対する入力セットアップ(p-p 結線)
12
ns
th
PCI_CLK に対するホールド
0
ns
trst
電源安定後の Reset active 時間
1
ms
trst-clk
PCI_CLK 安定後の Reset active 時間
trst-off
Reset active → 出力 Hi-Z 遅延
100
us
40
17-6
ns
第 17 章 電気的特性
17.7.2
タイミング図 (SDRAMC, ROMC インタフェース端子)
tsym, tsysh
tsysm, tsysmh
tsysm, tsysmh
toh
tdaz
td
tdza
SYSCLK
/SDCLK[4:0]
Output
tsu
tih
SYSCLK
/SDCLK[4:0]
Input
17.7.3
タイミング図 (PCI インタフェース端子)
ton
tval
tcyc
toff
PCICLK
tHigh
0.4Vdd
tLow
0.4Vdd
0.4Vdd
Output Delay
Tri-state
Output
0.4Vdd
tsu
th
PCICLK.
Intput
0.4Vdd
17-7
Valid
0.4Vdd
第 17 章 電気的特性
17.8 シリアル入力クロック
項目
説明
CPU 動作周波数 = 133 MHz
計算式
MIN.
MAX.
MIN.
単位
MAX.
tSCY
SCLK 周期
8X + 25 ns
85
ns
tSCYL
SCLK 低レベル幅
8X + 10 ns
40
ns
tSCYH
SCLK 高レベル幅
8X + 10 ns
40
ns
(注)
X は CPU の動作クロック周期です。
17-8
第 18 章 パッケージ外形図
第18章 パッケージ外形図
単位: mm
P-QFP240-3232-0.50
18-1
第 18 章 パッケージ外形図
18-2
第 19 章 使用上の注意点
第19章 使用上の注意点
19.1 TMPR3927A のプログラミングに関する注意点
TX39 プロセッサコアはキャッシュメモリ、ライトバッファを内蔵しているためプログラムのコ
ーディング順と異なる順番でバスオペレーション (SDRAMC、ROMC、IRC など周辺モジュール
レジスタへのライトなど) が行われることがあります。
(1) 非キャッシュ領域とキャッシュ領域上のプログラム
「4.1 メモリマッピング」で説明する非キャッシュ領域上にあるプログラムではコーディング
された順番に命令、バスオペレーションが実行されます。キャッシュ領域上のプログラムはキ
ャッシュがヒットしていると命令、バスオペレーションの実行順番がコーディング順にならな
いことがあります。(リードオペレーションの優先)
(2) sync 命令
sync 命令はバスオペレーションが終了するまでパイプラインをストールさせますが、ライト時
ストールするのは CPU からライトバッファへの書き込みまででライトバッファから先の周辺
レジスタへのライト期間は含まれません。
(3) ライトバッファ
ライトバッファは
− リード要求と同じアドレスへのライト要求がライトバッファ内にあるときは、ライトを先に
行ってからリードを行います。
− 非キャッシュ領域に対するリード要求があるときにライトバッファ内に非キャッシュ領域
へのライト要求があるとライトを先に行います。
たとえば、IRC で割り込みマスクを設定して割り込み許可を行う場合、
sw
mfc0
or
mtc0
r8, IRC_IRIMR_ADDR
r9, r12
r9, r9, r10
r9, r12
# IRIMR 割り込みマスク設定
# CP0 status レジスタリード
# IP [4 : 0], IEc 割り込み許可設定データ r10 = 0x00007c01
# 割り込み許可
図 19.1.1 意図しない割り込みを受け付けるプログラム
sw
lw
mfc0
or
mtc0
r8, IRC_IRIMR_ADDR
r8, IRC_IRSSR_ADDR
r9, r12
r9, r9, r10
r9, r12
# IRIMR 割り込みマスク設定
# 非キャッシュ領域リードによる非キャッシュ領域ライトの確定
# CP0 status レジスタリード
# IP [4 : 0], IEc 割り込み許可設定データ r10 = 0x00007c01
# 割り込み許可
図 19.1.2 IMR でマスクした割り込みを受け付けるプログラム
図 19.1.1のプログラムがキャッシュ領域上にあってキャッシュイネーブルのとき、IRIMR への
ライトが行われる前に割り込み許可となり意図しない割り込みを受け付けることがあります。図
19.1.2では IRIMR へのライトを確定するために IRSSR のリード (非キャッシュ領域のリード) を行
っています。これによって IRIMR 設定後に割り込み許可となります。
19-1
第 19 章 使用上の注意点
19-2
付録 A TX3927 プログラミングサンプル集
付録A TX3927 プログラミングサンプル集
(注 1) 本章のプログラム例の動作については保証いたしません。
(注 2) 例として添付されているプログラムソースコードは説明用途で使用しているため、そのままコン
パイル実行できるものではありません。また例の中には UDEOS (µITRON 仕様 OS: 東芝情報シス
テム(株)製でフリーではありません)を前提としているものがあります。
A.1
プログラミングに慣れていない方のために
A.1.1
メモリマップド I/O
MIPS では入出力はメモリマップド I/O になっています。あまり多くのプロセッサを経験さ
れていない方の中には、プログラミングの最初で戸惑われる方がいらっしゃるようです。ペリ
フェラルレジスタの READ/WRITE をするのに入出力命令や関数(x86 の in/out 命令や
inp/outp 関数に相当するものです)がないというのが、困惑の原因になっているようです。御
存じない方のために簡単に説明をしておきます。
MIPS ではメモリマップド I/O 方式ですので、I/O 空間、メモリ空間の区別はありません。
機械語レベルではメモリに対する書き込みもデバイスレジスタに対する書き込みも同じ Store
命令(Store Byte、Store Word など)を使用します。レジスタはマニュアルに記載されている固
定 ア ド レ ス に 割 り 付 け ら れ て い ま す の で 、 例 え ば PIODIR と い う レ ジ ス タ ( ア ド レ ス
0xfffef508)に値を書き込む場合は
volatile int *pdir;
pdir = (volatile int *)0xfffef508;
と定義しておいて
*pdir = 0x0000f000;
で OK です。
volatile を忘れないようご注意ください。volatile をつけていないとコンパイラの最適化に
より、デバイスレジスタへのアクセスが実際に行われなくなる場合があります。
A.1.2
コプロセッサ 0 レジスタのアクセスについて
MIPS では割り込み処理などのシステムプログラムを記述する際に、コプロセッサ 0 のレジ
スタにアクセスする必要があります。C ではコプロセッサ命令を使用することはできませんし、
そのためのライブラリ関数もコンパイラには付属していません。したがって、この部分はアセ
ンブラ記述が必要です。C からアクセスする場合には自分でライブラリを用意するか、インラ
インアセンブラを使用する必要があります。下記の例は C から呼びだし可能な CP0 レジスタ
アクセスルーチンのサンプルプログラムです。
■ ファイル名: cp0ins.S
.macro
getcp0reg
.globl
¥name
.ent ¥name
¥name:
mfc0
$2,¥regno
jr
$31
nop
.end
¥name
.endm
name,regno
.macro
putcp0reg
.globl
¥name
.ent ¥name
name,regno
# getcp0_xx();
# reg->$2
A-1
# put cp0_xx(val);
付録 A TX3927 プログラミングサンプル集
¥name:
mtc0
jr
nop
.end
.endm
$4,¥regno
$31
# reg->$2
¥name
.macro
setcp0reg
.globl
¥name
.ent ¥name
¥name:
mfc0
$2,¥regno
nop
and
$1,$2,$4
or
$1,$1,$5
mtc0
$1,¥regno
jr
$31
nop
.end
¥name
.endm
.set noat
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
name,regno
# val->CP reg
getcp0_0 $0
putcp0_0 $0
setcp0_0 $0
getcp0_1 $1
putcp0_1 $1
setcp0_1 $1
getcp0_2 $2
putcp0_2 $2
setcp0_2 $2
getcp0_3 $3
putcp0_3 $3
setcp0_3 $3
getcp0_4 $4
putcp0_4 $4
setcp0_4 $4
getcp0_5 $0
putcp0_5 $0
setcp0_5 $0
getcp0_6 $6
putcp0_6 $6
setcp0_6 $6
getcp0_7 $7
putcp0_7 $7
setcp0_7 $7
getcp0_8 $8
putcp0_8 $8
setcp0_8 $8
getcp0_9 $9
putcp0_9 $9
setcp0_9 $9
getcp0_10 $10
putcp0_10 $10
setcp0_10 $10
getcp0_11 $11
putcp0_11 $11
setcp0_11 $11
getstatus $12
putstatus $12
setstatus $12
getcp0_13 $13
putcp0_13 $13
setcp0_13 $13
getcp0_14 $14
A-2
# setcp0_xx(mask,val);
付録 A TX3927 プログラミングサンプル集
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
putcp0_14 $14
setcp0_14 $14
getprid $15
putcp0_15 $15
setcp0_15 $15
getcp0_16 $16
putcp0_16 $16
setcp0_16 $16
getcp0_17 $17
putcp0_17 $17
setcp0_17 $17
getcp0_18 $18
putcp0_18 $18
setcp0_18 $18
getcp0_19 $19
putcp0_19 $19
setcp0_19 $19
getcp0_20 $20
putcp0_20 $20
setcp0_20 $20
getcp0_21 $21
putcp0_21 $21
setcp0_21 $21
getcp0_22 $22
putcp0_22 $22
setcp0_22 $22
getcp0_23 $23
putcp0_23 $23
setcp0_23 $23
getcp0_24 $24
putcp0_24 $24
setcp0_24 $24
getcp0_25 $20
putcp0_25 $20
setcp0_25 $20
getcp0_26 $26
putcp0_26 $26
setcp0_26 $26
getcp0_27 $27
putcp0_27 $27
setcp0_27 $27
getcp0_28 $28
putcp0_28 $28
setcp0_28 $28
getcp0_29 $29
putcp0_29 $29
setcp0_29 $29
getcp0_30 $30
putcp0_30 $30
setcp0_30 $30
getcp0_31 $31
putcp0_31 $31
setcp0_31 $31
.globl
getstackp
.ent getstackp
getstackp:
addu
$2,$0,$29
jr
$31
nop
.end
getstackp
A-3
付録 A TX3927 プログラミングサンプル集
A.2
基本動作
A.2.1
ヘッダファイル
■ ファイル名: tx3927.h
/****************************************************
* MODULE NAME: tx3927.h TX 3927 REG. INFO.
*
* FUNCTION
: tx 3927 header
*
* UPDATE
: 1998.07.15
*
****************************************************/
#ifndef __TX3927__
#define __TX3912
#include
"cosbd_27.h"
/************
* SDRAM
*
************/
/* ***** Channel Control Register ***** */
/* Memory Type
*/
#define SDM_SDRAM
0x00000000
/* 0x00000000...SDRAM
*/
#define SDM_DIMM
0x00040000
/* 0x00040000...DIMM FLASH */
#define SDM_SMROM
0x00080000
/* 0x00080000...SMROM
*/
#define SDM_SGRAM
0x000C0000
/* 0x000C0000...SGRAM
*/
/* SDRAM Enable
*/
#define SDE_ENA
0x00020000
/* Enable
*/
#define SDE_DIS
0x00000000
/* Disable
*/
/* BANK#
*/
#define SDB_0
0x00000000
/* Type 0
*/
#define SDB_1
0x00010000
/* Type 1
*/
/* Address Mask Register */
#define SDAM
0x0000ffe0
/* */
/* SDRAM Row Size */
#define SDRS_2048
0x00000000
/* 2048 Row */
#define SDRS_4096
0x00000008
/* 4096 Row */
#define SDRS_8192
0x00000010
/* 8192 Row */
/* DRAM Colum Size */
#define SDCS_256
0x00000000
/* 256Word */
#define SDCS_512
0x00000002
/* 512Word */
#define SDCS_1024
0x00000004
/* 1024Word */
#define SDCS_2048
0x00000006
/* 2048Word */
/* SDRAM Memory Width */
#define SDMW_32
0x00000000
/* 0:32 Bit */
#define SDMW_16
0x00000001
/* 1:16 Bit */
/* ***** SDRAM Shard Timming Register ***** */
/* BANK Cycle Time */
#define SDBC_5TCK
0x00000000
/* 5 tck(Reset) */
#define SDBC_6TCK
0x20000000
/* 6 tck
*/
#define SDBC_7TCK
0x40000000
/* 7 tck
*/
#define SDBC_8TCK
0x60000000
/* 8 tck
*/
#define SDBC_9TCK
0x80000000
/* 9 tck
*/
#define SDBC_10TCK
0xa0000000
/* 10 tck
*/
/* SDACP Time */
#define SDACP_3TCK
0x00000000
/* 3 tck(Reset) */
#define SDACP_4TCK
0x08000000
/* 4 tck */
#define SDACP_5TCK
0x10000000
/* 5 tck */
#define SDACP_6TCK
0x18000000
/* 6 tck */
/* Precharge Time */
#define SDP_2TCK
0x00000000
/* 2 tck(Reset) */
#define SDP_3TCK
0x04000000
/* 3 tck */
/* RAS to CAS Delay */
#define SDCD_2TCK
0x00000000
/* 2 tck(Reset) */
A-4
付録 A TX3927 プログラミングサンプル集
#define SDCD_3TCK
0x02000000
#define SDRC(cnt) ((cnt & 0x0000003F)
#define CASL_2TCK
#define CASL_3TCK
0x00000000
0x00020000
#define DRB_REG
#define DRB_NORMAL
0x00000000
0x00010000
/* ***** FLASH Shard Timming Register
/* ***** SMROM Shard Timming Register
/* ***** SDRAM Command Register *****
#define
#define
#define
#define
#define
#define
#define
#define
SDCMSK_CH0
SDCMSK_CH1
SDCMSK_CH2
SDCMSK_CH3
SDCMSK_CH4
SDCMSK_CH5
SDCMSK_CH6
SDCMSK_CH7
0x00000010
0x00000020
0x00000040
0x00000080
0x00000100
0x00000200
0x00000400
0x00000800
#define
#define
#define
#define
#define
#define
#define
SDC_NOP
SDC_SDMOD
SDC_SMMOD
SDC_PRE
SDC_LPMOD
SDC_PDMOD
SDC_POWEXT
0x00000000
0x00000001
0x00000002
0x00000003
0x00000004
0x00000005
0x00000006
/* 3 tck */
/* Refresh Counter */
<< 18)
/* CAS Latency */
/* 2 tck(Reset) */
/* 3 tck */
/* Data Read Bypass */
/* (Reset) */
/* */
/* Slow Write Burst */
/* SGRAM Black Write */
/* SGRAM Write Pre Bit */
/* Refresh Period */
***** */
***** */
*/
/* Channel Mask */
/* Channel #0 */
/* Channel #1 */
/* Channel #2 */
/* Channel #3 */
/* Channel #4 */
/* Channel #5 */
/* Channel #6 */
/* Channel #7 */
/* Command */
/* NOP Command */
/* Set SDRAM Mode Register */
/* Set SMROM Mode Register */
/* Precharge All SDRAM Banks */
/* Enter Low Power Mode */
/* Enter Power Down Mode */
/* Exit Low Power/Power Down Mode */
/* ***** SGRAM Load Mask Register ***** */
/* ***** SGRAM Load Color Register ***** */
/* ************ *
* ROMC
*
* ************ */
typedef struct{
volatile int RCCR;
/* ***** Channel Control Register ***** */
}ROMCC;
#define S_RCCR0
0x1fc3e200
#define
#define
#define
#define
RPS_NON
RPS_4W
RPS_8W
RPS_16W
0x00000000
0x00040000
0x00080000
0x000c0000
#define
#define
#define
#define
RPWT_0
RPWT_1
RPWT_2
RPWT_3
0x00000000
0x00010000
0x00020000
0x00030000
#define RWT(wc)
#define
#define
#define
#define
#define
#define
#define
RCS_1M
RCS_2M
RCS_4M
RCS_8M
RCS_16M
RCS_32M
RCS_64M
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
((wc & 0xf)<< 12) /*
/*
0x00000000
/*
0x00000100
/*
0x00000200
/*
0x00000300
/*
0x00000400
/*
0x00000500
/*
0x00000600
/*
A-5
Initial Data */
ROM control Page Mode ROM Page Size */
4-Word */
4-Word */
8-Word */
16-Word */
ROM control Page Read Mode Wait Time on
channel0 */
0Wait */
1Wait */
2Wait */
3Wait */
ROM control Wait Time on channel0 */
wc : Wait Count */
ROM control Channel Size on channel0 */
1Mbyte */
2Mbyte */
4Mbyte */
8Mbyte */
16Mbyte */
32Mbyte */
64Mbyte */
付録 A TX3927 プログラミングサンプル集
#define RCS_128M
#define RCS_256M
#define RCS_512M
0x00000700
0x00000800
0x00000900
#define BUS16
#define BUS32
0x00000080
0x00000000
/*
/*
/*
/*
/*
/*
#define RPM 0x00000001
128Mbyte */
256Mbyte */
512Mbyte */
ROM control BUS Size */
ROM control 16bit width bus size on channel0 */
ROM control 32bit width bus size on channel0 */
/* ROM control Page Mode on channel0 */
/************
* DMA
*
************/
/* ***** Master Control Register ***** */
#define S_MCR
0x00000000
#define FIFOVC(vc) ((wc & 0x0002c000) << 14)
#define FIFWP(wp) ((wp & 0x00003800) << 11)
#define FIFRP(rp) ((rp & 0x00000700) << 8)
#define RSFIF
0x00000080
#define FIFUM
0x00000078
#define LE
0x00000004
#define RRPT
0x00000002
#define MSTEN
0x00000001
/* ***** Channel Control Register ***** */
#define S_CNTL
0x00000000
#define CH_reset 0x01000000
#define RVBYTE
0x00800000
#define ACKPOL
0x00400000
#define REQPL
0x00200000
#define EGREQ
0x00100000
#define CHDN
0x00080000
/* ***** Channel Status Register ***** */
#define S_STS
0x00000000
#define WAITC(wc) ((wc & 0x0000ffc000) << 14)
#define CHNACT
0x00000100
#define ABCHC
0x00000080
#define NCHNC
0x00000040
#define NTRNFC
0x00000020
#define EXTDN
0x00000010
#define CFERR
0x00000008
#define CHERR
0x00000004
#define DESERR
0x00000002
#define SORERR
0x00000001
/* ***** Source Address Register ***** */
/* ***** Distination Address Register ***** */
/* ***** Chain Address Register ***** */
A-6
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
FIFO Valid Entry Count
FIFO Write Pointer
FIFO Read Pointer
Reset FIFO
FIFO Use Mask
Litele Endian
Round Robin Priority
Master Enable
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
Channel Reset */
Reverse Byte
*/
Acknowledge Polarity
*/
Request Polarity */
Edge Request
*/
Chain Done
*/
Done Control */
External Request */
Internal Request Delay */
Interrupt Enable on Error */
Interrupt Enable on Chain Done */
Interrupt Enable on Transfer Done */
Chain Enable
*/
Transfer Active */
Snop */
Mixed Distination Increment */
Mixed Source Increment */
Transfer Size */
Memory to I/O */
One Address */
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
Internal Wait Counter */
Channel Active */
Abnormal Chain Completion */
Normal Chain Completion */
Normal Transfer Completion */
External Done Asserted */
Configration Error */
Chain Bus Error */
Destination Bus Error */
Source Bus Error */
*/
*/
*/
*/
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
/* ***** Source & Destination Address Increment ***** */
/* ***** Count Register ***** */
/************
* TIMMER
*
************/
/* ***** Timmer Control Register ***** */
#define S_TMTCR
0x00000000
/* Initial Data */
#define TCE
0x00000080
/* Timer Count Enable */
#define CCDE
0x00000040
/* Counter Clock Divide Enable */
#define CRE
0x00000020
/* Counter Reset Enable */
#define ECES
0x00000008
/* External Clock Edge Select */
#define CCS
0x00000004
/* Counter Clock Select */
/* Timer Mode */
#define TMODE_WT 0x00000002
/* Watchdog Timer Mode */
#define TMODE_PG 0x00000001
/* Pulse Generator Mode */
#define TMODE_IT 0x00000000
/* Interval Timer Mode */
/* ***** Timmer Interrupt Status Register ***** */
#define S_TMTISR 0x00000000
/* Initial Data */
#define TWIS
0x00000008
/* Timer Watchdog Interupt Status */
#define TPIBS
0x00000004
/* Timer Pulse Generator Interrupt by CPRB
Status */
#define TPIAS
0x00000002
/* Timer Pulse Generator Interrupt by CPRA
Status */
#define TIIS
0x00000001
/* Timer Interval Interupt Status */
/* ***** Compare Register A ***** */
#define S_TMCPRA 0x00000000
/* Initial Data */
/* ***** Compare Register B ***** */
#define S_TMCPRB 0x00000000
/* Initial Data */
/* ***** Interval Timmer Mode Register ***** */
#define S_TMITMR 0x00000000
/* Initial Data */
#define TIIE
0x00008000
/* Timer Interval Interrupt Enable */
#define TZCE
0x00000001
/* Interval Timer Zero Clear Enable */
/* ***** Divider Register ***** */
#define S_TMCCDR 0x00000000
/* Initial Data */
#define CCD_1
0x00000000
/* Counter clock Divide: 2 の 1 乗分周 */
#define CCD_2
0x00000001
/* Counter clock Divide: 2 の 2 乗分周 */
#define CCD_3
0x00000002
/* Counter clock Divide: 2 の 3 乗分周 */
#define CCD_4
0x00000003
/* Counter clock Divide: 2 の 4 乗分周 */
#define CCD_5
0x00000004
/* Counter clock Divide: 2 の 5 乗分周 */
#define CCD_6
0x00000005
/* Counter clock Divide: 2 の 6 乗分周 */
#define CCD_7
0x00000006
/* Counter clock Divide: 2 の 7 乗分周 */
#define CCD_8
0x00000007
/* Counter clock Divide: 2 の 8 乗分周 */
/* ***** パルスジェネレータモードレジスタ ***** */
#define S_TMPGMR 0x00000000
/* Initial Data */
#define TPIBE
0x00008000
/* Timer Pulse Generator Interrupt by CPRB
Enable */
#define TPIAE
0x00004000
/* Timer Pulse Generator Interrupt by CPRA
Enable */
#define FFI
0x00000001
/* Timer Flip-Flop Initial */
/* ***** ウォッチドッグタイマモードレジスタ ***** */
#define S_TMWTMR 0x00000000
/* Initial Data */
#define TWIE
0x00008000
/* Timer Watchdog Interrupt Enable */
#define WDIS
0x00000080
/* Watchdog Timer Disable */
#define TWC
0x00000001
/* Timer Watchdog Clear */
/* *** タイマリードレジスタ *** */
#define S_TMTRR
0x00000000
/* Initial Data */
/****************
* CHIP CONFIG *
****************/
/* *** Chip Configration Register *** */
/* #define S_CCFG
0x0000
/* Initial Data */
#define CCFG_GHA
0x00040000
/* GBus Half Speed */
#define CCFG_TOF
0x00020000
/* TLB Off(On) */
A-7
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
#define
#define
#define
CCFG_BEW
CCFG_WRS
CCFG_TOE
CCFG_PAB
CCFG_PCI
CCFG_PSN
CCFG_PRI
0x00010000
0x00008000
0x00004000
0x00002000
0x00001000
0x00000800
0x00000400
/* Bus Error on Write */
/* Watchdog Timer for Reset/NMI */
/* Timeout Enable for Bus Error */
/* Internal or External PCI arbiter */
/* PCI Clock Divider Control(1/2) */
/* PCI Bus Request Snoop(Ena. Cache) */
/* Select PCI Arbitration Priority */
/* PLL Offset */
#define CCFG_PLO(off)
((off & 0x00000003) << 8)
/* PLL Gain */
#define CCFG_PLG(gn) ((gn & 0x00000003) << 6)
/* PLL Multiplier */
#define CCFG_PLM(adr)
((adr & 0x00000003) << 4)
#define CCFG_POF
0x00000008
/* PLL Off(ON) */
#define CCFG_END
0x00000004
/* Current Endian Setting of G-Bus */
#define CCFG_HLF
0x00000002
/* System Clock Half-Speed Mode */
#define CCFG_HLD
0x00000001
/* ACE Address Hold */
/* *** Pin Configration Register *** */
#define S_PINCFG
0x00000000
/* Initial Data */
#define S_PIN_ENA
0x0fffffff
/* 全ピンイネーブル指定 */
#define PINC_SCE
0x08000000
/* System Clock Enable */
/* SDRAM Clock Enable */
#define SDCLK_4
0x04000000
/* SDCLK[4] Enable */
#define SDCLK_3
0x02000000
/* SDCLK[3] Enable */
#define SDCLK_2
0x01000000
/* SDCLK[2] Enable */
#define SDCLK_1
0x00800000
/* SDCLK[1] Enable */
#define SDCLK_0
0x00400000
/* SDCLK[0] Enable */
/* SDRAM Clock Enable */
#define PCICLK_3
0x00200000
/* PCICLK[3] Enable */
#define PCICLK_2
0x00100000
/* PCICLK[2] Enable */
#define PCICLK_1
0x00080000
/* PCICLK[1] Enable */
#define PCICLK_0
0x00040000
/* PCICLK[0] Enable */
#define PINC_SCS
0x00020000
/* Select DMA/SDCS_CE Function */
#define PINC_SDF
0x00010000
/* Select DSF Function */
/* Select SIO Control Pins */
#define SELSIOC_1
0x00008000
/* Select the Function CTS[1]/PIO[2]
and RTS[1]/PIO[1]/DSF. */
#define SELSIOC_0
0x00004000
/* Select the Function CTS[0]/INT[5]
and RTS[0]/INT[4] */
/* Select SIO/PIO function Select */
#define SELSIO_1
0x00002000
/* Select the Function RXD[1]/PIO[6]
and TXD[1]/PIO[5] */
#define SELSIO_0
0x00001000
/* Select the Function RXD[0]/PIO[4]
and TXD[0]/PIO[3] */
/* Select Timer PIO function Select */
#define SELTMR_2
0x00000800
/* Select the Function */
#define SELTMR_1
0x00000400
/* Select the Function */
#define SELTMR_0
0x00000200
/* Select the Function */
/* Select DMADONE/PIO */
#define SELDONE
0x00000100
/* Select the Function */
/* Internal/Extarnal DMA Source Connection */
#define INTDMA_3
0x00000080
/* DMAREQ/ACK[3] connect to SIO[1] TXREQ/ACK */
#define INTDMA_2
0x00000040
/* DMAREQ/ACK[3] connect to SIO[0] TXREQ/ACK */
#define INTDMA_1
0x00000020
/* DMAREQ/ACK[3] connect to SIO[1] RXREQ/ACK */
#define INTDMA_0
0x00000010
/* DMAREQ/ACK[3] connect to SIO[1] RXREQ/ACK */
/* Select DMA/PIO/TIMER Function
*/
#define DMAREQ_3
0x00000008
/* Used to select the function of
DMAREQ[3]/PIO[15]/TIMER[1]
DMAACK[3]/PIO[14]/TIMER[0] */
#define DMAREQ_2
0x00000004
/* Used to select the function of
DMAREQ[2]/PIO[13]
DMAACK[2]/PIO[12] */
#define DMAREQ_1
0x00000002
/* Used to select the function of
DMAREQ[1]/PIO[11]
DMAACK[1]/PIO[10] */
A-8
付録 A TX3927 プログラミングサンプル集
#define DMAREQ_0
0x00000001
/* Used to select the function of DMAREQ[0]/PIO[9]
DMAACK[0]/PIO[8] */
/* *** Power Down Control Register *** */
/* interrupt signals wake from power down mode */
#define PDNMSK_NMI
0x00800000
#define PDNMSK_INT5 0x00400000
#define PDNMSK_INT4 0x00200000
#define PDNMSK_INT3 0x00100000
#define PDNMSK_INT2 0x00080000
#define PDNMSK_INT1 0x00040000
#define PDNMSK_INT0 0x00020000
/* Power Down Trigger */
#define PDN
0x00010000
/* PIO Output Direction */
#define PIO_0
0x00000001
#define PIO_1
0x00000002
#define PIO_2
0x00000004
#define PIO_3
0x00000008
#define PIO_4
0x00000010
#define PIO_5
0x00000020
#define PIO_6
0x00000040
#define PIO_7
0x00000080
#define PIO_8
0x00000100
#define PIO_9
0x00000200
#define PIO_10
0x00000400
#define PIO_11
0x00000800
#define PIO_12
0x00001000
#define PIO_13
0x00002000
#define PIO_14
0x00004000
#define PIO_15
0x00008000
/* PIO Open Drain Mode */
#define ALL_TOTEM
0x0000ffff
/* PIO All Totem-pole Mode */
/************
* SIO
*
************/
/* *** Line Control Register *** */
#define S_SILCR
0x4000
#define SILC_RWUB
0x8000
#define SILC_TWUB
0x4000
#define SILC_UODE
0x2000
#define SILC_HS_CTS 0x0100
#define SILC_SCS_I
0x0000
#define SILC_SCS_B
0x0020
#define SILC_SCS_E
0x0040
#define SILC_UPE_ODD 0x0010
#define SILC_UPE_EVN 0x0008
#define SILC_UPE_NON 0x0000
#define SILC_U2STOP 0x0004
#define SILC_UM_8
0x0000
#define SILC_UM_7
0x0001
#define SILC_UM_M8
0x0002
#define SILC_UM_M7
0x0003
/* *** DMA/Interrupt Control Register
#define S_SILSR
0x0000
#define TDR
0x8000
#define RDR
0x4000
#define TIR
0x2000
#define RIR
0x1000
#define SPIR
0x0800
/* CTSS Status active condition */
#define CTS_DIS 0x0000
#define CTS_UEG 0x0200
#define CTS_DEG 0x0400
#define CTS_BEG 0x0600
A-9
/* Initial Data */
/* Wake Up Bit for Recive */
/* Wake Up Bit for Transmit */
/* SOUT Open Drain Enable */
/* Hand Shake Enable(CTS) */
/* SIO Clock Select: T0(内部システムクロック) */
/* SIO Clock Select: ボーレートジェネレータ */
/* SIO Clock Select: 外部クロック(SLCK) */
/* UART Parity Odd */
/* UART Parity Enable */
/* UART Parity Non */
/* UART 2 Stop Bit */
/* UART MODE: 8bit データ長 */
/* UART MODE: 7bit データ長 */
/* UART MODE: マルチコントローラ 8bit データ長 */
/* UART MODE: マルチコントローラ 7bit データ長 */
*** */
/* Initial Data */
/* Tran. DMA Request(Enable)
*/
/* Rsv. DMA Request(Enable)
*/
/* Tran. Interrupt Request(Enable) */
/* Rsv. Interrupt Request(Enable) */
/* Sp.
Interrupt Request(Enable) */
/*
/*
/*
/*
Disable
Rising Edge od CTS
Falling Edge of CTS
Both Edge of CTS
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
/* Status Change Interrupt Enable */
#define STIE_OVE 0x0020
/* Overrun Error Status
*/
#define STIE_CTS 0x0010
/* CTS Terminal Status
*/
#define STIE_RBK 0x0008
/* Receive Break
*/
#define STIE_TRD 0x0004
/* Transmit Ready
*/
#define STIE_TXA 0x0002
/* Transmit All Sent
*/
#define STIE_UBK 0x0001
/* UART Break Detect
*/
/* *** DMA/Interrupt Status Register *** */
#define S_SIDISR 0x4100
/* Initial Data */
#define SIDI_UBK 0x8000
/* UART Break Detect
*/
#define SIDI_UVA 0x4000
/* UART Alailable Data
*/
#define SIDI_UFE 0x2000
/* UART Frame Error
*/
#define SIDI_UPE 0x1000
/* UART Parity Error
*/
#define SIDI_UOE 0x0800
/* UART Overrun Error
*/
#define SIDI_ERI 0x0400
/* Error Interrupt
*/
#define SIDI_TOU 0x0200
/* Time Out
*/
#define SIDI_TEMP 0x0100
/* Transmit DMA/Interrupt Status
*/
#define SIDI_RFUL 0x0080
/* Receive DMA/Interrupt Status
*/
#define SIDI_STI 0x0040
/* Status Change Interrupt Status */
/* *** Status Change Interrupt Status Register *** */
#define S_SICISR 0x0006
/* Initial Data */
#define SICI_OVE 0x0020
/* Overrun Error Ditecte
*/
#define SICI_CTS 0x0010
/* CTS Terminal Status(Signal High) */
#define SICI_RBK 0x0008
/* Receive Break
*/
#define SICI_TRD 0x0004
/* Transmit Ready
*/
#define SICI_TXA 0x0002
/* Transmit All Sent
*/
#define SICI_UBK 0x0001
/* UART Break Ditecte
*/
/* *** FIFO Control Register *** */
#define S_SIFCR
0x0000
/* Initial Data */
#define SISF_RDL 0x0010
/* Receive FIFO DMA Request Triger Level */
#define SISF_TDL 0x0008
/* Transfer FIFO DMA Request Triger Level */
#define SISF_TFR 0x0004
/* Transmit FIFO Reset
*/
#define SISF_RFR 0x0002
/* Receive FIFO Reset
*/
#define SISF_FRS 0x0001
/* FIFO Reset Enable
*/
/* *** FLOW Control Register *** */
#define S_SIFLCR
0x0182
/* Initial Data */
#define SIFL_RCS
0x1000
/* RTS Control Select
*/
#define SIFL_TES
0x0800
/* Transmit Enable Select */
#define SIFL_RTS
0x0200
/* RTS Software Control
*/
#define SIFL_RSE
0x0100
/* Receive Serial Data Enable
*/
#define SIFL_TSE
0x0080
/* Transmit Serial Data Enable
*/
/* RTS Trigger Level (1∼15)
*/
#define SIFL_RTSTL(lvl) ((lvl & 0xf) << 1)
#define SIFL_TBK
0x0001
/* Break Transmit(Enable) */
/* *** Baud Rate Generator Clock *** */
#define S_SIBGR
0x03FF
/* Initial Data */
#define BCLK_FC4(n) (0x0000|(n&0xff)) /* Select Prescalar Output T0(fc/4)
*/
#define BCLK_FC16(n) (0x0100|(n&0xff)) /* Select Prescalar Output 2(fc/16)
*/
#define BCLK_FC64(n) (0x0200|(n&0xff)) /* Select Prescalar Output T4(fc/64)
*/
#define BCLK_FC256(n) (0x0300|(n&0xff)) /* Select Prescalar Output T6(fc/256)
*/
/************************
* Data Format Table
*
************************/
/* ************ *
* DMA
*
* ************ */
typedef struct {
volatile int CHAR;
volatile int SAR; /* *****
volatile int DAR;
volatile int CTR;
volatile int SAI; /* *****
volatile int DAI; /* *****
volatile int CCR;
/* ***** チェーンアドレスレジスタ ***** */
ソースアドレスレジスタ ***** */
/* ***** ディスティネーションアドレスレジスタ ***** */
/* ***** カウントレジスタ ***** */
ソースアドレスインクリメントレジスタ ***** */
ディスティネーションアドレスインクリメントレジスタ ***** */
/* ***** コントロールレジスタ ***** */
A-10
付録 A TX3927 プログラミングサンプル集
volatile int CSR;
} DMA;
/* ***** ステータスレジスタ ***** */
/* ************ *
* INTR
*
* ************ */
typedef struct {
volatile int IRDER;
/* ***** Interrupt Detect Enable Register *****
*/
volatile int IRDMR[2];
/* ***** Interrupt Detect Mode Register ***** */
int
tmp1;
volatile int IRILR[8];
/* ***** Interrupt Level Register ***** */
volatile int dummy23[4];
volatile int IRIMR;
/* ***** Interrupt Mask Register ***** */
volatile int dummy24[7];
volatile int IRSCR;
/* ***** Interrupt Status Control Register ***** */
volatile int dummy25[7];
volatile int IRSSR;
/* ***** Interrupt Source Register ***** */
volatile int dummy26[7];
volatile int IRCSR;
/* ***** Interrupt Current Register ***** */
char
tmp9[0xd000-0xc0a4];
} INTR;
/* ************ *
* PCI
*
* ************ */
typedef struct{
/* PCI Configration Hader */
int
DID;
int
PCISTAT; /* Status reg.*/
#define DECPE
0x80000000
/*Detected Parity Error(write clear)*/
#define SIGSE
0x40000000
/*Signaled System Error(write clear)*/
#define RECMA
0x20000000
/*Received Master Abort(write clear)*/
#define RECTA
0x10000000
/*Received Target Abort(write clear)*/
#define SIGTA
0x08000000
/*Signaled Target Abort(write clear)*/
#define PERPT
0x01000000
/*Parity Error Reported(write clear)*/
#define FBBCP
0x00800000
/*Fast Back-to-Back Capabe*/
#define USPCP
0x00200000
/*USPCP bit field*/
/* Command reg.*/
#define FBBEN
0x00000200
/*Fast Back-to-Back Enable*/
#define SEEN
0x00000100
/*SERR Enable*/
#define PEREN
0x00000040
/*PERR Enable*/
#define MWIEN
0x00000010
/*Memory Write and Invalidate Enable*/
#define SCREC
0x00000008
/*Special Cycle Recognition*/
#define MEN
0x00000004
/*Master Enable*/
#define MACEN
0x00000002
/*Memory Access Enable*/
#define IACEN
0x00000001
/*I/O Access Enable*/
int
CC;
int
INF;
int
IOBA,MBA,BA2,BA3,BA4,BA5;/* chenge MBA<->IOBA tanka 990429 */
int
non[2];
int
EXTIOBA;
int
non2[2];
int
ML;
}PCI_CONF;
typedef struct{
/* PCI initiator Configuration */
int
IC;
/* Initiator Control register */
int
ISTAT;
/* initiator Status register */
int
IIM;
/* IInitiator Interrupt Mask register */
int
RRT;
/* Retry/Reconnect Timer Register */
int
tmp1[3];
int
IPBMMAR; /* Initiator Local bus IO
Mapping register */
int
IPBIOMAR;
/* Initiator Local bus Memory Mapping register */
int
ILBMMAR; /* Initiator PCI bus IO
Mapping register */
A-11
付録 A TX3927 プログラミングサンプル集
int
ILBIOMAR;
/* Initiator PCI bus Memory Mapping register */
char
tmp2[0x90-0x6c];
}PCI_ICONF;
typedef struct{
/* PCI target Configuration */
int
TC;
/* Target Control register */
int
TSTAT;
/* Target status register */
int
TIM;
/* Target Interrupt Mask register */
int
TCCMD;
/* Target Current Command register */
int
PCIRRT;
/* PCI Read Retry Tag register */
int
PCIRRT_CMD;
/* PCI Read Retry Timer Command Register */
int
PCIRRDT; /* PCI Read Retry Discard Timer register */
int
tmp1[3];
int
TLBOAP;
/* Traget Local bus Output FIFO Address Pointer */
int
TLBIAP;
/* Target Local bus Input FIFO Address Pointer */
int
TLBMMA;
/* Target Local bus Memory Mapping Address register */
int
TLBIOMA; /* Target Local bus IO
Mapping Address register */
int
SC_MSG;
/* Special Cycle Message register */
int
SC_BE;
/* Special Cycle Byte Enable register */
int
TBL;
/* Target Barst Length */
char
tmp2[0x100-0xd4];
}PCI_TCONF;
typedef struct{
/* PCI bus Arbiter/Park */
int
REQ_TRACE;
/* Request Trace register */
int
PBAPMC;
/* PCI Bus Arbiter/Park Master Control register */
#define
BARST
0x04
/* Reset Bus Arbiter */
#define
BAENA
0x02
/* Enable Bus Arbiter */
#define
MBCENA
0x01
/* Broken Master Check Enable */
int
int
int
int
int
int
}PCI_EXT;
PBAPMS;
/* PCI Bud Arbiter/Park Master Status register */
PBAPMIM; /* PCI Bus Arbiter/Park Master Interrupt Mask register */
BM;
/* Broken Master register */
CPCIBRS; /* Current PCI bus Request egister */
CPCIBGS; /* Current PCI bus Grant Status register */
PBACS;
/* Current PCI bus Arbiter Status register */
typedef struct{/* PCI local bus */
int
IOBAS;
/* Target IO
Base Address Register */
int
MBAS;
/* Target Memory Base Address Register */
int
#define
#define
#define
#define
#define
#define
#define
LBC;
HRST
SRST
EPCAD
MSDSE
CRR
ILMDE
ILIDE
#define TPIIC
int
int
int
#define
#define
#define
#define
#define
int
int
/* Local
0x00000800
0x00000400
0x00000200
0x00000100
0x00000080
0x00000040
0x00000020
0x00000010
LBSTAT;
LBIM;
PCISTATIM;
LS_PERR 0x20
LS_SERR 0x10
LS_GERR 0x08
LS_IAS
0x04
LS_RST
0x02
ICAR;
ICDR;
bus Control register */
/*Hard Reset*/
/*Soft Reset*/
/*External PCI Configuration Access Disable*/
/*Memory Space Dynamic Swap Enable*/
/*Configuration Registers Ready for Access*/
/*Initiator Local Bus Memory Address Space Decoder Enable*/
/*Initiator Local Bus I/O Address Space Decoder
Enable*/
/*Test PCI I/O Buffer Idd Current*/
/* Local bus Status register */
/* Interrupt Mask register */
/* Interrupt Mask Status register */
/* Initiator Configuration Address register */
/* Initiator Configuration Data register */
A-12
付録 A TX3927 プログラミングサンプル集
int
int
IIADP;
ISCDP;
/* Initiator Interrupt Acknowledge Data Port register */
/* Initiator Special Cycle Data Port registro */
int
int
MMAS;
IOMAS;
/* Initiator Memory Mapping Address registor */
/* Initiator IO
Mapping Address register */
int
int
int
}PCI_LSP;
IPCIADDR;/* Initiator Indirect Address register */
IPCIDATA;/* Initiator Indirect Data register */
IPCICBE;/* initiator Indirect Command/Byte Enable register */
/* ************ *
* TMR
*
* ************ */
typedef struct {
volatile int TMTCR;
volatile int TMTISR;
volatile int TMCPRA;
volatile int TMCPRB;
volatile int TMITMR;
volatile int dummy1[3];
volatile int TMCCDR;
volatile int dummy2[3];
volatile int TMPGMR;
volatile int dummy3[3];
volatile int TMWTMR;
volatile int dummy4[43];
volatile int TMTRR;
volatile int dummy5[3];
} TMR;
/*
/*
/*
/*
/*
タイマコントロールレジスタ */
タイマ割り込みステータスレジスタ */
コンペアレジスタ A */
コンペアレジスタ B */
インターバルタイマモードレジスタ */
/* 分周レジスタ */
/* パルスジェネレータモードレジスタ */
/* ウォッチドッグタイマモードレジスタ */
/* タイマリードレジスタ */
/* ************ *
* SIO
*
* ************ */
typedef struct {
volatile int SILCR;
volatile int SIDICR;
volatile int SIDISR;
volatile int SISCISR;
volatile int SIFCR;
volatile int SIFLCR;
volatile int SIBGR;
volatile int SITFIFO;
volatile int SIRFIFO;
char
dumy[0x100-0x24];
} SIO;
/* little */
#if 0
/* 0xfffe8000
* SDRAM Channel Control Register */
volatile int SDRAMC[8];
/* 0x1fc00000(0x00000000)...ベースアドレス
#endif
/********************/
/*TX3927 レジスタマップ*/
/********************/
typedef struct {
/* 0xfffe8000
* SDRAM Channel Control Register */
volatile int SDRAMC[8];
volatile int SDCTR1;
/* SDRAM Shard Timming Register
volatile int SDCTR2;
/* FLASH Shard Timming Register
volatile int SDCTR3;
/* SMROM Shard Timming Register
volatile int SDCCMD;
/* SDRAM Command Register
volatile int SDCSMRS1;
/* SGRAM Load Mask Register
A-13
*/
*/
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
volatile
char
/* 0xfffe9000
ROMCC
char
/* 0xfffeb000
DMA
volatile
volatile
volatile
char
/* 0xfffec000
INTR
int SDCSMRS2;
/* SGRAM Load Color Register
tmp1[0x9000-0x8000-0x38];
*
ROM Channel Control Register *** */
ROMC[8];
tmp2[0xb000-0x9000-sizeof(ROMCC)*8];
*
DMA Register *** */
DREG[4]; /* Data Buffer Register
int DBR[8];
/* Temporaly Data Holding Register
int TDHR;
/* Muster Control Register
int DMACR;
tmp3[0xc000-0xb0a8];
<<Interrupt Controller>>*/
IREG;
*/
*/
*/
*/
/* 0xfffed000
*
<< PCI Controller>> */
PCI_CONF pci_conf;
PCI_ICONF
pci_iconf;
PCI_TCONF
pci_tconf;
PCI_EXT
pci_ext;
PCI_LSP
pci_lsp;
char
tmp10[0xe000-0xd15c];
/* 0xfffee000
Chip Configuration Register *** */
volatile int CCFG;
/* Chip Revision ID Register
*/
volatile int CREVID;
/* Pin Configration Register
*/
volatile int PINCFG;
/* Timeout Error Register
*/
volatile int TMOUTERR;
/* Power Down Control Register
*/
volatile int PDNCTL;
volatile int dummy29[1019];
/* 0xfffef000
Timmer Register *** */
TMR TREG[3];
/* 0xfffef300
SIO Register *** */
SIO SREG[2];
/* 0xfffef500
PIO Register *** */
volatile int PIODO;
/* PIO Output Register
*/
volatile int PIODI;
/* PIO Input Register
*/
volatile int PIODIR;
/* PIO Direction Control Register */
volatile int PIOOD;
/* PIO Open Drain Control Register */
volatile int PIOFLAG0;
/* PIO Flag Register
*/
volatile int PIOFLAG1;
/* PIO Flag Register
*/
volatile int PIOPOL;
/* PIO Flag Polarity Control Register
volatile int PIOINT;
/* PIO Interrupt Control Register */
volatile int PIOMASKCPU;
/* CPU Interrupt Mask Register
*/
volatile int PIOMASKEXT;
/* External Interrupt Mask Register
char
tmp12[0x10000-0xf528];
}TX3927;
/* *** Physical Address *** */
#define CPUReg ((TX3927 *)0xfffe8000)
/* ***** End Of File "tx3927.h" ***** */
#endif
A-14
*/
*/
付録 A TX3927 プログラミングサンプル集
A.2.2
スタートルーチン
これは TX3904 の例ですが、コアのパワーオン(リセット)からユーザールーチン(main)に制
御を渡すまでの簡単な例です。アプリケーションを ROM 化する場合、リセットベクタ領域に
置かれるプログラムにあたります。
プログラムの流れは以下のようになっています。
<リセットベクタ処理>
•
NMI/RESET の判定
•
メモリコントローラの初期化(boot_initreg)
•
Bss 領域のゼロ初期化 (boot_memset 使用)
•
data セクションの初期値を ROM から RAM へコピー(boot_memcpy 使用)
(*)メモリ書き込みの後はキャッシュとメモリの同期をとる処理をいれています。
(boot_synccache)
•
キャッシュの有効化
•
gp、sp、pid_base レジスタの設定
•
main へのジャンプ
リセットベクタ以外の例外ベクタはダミーで実装(ダミーループ)されています。
TX39 の場合、コアが最低限動くために絶対に必要な設定項目というのは特にありません。
(COLDRESET でキャッシュは全て無効ですし、TLB エントリーも全て無効です)上記の処理
は elf 形式の object ファイルのアプリケーションで汎用的な処理で、コーディングスタイルは
使用するコンパイラに強く依存することになります。
TX3927 ではメモリコントローラの設定、キャッシュ操作が変更になっていますので、他の
節を御参照ください。
(注)
この例では GHS コンパイラを使用しており、GHS のリンカが自動的に生成するシンボルやテー
ブルを使用してコーディングがなされています。
具体的には __ghs で始まる以下のシンボルを使用しています。
__ghsbinfo_clear, __ghseinfo_clear
__ghsbinfo_copy, __ghseinfo_copy
__ghsbegin_sdabase
__ghsend_stack
初期化領域テーブルの開始・終了アドレス
データ初期値テーブルの開始・終了アドレス
SDA 領域の最下位アドレス
スタックの最上位アドレス
他のコンパイラを使う場合には、これらのシンボルは使用できませんし、GHS コンパイラでもバー
ジョンによってはシンボルの使用方法が異なるものがあります。GHS のコンパイラには crt0 の
ソースプログラムが付属していますので、そちらを御参考にされることをお勧めいたします。
また、Cygnus GNUPro では、このようなシンボルの自動生成は行われませんが、ユーザーがリン
カスクリプトファイルを記述することで、任意のシンボルを定義することができますので、それ
らのシンボルを使用して同様の処理を行うことができます。
■ ファイル名: Boot.mip
# $Id$
#
# ROM Boot Routine for TX3904
#
Copyright(c) 1998 TOSHIBA Corp.
#
# Depend on GHS Cross MIPS Compiler ver.1.8.8
A-15
付録 A TX3927 プログラミングサンプル集
#
.file "boot.mip"
.section ".boot",.text
.set noreorder
$status=$12
$config=$3
/* $k0=$26 */
/* $k1=$27 */
# -----------------------------------------------------------------------# Exception Vector
# -----------------------------------------------------------------------.globl ResetVector
ResetVector:
# Reset and NMI vector
j
boot_main
nop
.word
Revision /* Required by Test Monitor on JMR-TX3904 */
Revision:
.byte
"ApplicationName ver.0.01"
.offset 0x100
UtlbExcVector:
1: b
1b
nop
.offset 0x180
GeneralExcVector:
1: b
1b
nop
.offset 0x200
DebugExcVector:
1: b
1b
nop
.offset 0x300
# -----------------------------------------------------------------------# Boot Main Routine
# -----------------------------------------------------------------------boot_main:
# Check NMI
mfc0
$k1,$status
nop
srl
$k1,$k1,16
andi
$k1,$k1,0x1
# select NMI bit
beq
$k1,$0,1f
# go ahead if not NMI
nop
jal
NMIHandler
nop
1:
# Initialize ROMC and RAMC and Etc.
jal
boot_initreg
nop
# Copy Rom Image into Ram and Sync Cache
# Clear bss area with zero
lui
$16,%hi(__ghsbinfo_clear)
addiu
$16,$16,%lo(__ghsbinfo_clear)
lui
$17,%hi(__ghseinfo_clear)
addiu
$17,$17,%lo(__ghseinfo_clear)
b
2f
nop
# delay slot
1: addi
$16,$16,4
lw
$5,0($16)
addi
$16,$16,4
A-16
付録 A TX3927 プログラミングサンプル集
lw
jal
addi
lw
addi
lw
jal
addi
2: bne
lw
$6,0($16)
boot_memset
$16,$16,-8
$4,0($16)
$16,$16,8
$5,0($16)
boot_synccache
$16,$16,4
$16,$17,1b
$4,0($16)
# delay slot
# delay slot
# delay slot
# Copy Rom to Ram
lui
$16,%hi(__ghsbinfo_copy)
addiu
$16,$16,%lo(__ghsbinfo_copy)
lui
$17,%hi(__ghseinfo_copy)
addiu
$17,$17,%lo(__ghseinfo_copy)
b
2f
nop
# delay slot
1: addi
$16,$16,4
lw
$5,0($16)
addi
$16,$16,4
lw
$6,0($16)
jal
boot_memcpy
addi
$16,$16,-8
# delay slot
lw
$4,0($16)
addi
$16,$16,8
lw
$5,0($16)
jal
boot_synccache
addi
$16,$16,4
# delay slot
2: bne
$16,$17,1b
lw
$4,0($16)
# delay slot
# Cache
mfc0
nop
ori
mtc0
j
nop
ON
$k1,$config
$k1,$k1,0x30
$k1,$config
3f
3:
# Set Global Pointer
lui
$gp, %hi(__ghsbegin_sdabase)
addiu
$gp, $gp, %lo(__ghsbegin_sdabase)
addiu
$gp, $gp, 0x4000 # Add 32K to $gp
addiu
$gp, $gp, 0x4000
# set gp
# Clear PIC Pointer($23) with zero
addi
$23,$0,$0
# Set Stack Pointer
lui
$sp, %hi(__ghsend_stack)
# set sp
addiu
$sp, $sp, %lo(__ghsend_stack)
# Jump into Entry Point of Program
lui
$4,%hi(main)
addiu
$4,$4,%lo(main)
jr
$4
nop
# -----------------------------------------------------------------------# SyncCache Routine
# void boot_synccache(void* addr, unsigned size)
# -----------------------------------------------------------------------boot_synccache:
mfc0
$2,$config
A-17
付録 A TX3927 プログラミングサンプル集
li
$3,0xffffffcf
and
$3,$2,$3
mtc0
$3,$config
j
1f
nop
1: add
$5,$5,$4
2: bge
$4,$5,3f
nop
.align 16
cache
0,0($4)
nop
.align 16
cache
1,0($4)
j
2b
addi
$4,$4,4
3: mtc0
$2,$config
jr
$31
nop
# -----------------------------------------------------------------------# NMI handler
# -----------------------------------------------------------------------NMIHandler:
1: b
1b
nop
A-18
付録 A TX3927 プログラミングサンプル集
A.2.3
メモリコントローラ設定(SDRAM)
TX3927 の評価ボード(東芝情報システム(株)製。以下、JMR-TX3927 と記述します)での
SDRAMC の設定例です。
(念のための)最初の時間稼ぎダミーループとコマンドシーケンスを参考にしてください。
JMR-TX3927 では 1M × 16 ビット × 4 Bank のメモリ(TC59S6416BFTL-80)を 2 個使用し
て 32 ビット幅で 16MB のメモリを搭載しています。
メモリは物理アドレス 0 から割り付けられます。
TC59S6416BFTL-80 のデータシートから設定に必要なデータを抜粋します。
p1: 4K リフレッシュサイクル/64ms
--------(a)
(4096 ROW 分のリフレッシュ)
p3: 4096 x 256
x16 のセルアレイ
--------(b)
(Row) (Colum) (bit)
p6: tRC MIN 64ns
--------(c)
tRAS MIN 48ns MAX 100000ns
--------(d)
tRCD MIN 20ns
--------(e)
tRP MIN 20ns
--------(f)
tWR MIN 10ns (CL=2)
--------(g)
p29 アドレス入力(ローA0-A11,カラム A0-A7)
--------(b)
また、TX3927 が 133MHz 動作のとき、SDRAM のクロックは 66MHz (1CLK = 15ns)とな
ります。
サンプルの設定値は以下のようになっています。
SDCCR0
SDBA0 = 0x0000
SDM0 = 0 (SDRAM)
SDE0 = 1 (Enable)
SDBS0 = 1 (4 Bank)
SDAM0 = 0x000e (16MB)
SDRS0 = 1 (4096 Row)
...........(b)
SDCS0 = 0 (256 Column)
...........(b)
SDMW0 = 0 (32bit 幅)
SDCTR1
SDBC1 = 0 (5tCK = 75ns )
.........(c)
SDACP1 = 1 (4tCK = 60ns )
.........(d)
SDP1 = 0 (2tCK = 30ns)
..........(f)
SDCD1 = 0 (2tCK = 30ns)
..........(e)
WRT1 = 0 (1tCK = 15ns)
..........(g)
SDRC1 = 0 (カウンタは使用しない)
A-19
付録 A TX3927 プログラミングサンプル集
CASL1 = 0 (2Tck)
TX3927 の場合はバスクロックが 66MHz しかないので、
CL=2 としておけば問題になることはまずありません。
DRB1 = 1 TX3927
SDRAMC 固有の設定です。基本的には AC 特性的に厳しい
ときに 1 にします。
0 で動作しないものが 1 で動作することはありますが、逆はありませんので、このような設
定にしています。
SWB1 = 0 スローライトバーストは通常使用しません。
BW1 = 0 (SDRAM では使用しないビットです)
WpB1 = 0 (SDRAM では使用しないビットです)
SDRP1 = 0x400 (15.5us)
64ms/4096 = 15.625us <1Row のリフレッシュ時間>
15.625us/15ns = 1041.7 = 0x411(CLK)
(*)リフレッシュサイクルには余裕がありますのであまり厳密に設定する
必要はありません。
SDCCMD
Command #1
SDCMSK3 = 1 (Channel 0 )
SDCMD3 = 3 (All Bank Pre-charge )
Command #2
SDCMSK3 = 1 (Channel 0 )
SDCMD3 = 1 (Mode Register write)
■ ファイル名: sdramc.s
/*Wait for about 200us to make SDRAM ready when core speed 200Mhz */
/*
li
$9, 4000000
/*TX3927*/
li
$9, 800000
li
$8, 0x00000000
sdram:
bne
$9, $8, sdram
addiu
$8, $8, 1
/*initialize SDRAMC*/
la
$8, 0xfffe8000
li
$9, 0x000300e8
sw
$9, 0x00($8)
/*SDRAM0*/
la
li
sw
$8, 0xfffe8020
$9, 0x08010400
$9, 0x00($8)
/*shared Timing Reg*/
la
li
sw
$8, 0xfffe802c
$9, 0x00000013
$9, 0x00($8)
/*command Reg*/
/*all refresh */
li
sw
$9, 0x00000011
$9, 0x00($8)
/* mode set */
A-20
付録 A TX3927 プログラミングサンプル集
A.2.4
割り込み処理プログラム
簡単な割り込み処理のサンプルです。特定のデバイスの割り込み処理ルーチンではなく、各
割り込みの判別と分岐の仕方の例になっています。
TX3927 の割り込みは TX39 コアの例外/割り込み処理と TX3927 割り込みコントローラの処
理の二段がまえになっていますので、「TX39/H2 コア アーキテクチャ」のマニュアルと
「TMPR3927 の割り込みコントローラ」の章を参照してください。
ここでは事前に swIntVector という配列に各例外/割り込みに対応した処理ルーチン(c で記
述されたものを想定しています)のアドレスが格納されているものとしています。
配列 swIntVect は以下のように初期化されている必要があります。
swIntVect[ 0]-[12] :
Cause レジスタの ExCode(0-12) に対応
swIntVect[13]-[14] :
ソフトウエア割り込みに対応
swIntVect[15]-[30] :
割り込みコントローラでエンコードされた
Cause レジスタの IP[4:0] (0-15)に対応
swIntVect の設定ルーチンと割り込みを許可するための関数の例を以下に示します。
■ ファイル名: intttx3927.c
/**********************************************************/
/* TX3927 Interrupt information
*/
/**********************************************************/
typedef int (*VINTFUNC)(void);
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
CPUEXC_BASE
INTNO_Int
INTNO_Mod
INTNO_TLBL
INTNO_TLBS
INTNO_AdEL
INTNO_AdES
INTNO_IBE
INTNO_DEB
INTNO_Sys
INTNO_Bp
INTNO_RI
INTNO_CpU
INTNO_Ov
INTNO_SW0
INTNO_SW1
TX3927INT_BASE
INTNO_TMR2
INTNO_TMR1
INTNO_TMR0
INTNO_NU0
INTNO_NU1
INTNO_PCI
INTNO_PIO
INTNO_DMA
INTNO_SIO1
INTNO_SIO0
INTNO_INT5
INTNO_INT4
INTNO_INT3
INTNO_INT2
INTNO_INT1
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(CPUEXC_BASE+15)
(TX3927INT_BASE+15)
(TX3927INT_BASE+14)
(TX3927INT_BASE+13)
(TX3927INT_BASE+12)
(TX3927INT_BASE+11)
(TX3927INT_BASE+10)
(TX3927INT_BASE+9)
(TX3927INT_BASE+8)
(TX3927INT_BASE+7)
(TX3927INT_BASE+6)
(TX3927INT_BASE+5)
(TX3927INT_BASE+4)
(TX3927INT_BASE+3)
(TX3927INT_BASE+2)
(TX3927INT_BASE+1)
A-21
/* JMR-TX3927: m pin
*/
/*
: m pin
*/
/*
: 100M,10M ether */
/*
: ISA
*/
/*
: IOC
*/
付録 A TX3927 プログラミングサンプル集
#define
INTNO_INT0
(TX3927INT_BASE+0)
#define
MAXINT_TABLE
(TX3927INT_BASE+16)
VINTFUNC
swIntVector[MAXINT_TABLE];
/*
: PCI INTA,C 10M? */
/*****************************************/
/* 仮想割り込みベクタの登録
*/
/*****************************************/
VINTFUNC setIntVect(int no,VINTFUNC func)
{
VINTFUNC ret;
ret = swIntVector[no];
swIntVector[no] = func;
return ret;
}
/*****************************************/
/* 割り込み処理の初期化
*/
/*****************************************/
#define
GINT_VECT
0x80000080
/* 割り込みベクタ番地 */
extern int org_GINT_VECT(void);
/* 割り込みベクタの先頭プログラム */
(アセンブラ記述ルーチン)
/*
*/
extern int org_EXT_INT_VECT(void);/* 外部割込み(Excode=0)の処理ルーチン */
(アセンブラ記述ルーチン)
/*
*/
extern int size_org_GINT_VECT ;
int size = (int)(&size_org_GINT_VECT) ;
int intInt(void)
{
memcpy((void *)GINT_VECT,org_GINT_VECT,size);
setIntVect(INTNO_Int,org_EXT_INT_VECT);
CPUReg->IREG.IRDER = 1;
/* 割り込みコントローラの割り込み許可 */
CPUReg->IREG.IRIMR = 1;
/* INT0 割り込み High レベル設定 */
setstatus(~SR_BEV,SR_IE | 0xff00); /* ステータスレジスタ割り込み許可 */
return 0;
}
実際の割り込み処理ルーチンのアセンブラ記述例を以下に示します。
■ ファイル名: aintcosmp.S
/********************************************************************
TX3927 割り込み処理 アセンブラモジュール
org_GINT_VECT:
一般例外処理の入り口。テーブルを使って処理ルーチンに制御を移す。
# go swIntVector[C0_CAUSE]
return_GINTVECT:
org_GINT_VECT から呼び出した処理ルーチンが割り込みもとに戻る処理。
# retuen GINT
org_EXT_INT_VECT:
外部割り込み処理分岐処理。org_GINT_VECT の0の処理
TX3927 の外部割り込みステータス(PI)でで分岐先を決める
A-22
付録 A TX3927 プログラミングサンプル集
戻り値が0のとき割り込まれた番地に戻る。0でなければ、元の割り込みベクタに戻る
多重割り込みをサポートする。
# go &(swIntVector[TX3927INT_BASE])[IP]。
********************************************************************/
.text
.set
.set
.set
mips1
noreorder
noat
/* -----------------------------------------------------------------*/
/* TX3927 の一般割り込み処理の入り口 cause レジスタ excCode の値で分岐
*/
/* -----------------------------------------------------------------*/
.globl org_GINT_VECT
.globl size_org_GINT_VECT
.ent org_GINT_VECT
org_GINT_VECT:
# go swIntVector[C0_CAUSE]
mfc0
k0,C0_CAUSE
nop
andi
k0,0x7c
# isolate exception code
la
k1,swIntVector
tablejmp:
add
k0,k1,k0
# offset of VSR entry
tablejmp2:
lw
k0,0(k0)
# ke = pointer to vsr
jr
k0
# jump into virtual vector handler
nop
/* ----------------------------------------------------------------*/
/* 分岐先から割り込み元に戻る時の処理
*/
/* ----------------------------------------------------------------*/
.globl return_GINT_VECT
return_GINTVECT:
# retuen GINT
mfc0
k1, C0_EPC
nop
jr
k1
rfe
nop
end_org_GINT_VECT:
.equ
size_org_GINT_VECT,end_org_GINT_VECT-org_GINT_VECT
.end org_GINT_VECT
/* -----------------------------------------------------------------*/
/* 割り込み用スタックの定義
*/
/* -----------------------------------------------------------------*/
#define
GINT_STACKSIZE
.globl gint_stack_end
gint_stack_end:
.space
GINT_STACKSIZE
.globl gint_stack
gint_stack:
.space
8
#define
#define
#define
/*
#define
4096
/* allocate 4K bootstack */
/* allocate the exception stack */
/* stack top here (stack grows DOWN) */
/* allocate dummy stack */
ik0
k0
ik1
k1
GISTACK_SIZE
REG_SIZE*(26+1)
17 1-15,24-25(at,t0-1,a0-3,t0-9)
5 16(s0),23(s7),29(sp),28(gp),31(ra)
4 cp0*4(hi,lo,status,ecp)
26 */
MAXINT
8
A-23
付録 A TX3927 プログラミングサンプル集
/* -----------------------------------------------------------------*/
/* 外部割り込みの分岐処理
*/
割り込みスタックの設定
/*
*/
レジスタの保存
/*
*/
/*
cause レジスタの IP で分岐する
*/
/* -----------------------------------------------------------------*/
.globl org_EXT_INT_VECT
.ent org_EXT_INT_VECT
org_EXT_INT_VECT:
#if 1
la
ik0,gint_stack
/* normal stack hi address */
sltu
ik1,ik0,sp
bne
ik1,zero,1f
addiu
ik1,ik0,-GINT_STACKSIZE
sltu
ik1,ik1,sp
beq
ik1,zero,1f
nop
#else
la
ik0,gint_stack
/* normal stack Low address */
addiu
ik1,ik0,-GINT_STACKSIZE
sltu
ik1,ik1,sp
beq
ik1,zero,1f
sltu
ik1,ik0,sp
bne
ik1,zero,1f
nop
#endif
add
ik0,zero,sp
1:
/* ik1 = temp stack */
addiu
ik0,ik0,-(GISTACK_SIZE) /* Save Registers */
sw
at,REG_SIZE*1(ik0)
sw
v0,REG_SIZE*2(ik0)
sw
v1,REG_SIZE*3(ik0)
sw
a0,REG_SIZE*4(ik0)
sw
a1,REG_SIZE*5(ik0)
sw
a2,REG_SIZE*6(ik0)
sw
a3,REG_SIZE*7(ik0)
sw
t0,REG_SIZE*8(ik0)
sw
t1,REG_SIZE*9(ik0)
sw
t2,REG_SIZE*10(ik0)
sw
t3,REG_SIZE*11(ik0)
sw
t4,REG_SIZE*12(ik0)
sw
t5,REG_SIZE*13(ik0)
sw
t6,REG_SIZE*14(ik0)
sw
t7,REG_SIZE*15(ik0)
sw
t8,REG_SIZE*16(ik0)
sw
t9,REG_SIZE*17(ik0)
sw
gp,REG_SIZE*18(ik0)
sw
ra,REG_SIZE*19(ik0)
sw
s0,REG_SIZE*20(ik0)
sw
s7,REG_SIZE*21(ik0)
mflo
t0
sw
t0,REG_SIZE*22(ik0)
mfhi
t0
sw
t0,REG_SIZE*23(ik0)
mfc0
t0,C0_STATUS
sw
t0,REG_SIZE*24(ik0)
mfc0
t0,C0_EPC
sw
t0,REG_SIZE*25(ik0)
sw
sp,REG_SIZE*26(ik0)
addu
sp,zero,ik0
lui
lw
s0,%hi(_gint_count)
a1,%lo(_gint_count)(s0)
A-24
# Increment Interrupt counter
付録 A TX3927 プログラミングサンプル集
addiu
sw
a1,a1,1
a1,%lo(_gint_count)(s0)
la
gp,_gp
# set the global data pointer
mfc0
nop
andi
bne
srl
andi
la
j
addu
k0,C0_CAUSE
andi
beq
la
j
nop
k1,k1,0x0100
k1,zero,2f
k0,swIntVector+13*4
3f
k1,k0,0x0300
k1,zero,1f
k0,k0,8
k0,0x3c
k1,swIntVector+15*4
3f
k0,k0,k1
# sw interrupt
# go &(swIntVector[TX3927INT_BASE])[]
1:
# go sw0
2:
la
k0,swIntVector+14*4
# go sw1
k0,0(k0)
# swIntVector read
# call
3:
lw
jalr
nop
k0
lw
addiu
bgtz
addiu
sw
a1,%lo(_gint_count)(s0)
at,a1,-MAXINT
at,99f
/* over multi interrupt */
a1,a1,-1
a1,%lo(_gint_count)(s0)
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
mtlo
lw
mthi
lw
mtc0
lw
mtc0
lw
lw
lw
sync
at,REG_SIZE*1(sp) /* return target */
v1,REG_SIZE*3(sp)
a0,REG_SIZE*4(sp)
a1,REG_SIZE*5(sp)
a2,REG_SIZE*6(sp)
a3,REG_SIZE*7(sp)
t1,REG_SIZE*9(sp)
t2,REG_SIZE*10(sp)
t3,REG_SIZE*11(sp)
t4,REG_SIZE*12(sp)
t5,REG_SIZE*13(sp)
t6,REG_SIZE*14(sp)
t7,REG_SIZE*15(sp)
t8,REG_SIZE*16(sp)
t9,REG_SIZE*17(sp)
gp,REG_SIZE*18(sp)
ra,REG_SIZE*19(sp)
s0,REG_SIZE*20(sp)
s7,REG_SIZE*21(sp)
t0,REG_SIZE*22(sp)
t0
t0,REG_SIZE*23(sp)
t0
t0,REG_SIZE*24(sp)
t0,C0_STATUS
k1,REG_SIZE*25(sp)
k1,C0_EPC
t0,REG_SIZE*8(sp)
v0,REG_SIZE*2(sp)
sp,REG_SIZE*26(sp)
/* Flush the write buffer to memory. */
A-25
付録 A TX3927 プログラミングサンプル集
jr
rfe
nop
k1
99:
b
nop
/* Return to the user program. */
/* stack overflow */
99b
処理の手順は以下のようなものです。
(1) Cause レジスタの ExCode を調べて該当処理ルーチンへ(swIntVect[0-12]へ)処理を
渡す(この例では外部割り込み(ExCode=0)用の処理ルーチンだけが用意されていま
す)。
(2) 外部割り込みの場合(swIntVect[0]の処理)、Cause レジスタの IP ビットを見て該当
処理ルーチン(SwIntVect[13-30])へ処理を渡す。
ここで、割り込みスタックの設定、レジスタ待避、復帰などの処理が行われています。
割り込み処理本体を C で記述することを前提にしていますので、ここでは全てのレ
ジスタは待避していません。ここで待避されていないレジスタは C の関数の中で必
要に応じて待避・復帰が行われます。
この例を使用した場合には、実際の割り込み処理部は例えば以下のように C で記述
されます。
int C_int_timer0(void)
{
static int count = 0;
count++;
CPUReg->TREG[0].TMTISR = 0;
return 0;
}
C の関数の中では
- 実際の割り込み処理
- 割り込み要因のクリア
- (必要に応じて)多重割り込みの許可
と言った処理を行ってください。
A-26
/* 割り込み回数をカウント */
/* 割り込みをネゲート
*/
付録 A TX3927 プログラミングサンプル集
A.2.5
キャッシュの設定および操作
データ/命令キャッシュに関して以下のサンプル関数を用意しています。
•
FlushDCache
指定アドレスから指定サイズのデータがキャッシュにある
場合に書き戻し/インバリデートを行います。
•
FlushDCacheAll
全データキャッシュの書き戻し/インバリデートを行います。
•
InvalidateICache
指定アドレスから指定サイズの命令がキャッシュにある場
合にインバリデートを行います。
•
InvalidateICacheAll
全命令キャッシュのインバリデートを行います。
命令キャッシュ操作の場合は一旦命令キャッシュを無効にしなければならない点にご注意
ください。
■ ファイル名: cache.c
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1991-1998 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
* TX39/H2 cache controll routines
*/
/* TX39H2 Core Cache Size */
#define ICACHE_SIZE 0x2000
/* 8KB */
#define DCACHE_SIZE 0x1000
/* 4KB */
void
FlushDCache(unsigned int address, int size)
{
__asm(".set noreorder");
__asm("add
$5, $4");
__asm("li
$6, ~0xf");
/* TX39/H2 line size 16 bytes */
__asm("and
$4, $4, $6");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 21, 0($4)");
/* Hit_Writeback_Invalidate */
__asm("b
1b");
__asm("addi
$4, $4, 16");
__asm("2:");
}
void
FlushDCacheAll()
{
__asm(".set noreorder");
__asm("lui
$4, 0x8000");
__asm("addi $5, $4, 0x800");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 1, 0($4)");
__asm("cache 1, 1($4)");
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
}
/* start address */
/* end address
*/
/* Index_Writeback_Inv_D way 0 */
/* Index_Writeback_Inv_D way 1 */
A-27
付録 A TX3927 プログラミングサンプル集
void
InvalidateICache(unsigned int address, int size)
{
__asm(".set noreorder");
__asm("add
$5, $4");
__asm("li
$6, ~0xf");
/* line size 16 bytes */
__asm("and
$4, $4, $6");
__asm("mfc0 $6, $3");
/* get C0_Config */
__asm("nop");
__asm("andi $7, $6, 0xffdf");
/* ICE OFF
*/
__asm("mtc0 $7, $3");
/* set C0_Config */
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 16, 0($4)");
/* Hit_Invalidate_I */
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
__asm("mtc0 $6, $3");
/* set C0_Config */
}
void
InvalidateICacheAll()
{
__asm(".set noreorder");
__asm("lui
$4, 0x8000");
__asm("addi $5, $4, 0x1000");
__asm("mfc0 $6, $3");
__asm("nop");
__asm("andi $7, $6, 0xffdf");
__asm("mtc0 $7, $3");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 0, 0($4)");
__asm("cache 0, 1($4)");
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
__asm("mtc0 $6, $3");
}
A-28
/* start address */
/* end address
*/
/* get C0_Config */
/* ICE OFF
*/
/* set C0_Config */
/* Index_Invalidate_I way 0 */
/* Index_Invalidate_I way 1 */
/* set C0_Config */
付録 A TX3927 プログラミングサンプル集
A.3
内蔵ペリフェラル使用例
A.3.1
Timer
タイマ 0 をインターバルタイマモードで使用して、割り込みを発生させるサンプルです。
■ ファイル名: TimerInt.c
#include
#include
"tx3927.h"
"intcosmp27.h"
/* 例題プログラムです。 割り込みハンドラを初期化し、タイマ割り込みを発生させます。 */
int test_timerInt0(void)
{
initInt();
/* 割り込みハンドラを初期化する */
setIntVect(INTNO_TMR0,C_int_timer0);
/* 割り込みハンドラを登録する */
CPUReg->TREG[0].TMTCR = TCE | CCDE;
CPUReg->TREG[0].TMITMR = TIIE | TZCE;
/* タイマを起動する */
CPUReg->IREG.IRILR[6] = (CPUReg->IREG.IRILR[6] & 0x000f) | 0x0300;
/* 割り込みレベルを設定 */
CPUReg->IREG.IRDER = 1;
/* 割り込みコントローラを割り込みを可能にする */
CPUReg->IREG.IRIMR = 1;
setstatus(~SR_BEV,SR_IE | 0xff00); /* ステータスレジスタ(コア)を割込み可能にする */
return 0;
}
int off_timerInt0(void)
{
CPUReg->TREG[0].TMTCR = 0;
CPUReg->TREG[0].TMITMR = 0;
return 0;
}
/* タイマを停止する */
/* タイマ割り込み処理ルーチン */
int C_int_timer0(void)
{
static int count = 0;
/* 割り込み回数をカウント */
/* 割り込みをネゲート */
count++;
CPUReg->TREG[0].TMTISR = 0;
return 0;
}
A-29
付録 A TX3927 プログラミングサンプル集
A.3.2
SIO
以下の動作設定が含まれています。
send-polling & receive-polling mode
send_interrupt & receive-interrupt mode
send_polling & receive-interrupt mode
send_interrupt & receive-polling mode
DMA-SEND & polling-RECEIVE mode
DMA-SEND & interrupt-RECEIVE mode
polling-send & DMA-RECEIVE mode
interrupt-send & DMA-RECEIVE mode
DMA-SEND & DMA-RECEIVE mode
polling loopback mode
interrupt loopback mode
dma loopback mode
receive overflow test
■ ファイル名: 3927sio.c
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1998-1999 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
*/
/*
* TX3927 SIO Control Routine
*
* これは TX3927 内蔵 SIO を制御するサンプルルーチンです。
*
* TX3927 内蔵 SIO の使用上の注意:
*
* マクロ:
* USE_UDEOS 東芝情報システム(株)販売の µITRON3.0 仕様 OS「UDEOS/r39」の
* アプリケーションプログラムとして使用するときに定義する。
* コンフィグレーション時にも影響するので、拡張子 cfo ファイルの設定に
* 定義を追加するのを忘れずに。
*
* 動作確認環境:
* ・COSMP2-TX3927 評価ボード
* ・GHS C Compiler & MULTI Debugger ver.1.8.8 for Win32
* ・GHS Monitor Server RS232C connection or HP.ProcessorProbe
*
* 参考資料:
* ・32 ビット RISC マイクロプロセッサファミリー TX39 ファミリー
* TMPR3901F ユーザーズマニュアル
* ・32 ビット RISC マイクロプロセッサファミリー TX39 ファミリー
* TMPR3927F ユーザーズマニュアル Rev.0.5
*
* History:
* 1999/05/06 ver.0.21 yasui based on r3904sio.c ver.1.08
*****************************************************************************/
#include <itron.h>
#include "3927sio.h"
A-30
付録 A TX3927 プログラミングサンプル集
/* vertiul address to physical address */
#define
Vadrs2Padrs(adrs) ( (unsigned int)(adrs) & 0x5FFFFFFF )
/* I/O Base Addr */
#define REG3927SIO_BASE 0xfffef300
/* Semaphore */
#ifdef USE_UDEOS
#define SIGNAL_SEMAPHORE(x) isig_sem(SIO_SEMID0+x)
#define WAIT_SEMAPHORE(x) wai_sem(SIO_SEMID0+x)
#define SIGNAL_SEMAPHORE_TX(x) isig_sem(SIO_SEMID0+2+x)
#define WAIT_SEMAPHORE_TX(x) wai_sem(SIO_SEMID0+2+x)
#endif
/* Etc */
#define WAIT_TIME
(CPU_CLOCK/500)
#define INCIDX(a) ((a+1)&(SIO_RCVBUFSZ-1))
/* Structure */
typedef struct {
int type;
int (*getc)();
int (*putc)();
volatile int sndbuf_beg;
volatile int sndbuf_end;
volatile int rcvbuf_beg;
volatile int rcvbuf_end;
int sndbuf_ovf;
int rcvbuf_ovf;
char sndbuf[SIO_SNDBUFSZ];
char rcvbuf[SIO_RCVBUFSZ];
} type3927sio;
typedef struct {
unsigned int silcr;
unsigned int sidicr;
unsigned int sidisr;
unsigned int sicisr;
unsigned int sifcr;
unsigned int siflcr;
unsigned int sibgr;
unsigned int sitfifo;
unsigned int sirfifo;
int pad[55];
} reg3927sio;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
SILCR_SCS_BGIMCLK
SILCR_SCS_EXTSCLK
SILCR_SCS_BGSCLK
SILCR_UMODE
SILCR_USBL
SILCR_UPEN
SILCR_UEPS
SIDISR_ERRMASK
SIDISR_RDIS
SIDISR_TDIS
SIDISR_TOUT
SIDISR_ERI
SIDISR_UOER
SIDISR_UPER
SIDISR_UFER
SIDISR_UBRK
SIDISR_UVALID
SICISR_TRDY
SICISR_TXALS
0x20
0x40
0x60
0x00000001
0x00000004
0x00000008
0x00000010
0x0000b800
0x00000080
0x00000100
0x00000200
0x00000400
0x00000800
0x00001000
0x00002000
0x00008000
0x00004000
0x00000004
0x00000002
A-31
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
SIFCR_FRSTE
SIFCR_RFRST
SIFCR_TFRST
SIFCR_TDIL1
SIFCR_TDIL4
SIFCR_TDIL8
SIFCR_RDIL1
SIFCR_RDIL4
SIFCR_RDIL8
SIFCR_RDIL12
SIFLCR_TSDE
SIFLCR_RSDE
SIFLCR_RTSTL(x)
0x00000001
0x00000002
0x00000004
0x00000000
0x00000008
0x00000010
0x00000000
0x00000080
0x00000100
0x00000180
0x00000080
0x00000100
((x&0xf)<<1)
#define
#define
#define
#define
#define
SIDICR_TDE
SIDICR_RDE
SIDICR_TIE
SIDICR_RIE
SIDICR_SPIE
0x00008000
0x00004000
0x00002000
0x00001000
0x00000800
#define SIFCR_RDIL_MASK
#define SIFCR_TDIL_MASK
0x00000180
0x00000018
/* Data */
static type3927sio siotbl[2];
static unsigned int dma_req_flag, dma_end_flag;
/************************************************************
*
Wait loop
************************************************************/
static int
noop (int i){
int a=10;
while (i--)
while(a)
a--;
return a;
}
/***************************************************************
* Initialize SIO
*
* siono is 0 or 1. baud is baud-rate(ie.9600,38400,etc.).
* type is
* SIO_TXPOL
output is polling.
* SIO_TXINT
output is interrupt.
* SIO_TXDMA
output is DMA.
* SIO_RXPOL
input is polling.
* SIO_RXINT
input is interrupt.
* SIO_RXDMA
input is DMA
*****************************************************************/
int
tx3927sio_init(int siono,int type,int baud)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio* sio;
int bclk,regbaud,silcr;
unsigned int *dma_adrs;
/* check parameter (0 or 1) */
A-32
付録 A TX3927 プログラミングサンプル集
if(siono & ~0x1)
return -1;
/* ERROR: illegal siono */
/* preparing */
sioreg+=siono;
sio = &siotbl[siono];
sio->type = type;
/* calcualte baud value */
bclk=0;
#ifdef CPU133M
regbaud = CPU_CLOCK/128/baud;
#else
regbaud = CPU_CLOCK/64/baud;
#endif
while(regbaud>=256){
bclk++;
regbaud /= 4;
}
if(bclk>3)
return -2;
/* general setting */
silcr = 0;
if(type & SIO_PARITY_ODD)
silcr |= SILCR_UPEN;
if(type & SIO_PARITY_EVEN)
silcr |= SILCR_UPEN|SILCR_UEPS;
if(type & SIO_STOP2)
silcr |= SILCR_USBL;
if(type & SIO_7BIT)
silcr |= SILCR_UMODE;
/* ERROR: illeagal baud */
sioreg->silcr = silcr|SILCR_SCS_BGIMCLK;
/* BRG-IMCLK */
sioreg->siflcr = SIFLCR_TSDE|SIFLCR_RSDE|SIFLCR_RTSTL(1);
sioreg->sidicr = 0x0;
sioreg->sifcr = SIFCR_TFRST|SIFCR_RFRST|SIFCR_FRSTE;
sioreg->sifcr = 0x0;
sioreg->sibgr = (bclk<<8)|regbaud;
sioreg->sidisr = 0x0;
sioreg->sicisr = 0x0;
if(type & SIO_TXPOL){
sio->putc = (int(*)())tx3927sio_pol_putc;
sioreg->siflcr &= ~SIFLCR_TSDE;
sioreg->siflcr |= 0x200;
/* Reset FIFO */
/* Set baudrate */
/* enable TX */
}
if(type & SIO_RXPOL){
sio->getc = (int(*)())tx3927sio_pol_getc;
sioreg->siflcr &= ~SIFLCR_RSDE;
}
/* enable RX */
if(type & SIO_TXINT){
sio->sndbuf_beg = sio->sndbuf_end = sio->sndbuf_ovf = 0;
sio->putc = (int(*)())tx3927sio_int_putc;
if (type & SIO_TFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_TDIL1;
}else if (type & SIO_TFIFO_4) {
sioreg->sifcr |= SIFCR_TDIL4;
A-33
付録 A TX3927 プログラミングサンプル集
} else if (type & SIO_TFIFO_8) {
sioreg->sifcr |= SIFCR_TDIL8;
} else {
sioreg->sifcr |= SIFCR_TDIL8;
}
sioreg->siflcr &= ~SIFLCR_TSDE;
chg_ilv(INTNO_SIO0+siono,2);
/* default 8byte */
/* enable TX */
/* set int level */
}
if(type & SIO_RXINT){
sio->rcvbuf_beg = sio->rcvbuf_end = sio->rcvbuf_ovf = 0;
sio->getc = (int(*)())tx3927sio_int_getc;
if (type & SIO_RFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_RDIL1;
} else if (type & SIO_RFIFO_4) {
sioreg->sifcr |= SIFCR_RDIL4;
} else if (type & SIO_RFIFO_8) {
sioreg->sifcr |= SIFCR_RDIL8;
} else if (type & SIO_RFIFO_12) {
sioreg->sifcr |= SIFCR_RDIL12;
} else {
sioreg->sifcr |= SIFCR_RDIL12;
/* default */
}
sioreg->sidicr |= SIDICR_RIE+SIDICR_SPIE;
/* enable RX int */
sioreg->siflcr &= ~SIFLCR_RSDE;
/* enable RX */
chg_ilv(INTNO_SIO0+siono,2);
/* set int level */
}
if(type & SIO_TXDMA){
sio->sndbuf_beg = sio->sndbuf_end = sio->sndbuf_ovf = 0;
if (type & SIO_TFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_TDIL1;
}else if (type & SIO_TFIFO_4) {
sioreg->sifcr |= SIFCR_TDIL4;
} else if (type & SIO_TFIFO_8) {
sioreg->sifcr |= SIFCR_TDIL8;
} else {
sioreg->sifcr |= SIFCR_TDIL8;
/* default 8byte */
}
sioreg->siflcr &= ~SIFLCR_TSDE;
/* enable TX */
dma_adrs = (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
*dma_adrs = 0x00000000;
/* MASTEN(bit0)=off */
chg_ilv(INTNO_DMA,2);
/* set int level */
}
if(type & SIO_RXDMA){
sio->rcvbuf_beg = sio->rcvbuf_end = sio->rcvbuf_ovf = 0;
if (type & SIO_RFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_RDIL1;
} else if (type & SIO_RFIFO_4) {
sioreg->sifcr |= SIFCR_RDIL4;
} else if (type & SIO_RFIFO_8) {
sioreg->sifcr |= SIFCR_RDIL8;
} else if (type & SIO_RFIFO_12) {
sioreg->sifcr |= SIFCR_RDIL12;
} else {
sioreg->sifcr |= SIFCR_RDIL12;
/* default */
}
sioreg->sidicr |= SIDICR_SPIE;
/* enable RX int */
sioreg->siflcr &= ~SIFLCR_RSDE;
/* enable RX */
A-34
付録 A TX3927 プログラミングサンプル集
dma_adrs
= (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
*dma_adrs = 0x00000000;
/* MASTEN(bit0)=off */
chg_ilv(INTNO_SIO0+siono,2);
/* set int level */
chg_ilv(INTNO_DMA,2);
/* set int level */
}
return 0;
/* Successful */
}
/*******************************************************************
* Finish SIO
*
* siono is 0 or 1.
* clear register. reset fifo. disable interrupt.
********************************************************************/
int
tx3927sio_fini(int siono){
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio* sio;
int bclk,regbaud;
/* check parameter */
if(siono!=0 && siono!=1)
return -1;
/* ERROR: illegal siono */
tx3927sio_all_sent(siono);
/* initialize */
chg_ilv(INTNO_SIO0+siono,0);
sioreg->siflcr |= SIFLCR_RSDE;
sioreg->siflcr |= SIFLCR_TSDE;
sioreg->sidicr &= ~SIDICR_TIE;
sioreg->sidicr &= ~SIDICR_RIE;
sio = &siotbl[siono];
sio->putc = 0;
sio->getc = 0;
sio->type = 0;
/*
/*
/*
/*
/*
clear int level */
disable RX */
disable TX */
disable TX int */
disable TX int */
}
/************************************************************************
* SIO interrupt handler
*
* clear interrupt. read data and put into buffer.
*************************************************************************/
static void
tx3927sio_int(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio
= &siotbl[siono];
int sidisr,next,err,c;
sioreg += siono;
sidisr = sioreg->sidisr;
if(sidisr & 0xbc00){
printf("error1(sidisr=%x) ¥n", sidisr);
if(sidisr & SIDISR_UBRK)
printf("break during int mode ¥n");
if(sidisr & SIDISR_UFER)
printf("frame error during int mode ¥n");
if(sidisr & SIDISR_UPER)
printf("parity error during int mode ¥n");
A-35
付録 A TX3927 プログラミングサンプル集
if(sidisr & SIDISR_UOER)
printf("overflow during int mode ¥n");
if(sidisr & 0x0400)
printf("error interrupt during int mode ¥n");
c = sioreg->sirfifo;
}
sidisr = sioreg->sidisr;
if(sidisr & 0xbc00){
printf("error1(sidisr=%x) ¥n", sidisr);
if(sidisr & SIDISR_UBRK)
printf("break during int mode ¥n");
if(sidisr & SIDISR_UFER)
printf("frame error during int mode ¥n");
if(sidisr & SIDISR_UPER)
printf("parity error during int mode ¥n");
if(sidisr & SIDISR_UOER)
printf("overflow during int mode ¥n");
if(sidisr & 0x0400)
printf("error interrupt during int mode ¥n");
c = sioreg->sirfifo;
}
if(sidisr & (SIDISR_RDIS | SIDISR_TOUT)){
while(!(sidisr & SIDISR_UVALID) && !(sidisr & SIDISR_ERRMASK)){
c = sioreg->sirfifo;
if(sio->rcvbuf_beg != (next=INCIDX(sio->rcvbuf_end))){
if(sio->rcvbuf_beg == sio->rcvbuf_end)
SIGNAL_SEMAPHORE(siono);
sio->rcvbuf[sio->rcvbuf_end] = c;
sio->rcvbuf_end = next;
}
else{
sio->rcvbuf_ovf++;
/* Overflow */
printf("receive buffer overflow ¥n");
}
sidisr = sioreg->sidisr;
if( sidisr & 0xbc00 )
printf("error2(sidisr=%x) ¥n", sidisr);
}
sioreg->sidisr = ~(SIDISR_RDIS|SIDISR_TOUT);
}
if(sidisr & SIDISR_ERI){
sioreg->sidisr = ~SIDISR_ERI;
/* Clear Error Status */
/* routine after error */
sioreg->sirfifo;
/* waiste */
}
if(sidisr & SIDISR_TDIS){
while((sio->sndbuf_beg != sio->sndbuf_end) &&
(sioreg->sicisr & SICISR_TRDY)){
sioreg->sitfifo = sio->sndbuf[sio->sndbuf_beg];
sio->sndbuf_beg = INCIDX(sio->sndbuf_beg);
}
if(sio->sndbuf_beg != sio->sndbuf_end){
sioreg->sidisr &= ~SIDISR_TDIS;
}
else{
sioreg->sidicr &= ~SIDICR_TIE;
if(sio->sndbuf_ovf){
SIGNAL_SEMAPHORE_TX(siono);
}
}
}
A-36
付録 A TX3927 プログラミングサンプル集
return;
}
void tx3927sio0_int()
{
tx3927sio_int(0);
}
void tx3927sio1_int()
{
tx3927sio_int(1);
}
void tx3927dma_int()
{
unsigned int *dma_adrs, *dma0_adrs, *dma2_adrs, dma_status;
#if 0
dma_adrs
*dma_adrs
#endif
= (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
= 0x00000000;
/* MASTEN(bit0)=off */
if( dma_req_flag == 2 ){
dma2_adrs = (unsigned int *)( 0xfffeb05c );
/* Channel Status Register(CSR2) */
dma_status = *dma2_adrs;
/* read status register */
if( dma_status != 0x60 )
/* NCHNC & NTRNFC(Normal Transfer Completion) */
printf(" dma2 complete status error=%x ¥n", dma_status);
*dma2_adrs = 0xffffffff;
/* clear CSR2 */
dma_end_flag = 1;
}
if( dma_req_flag == 0 ){
dma0_adrs = (unsigned int *)( 0xfffeb01c );
/* Channel Status Register(CSR0) */
dma_status = *dma0_adrs;
/* read status register */
if( dma_status != 0x60 )
/* NCHNC & NTRNFC(Normal Transfer Completion) */
printf(" dma0 complete status error=%x ¥n", dma_status);
*dma0_adrs = 0xffffffff;
/* clear CSR0 */
dma_end_flag = 1;
}
return;
}
/*****************************************************************************
* Get & Put one byte data in interrupt handler
*
* if data is bufferd, return soon. otherwise sleep.
* use message box.
*****************************************************************************/
int
tx3927sio_int_getc(int siono)
{
type3927sio *sio = &siotbl[siono];
int c;
if(sio->rcvbuf_beg == sio->rcvbuf_end)
WAIT_SEMAPHORE(siono);
if(sio->rcvbuf_beg != sio->rcvbuf_end){
c = sio->rcvbuf[sio->rcvbuf_beg] & 0xff;
sio->rcvbuf_beg = INCIDX(sio->rcvbuf_beg);
A-37
付録 A TX3927 プログラミングサンプル集
return c;
}
else
return -1;
}
int
tx3927sio_int_putc(int siono, char c)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int next=INCIDX(sio->sndbuf_end);
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
/* ERROR:illegal siono */
sioreg+=siono;
retry_tx:
if((sio->sndbuf_beg == sio->sndbuf_end) && (sioreg->sicisr & SICISR_TRDY)){
sioreg->sitfifo = c;
return 0;
}
else
if(sio->sndbuf_beg != next){
sio->sndbuf[sio->sndbuf_end] = c;
sio->sndbuf_end = next;
sioreg->sidisr &= ~SIDISR_TDIS;
sioreg->sidicr |= SIDICR_TIE;
return 0;
}
else{
sio->sndbuf_ovf++;
/* Overflow */
WAIT_SEMAPHORE_TX(siono);
sio->sndbuf_ovf--;
goto retry_tx;
}
return -1;
}
/*****************************************************************************
* Get & Put data block dma handler
*
* if data is bufferd, return soon. otherwise sleep.
* use message box.
*****************************************************************************/
int
tx3927sio_dma_getc(int siono, char *rcv_buf, int buf_size, int *rcvd_size)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int c,i,sidisr,work;
unsigned int *dma0_adrs, *pcr, dma_status;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
=
=
=
=
(unsigned int
0x00000001;
(unsigned int
0x01000000;
(unsigned int
0x00000000;
(unsigned int
0xfffef320+3;
/* Pin Configuration Register */
*)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=on(reset channel) */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=off(enable channel) */
*)( 0xfffeb004 ) ; /* Source Address Register(SAR0) */
/* Receive FIFO buffer 0 */
A-38
付録 A TX3927 プログラミングサンプル集
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/* Destination Address Register(DAR0) */
= Vadrs2Padrs(rcv_buf);
/* receive buffer physical address */
= (unsigned int *)( 0xfffeb00c ) ; /* Count Register(CNAR0) */
= buf_size;
/* receive buffer size */
= (unsigned int *)( 0xfffeb010 ) ;
/* Source Address Incremnet Register(SAI0) */
= 0x0000000;
/* no increment */
= (unsigned int *)( 0xfffeb014 ) ;
/* Destination Address Incremnet Register(DAI0) */
= 0x0000001;
/* transfer size one byte */
= (unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
= 0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0 */
dma_req_flag = 0;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_RDE;
/* dma channel number 0 */
/* enable receive DMA */
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
sidisr
/* don't disturb DMA(memory) bus */
= sioreg->sidisr;
if(sidisr & 0xbc00)
printf("error3(sidisr=%x) ¥n", sidisr);
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
(unsigned int *)( 0xfffeb01c ) ; /* Channel Status Register(CSR0) */
0xffffffff;
/* clear CSR0 */
(unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/*
work = *dma0_adrs;
/*
work = work - Vadrs2Padrs(rcv_buf);
/*
*rcvd_size = work;
/*
Destination Address Register(DAR0) */
end buffer pointer */
receive buffer physical address */
return received size */
return 0;
}
int
tx3927sio_dma_putc(int siono, char *send_buf, int send_size)
{
unsigned int *dma2_adrs, *pcr, dma_status;
int i, c=0x12345678;
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int next=INCIDX(sio->sndbuf_end);
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
/* ERROR:illegal siono */
sioreg += siono;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
/* Pin Configuration Register */
dma2_adrs
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
; /* Channel Control Register(CCR2) */
/* CHRST(bit24)=on(reset channel) */
; /* Channel Control Register(CCR2) */
=
=
=
=
=
(unsigned int *)( 0xfffeb0a4 )
0x00000001;
(unsigned int *)( 0xfffeb058 )
0x01000000;
(unsigned int *)( 0xfffeb058 )
A-39
付録 A TX3927 プログラミングサンプル集
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
=
=
=
=
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
=
=
=
=
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
0x00000000;
/* CHRST(bit24)=off(enable channel) */
(unsigned int *)( 0xfffeb044 ) ; /* Source Address Register(SAR2) */
Vadrs2Padrs(send_buf);
/* physical memory address */
(unsigned int *)( 0xfffeb048 ) ;
/* Destination Address Register(DAR2) */
0xfffef31c+3;
/* Transmit FIFO Channel-0(SITFIFO0) */
(unsigned int *)( 0xfffeb04c ) ; /* Count Register(CNAR2) */
send_size;
/* transfer size(force short alignment) */
(unsigned int *)( 0xfffeb050 ) ;
/* Source Address Incremnet Register(SAI2) */
0x00000001;
/* transfer size = 1byte */
(unsigned int *)( 0xfffeb054 ) ;
/* Destination Address Incremnet Register(DAI2) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
dma_req_flag = 2;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_TDE;
/* dma channel number 2 */
/* enable transmit DMA */
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
/* don't disturb DMA(memory) bus */
return 0;
}
int
tx3927sio_dma_putc_getc(int siono, char *send_buf, int send_size, char *rcv_buf, int
*rcvd_size)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int c,i,sidisr,work;
unsigned int *dma0_adrs, *pcr, dma_status, *dma2_adrs;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
=
=
=
=
=
=
=
=
=
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
=
=
=
=
*dma0_adrs =
dma0_adrs =
*dma0_adrs =
(unsigned int
0x00000001;
(unsigned int
0x01000000;
(unsigned int
0x00000000;
(unsigned int
0xfffef320+3;
(unsigned int
/* Pin Configuration Register */
*)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=on(reset channel) */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=off(enable channel) */
*)( 0xfffeb004 ) ; /* Source Address Register(SAR0) */
/* Receive FIFO buffer 0 */
*)( 0xfffeb008 ) ;
/* Destination Address Register(DAR0) */
Vadrs2Padrs(rcv_buf);
/* receive buffer physical address */
(unsigned int *)( 0xfffeb00c ) ; /* Count Register(CNAR0) */
send_size;
/* receive buffer size */
(unsigned int *)( 0xfffeb010 ) ;
/* Source Address Incremnet Register(SAI0) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb014 ) ;
/* Destination Address Incremnet Register(DAI0)*/
0x0000001;
/* transfer size one byte */
A-40
付録 A TX3927 プログラミングサンプル集
dma0_adrs = (unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
*dma0_adrs = 0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
sioreg->sidicr |= SIDICR_RDE;
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
*/
dma2_adrs =
*/
*dma2_adrs =
*/
dma2_adrs =
*/
*dma2_adrs =
*/
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
/* enable receive DMA */
(unsigned int *)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
0x00000001;
/* MASTEN(bit0)=on */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00000000;
/* CHRST(bit24)=off(enable channel)
(unsigned int *)( 0xfffeb044 ) ; /* Source Address Register(SAR2)
Vadrs2Padrs(send_buf);
(unsigned int *)( 0xfffeb048 ) ; /* Destination Address Register(DAR2)
0xfffef31c+3;
/* Transmit FIFO Channel-0(SITFIFO0)
(unsigned int *)( 0xfffeb04c ) ;
/* Count Register(CNAR2) */
send_size;
/* transfer size(force short alignment) */
(unsigned int *)( 0xfffeb050 ) ;
/* Source Address Incremnet Register(SAI2) */
0x00000001;
/* transfer size = 1byte */
(unsigned int *)( 0xfffeb054 ) ;
/* Destination Address Incremnet Register(DAI2) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
dma_req_flag = 2;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_TDE;
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
/* dma channel number 2 */
/* enable transmit DMA */
/* don't disturb DMA(memory) bus */
dma_req_flag = 0;
dma_end_flag = 0;
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
sidisr
/* physical memory address
/* dma channel number 0 */
/* don't disturb DMA(memory) bus */
= sioreg->sidisr;
if(sidisr & 0xbc00)
printf("error3(sidisr=%x) ¥n", sidisr);
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
(unsigned int *)( 0xfffeb01c ) ; /* Channel Status Register(CSR0) */
0xffffffff;
/* clear CSR0 */
(unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/*
work = *dma0_adrs;
/*
work = work - Vadrs2Padrs(rcv_buf);
/*
*rcvd_size = work;
/*
A-41
Destination Address Register(DAR0) */
end buffer pointer */
receive buffer physical address */
return received size */
付録 A TX3927 プログラミングサンプル集
return 0;
}
/********************************************************************************
* Get & Put one byte data with polling
*
* if successful, return charactor.
* if timeout, return -1.
* interruptable.
* not return until get a charactor.
*********************************************************************************/
int
tx3927sio_pol_getc(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int t = WAIT_TIME;
int
c, silsr, sidisr;
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
sioreg+=siono;
while (t--) {
if((sidisr=sioreg->sidisr) & SIDISR_RDIS){
c = sioreg->sirfifo;
sioreg->sidisr = ~SIDISR_RDIS;
/* ERROR:illegal siono */
/* Check status */
/* Read data */
if( sidisr & SIDISR_ERI){
sioreg->sidisr = ~SIDISR_ERI;
}
if(!(sidisr & SIDISR_ERRMASK)){
return c;
}
if(sidisr & SIDISR_UBRK){
c = c | 0xfffb0000;
return c;
}
/* Break signal */
if(sidisr & SIDISR_UFER){
c = c | 0xfffe0000;
return c;
}
/* Frame Error */
if(sidisr & SIDISR_UPER){
c = c | 0xfffd0000;
return c;
}
/* Parity Error */
if(sidisr & SIDISR_UOER){
/* Over Run Error */
sioreg->sifcr = 0x00008000;
c = c | 0xfffc0000;
return c;
}
}
noop(2);
A-42
付録 A TX3927 プログラミングサンプル集
}
return -1;
/* timed out */
}
int
tx3927sio_pol_putc(int siono, char c)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int t = WAIT_TIME;
int silsr, sidisr;
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
sioreg+=siono;
while (t--) {
if (sioreg->sidisr & SIDISR_TDIS) {
sioreg->sitfifo = c;
sioreg->sidisr = ~SIDISR_TDIS;
return 0;
}
noop(2);
}
return -1;
/* ERROR:illegal siono */
/* timeout */
}
int
tx3927sio_getc(int siono){
int(*func)() = siotbl[siono].getc;
if(func)
return func(siono);
return -1;
}
int
tx3927sio_putc(int siono, char c){
int(*func)() = siotbl[siono].putc;
if(func)
return func(siono,c);
return -1;
}
/*********************************************************************
* Wait until all data is sent
*********************************************************************/
int
tx3927sio_all_sent(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
/* check parameter */
if(siono!=0 && siono!=1)
return -1;
/* ERROR: illegal siono */
sioreg+=siono;
while(!(sioreg->sicisr & SICISR_TXALS));
}
A-43
付録 A TX3927 プログラミングサンプル集
■ ファイル名: 3927sio.h
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1998-1999 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
*/
#ifndef __TX3927SIO_H
#define __TX3927SIO_H
#define CPU133M
/* imclock */
#ifndef CPU_CLOCK
#ifdef CPU133M
#define CPU_CLOCK 132710400
#else
#define CPU_CLOCK 58982400
#endif
#endif
/* buffer size between interrupt and task. multiple of 2 */
#define SIO_RCVBUFSZ 4096
#define SIO_SNDBUFSZ 4096
#ifdef USE_UDEOS
#ifndef
#define
#endif
#define
#define
#define
#define
SIO_SEMID_BASE
SIO_SEMID_BASE 2
SIO_SEMID0
SIO_SEMID1
SIO_SEMID0TX
SIO_SEMID1TX
(SIO_SEMID_BASE)
(SIO_SEMID_BASE+1)
(SIO_SEMID_BASE+2)
(SIO_SEMID_BASE+3)
CRE_SEM(SIO_SEMID0,"sem_sio0",TA_TFIFO,0)
CRE_SEM(SIO_SEMID1,"sem_sio1",TA_TFIFO,0)
CRE_SEM(SIO_SEMID0TX,"sem_sio0tx",TA_TFIFO,0)
CRE_SEM(SIO_SEMID1TX,"sem_sio1tx",TA_TFIFO,0)
/* define for interrupt handler */
/* not required if you use only polling */
DEF_INT(INTNO_SIO0,TA_HLNG,tx3927sio0_int)
/* DEF_INT(INTNO_SIO1,TA_HLNG,tx3927sio1_int) */
#endif
/* type
#define
#define
#define
#define
#define
#define
#define
*/
SIO_DISABLE
SIO_TXPOL
SIO_TXINT
SIO_TXDMA
SIO_RXPOL
SIO_RXINT
SIO_RXDMA
0x00000000
0x00000001
0x00000002
0x00000004
0x00000010
0x00000020
0x00000040
#define
#define
#define
#define
SIO_PARITY_ODD
SIO_PARITY_EVEN
SIO_STOP2
SIO_7BIT
0x00000100
0x00000200
0x00000400
0x00000800
#define SIO_HWFLOW
0x00001000
A-44
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
SIO_RFIFO_1
SIO_RFIFO_4
SIO_RFIFO_8
SIO_RFIFO_12
#define SIO_TFIFO_1
#define SIO_TFIFO_4
#define SIO_TFIFO_8
extern
extern
extern
extern
extern
extern
extern
extern
int
int
int
int
int
int
int
int
0x00002000
0x00004000
0x00008000
0x00010000
0x00020000
0x00040000
0x00080000
tx3927sio_init(int siono,int type,int baud);
tx3927sio_pol_getc(int siono);
tx3927sio_pol_putc(int siono, char c);
tx3927sio_getc(int siono);
tx3927sio_putc(int siono, char c);
tx3927sio_int_getc(int siono);
tx3927sio_int_putc(int siono, char c);
tx3927sio_all_sent(int siono);
#endif /* __TX3927SIO_H */
A-45
付録 A TX3927 プログラミングサンプル集
A.3.3
DMA
イーサネットドライバで、受信バッファの内容をコピーするのに使用したメモリ-メモリ間
転送の例です。内蔵シリアルとを使用した DMA の例が「A.3.2 SIO」のサンプルの中に有り
ます。
■ ファイル名: tx3927dma.c
/*----------------------------------------------------------------------------関数名 :buff_copy
機 能 :受信データバッファコピー処理
入 力 :
出 力 :なし
-----------------------------------------------------------------------------*/
typedef Uint32 unsigned int
void buff_copy(char *userbuff8, char *tc35815buff8, Uint32 recvsize)
{
short
*tc35815buff16,*userbuff16;
Uint32
*tc35815buff32,*userbuff32,*endbuff,*endbuff1,*endbuff2;
Uint32
*dma3_adrs,dma_status;
register unsigned int work32,work33,short_count,char_count,i;
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
=
=
=
=
=
=
=
=
=
=
=
=
(Uint32*)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
0x00000001;
/* MASTEN(bit0)=on */
(Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
(Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
0x00000000;
/* CHRST(bit24)=off(enable channel) */
(Uint32*)( 0xfffeb064 ) ;
/* Source Address Register(SAR3) */
Vadrs2Padrs(tc35815buff8);
/* physical address */
(Uint32*)( 0xfffeb068 ) ;
/* Destination Address Register(DAR3) */
Vadrs2Padrs(userbuff8+NE_ETHER_ALIGN); /* physical address */
(Uint32*)( 0xfffeb06c ) ;
/* Count Register(CNAR3) */
(recvsize+1) & 0xffe;
/* transfer size(force short
alignment) */
dma3_adrs = (Uint32*)( 0xfffeb070 ) ;
/* Source Address Incremnet
Register(SAI3) */
*dma3_adrs = 0x00000002;
/* 2byte */
dma3_adrs = (Uint32*)( 0xfffeb074 ) ;
/* Destination Address Incremnet
Register(DAI3)*/
*dma3_adrs = 0x00000002;
/* 2byte */
dma3_adrs = (Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
*dma3_adrs = 0x00000104;
/*
EXTRQ=0,INTRQD=0,INTENT=0,XTACT=1,XFSZ=001,ONEAD=0 */
do{
for(i=0;i<125;i++);
/* don't disturb DMA(memory) bus */
dma3_adrs = (Uint32*)( 0xfffeb07c ); /* Channel Status Register(CSR3) */
dma_status = *dma3_adrs;
/* read status register */
}while( dma_status != 0x60 );
/* NCHNC & NTRNFC(Normal Transfer
Completion) */
*dma3_adrs = 0xffffffff;
/* clear CSR3 */
return;
}
A-46
付録 A TX3927 プログラミングサンプル集
A.3.4
PIO
JMR-TX3927 上で で LED の点灯をさせる簡単な例です。PIO を使用可能にするためにピ
ン コ ン フ ィ グ レ ー シ ョ ン レ ジ ス タ (PCFG) や オ ー プ ン ド レ イ ン コ ン ト ロ ー ル レ ジ ス タ
(XPIOOD)、方向コントロールレジスタ(XPIODIR)の設定が必要になります。
■ ファイル名: pio.c
#include
#include
#include
#include
#include
<stdio.h>
<setjmp.h>
<string.h>
"console.h"
"menu.h"
/* TX3927 PIO のスイッチ/LED の実行例です。 */
/*
PIO Direction Control register address
PIO Data Out register Address
PIO Data 15,14,13,12bit DIP Switchs
1 -> LED off
0 -> LED on
PIO Data 11,10bit LEDs
Switch ON -> 0
Switch OFF -> 1
*/
/* LED 12bit off */
int initPIO(void){
volatile int *pcfg,*xpiood;
pcfg
= (volatile int *)0xfffee008;
xpiood = (volatile int *)0xfffef50c;
*pcfg
= 0x08fc3131;
*xpiood = 0x00000000;
return 0;
}
int led1(void)
{
volatile int *pdir,*pdo;
pdir = (volatile int *)0xfffef508;
pdo = (volatile int *)0xfffef500;
*pdir = 0x0000f000;
*pdo = 0x00001000;
return 0;
}
A-47
0xfffef508
0xfffef500
付録 A TX3927 プログラミングサンプル集
A.4
PCI コントローラ
A.4.1
PCI コントローラの初期化
PCI コントローラの初期化手順のサンプルです。JMR-TX3927 上で
•
バスに接続されている PCI デバイスの検出
•
メモリおよび割り込みの設定
•
TX3927 からのマスタアクセス、スレーブアクセス空間の設定
を行っています。
ただし、このサンプルコードでは、コンフィグレーション type0 のみサポートしているため、
PCI ブリッジデバイスはコンフィグレーションできません。また、マルチファンクションデバ
イスについても検出のみで、実際のマルチファンクションに対する処理は行っていません。ま
た、JMR-TX3927 ボードは動的なインタラプトルーティング機能を持っていませんので、割
り込みはボード設計時に固定的に割り振られている割り込み番号を使用するようになってい
ます。
プログラム構成は以下のようになっています。
: PCI コントローラ初期化
Init_PCI
: 3927PCI バスに接続されたデバイスの検出
+-- find_device
|
+--- set_pci_irq
: 割り込みテーブルの作成
|
+--- get_addr_size
: アドレス空間の要求サイズを検出
+-- pci_mem_space_mapping
+--- sort_table
: アドレス空間の配置
: アドレスサイズ順にソート
+--- swap_table: リソースマップの入れ替え
その他に以下のサブルーチンを使用しています。
get_pci_config
: PCI バスコンフィグレーション ライトアクセス
put_pci_config PCI
: バスコンフィグレーション リードアクセス
master_abort_check
: マスタアボート検出
■ ファイル名: pci3927.c
/***************************************************************
Copyright (C) 1999 TOSHIBA Corporation
TX3927 PCI Initialize function
module PCI3927.c
1999.05.05 Akira.Tanaka
1999.07.19 chenge C file
$Id: PCI3927.c 1.2 1999/07/19 01:29:45 tanaka Exp $
***************************************************************/
#include
#include
#include
#include
<stdio.h>
"cosbd_27.h"
"intcosmp27.h"
"tx3927.h"
/**************************************************************/
#define TC35815
0xd
#define max_device
22
A-48
付録 A TX3927 プログラミングサンプル集
#define TX3927_IO_PA
0x08000000
/* GBus I/O ベースアドレス
*/
#define TX3927_MEM_PA
0x04000000
/* GBus メモリベースアドレス
*/
#define TX3927_END_PA
0x03FFFFFF
/* 64MByte 空間
*/
#define PCI_IO_PA
0x08000000
/* PCI I/O ベースアドレス
*/
#define PCI_MEM_PA
0x04000000
/* PCI メモリベースアドレス
*/
#define PCI_END_PA
0x03FFFFFF
/* 64MByte
*/
#define TX3927_VA
0xa0000000
/* 仮想アドレスオフセット
*/
#define START_PA
0x00000000
/* target start address
*/
#define MEM_OFFSET
0x02000000
/* target space offset(4 i/o) */
/* 上記 define でのアドレスマッピングイメージ
*/
/*
*/
/* TX3927
p-address
PCI Bus
*/
/* v-address
MEMORY
(GBus addr)
p-address
*/
/* ac00_0000 |---------| 0c00_0000
|---------|
*/
/*
| pcic
|
| PCI bus |
*/
/*
<64MB> | IO space| -------------->
<64MB> | IO space|
*/
/* a800_0000 |---------| 0800_0000
0800_0000|---------|
*/
/*
|
pcic |<TX3927_IO_PA> <PCI_IO_PA> | PCI bus |
*/
/*
<64MB> |MEM space| -------------->
<64MB> |MEM space|
*/
/* a400_0000 |---------| 0400_0000
0400_0000|_________|
*/
/*
|
|<TX3927_MEM_PA><PCI_MEM_PA>|
|
*/
/*
|
|
|
|
*/
/*
|
|
|
|
*/
/* a200_0000 |---------| 0200_0000
0200_0000|---------|
*/
/*
| SDRAM
|
<MEM_OFFSET>
|
PCI
|
*/
/*
<32MB> | space
|
<--------------- <32MB> | Target |
*/
/* a000_0000 |
| 0000_0000
0000_0000| Space |
*/
/*
~~~~~~~~~~
<START_PA>
~~~~~~~~~~
*/
/**************************************************************/
/* TX3927 の PCIC(内部)割り込み信号(固定)
*/
/**************************************************************/
#define PCI_INT10
0xa
/**************************************************************/
/* TX3927 PCI リソーステーブルの定義
*/
/* device 型の構造体宣言
*/
/**************************************************************/
struct device {
int
id;
/* IDSEL に等しい */
int
bus_num;
/* バスナンバー、0 のみ */
unsigned short vender_id;
/* ベンダーID */
unsigned short device_id;
/* デバイス ID */
unsigned short subsvid;
/* サブシステムベンダ ID */
unsigned short subsid;
/* サブシステム ID */
int
io_addr_size;
/* I/O 要求アドレスサイズ */
int
mem_addr_size;
/* メモリ要求アドレスサイズ */
int
io_base_addr;
/* 割り当てた I/O ベースアドレス */
int
mem_base_addr;
/* 割り当てた Memory ベースアドレス */
int
int_num;
/* 割り込み信号の番号(TX3927 の INT*) */
int
flg;
/* 使用済みフラグ”1”の時使用済み */
};
/**************************************************************/
/**************************************************************/
struct IRQtable {
int
bus_num;
/* Bus Number */
int
dev_num;
/* Device Number */
int
int_pin;
/* Interrupt Pin 0=INTA..3=INTD */
int
int_line; /* Interrupt Line 0x0=INT0..0xF=INT15 */
int
slot_num; /* Slot Number */
};
A-49
付録 A TX3927 プログラミングサンプル集
/**************************************************************/
/* TX3927 board PCI Interrupt Resouce Table
*/
/**************************************************************/
struct IntResTbl {
int
INTR_NUM; /* 割り込み信号(TX3927)の番号 */
int
DEV_ID;
/* この割り込み信号に接続されるデバイスのデバイスナンバー */
int
SLOT_NUM; /* スロットナンバー。0 の場合はプラットフォーム */
};
struct device
sd[max_device];
struct device
tmp_sd[max_device];
struct IRQtable irq[max_device];
/* 大域変数の宣言 */
/* リソーステーブルのソート */
/* IRQ リソーステーブル */
/* TX3927 board PCI Interrupt Resource Table */
/* 最後のテーブルに識別子として 0xff を ID に設定 */
struct IntResTbl inttbl[8] = {
{0, 0x0f, 0},/* INT[0] PCI Card CN (INTA) or PCI Card Edge (INTC) *
{1, 0x12, 3},
{1, 0x13, 2},
{1, 0x14, 1},
{3, 0x0d, 0},/* INT[3] TC35815 or 10M Ether(from I/O board)
*/
{0, 0xff, 0}
};
/* TX3927 ボードの割り込み接続情報の設定
*/
/* TX3927 外部割込み int[3:0]の接続
*/
/* TX3927 側
接続されているデバイス
*/
/* INT[0] PCI Card CN (INTA) or PCI Card Edge (INTC) */
/* INT[1] IO-C
*/
/* INT[2] ISA-C (from I/O board)
*/
/* INT[3] TC35815 or 10M Ether(from I/O board)
*/
/* INT[10]TX3927 PCIC (INTA<- まちがい 99/05/11)
*/
/* TX3927 は INTA を持たないインタラプトピンは0に設定
*/
/* INT[2:0]は設定不要
*/
/* INT[3]の設定
*/
/**************************************************************/
/* TX3927 PCIC 初期化
*/
/**************************************************************/
void
Init_PCI(int mode)
{
/* TX3927 PCIC の初期化 */
CPUReg->pci_conf.PCISTAT = MEN;
/* マスタイネーブル */
CPUReg->pci_lsp.IOMAS = 0xfc000000; /* PCI I/O サイズ
64Mbyte */
CPUReg->pci_lsp.MMAS = 0xfc000000; /* PCI メモリサイズ 64Mbyte */
CPUReg->pci_lsp.LBC
= EPCAD;
/* TX3927 target コンフィグディセーブル */
/* INT[10]の設定(TX3927 ターゲット側、PCI デバイスとは別に設定 */
CPUReg->pci_conf.ML
= 0xffff010a;
/* PCI に接続されたデバイス検出 */
find_device(mode);
CPUReg->pci_iconf.IPBMMAR
CPUReg->pci_iconf.ILBMMAR
CPUReg->pci_iconf.IPBIOMAR
CPUReg->pci_iconf.ILBIOMAR
=
=
=
=
PCI_MEM_PA;
TX3927_MEM_PA;
PCI_IO_PA;
TX3927_IO_PA;
/*
/*
/*
/*
PCI メモリベースアドレス */
GBus メモリベースアドレス */
PCI I/O ベースアドレス */
GBusI/O ベースアドレス */
/* TX3927 ターゲットの割付は要検討 */
/* I/O スペースは、0200_0000 より、256byte。
*/
/* しかし TX3927 ボードのメモリ領域の外に設定してあることに注意 */
CPUReg->pci_lsp.MBAS
CPUReg->pci_lsp.IOBAS
CPUReg->pci_conf.MBA
= 0xfe000000;
= 0xffffff00;
= START_PA;
A-50
/* ターゲットメモリサイズ 32Mbyte */
/* ターゲット IO サイズ 256byte */
/* ターゲットメモリベースアドレス */
付録 A TX3927 プログラミングサンプル集
CPUReg->pci_conf.IOBA
= START_PA + MEM_OFFSET;
CPUReg->pci_tconf.TLBMMA = START_PA;
CPUReg->pci_tconf.TLBIOMA = START_PA + MEM_OFFSET;
/* ターゲット IO ベースアドレス */
/* ターゲット GBus メモリアドレ */
/* ターゲット GBus I/O アドレス */
/* PCIC メモリ・IO アクセスイネーブル、コンフィグディセーブル */
CPUReg->pci_lsp.LBC = EPCAD | ILMDE | ILIDE;
/* 検索したデバイスにアドレスを割り付ける */
pci_mem_space_mapping();
if (master_abort_check() != 0) {
printf("¥n Config Register Access Error!! after mapping");
CPUReg->pci_conf.PCISTAT = RECMA | MEN;
}
/* アービタの設定 */
/* CPUReg->pci_ext.REQ_TRACE = 0x73737373; */
CPUReg->pci_ext.REQ_TRACE = 0x73210731;
CPUReg->pci_ext.BM = 0x00000000;
/* clear */
/* アービタのイネーブル */
CPUReg->pci_ext.PBAPMC = 0x00000002;
}
/****************************************************************/
/* 3927PCI バスに接続されたデバイスの検出
*/
/*
デバイスが検出されなかった場合は sd[idsel].id に 0xff を入れる
*/
/*
デバイスが検出されたら、マルチデバイスの検出を実行
*/
/*
マルチデバイスでも今のところは何もしない。
*/
/*
割り込み情報の収集。INT 番号をリソーステーブル sd に追加
*/
/*
デバイスがあったときに作られる情報テーブルは間を空けずに
*/
/*
順番に並べる。
(IDSEL の番号とは一致させない)
*/
/*
SubsystemVenderID,Subsysstem ID の追加
*/
/****************************************************************/
int
find_device(int mode)
{
int
idsel, i;
int
vid, htype;
int
intp, intl;
int
num;
int
base_addr;
num = 0;
for (i = 0; i < max_device; i++) {
idsel = i;
/* read vender ID */
vid = 0xffff & get_pci_config(idsel, 0, 0x00);
if ((vid != 0xffff) && (master_abort_check() == 0)) {
sd[num].id
= idsel;
sd[num].vender_id = 0xffff & get_pci_config(idsel, 0, 0x00);
sd[num].device_id = 0xffff & (get_pci_config(idsel, 0, 0x00) >> 16);
sd[num].subsvid
= 0xffff & get_pci_config(idsel, 0, 0x2c);
sd[num].subsid
= 0xffff & (get_pci_config(idsel, 0, 0x2c) >> 16);
sd[num].bus_num
= 0;
sd[num].flg
= 0;
/* read header type */
htype = 0x80 & (get_pci_config(idsel, 0, 0x08) >> 16);
if (htype != 0)
printf("¥n this device is multi device ");
/* 割り込みピンをリード。ID と一致した INT 番号をセット(* InterruptLine)*/
/* int_num をリード */
A-51
付録 A TX3927 プログラミングサンプル集
set_pci_irq(num, mode);
/* read Interrupt line */
intl = 0x0f & get_pci_config(idsel, 0, 0x3c);
sd[num].int_num = intl;
/* base address size check */
/* check 0x10 may be I/O base address register */
base_addr = get_addr_size(idsel, 0x10);
if ((base_addr & 0x00000001) && (base_addr != 0))
sd[num].io_addr_size = base_addr;
else {
if (base_addr != 0)
sd[num].mem_addr_size = base_addr;
else {
sd[num].mem_addr_size = 0xffffffff;
sd[num].io_addr_size = 0xffffffff;
}
}
/* check 0x14 may be memory base address register */
base_addr = get_addr_size(idsel, 0x14);
if ((base_addr & 0x00000001) && (base_addr != 0))
sd[num].io_addr_size = base_addr;
else {
if (base_addr != 0)
sd[num].mem_addr_size = base_addr;
else {
sd[num].mem_addr_size = 0xffffffff;
sd[num].io_addr_size = 0xffffffff;
}
}
num = num + 1;
} else {
/* デバイスが見つからなかった場合はステータスを復帰 */
CPUReg->pci_conf.PCISTAT = RECMA | MEN;
if (master_abort_check() != 0)
/* 再チェック */
printf("¥n Ireagal status !!");
}
}
/* 最後のテーブルの ID に 0xff を代入(識別子) */
sd[num].id = 0xff;
}
/**************************************************************/
/* 割り込みリソーステーブルの定義
*/
/**************************************************************/
void
set_pci_irq(int num, int mode)
{
int
i;
int
past_data; /* 変更前の状態 */
int
undef;
/* 割り込みリソースが定義できないとき:1 */
i = 0;
undef = 0;
while (inttbl[i].DEV_ID != sd[num].id) {
/* テーブルから一致するデバイス番号検索 */
if (inttbl[i].DEV_ID == 0xff) {
/* テーブルの最後まで検索した場合検索終了 */
undef = 1;
if (mode != 0)
printf("¥n %02x is not defined! please check Interrupt
Resouce Table ", sd[num].id);
A-52
付録 A TX3927 プログラミングサンプル集
break;
/* リソーステーブルと一致しない場合に警告 */
}
i++;
}
/* 該当デバイス番号にて割り込みリソーステーブルを設定 */
if (undef == 0) {
irq[i].bus_num = 0;
irq[i].dev_num = inttbl[i].DEV_ID;
irq[i].int_pin = (get_pci_config(irq[i].dev_num, 0, 0x3c) >> 8) & 0x07;
irq[i].int_line = 0x0f & inttbl[i].INTR_NUM;
irq[i].slot_num = inttbl[i].SLOT_NUM;
/* 割込み信号を Interrupt_Line レジスタにライト */
/* ワードライトなので他のレジスタはマスク(リードライトする) */
past_data = get_pci_config(irq[i].dev_num, 0, 0x3c) | (0x000000ff &
irq[i].int_line);
/* printf("¥n put_pci_config reg03h"); */
put_pci_config(irq[i].dev_num, 0, 0x3c, past_data);
}
}
/***********************************************************************/
/* ベースアドレスレジスタからアドレス空間の要求サイズを検出
*/
/* ベースアドレスレジスタに 0xffffffff をライト。ライトできたビット
*/
/* により、要求サイズを検出。オール0ならば予約のレジスタ
*/
/* bit0 が1ならば、IO ベースアドレスレジスタ、0 ならメモリベースレジスタ
*/
/* xx レジスタは 10h,14h,18h,1ch,20h,24h を検索する xx
*/
/* 戻り値はサイズ
*/
/***********************************************************************/
int
get_addr_size(int idsel, int reg)
{
int
ret;
/* int reg[6]={0x10,0x14,0x18,0x1c,0x20,0x24}; */
put_pci_config(idsel, 0, reg, 0xffffffff);
ret = get_pci_config(idsel, 0, reg);
return ret;
}
/**************************************************************/
/* 取得した要求スペースによりアドレス空間の配置
*/
/**************************************************************/
int
pci_mem_space_mapping(void)
{
int
mem_space;
/* メモリが必要とする領域 */
int
io_space;
/* I/O が必要とする領域 */
int
next_io_addr;
/* マッピング後の利用可能な IO 最下位アドレス */
int
next_mem_addr;
/* マッピング後の利用可能な MEMORY 最下位アドレス */
int
i;
int
ret;
i = 0;
next_io_addr = PCI_IO_PA;
next_mem_addr = PCI_MEM_PA;
/* マッピング前処理 テーブルのソーティング */
/* IO space size sort */
sort_table(0);
/* ソート完了 */
/* IO space mapping */
while (sd[i].id != 0xff) {
if (sd[i].io_addr_size != 0xffffffff)
A-53
付録 A TX3927 プログラミングサンプル集
io_space = ~(0xfffffffc & sd[i].io_addr_size) + 1;
sd[i].io_base_addr = next_io_addr;
next_io_addr = next_io_addr + io_space;
if (next_io_addr > PCI_END_PA + PCI_IO_PA)
printf("¥n IO mapping failed!! ");
i++;
}
/* MEM space size sort */
sort_table(1);
/* ソート完了 */
i = 0;
/* MEM space mapping */
while (sd[i].id != 0xff) {
if (sd[i].mem_addr_size != 0xffffffff)
mem_space = ~(0xfffffff0 & sd[i].mem_addr_size) + 1;
sd[i].mem_base_addr = next_mem_addr;
next_mem_addr = next_mem_addr + mem_space;
if (next_mem_addr > PCI_END_PA + PCI_MEM_PA)
printf("¥n memory mapping failed!! ");
i++;
}
}
/**************************************************************/
/* リソース情報のアドレスサイズで大きい順にソートを実行
*/
/* スイッチによりメモリと I/O を切り替えて実行する
*/
/**************************************************************/
int
sort_table(int sw)
{
int
i, j;
i = 0;
if (sw == 0) {
/* IO space */
while (sd[i].id != 0xff) {
if (i != 0) {
j = 0;
while (j < i) {
if (~sd[i].io_addr_size > ~sd[j].io_addr_size) {
swap_table(j, i);
} else
j++;
}
}
i++;
}
} else {
/* MEM space */
while (sd[i].id != 0xff) {
if (i != 0) {
j = 0;
while (j < i) {
if (~sd[i].mem_addr_size > ~sd[j].mem_addr_size)
{
swap_table(j, i);
} else
j++;
}
} i++;
}
}
}
A-54
付録 A TX3927 プログラミングサンプル集
/**************************************************************/
/* リソースマップの入れ替え
*/
/**************************************************************/
void
swap_table(int p, int c)
{
struct device
tmp;
tmp = sd[p];
sd[p] = sd[c];
sd[c] = tmp;
}
/****************************************************************/
/* PCI バスコンフィグレーション ライトアクセス
*/
/* デバイス番号、ファンクション番号、レジスタ番号、ライトデータ
*/
/****************************************************************/
int
put_pci_config(int id, int func, int reg, int buf)
{
int
confreg;
confreg = 0x00000000 | ((id & 0x1f) << 11) | ((func & 0x7) << 8) | reg;
CPUReg->pci_lsp.ICAR = confreg;
CPUReg->pci_lsp.ICDR = buf;
}
/**************************************************************/
/* PCI バスコンフィグレーション リードアクセス
*/
/* デバイス番号、ファンクション番号、レジスタ番号
*/
/* 戻り値:リードデータ
*/
/**************************************************************/
int
get_pci_config(int id, int func, int reg)
{
int
ret, confreg;
confreg = 0x00000000 | ((id & 0x1f) << 11) | ((func & 0x7) << 8) | reg;
CPUReg->pci_lsp.ICAR = confreg;
ret = CPUReg->pci_lsp.ICDR;
return ret;
}
/**************************************************************/
/* 存在しないデバイスへのアクセスによるマスタアボート検出
*/
/**************************************************************/
int
master_abort_check(void)
{
int
ret;
ret = CPUReg->pci_conf.PCISTAT & RECMA;
return ret;
}
A-55
付録 A TX3927 プログラミングサンプル集
A-56
付録 A TX3927 プログラミングサンプル集
付録A TX3927 プログラミングサンプル集
(注 1) 本章のプログラム例の動作については保証いたしません。
(注 2) 例として添付されているプログラムソースコードは説明用途で使用しているため、そのままコン
パイル実行できるものではありません。また例の中には UDEOS (µITRON 仕様 OS: 東芝情報シス
テム(株)製でフリーではありません)を前提としているものがあります。
A.1
プログラミングに慣れていない方のために
A.1.1
メモリマップド I/O
MIPS では入出力はメモリマップド I/O になっています。あまり多くのプロセッサを経験さ
れていない方の中には、プログラミングの最初で戸惑われる方がいらっしゃるようです。ペリ
フェラルレジスタの READ/WRITE をするのに入出力命令や関数(x86 の in/out 命令や
inp/outp 関数に相当するものです)がないというのが、困惑の原因になっているようです。御
存じない方のために簡単に説明をしておきます。
MIPS ではメモリマップド I/O 方式ですので、I/O 空間、メモリ空間の区別はありません。
機械語レベルではメモリに対する書き込みもデバイスレジスタに対する書き込みも同じ Store
命令(Store Byte、Store Word など)を使用します。レジスタはマニュアルに記載されている固
定 ア ド レ ス に 割 り 付 け ら れ て い ま す の で 、 例 え ば PIODIR と い う レ ジ ス タ ( ア ド レ ス
0xfffef508)に値を書き込む場合は
volatile int *pdir;
pdir = (volatile int *)0xfffef508;
と定義しておいて
*pdir = 0x0000f000;
で OK です。
volatile を忘れないようご注意ください。volatile をつけていないとコンパイラの最適化に
より、デバイスレジスタへのアクセスが実際に行われなくなる場合があります。
A.1.2
コプロセッサ 0 レジスタのアクセスについて
MIPS では割り込み処理などのシステムプログラムを記述する際に、コプロセッサ 0 のレジ
スタにアクセスする必要があります。C ではコプロセッサ命令を使用することはできませんし、
そのためのライブラリ関数もコンパイラには付属していません。したがって、この部分はアセ
ンブラ記述が必要です。C からアクセスする場合には自分でライブラリを用意するか、インラ
インアセンブラを使用する必要があります。下記の例は C から呼びだし可能な CP0 レジスタ
アクセスルーチンのサンプルプログラムです。
■ ファイル名: cp0ins.S
.macro
getcp0reg
.globl
¥name
.ent ¥name
¥name:
mfc0
$2,¥regno
jr
$31
nop
.end
¥name
.endm
name,regno
.macro
putcp0reg
.globl
¥name
.ent ¥name
name,regno
# getcp0_xx();
# reg->$2
A-1
# put cp0_xx(val);
付録 A TX3927 プログラミングサンプル集
¥name:
mtc0
jr
nop
.end
.endm
$4,¥regno
$31
# reg->$2
¥name
.macro
setcp0reg
.globl
¥name
.ent ¥name
¥name:
mfc0
$2,¥regno
nop
and
$1,$2,$4
or
$1,$1,$5
mtc0
$1,¥regno
jr
$31
nop
.end
¥name
.endm
.set noat
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
name,regno
# val->CP reg
getcp0_0 $0
putcp0_0 $0
setcp0_0 $0
getcp0_1 $1
putcp0_1 $1
setcp0_1 $1
getcp0_2 $2
putcp0_2 $2
setcp0_2 $2
getcp0_3 $3
putcp0_3 $3
setcp0_3 $3
getcp0_4 $4
putcp0_4 $4
setcp0_4 $4
getcp0_5 $0
putcp0_5 $0
setcp0_5 $0
getcp0_6 $6
putcp0_6 $6
setcp0_6 $6
getcp0_7 $7
putcp0_7 $7
setcp0_7 $7
getcp0_8 $8
putcp0_8 $8
setcp0_8 $8
getcp0_9 $9
putcp0_9 $9
setcp0_9 $9
getcp0_10 $10
putcp0_10 $10
setcp0_10 $10
getcp0_11 $11
putcp0_11 $11
setcp0_11 $11
getstatus $12
putstatus $12
setstatus $12
getcp0_13 $13
putcp0_13 $13
setcp0_13 $13
getcp0_14 $14
A-2
# setcp0_xx(mask,val);
付録 A TX3927 プログラミングサンプル集
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
getcp0reg
putcp0reg
setcp0reg
putcp0_14 $14
setcp0_14 $14
getprid $15
putcp0_15 $15
setcp0_15 $15
getcp0_16 $16
putcp0_16 $16
setcp0_16 $16
getcp0_17 $17
putcp0_17 $17
setcp0_17 $17
getcp0_18 $18
putcp0_18 $18
setcp0_18 $18
getcp0_19 $19
putcp0_19 $19
setcp0_19 $19
getcp0_20 $20
putcp0_20 $20
setcp0_20 $20
getcp0_21 $21
putcp0_21 $21
setcp0_21 $21
getcp0_22 $22
putcp0_22 $22
setcp0_22 $22
getcp0_23 $23
putcp0_23 $23
setcp0_23 $23
getcp0_24 $24
putcp0_24 $24
setcp0_24 $24
getcp0_25 $20
putcp0_25 $20
setcp0_25 $20
getcp0_26 $26
putcp0_26 $26
setcp0_26 $26
getcp0_27 $27
putcp0_27 $27
setcp0_27 $27
getcp0_28 $28
putcp0_28 $28
setcp0_28 $28
getcp0_29 $29
putcp0_29 $29
setcp0_29 $29
getcp0_30 $30
putcp0_30 $30
setcp0_30 $30
getcp0_31 $31
putcp0_31 $31
setcp0_31 $31
.globl
getstackp
.ent getstackp
getstackp:
addu
$2,$0,$29
jr
$31
nop
.end
getstackp
A-3
付録 A TX3927 プログラミングサンプル集
A.2
基本動作
A.2.1
ヘッダファイル
■ ファイル名: tx3927.h
/****************************************************
* MODULE NAME: tx3927.h TX 3927 REG. INFO.
*
* FUNCTION
: tx 3927 header
*
* UPDATE
: 1998.07.15
*
****************************************************/
#ifndef __TX3927__
#define __TX3912
#include
"cosbd_27.h"
/************
* SDRAM
*
************/
/* ***** Channel Control Register ***** */
/* Memory Type
*/
#define SDM_SDRAM
0x00000000
/* 0x00000000...SDRAM
*/
#define SDM_DIMM
0x00040000
/* 0x00040000...DIMM FLASH */
#define SDM_SMROM
0x00080000
/* 0x00080000...SMROM
*/
#define SDM_SGRAM
0x000C0000
/* 0x000C0000...SGRAM
*/
/* SDRAM Enable
*/
#define SDE_ENA
0x00020000
/* Enable
*/
#define SDE_DIS
0x00000000
/* Disable
*/
/* BANK#
*/
#define SDB_0
0x00000000
/* Type 0
*/
#define SDB_1
0x00010000
/* Type 1
*/
/* Address Mask Register */
#define SDAM
0x0000ffe0
/* */
/* SDRAM Row Size */
#define SDRS_2048
0x00000000
/* 2048 Row */
#define SDRS_4096
0x00000008
/* 4096 Row */
#define SDRS_8192
0x00000010
/* 8192 Row */
/* DRAM Colum Size */
#define SDCS_256
0x00000000
/* 256Word */
#define SDCS_512
0x00000002
/* 512Word */
#define SDCS_1024
0x00000004
/* 1024Word */
#define SDCS_2048
0x00000006
/* 2048Word */
/* SDRAM Memory Width */
#define SDMW_32
0x00000000
/* 0:32 Bit */
#define SDMW_16
0x00000001
/* 1:16 Bit */
/* ***** SDRAM Shard Timming Register ***** */
/* BANK Cycle Time */
#define SDBC_5TCK
0x00000000
/* 5 tck(Reset) */
#define SDBC_6TCK
0x20000000
/* 6 tck
*/
#define SDBC_7TCK
0x40000000
/* 7 tck
*/
#define SDBC_8TCK
0x60000000
/* 8 tck
*/
#define SDBC_9TCK
0x80000000
/* 9 tck
*/
#define SDBC_10TCK
0xa0000000
/* 10 tck
*/
/* SDACP Time */
#define SDACP_3TCK
0x00000000
/* 3 tck(Reset) */
#define SDACP_4TCK
0x08000000
/* 4 tck */
#define SDACP_5TCK
0x10000000
/* 5 tck */
#define SDACP_6TCK
0x18000000
/* 6 tck */
/* Precharge Time */
#define SDP_2TCK
0x00000000
/* 2 tck(Reset) */
#define SDP_3TCK
0x04000000
/* 3 tck */
/* RAS to CAS Delay */
#define SDCD_2TCK
0x00000000
/* 2 tck(Reset) */
A-4
付録 A TX3927 プログラミングサンプル集
#define SDCD_3TCK
0x02000000
#define SDRC(cnt) ((cnt & 0x0000003F)
#define CASL_2TCK
#define CASL_3TCK
0x00000000
0x00020000
#define DRB_REG
#define DRB_NORMAL
0x00000000
0x00010000
/* ***** FLASH Shard Timming Register
/* ***** SMROM Shard Timming Register
/* ***** SDRAM Command Register *****
#define
#define
#define
#define
#define
#define
#define
#define
SDCMSK_CH0
SDCMSK_CH1
SDCMSK_CH2
SDCMSK_CH3
SDCMSK_CH4
SDCMSK_CH5
SDCMSK_CH6
SDCMSK_CH7
0x00000010
0x00000020
0x00000040
0x00000080
0x00000100
0x00000200
0x00000400
0x00000800
#define
#define
#define
#define
#define
#define
#define
SDC_NOP
SDC_SDMOD
SDC_SMMOD
SDC_PRE
SDC_LPMOD
SDC_PDMOD
SDC_POWEXT
0x00000000
0x00000001
0x00000002
0x00000003
0x00000004
0x00000005
0x00000006
/* 3 tck */
/* Refresh Counter */
<< 18)
/* CAS Latency */
/* 2 tck(Reset) */
/* 3 tck */
/* Data Read Bypass */
/* (Reset) */
/* */
/* Slow Write Burst */
/* SGRAM Black Write */
/* SGRAM Write Pre Bit */
/* Refresh Period */
***** */
***** */
*/
/* Channel Mask */
/* Channel #0 */
/* Channel #1 */
/* Channel #2 */
/* Channel #3 */
/* Channel #4 */
/* Channel #5 */
/* Channel #6 */
/* Channel #7 */
/* Command */
/* NOP Command */
/* Set SDRAM Mode Register */
/* Set SMROM Mode Register */
/* Precharge All SDRAM Banks */
/* Enter Low Power Mode */
/* Enter Power Down Mode */
/* Exit Low Power/Power Down Mode */
/* ***** SGRAM Load Mask Register ***** */
/* ***** SGRAM Load Color Register ***** */
/* ************ *
* ROMC
*
* ************ */
typedef struct{
volatile int RCCR;
/* ***** Channel Control Register ***** */
}ROMCC;
#define S_RCCR0
0x1fc3e200
#define
#define
#define
#define
RPS_NON
RPS_4W
RPS_8W
RPS_16W
0x00000000
0x00040000
0x00080000
0x000c0000
#define
#define
#define
#define
RPWT_0
RPWT_1
RPWT_2
RPWT_3
0x00000000
0x00010000
0x00020000
0x00030000
#define RWT(wc)
#define
#define
#define
#define
#define
#define
#define
RCS_1M
RCS_2M
RCS_4M
RCS_8M
RCS_16M
RCS_32M
RCS_64M
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
((wc & 0xf)<< 12) /*
/*
0x00000000
/*
0x00000100
/*
0x00000200
/*
0x00000300
/*
0x00000400
/*
0x00000500
/*
0x00000600
/*
A-5
Initial Data */
ROM control Page Mode ROM Page Size */
4-Word */
4-Word */
8-Word */
16-Word */
ROM control Page Read Mode Wait Time on
channel0 */
0Wait */
1Wait */
2Wait */
3Wait */
ROM control Wait Time on channel0 */
wc : Wait Count */
ROM control Channel Size on channel0 */
1Mbyte */
2Mbyte */
4Mbyte */
8Mbyte */
16Mbyte */
32Mbyte */
64Mbyte */
付録 A TX3927 プログラミングサンプル集
#define RCS_128M
#define RCS_256M
#define RCS_512M
0x00000700
0x00000800
0x00000900
#define BUS16
#define BUS32
0x00000080
0x00000000
/*
/*
/*
/*
/*
/*
#define RPM 0x00000001
128Mbyte */
256Mbyte */
512Mbyte */
ROM control BUS Size */
ROM control 16bit width bus size on channel0 */
ROM control 32bit width bus size on channel0 */
/* ROM control Page Mode on channel0 */
/************
* DMA
*
************/
/* ***** Master Control Register ***** */
#define S_MCR
0x00000000
#define FIFOVC(vc) ((wc & 0x0002c000) << 14)
#define FIFWP(wp) ((wp & 0x00003800) << 11)
#define FIFRP(rp) ((rp & 0x00000700) << 8)
#define RSFIF
0x00000080
#define FIFUM
0x00000078
#define LE
0x00000004
#define RRPT
0x00000002
#define MSTEN
0x00000001
/* ***** Channel Control Register ***** */
#define S_CNTL
0x00000000
#define CH_reset 0x01000000
#define RVBYTE
0x00800000
#define ACKPOL
0x00400000
#define REQPL
0x00200000
#define EGREQ
0x00100000
#define CHDN
0x00080000
/* ***** Channel Status Register ***** */
#define S_STS
0x00000000
#define WAITC(wc) ((wc & 0x0000ffc000) << 14)
#define CHNACT
0x00000100
#define ABCHC
0x00000080
#define NCHNC
0x00000040
#define NTRNFC
0x00000020
#define EXTDN
0x00000010
#define CFERR
0x00000008
#define CHERR
0x00000004
#define DESERR
0x00000002
#define SORERR
0x00000001
/* ***** Source Address Register ***** */
/* ***** Distination Address Register ***** */
/* ***** Chain Address Register ***** */
A-6
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
FIFO Valid Entry Count
FIFO Write Pointer
FIFO Read Pointer
Reset FIFO
FIFO Use Mask
Litele Endian
Round Robin Priority
Master Enable
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
Channel Reset */
Reverse Byte
*/
Acknowledge Polarity
*/
Request Polarity */
Edge Request
*/
Chain Done
*/
Done Control */
External Request */
Internal Request Delay */
Interrupt Enable on Error */
Interrupt Enable on Chain Done */
Interrupt Enable on Transfer Done */
Chain Enable
*/
Transfer Active */
Snop */
Mixed Distination Increment */
Mixed Source Increment */
Transfer Size */
Memory to I/O */
One Address */
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Initial Data */
Internal Wait Counter */
Channel Active */
Abnormal Chain Completion */
Normal Chain Completion */
Normal Transfer Completion */
External Done Asserted */
Configration Error */
Chain Bus Error */
Destination Bus Error */
Source Bus Error */
*/
*/
*/
*/
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
/* ***** Source & Destination Address Increment ***** */
/* ***** Count Register ***** */
/************
* TIMMER
*
************/
/* ***** Timmer Control Register ***** */
#define S_TMTCR
0x00000000
/* Initial Data */
#define TCE
0x00000080
/* Timer Count Enable */
#define CCDE
0x00000040
/* Counter Clock Divide Enable */
#define CRE
0x00000020
/* Counter Reset Enable */
#define ECES
0x00000008
/* External Clock Edge Select */
#define CCS
0x00000004
/* Counter Clock Select */
/* Timer Mode */
#define TMODE_WT 0x00000002
/* Watchdog Timer Mode */
#define TMODE_PG 0x00000001
/* Pulse Generator Mode */
#define TMODE_IT 0x00000000
/* Interval Timer Mode */
/* ***** Timmer Interrupt Status Register ***** */
#define S_TMTISR 0x00000000
/* Initial Data */
#define TWIS
0x00000008
/* Timer Watchdog Interupt Status */
#define TPIBS
0x00000004
/* Timer Pulse Generator Interrupt by CPRB
Status */
#define TPIAS
0x00000002
/* Timer Pulse Generator Interrupt by CPRA
Status */
#define TIIS
0x00000001
/* Timer Interval Interupt Status */
/* ***** Compare Register A ***** */
#define S_TMCPRA 0x00000000
/* Initial Data */
/* ***** Compare Register B ***** */
#define S_TMCPRB 0x00000000
/* Initial Data */
/* ***** Interval Timmer Mode Register ***** */
#define S_TMITMR 0x00000000
/* Initial Data */
#define TIIE
0x00008000
/* Timer Interval Interrupt Enable */
#define TZCE
0x00000001
/* Interval Timer Zero Clear Enable */
/* ***** Divider Register ***** */
#define S_TMCCDR 0x00000000
/* Initial Data */
#define CCD_1
0x00000000
/* Counter clock Divide: 2 の 1 乗分周 */
#define CCD_2
0x00000001
/* Counter clock Divide: 2 の 2 乗分周 */
#define CCD_3
0x00000002
/* Counter clock Divide: 2 の 3 乗分周 */
#define CCD_4
0x00000003
/* Counter clock Divide: 2 の 4 乗分周 */
#define CCD_5
0x00000004
/* Counter clock Divide: 2 の 5 乗分周 */
#define CCD_6
0x00000005
/* Counter clock Divide: 2 の 6 乗分周 */
#define CCD_7
0x00000006
/* Counter clock Divide: 2 の 7 乗分周 */
#define CCD_8
0x00000007
/* Counter clock Divide: 2 の 8 乗分周 */
/* ***** パルスジェネレータモードレジスタ ***** */
#define S_TMPGMR 0x00000000
/* Initial Data */
#define TPIBE
0x00008000
/* Timer Pulse Generator Interrupt by CPRB
Enable */
#define TPIAE
0x00004000
/* Timer Pulse Generator Interrupt by CPRA
Enable */
#define FFI
0x00000001
/* Timer Flip-Flop Initial */
/* ***** ウォッチドッグタイマモードレジスタ ***** */
#define S_TMWTMR 0x00000000
/* Initial Data */
#define TWIE
0x00008000
/* Timer Watchdog Interrupt Enable */
#define WDIS
0x00000080
/* Watchdog Timer Disable */
#define TWC
0x00000001
/* Timer Watchdog Clear */
/* *** タイマリードレジスタ *** */
#define S_TMTRR
0x00000000
/* Initial Data */
/****************
* CHIP CONFIG *
****************/
/* *** Chip Configration Register *** */
/* #define S_CCFG
0x0000
/* Initial Data */
#define CCFG_GHA
0x00040000
/* GBus Half Speed */
#define CCFG_TOF
0x00020000
/* TLB Off(On) */
A-7
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
#define
#define
#define
CCFG_BEW
CCFG_WRS
CCFG_TOE
CCFG_PAB
CCFG_PCI
CCFG_PSN
CCFG_PRI
0x00010000
0x00008000
0x00004000
0x00002000
0x00001000
0x00000800
0x00000400
/* Bus Error on Write */
/* Watchdog Timer for Reset/NMI */
/* Timeout Enable for Bus Error */
/* Internal or External PCI arbiter */
/* PCI Clock Divider Control(1/2) */
/* PCI Bus Request Snoop(Ena. Cache) */
/* Select PCI Arbitration Priority */
/* PLL Offset */
#define CCFG_PLO(off)
((off & 0x00000003) << 8)
/* PLL Gain */
#define CCFG_PLG(gn) ((gn & 0x00000003) << 6)
/* PLL Multiplier */
#define CCFG_PLM(adr)
((adr & 0x00000003) << 4)
#define CCFG_POF
0x00000008
/* PLL Off(ON) */
#define CCFG_END
0x00000004
/* Current Endian Setting of G-Bus */
#define CCFG_HLF
0x00000002
/* System Clock Half-Speed Mode */
#define CCFG_HLD
0x00000001
/* ACE Address Hold */
/* *** Pin Configration Register *** */
#define S_PINCFG
0x00000000
/* Initial Data */
#define S_PIN_ENA
0x0fffffff
/* 全ピンイネーブル指定 */
#define PINC_SCE
0x08000000
/* System Clock Enable */
/* SDRAM Clock Enable */
#define SDCLK_4
0x04000000
/* SDCLK[4] Enable */
#define SDCLK_3
0x02000000
/* SDCLK[3] Enable */
#define SDCLK_2
0x01000000
/* SDCLK[2] Enable */
#define SDCLK_1
0x00800000
/* SDCLK[1] Enable */
#define SDCLK_0
0x00400000
/* SDCLK[0] Enable */
/* SDRAM Clock Enable */
#define PCICLK_3
0x00200000
/* PCICLK[3] Enable */
#define PCICLK_2
0x00100000
/* PCICLK[2] Enable */
#define PCICLK_1
0x00080000
/* PCICLK[1] Enable */
#define PCICLK_0
0x00040000
/* PCICLK[0] Enable */
#define PINC_SCS
0x00020000
/* Select DMA/SDCS_CE Function */
#define PINC_SDF
0x00010000
/* Select DSF Function */
/* Select SIO Control Pins */
#define SELSIOC_1
0x00008000
/* Select the Function CTS[1]/PIO[2]
and RTS[1]/PIO[1]/DSF. */
#define SELSIOC_0
0x00004000
/* Select the Function CTS[0]/INT[5]
and RTS[0]/INT[4] */
/* Select SIO/PIO function Select */
#define SELSIO_1
0x00002000
/* Select the Function RXD[1]/PIO[6]
and TXD[1]/PIO[5] */
#define SELSIO_0
0x00001000
/* Select the Function RXD[0]/PIO[4]
and TXD[0]/PIO[3] */
/* Select Timer PIO function Select */
#define SELTMR_2
0x00000800
/* Select the Function */
#define SELTMR_1
0x00000400
/* Select the Function */
#define SELTMR_0
0x00000200
/* Select the Function */
/* Select DMADONE/PIO */
#define SELDONE
0x00000100
/* Select the Function */
/* Internal/Extarnal DMA Source Connection */
#define INTDMA_3
0x00000080
/* DMAREQ/ACK[3] connect to SIO[1] TXREQ/ACK */
#define INTDMA_2
0x00000040
/* DMAREQ/ACK[3] connect to SIO[0] TXREQ/ACK */
#define INTDMA_1
0x00000020
/* DMAREQ/ACK[3] connect to SIO[1] RXREQ/ACK */
#define INTDMA_0
0x00000010
/* DMAREQ/ACK[3] connect to SIO[1] RXREQ/ACK */
/* Select DMA/PIO/TIMER Function
*/
#define DMAREQ_3
0x00000008
/* Used to select the function of
DMAREQ[3]/PIO[15]/TIMER[1]
DMAACK[3]/PIO[14]/TIMER[0] */
#define DMAREQ_2
0x00000004
/* Used to select the function of
DMAREQ[2]/PIO[13]
DMAACK[2]/PIO[12] */
#define DMAREQ_1
0x00000002
/* Used to select the function of
DMAREQ[1]/PIO[11]
DMAACK[1]/PIO[10] */
A-8
付録 A TX3927 プログラミングサンプル集
#define DMAREQ_0
0x00000001
/* Used to select the function of DMAREQ[0]/PIO[9]
DMAACK[0]/PIO[8] */
/* *** Power Down Control Register *** */
/* interrupt signals wake from power down mode */
#define PDNMSK_NMI
0x00800000
#define PDNMSK_INT5 0x00400000
#define PDNMSK_INT4 0x00200000
#define PDNMSK_INT3 0x00100000
#define PDNMSK_INT2 0x00080000
#define PDNMSK_INT1 0x00040000
#define PDNMSK_INT0 0x00020000
/* Power Down Trigger */
#define PDN
0x00010000
/* PIO Output Direction */
#define PIO_0
0x00000001
#define PIO_1
0x00000002
#define PIO_2
0x00000004
#define PIO_3
0x00000008
#define PIO_4
0x00000010
#define PIO_5
0x00000020
#define PIO_6
0x00000040
#define PIO_7
0x00000080
#define PIO_8
0x00000100
#define PIO_9
0x00000200
#define PIO_10
0x00000400
#define PIO_11
0x00000800
#define PIO_12
0x00001000
#define PIO_13
0x00002000
#define PIO_14
0x00004000
#define PIO_15
0x00008000
/* PIO Open Drain Mode */
#define ALL_TOTEM
0x0000ffff
/* PIO All Totem-pole Mode */
/************
* SIO
*
************/
/* *** Line Control Register *** */
#define S_SILCR
0x4000
#define SILC_RWUB
0x8000
#define SILC_TWUB
0x4000
#define SILC_UODE
0x2000
#define SILC_HS_CTS 0x0100
#define SILC_SCS_I
0x0000
#define SILC_SCS_B
0x0020
#define SILC_SCS_E
0x0040
#define SILC_UPE_ODD 0x0010
#define SILC_UPE_EVN 0x0008
#define SILC_UPE_NON 0x0000
#define SILC_U2STOP 0x0004
#define SILC_UM_8
0x0000
#define SILC_UM_7
0x0001
#define SILC_UM_M8
0x0002
#define SILC_UM_M7
0x0003
/* *** DMA/Interrupt Control Register
#define S_SILSR
0x0000
#define TDR
0x8000
#define RDR
0x4000
#define TIR
0x2000
#define RIR
0x1000
#define SPIR
0x0800
/* CTSS Status active condition */
#define CTS_DIS 0x0000
#define CTS_UEG 0x0200
#define CTS_DEG 0x0400
#define CTS_BEG 0x0600
A-9
/* Initial Data */
/* Wake Up Bit for Recive */
/* Wake Up Bit for Transmit */
/* SOUT Open Drain Enable */
/* Hand Shake Enable(CTS) */
/* SIO Clock Select: T0(内部システムクロック) */
/* SIO Clock Select: ボーレートジェネレータ */
/* SIO Clock Select: 外部クロック(SLCK) */
/* UART Parity Odd */
/* UART Parity Enable */
/* UART Parity Non */
/* UART 2 Stop Bit */
/* UART MODE: 8bit データ長 */
/* UART MODE: 7bit データ長 */
/* UART MODE: マルチコントローラ 8bit データ長 */
/* UART MODE: マルチコントローラ 7bit データ長 */
*** */
/* Initial Data */
/* Tran. DMA Request(Enable)
*/
/* Rsv. DMA Request(Enable)
*/
/* Tran. Interrupt Request(Enable) */
/* Rsv. Interrupt Request(Enable) */
/* Sp.
Interrupt Request(Enable) */
/*
/*
/*
/*
Disable
Rising Edge od CTS
Falling Edge of CTS
Both Edge of CTS
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
/* Status Change Interrupt Enable */
#define STIE_OVE 0x0020
/* Overrun Error Status
*/
#define STIE_CTS 0x0010
/* CTS Terminal Status
*/
#define STIE_RBK 0x0008
/* Receive Break
*/
#define STIE_TRD 0x0004
/* Transmit Ready
*/
#define STIE_TXA 0x0002
/* Transmit All Sent
*/
#define STIE_UBK 0x0001
/* UART Break Detect
*/
/* *** DMA/Interrupt Status Register *** */
#define S_SIDISR 0x4100
/* Initial Data */
#define SIDI_UBK 0x8000
/* UART Break Detect
*/
#define SIDI_UVA 0x4000
/* UART Alailable Data
*/
#define SIDI_UFE 0x2000
/* UART Frame Error
*/
#define SIDI_UPE 0x1000
/* UART Parity Error
*/
#define SIDI_UOE 0x0800
/* UART Overrun Error
*/
#define SIDI_ERI 0x0400
/* Error Interrupt
*/
#define SIDI_TOU 0x0200
/* Time Out
*/
#define SIDI_TEMP 0x0100
/* Transmit DMA/Interrupt Status
*/
#define SIDI_RFUL 0x0080
/* Receive DMA/Interrupt Status
*/
#define SIDI_STI 0x0040
/* Status Change Interrupt Status */
/* *** Status Change Interrupt Status Register *** */
#define S_SICISR 0x0006
/* Initial Data */
#define SICI_OVE 0x0020
/* Overrun Error Ditecte
*/
#define SICI_CTS 0x0010
/* CTS Terminal Status(Signal High) */
#define SICI_RBK 0x0008
/* Receive Break
*/
#define SICI_TRD 0x0004
/* Transmit Ready
*/
#define SICI_TXA 0x0002
/* Transmit All Sent
*/
#define SICI_UBK 0x0001
/* UART Break Ditecte
*/
/* *** FIFO Control Register *** */
#define S_SIFCR
0x0000
/* Initial Data */
#define SISF_RDL 0x0010
/* Receive FIFO DMA Request Triger Level */
#define SISF_TDL 0x0008
/* Transfer FIFO DMA Request Triger Level */
#define SISF_TFR 0x0004
/* Transmit FIFO Reset
*/
#define SISF_RFR 0x0002
/* Receive FIFO Reset
*/
#define SISF_FRS 0x0001
/* FIFO Reset Enable
*/
/* *** FLOW Control Register *** */
#define S_SIFLCR
0x0182
/* Initial Data */
#define SIFL_RCS
0x1000
/* RTS Control Select
*/
#define SIFL_TES
0x0800
/* Transmit Enable Select */
#define SIFL_RTS
0x0200
/* RTS Software Control
*/
#define SIFL_RSE
0x0100
/* Receive Serial Data Enable
*/
#define SIFL_TSE
0x0080
/* Transmit Serial Data Enable
*/
/* RTS Trigger Level (1∼15)
*/
#define SIFL_RTSTL(lvl) ((lvl & 0xf) << 1)
#define SIFL_TBK
0x0001
/* Break Transmit(Enable) */
/* *** Baud Rate Generator Clock *** */
#define S_SIBGR
0x03FF
/* Initial Data */
#define BCLK_FC4(n) (0x0000|(n&0xff)) /* Select Prescalar Output T0(fc/4)
*/
#define BCLK_FC16(n) (0x0100|(n&0xff)) /* Select Prescalar Output 2(fc/16)
*/
#define BCLK_FC64(n) (0x0200|(n&0xff)) /* Select Prescalar Output T4(fc/64)
*/
#define BCLK_FC256(n) (0x0300|(n&0xff)) /* Select Prescalar Output T6(fc/256)
*/
/************************
* Data Format Table
*
************************/
/* ************ *
* DMA
*
* ************ */
typedef struct {
volatile int CHAR;
volatile int SAR; /* *****
volatile int DAR;
volatile int CTR;
volatile int SAI; /* *****
volatile int DAI; /* *****
volatile int CCR;
/* ***** チェーンアドレスレジスタ ***** */
ソースアドレスレジスタ ***** */
/* ***** ディスティネーションアドレスレジスタ ***** */
/* ***** カウントレジスタ ***** */
ソースアドレスインクリメントレジスタ ***** */
ディスティネーションアドレスインクリメントレジスタ ***** */
/* ***** コントロールレジスタ ***** */
A-10
付録 A TX3927 プログラミングサンプル集
volatile int CSR;
} DMA;
/* ***** ステータスレジスタ ***** */
/* ************ *
* INTR
*
* ************ */
typedef struct {
volatile int IRDER;
/* ***** Interrupt Detect Enable Register *****
*/
volatile int IRDMR[2];
/* ***** Interrupt Detect Mode Register ***** */
int
tmp1;
volatile int IRILR[8];
/* ***** Interrupt Level Register ***** */
volatile int dummy23[4];
volatile int IRIMR;
/* ***** Interrupt Mask Register ***** */
volatile int dummy24[7];
volatile int IRSCR;
/* ***** Interrupt Status Control Register ***** */
volatile int dummy25[7];
volatile int IRSSR;
/* ***** Interrupt Source Register ***** */
volatile int dummy26[7];
volatile int IRCSR;
/* ***** Interrupt Current Register ***** */
char
tmp9[0xd000-0xc0a4];
} INTR;
/* ************ *
* PCI
*
* ************ */
typedef struct{
/* PCI Configration Hader */
int
DID;
int
PCISTAT; /* Status reg.*/
#define DECPE
0x80000000
/*Detected Parity Error(write clear)*/
#define SIGSE
0x40000000
/*Signaled System Error(write clear)*/
#define RECMA
0x20000000
/*Received Master Abort(write clear)*/
#define RECTA
0x10000000
/*Received Target Abort(write clear)*/
#define SIGTA
0x08000000
/*Signaled Target Abort(write clear)*/
#define PERPT
0x01000000
/*Parity Error Reported(write clear)*/
#define FBBCP
0x00800000
/*Fast Back-to-Back Capabe*/
#define USPCP
0x00200000
/*USPCP bit field*/
/* Command reg.*/
#define FBBEN
0x00000200
/*Fast Back-to-Back Enable*/
#define SEEN
0x00000100
/*SERR Enable*/
#define PEREN
0x00000040
/*PERR Enable*/
#define MWIEN
0x00000010
/*Memory Write and Invalidate Enable*/
#define SCREC
0x00000008
/*Special Cycle Recognition*/
#define MEN
0x00000004
/*Master Enable*/
#define MACEN
0x00000002
/*Memory Access Enable*/
#define IACEN
0x00000001
/*I/O Access Enable*/
int
CC;
int
INF;
int
IOBA,MBA,BA2,BA3,BA4,BA5;/* chenge MBA<->IOBA tanka 990429 */
int
non[2];
int
EXTIOBA;
int
non2[2];
int
ML;
}PCI_CONF;
typedef struct{
/* PCI initiator Configuration */
int
IC;
/* Initiator Control register */
int
ISTAT;
/* initiator Status register */
int
IIM;
/* IInitiator Interrupt Mask register */
int
RRT;
/* Retry/Reconnect Timer Register */
int
tmp1[3];
int
IPBMMAR; /* Initiator Local bus IO
Mapping register */
int
IPBIOMAR;
/* Initiator Local bus Memory Mapping register */
int
ILBMMAR; /* Initiator PCI bus IO
Mapping register */
A-11
付録 A TX3927 プログラミングサンプル集
int
ILBIOMAR;
/* Initiator PCI bus Memory Mapping register */
char
tmp2[0x90-0x6c];
}PCI_ICONF;
typedef struct{
/* PCI target Configuration */
int
TC;
/* Target Control register */
int
TSTAT;
/* Target status register */
int
TIM;
/* Target Interrupt Mask register */
int
TCCMD;
/* Target Current Command register */
int
PCIRRT;
/* PCI Read Retry Tag register */
int
PCIRRT_CMD;
/* PCI Read Retry Timer Command Register */
int
PCIRRDT; /* PCI Read Retry Discard Timer register */
int
tmp1[3];
int
TLBOAP;
/* Traget Local bus Output FIFO Address Pointer */
int
TLBIAP;
/* Target Local bus Input FIFO Address Pointer */
int
TLBMMA;
/* Target Local bus Memory Mapping Address register */
int
TLBIOMA; /* Target Local bus IO
Mapping Address register */
int
SC_MSG;
/* Special Cycle Message register */
int
SC_BE;
/* Special Cycle Byte Enable register */
int
TBL;
/* Target Barst Length */
char
tmp2[0x100-0xd4];
}PCI_TCONF;
typedef struct{
/* PCI bus Arbiter/Park */
int
REQ_TRACE;
/* Request Trace register */
int
PBAPMC;
/* PCI Bus Arbiter/Park Master Control register */
#define
BARST
0x04
/* Reset Bus Arbiter */
#define
BAENA
0x02
/* Enable Bus Arbiter */
#define
MBCENA
0x01
/* Broken Master Check Enable */
int
int
int
int
int
int
}PCI_EXT;
PBAPMS;
/* PCI Bud Arbiter/Park Master Status register */
PBAPMIM; /* PCI Bus Arbiter/Park Master Interrupt Mask register */
BM;
/* Broken Master register */
CPCIBRS; /* Current PCI bus Request egister */
CPCIBGS; /* Current PCI bus Grant Status register */
PBACS;
/* Current PCI bus Arbiter Status register */
typedef struct{/* PCI local bus */
int
IOBAS;
/* Target IO
Base Address Register */
int
MBAS;
/* Target Memory Base Address Register */
int
#define
#define
#define
#define
#define
#define
#define
LBC;
HRST
SRST
EPCAD
MSDSE
CRR
ILMDE
ILIDE
#define TPIIC
int
int
int
#define
#define
#define
#define
#define
int
int
/* Local
0x00000800
0x00000400
0x00000200
0x00000100
0x00000080
0x00000040
0x00000020
0x00000010
LBSTAT;
LBIM;
PCISTATIM;
LS_PERR 0x20
LS_SERR 0x10
LS_GERR 0x08
LS_IAS
0x04
LS_RST
0x02
ICAR;
ICDR;
bus Control register */
/*Hard Reset*/
/*Soft Reset*/
/*External PCI Configuration Access Disable*/
/*Memory Space Dynamic Swap Enable*/
/*Configuration Registers Ready for Access*/
/*Initiator Local Bus Memory Address Space Decoder Enable*/
/*Initiator Local Bus I/O Address Space Decoder
Enable*/
/*Test PCI I/O Buffer Idd Current*/
/* Local bus Status register */
/* Interrupt Mask register */
/* Interrupt Mask Status register */
/* Initiator Configuration Address register */
/* Initiator Configuration Data register */
A-12
付録 A TX3927 プログラミングサンプル集
int
int
IIADP;
ISCDP;
/* Initiator Interrupt Acknowledge Data Port register */
/* Initiator Special Cycle Data Port registro */
int
int
MMAS;
IOMAS;
/* Initiator Memory Mapping Address registor */
/* Initiator IO
Mapping Address register */
int
int
int
}PCI_LSP;
IPCIADDR;/* Initiator Indirect Address register */
IPCIDATA;/* Initiator Indirect Data register */
IPCICBE;/* initiator Indirect Command/Byte Enable register */
/* ************ *
* TMR
*
* ************ */
typedef struct {
volatile int TMTCR;
volatile int TMTISR;
volatile int TMCPRA;
volatile int TMCPRB;
volatile int TMITMR;
volatile int dummy1[3];
volatile int TMCCDR;
volatile int dummy2[3];
volatile int TMPGMR;
volatile int dummy3[3];
volatile int TMWTMR;
volatile int dummy4[43];
volatile int TMTRR;
volatile int dummy5[3];
} TMR;
/*
/*
/*
/*
/*
タイマコントロールレジスタ */
タイマ割り込みステータスレジスタ */
コンペアレジスタ A */
コンペアレジスタ B */
インターバルタイマモードレジスタ */
/* 分周レジスタ */
/* パルスジェネレータモードレジスタ */
/* ウォッチドッグタイマモードレジスタ */
/* タイマリードレジスタ */
/* ************ *
* SIO
*
* ************ */
typedef struct {
volatile int SILCR;
volatile int SIDICR;
volatile int SIDISR;
volatile int SISCISR;
volatile int SIFCR;
volatile int SIFLCR;
volatile int SIBGR;
volatile int SITFIFO;
volatile int SIRFIFO;
char
dumy[0x100-0x24];
} SIO;
/* little */
#if 0
/* 0xfffe8000
* SDRAM Channel Control Register */
volatile int SDRAMC[8];
/* 0x1fc00000(0x00000000)...ベースアドレス
#endif
/********************/
/*TX3927 レジスタマップ*/
/********************/
typedef struct {
/* 0xfffe8000
* SDRAM Channel Control Register */
volatile int SDRAMC[8];
volatile int SDCTR1;
/* SDRAM Shard Timming Register
volatile int SDCTR2;
/* FLASH Shard Timming Register
volatile int SDCTR3;
/* SMROM Shard Timming Register
volatile int SDCCMD;
/* SDRAM Command Register
volatile int SDCSMRS1;
/* SGRAM Load Mask Register
A-13
*/
*/
*/
*/
*/
*/
付録 A TX3927 プログラミングサンプル集
volatile
char
/* 0xfffe9000
ROMCC
char
/* 0xfffeb000
DMA
volatile
volatile
volatile
char
/* 0xfffec000
INTR
int SDCSMRS2;
/* SGRAM Load Color Register
tmp1[0x9000-0x8000-0x38];
*
ROM Channel Control Register *** */
ROMC[8];
tmp2[0xb000-0x9000-sizeof(ROMCC)*8];
*
DMA Register *** */
DREG[4]; /* Data Buffer Register
int DBR[8];
/* Temporaly Data Holding Register
int TDHR;
/* Muster Control Register
int DMACR;
tmp3[0xc000-0xb0a8];
<<Interrupt Controller>>*/
IREG;
*/
*/
*/
*/
/* 0xfffed000
*
<< PCI Controller>> */
PCI_CONF pci_conf;
PCI_ICONF
pci_iconf;
PCI_TCONF
pci_tconf;
PCI_EXT
pci_ext;
PCI_LSP
pci_lsp;
char
tmp10[0xe000-0xd15c];
/* 0xfffee000
Chip Configuration Register *** */
volatile int CCFG;
/* Chip Revision ID Register
*/
volatile int CREVID;
/* Pin Configration Register
*/
volatile int PINCFG;
/* Timeout Error Register
*/
volatile int TMOUTERR;
/* Power Down Control Register
*/
volatile int PDNCTL;
volatile int dummy29[1019];
/* 0xfffef000
Timmer Register *** */
TMR TREG[3];
/* 0xfffef300
SIO Register *** */
SIO SREG[2];
/* 0xfffef500
PIO Register *** */
volatile int PIODO;
/* PIO Output Register
*/
volatile int PIODI;
/* PIO Input Register
*/
volatile int PIODIR;
/* PIO Direction Control Register */
volatile int PIOOD;
/* PIO Open Drain Control Register */
volatile int PIOFLAG0;
/* PIO Flag Register
*/
volatile int PIOFLAG1;
/* PIO Flag Register
*/
volatile int PIOPOL;
/* PIO Flag Polarity Control Register
volatile int PIOINT;
/* PIO Interrupt Control Register */
volatile int PIOMASKCPU;
/* CPU Interrupt Mask Register
*/
volatile int PIOMASKEXT;
/* External Interrupt Mask Register
char
tmp12[0x10000-0xf528];
}TX3927;
/* *** Physical Address *** */
#define CPUReg ((TX3927 *)0xfffe8000)
/* ***** End Of File "tx3927.h" ***** */
#endif
A-14
*/
*/
付録 A TX3927 プログラミングサンプル集
A.2.2
スタートルーチン
これは TX3904 の例ですが、コアのパワーオン(リセット)からユーザールーチン(main)に制
御を渡すまでの簡単な例です。アプリケーションを ROM 化する場合、リセットベクタ領域に
置かれるプログラムにあたります。
プログラムの流れは以下のようになっています。
<リセットベクタ処理>
•
NMI/RESET の判定
•
メモリコントローラの初期化(boot_initreg)
•
Bss 領域のゼロ初期化 (boot_memset 使用)
•
data セクションの初期値を ROM から RAM へコピー(boot_memcpy 使用)
(*)メモリ書き込みの後はキャッシュとメモリの同期をとる処理をいれています。
(boot_synccache)
•
キャッシュの有効化
•
gp、sp、pid_base レジスタの設定
•
main へのジャンプ
リセットベクタ以外の例外ベクタはダミーで実装(ダミーループ)されています。
TX39 の場合、コアが最低限動くために絶対に必要な設定項目というのは特にありません。
(COLDRESET でキャッシュは全て無効ですし、TLB エントリーも全て無効です)上記の処理
は elf 形式の object ファイルのアプリケーションで汎用的な処理で、コーディングスタイルは
使用するコンパイラに強く依存することになります。
TX3927 ではメモリコントローラの設定、キャッシュ操作が変更になっていますので、他の
節を御参照ください。
(注)
この例では GHS コンパイラを使用しており、GHS のリンカが自動的に生成するシンボルやテー
ブルを使用してコーディングがなされています。
具体的には __ghs で始まる以下のシンボルを使用しています。
__ghsbinfo_clear, __ghseinfo_clear
__ghsbinfo_copy, __ghseinfo_copy
__ghsbegin_sdabase
__ghsend_stack
初期化領域テーブルの開始・終了アドレス
データ初期値テーブルの開始・終了アドレス
SDA 領域の最下位アドレス
スタックの最上位アドレス
他のコンパイラを使う場合には、これらのシンボルは使用できませんし、GHS コンパイラでもバー
ジョンによってはシンボルの使用方法が異なるものがあります。GHS のコンパイラには crt0 の
ソースプログラムが付属していますので、そちらを御参考にされることをお勧めいたします。
また、Cygnus GNUPro では、このようなシンボルの自動生成は行われませんが、ユーザーがリン
カスクリプトファイルを記述することで、任意のシンボルを定義することができますので、それ
らのシンボルを使用して同様の処理を行うことができます。
■ ファイル名: Boot.mip
# $Id$
#
# ROM Boot Routine for TX3904
#
Copyright(c) 1998 TOSHIBA Corp.
#
# Depend on GHS Cross MIPS Compiler ver.1.8.8
A-15
付録 A TX3927 プログラミングサンプル集
#
.file "boot.mip"
.section ".boot",.text
.set noreorder
$status=$12
$config=$3
/* $k0=$26 */
/* $k1=$27 */
# -----------------------------------------------------------------------# Exception Vector
# -----------------------------------------------------------------------.globl ResetVector
ResetVector:
# Reset and NMI vector
j
boot_main
nop
.word
Revision /* Required by Test Monitor on JMR-TX3904 */
Revision:
.byte
"ApplicationName ver.0.01"
.offset 0x100
UtlbExcVector:
1: b
1b
nop
.offset 0x180
GeneralExcVector:
1: b
1b
nop
.offset 0x200
DebugExcVector:
1: b
1b
nop
.offset 0x300
# -----------------------------------------------------------------------# Boot Main Routine
# -----------------------------------------------------------------------boot_main:
# Check NMI
mfc0
$k1,$status
nop
srl
$k1,$k1,16
andi
$k1,$k1,0x1
# select NMI bit
beq
$k1,$0,1f
# go ahead if not NMI
nop
jal
NMIHandler
nop
1:
# Initialize ROMC and RAMC and Etc.
jal
boot_initreg
nop
# Copy Rom Image into Ram and Sync Cache
# Clear bss area with zero
lui
$16,%hi(__ghsbinfo_clear)
addiu
$16,$16,%lo(__ghsbinfo_clear)
lui
$17,%hi(__ghseinfo_clear)
addiu
$17,$17,%lo(__ghseinfo_clear)
b
2f
nop
# delay slot
1: addi
$16,$16,4
lw
$5,0($16)
addi
$16,$16,4
A-16
付録 A TX3927 プログラミングサンプル集
lw
jal
addi
lw
addi
lw
jal
addi
2: bne
lw
$6,0($16)
boot_memset
$16,$16,-8
$4,0($16)
$16,$16,8
$5,0($16)
boot_synccache
$16,$16,4
$16,$17,1b
$4,0($16)
# delay slot
# delay slot
# delay slot
# Copy Rom to Ram
lui
$16,%hi(__ghsbinfo_copy)
addiu
$16,$16,%lo(__ghsbinfo_copy)
lui
$17,%hi(__ghseinfo_copy)
addiu
$17,$17,%lo(__ghseinfo_copy)
b
2f
nop
# delay slot
1: addi
$16,$16,4
lw
$5,0($16)
addi
$16,$16,4
lw
$6,0($16)
jal
boot_memcpy
addi
$16,$16,-8
# delay slot
lw
$4,0($16)
addi
$16,$16,8
lw
$5,0($16)
jal
boot_synccache
addi
$16,$16,4
# delay slot
2: bne
$16,$17,1b
lw
$4,0($16)
# delay slot
# Cache
mfc0
nop
ori
mtc0
j
nop
ON
$k1,$config
$k1,$k1,0x30
$k1,$config
3f
3:
# Set Global Pointer
lui
$gp, %hi(__ghsbegin_sdabase)
addiu
$gp, $gp, %lo(__ghsbegin_sdabase)
addiu
$gp, $gp, 0x4000 # Add 32K to $gp
addiu
$gp, $gp, 0x4000
# set gp
# Clear PIC Pointer($23) with zero
addi
$23,$0,$0
# Set Stack Pointer
lui
$sp, %hi(__ghsend_stack)
# set sp
addiu
$sp, $sp, %lo(__ghsend_stack)
# Jump into Entry Point of Program
lui
$4,%hi(main)
addiu
$4,$4,%lo(main)
jr
$4
nop
# -----------------------------------------------------------------------# SyncCache Routine
# void boot_synccache(void* addr, unsigned size)
# -----------------------------------------------------------------------boot_synccache:
mfc0
$2,$config
A-17
付録 A TX3927 プログラミングサンプル集
li
$3,0xffffffcf
and
$3,$2,$3
mtc0
$3,$config
j
1f
nop
1: add
$5,$5,$4
2: bge
$4,$5,3f
nop
.align 16
cache
0,0($4)
nop
.align 16
cache
1,0($4)
j
2b
addi
$4,$4,4
3: mtc0
$2,$config
jr
$31
nop
# -----------------------------------------------------------------------# NMI handler
# -----------------------------------------------------------------------NMIHandler:
1: b
1b
nop
A-18
付録 A TX3927 プログラミングサンプル集
A.2.3
メモリコントローラ設定(SDRAM)
TX3927 の評価ボード(東芝情報システム(株)製。以下、JMR-TX3927 と記述します)での
SDRAMC の設定例です。
(念のための)最初の時間稼ぎダミーループとコマンドシーケンスを参考にしてください。
JMR-TX3927 では 1M × 16 ビット × 4 Bank のメモリ(TC59S6416BFTL-80)を 2 個使用し
て 32 ビット幅で 16MB のメモリを搭載しています。
メモリは物理アドレス 0 から割り付けられます。
TC59S6416BFTL-80 のデータシートから設定に必要なデータを抜粋します。
p1: 4K リフレッシュサイクル/64ms
--------(a)
(4096 ROW 分のリフレッシュ)
p3: 4096 x 256
x16 のセルアレイ
--------(b)
(Row) (Colum) (bit)
p6: tRC MIN 64ns
--------(c)
tRAS MIN 48ns MAX 100000ns
--------(d)
tRCD MIN 20ns
--------(e)
tRP MIN 20ns
--------(f)
tWR MIN 10ns (CL=2)
--------(g)
p29 アドレス入力(ローA0-A11,カラム A0-A7)
--------(b)
また、TX3927 が 133MHz 動作のとき、SDRAM のクロックは 66MHz (1CLK = 15ns)とな
ります。
サンプルの設定値は以下のようになっています。
SDCCR0
SDBA0 = 0x0000
SDM0 = 0 (SDRAM)
SDE0 = 1 (Enable)
SDBS0 = 1 (4 Bank)
SDAM0 = 0x000e (16MB)
SDRS0 = 1 (4096 Row)
...........(b)
SDCS0 = 0 (256 Column)
...........(b)
SDMW0 = 0 (32bit 幅)
SDCTR1
SDBC1 = 0 (5tCK = 75ns )
.........(c)
SDACP1 = 1 (4tCK = 60ns )
.........(d)
SDP1 = 0 (2tCK = 30ns)
..........(f)
SDCD1 = 0 (2tCK = 30ns)
..........(e)
WRT1 = 0 (1tCK = 15ns)
..........(g)
SDRC1 = 0 (カウンタは使用しない)
A-19
付録 A TX3927 プログラミングサンプル集
CASL1 = 0 (2Tck)
TX3927 の場合はバスクロックが 66MHz しかないので、
CL=2 としておけば問題になることはまずありません。
DRB1 = 1 TX3927
SDRAMC 固有の設定です。基本的には AC 特性的に厳しい
ときに 1 にします。
0 で動作しないものが 1 で動作することはありますが、逆はありませんので、このような設
定にしています。
SWB1 = 0 スローライトバーストは通常使用しません。
BW1 = 0 (SDRAM では使用しないビットです)
WpB1 = 0 (SDRAM では使用しないビットです)
SDRP1 = 0x400 (15.5us)
64ms/4096 = 15.625us <1Row のリフレッシュ時間>
15.625us/15ns = 1041.7 = 0x411(CLK)
(*)リフレッシュサイクルには余裕がありますのであまり厳密に設定する
必要はありません。
SDCCMD
Command #1
SDCMSK3 = 1 (Channel 0 )
SDCMD3 = 3 (All Bank Pre-charge )
Command #2
SDCMSK3 = 1 (Channel 0 )
SDCMD3 = 1 (Mode Register write)
■ ファイル名: sdramc.s
/*Wait for about 200us to make SDRAM ready when core speed 200Mhz */
/*
li
$9, 4000000
/*TX3927*/
li
$9, 800000
li
$8, 0x00000000
sdram:
bne
$9, $8, sdram
addiu
$8, $8, 1
/*initialize SDRAMC*/
la
$8, 0xfffe8000
li
$9, 0x000300e8
sw
$9, 0x00($8)
/*SDRAM0*/
la
li
sw
$8, 0xfffe8020
$9, 0x08010400
$9, 0x00($8)
/*shared Timing Reg*/
la
li
sw
$8, 0xfffe802c
$9, 0x00000013
$9, 0x00($8)
/*command Reg*/
/*all refresh */
li
sw
$9, 0x00000011
$9, 0x00($8)
/* mode set */
A-20
付録 A TX3927 プログラミングサンプル集
A.1.1
割り込み処理プログラム
簡単な割り込み処理のサンプルです。特定のデバイスの割り込み処理ルーチンではなく、各
割り込みの判別と分岐の仕方の例になっています。
TX3927 の割り込みは TX39 コアの例外/割り込み処理と TX3927 割り込みコントローラの処
理の二段がまえになっていますので、「TX39/H2 コア アーキテクチャ」のマニュアルと
「TMPR3927 の割り込みコントローラ」の章を参照してください。
ここでは事前に swIntVector という配列に各例外/割り込みに対応した処理ルーチン(c で記
述されたものを想定しています)のアドレスが格納されているものとしています。
配列 swIntVect は以下のように初期化されている必要があります。
swIntVect[ 0]-[12] :
Cause レジスタの ExCode(0-12) に対応
swIntVect[13]-[14] :
ソフトウエア割り込みに対応
swIntVect[15]-[30] :
割り込みコントローラでエンコードされた
Cause レジスタの IP[4:0] (0-15)に対応
swIntVect の設定ルーチンと割り込みを許可するための関数の例を以下に示します。
■ ファイル名: intttx3927.c
/**********************************************************/
/* TX3927 Interrupt information
*/
/**********************************************************/
typedef int (*VINTFUNC)(void);
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
CPUEXC_BASE
INTNO_Int
INTNO_Mod
INTNO_TLBL
INTNO_TLBS
INTNO_AdEL
INTNO_AdES
INTNO_IBE
INTNO_DEB
INTNO_Sys
INTNO_Bp
INTNO_RI
INTNO_CpU
INTNO_Ov
INTNO_SW0
INTNO_SW1
TX3927INT_BASE
INTNO_TMR2
INTNO_TMR1
INTNO_TMR0
INTNO_NU0
INTNO_NU1
INTNO_PCI
INTNO_PIO
INTNO_DMA
INTNO_SIO1
INTNO_SIO0
INTNO_INT5
INTNO_INT4
INTNO_INT3
INTNO_INT2
INTNO_INT1
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(CPUEXC_BASE+15)
(TX3927INT_BASE+15)
(TX3927INT_BASE+14)
(TX3927INT_BASE+13)
(TX3927INT_BASE+12)
(TX3927INT_BASE+11)
(TX3927INT_BASE+10)
(TX3927INT_BASE+9)
(TX3927INT_BASE+8)
(TX3927INT_BASE+7)
(TX3927INT_BASE+6)
(TX3927INT_BASE+5)
(TX3927INT_BASE+4)
(TX3927INT_BASE+3)
(TX3927INT_BASE+2)
(TX3927INT_BASE+1)
A-21
/* JMR-TX3927: m pin
*/
/*
: m pin
*/
/*
: 100M,10M ether */
/*
: ISA
*/
/*
: IOC
*/
付録 A TX3927 プログラミングサンプル集
#define
INTNO_INT0
(TX3927INT_BASE+0)
#define
MAXINT_TABLE
(TX3927INT_BASE+16)
VINTFUNC
swIntVector[MAXINT_TABLE];
/*
: PCI INTA,C 10M? */
/*****************************************/
/* 仮想割り込みベクタの登録
*/
/*****************************************/
VINTFUNC setIntVect(int no,VINTFUNC func)
{
VINTFUNC ret;
ret = swIntVector[no];
swIntVector[no] = func;
return ret;
}
/*****************************************/
/* 割り込み処理の初期化
*/
/*****************************************/
#define
GINT_VECT
0x80000080
/* 割り込みベクタ番地 */
extern int org_GINT_VECT(void);
/* 割り込みベクタの先頭プログラム */
(アセンブラ記述ルーチン)
/*
*/
extern int org_EXT_INT_VECT(void);/* 外部割込み(Excode=0)の処理ルーチン */
(アセンブラ記述ルーチン)
/*
*/
extern int size_org_GINT_VECT ;
int size = (int)(&size_org_GINT_VECT) ;
int intInt(void)
{
memcpy((void *)GINT_VECT,org_GINT_VECT,size);
setIntVect(INTNO_Int,org_EXT_INT_VECT);
CPUReg->IREG.IRDER = 1;
/* 割り込みコントローラの割り込み許可 */
CPUReg->IREG.IRIMR = 1;
/* INT0 割り込み High レベル設定 */
setstatus(~SR_BEV,SR_IE | 0xff00); /* ステータスレジスタ割り込み許可 */
return 0;
}
実際の割り込み処理ルーチンのアセンブラ記述例を以下に示します。
■ ファイル名: aintcosmp.S
/********************************************************************
TX3927 割り込み処理 アセンブラモジュール
org_GINT_VECT:
一般例外処理の入り口。テーブルを使って処理ルーチンに制御を移す。
# go swIntVector[C0_CAUSE]
return_GINTVECT:
org_GINT_VECT から呼び出した処理ルーチンが割り込みもとに戻る処理。
# retuen GINT
org_EXT_INT_VECT:
外部割り込み処理分岐処理。org_GINT_VECT の0の処理
TX3927 の外部割り込みステータス(PI)でで分岐先を決める
A-22
付録 A TX3927 プログラミングサンプル集
戻り値が0のとき割り込まれた番地に戻る。0でなければ、元の割り込みベクタに戻る
多重割り込みをサポートする。
# go &(swIntVector[TX3927INT_BASE])[IP]。
********************************************************************/
.text
.set
.set
.set
mips1
noreorder
noat
/* -----------------------------------------------------------------*/
/* TX3927 の一般割り込み処理の入り口 cause レジスタ excCode の値で分岐
*/
/* -----------------------------------------------------------------*/
.globl org_GINT_VECT
.globl size_org_GINT_VECT
.ent org_GINT_VECT
org_GINT_VECT:
# go swIntVector[C0_CAUSE]
mfc0
k0,C0_CAUSE
nop
andi
k0,0x7c
# isolate exception code
la
k1,swIntVector
tablejmp:
add
k0,k1,k0
# offset of VSR entry
tablejmp2:
lw
k0,0(k0)
# ke = pointer to vsr
jr
k0
# jump into virtual vector handler
nop
/* ----------------------------------------------------------------*/
/* 分岐先から割り込み元に戻る時の処理
*/
/* ----------------------------------------------------------------*/
.globl return_GINT_VECT
return_GINTVECT:
# retuen GINT
mfc0
k1, C0_EPC
nop
jr
k1
rfe
nop
end_org_GINT_VECT:
.equ
size_org_GINT_VECT,end_org_GINT_VECT-org_GINT_VECT
.end org_GINT_VECT
/* -----------------------------------------------------------------*/
/* 割り込み用スタックの定義
*/
/* -----------------------------------------------------------------*/
#define
GINT_STACKSIZE
.globl gint_stack_end
gint_stack_end:
.space
GINT_STACKSIZE
.globl gint_stack
gint_stack:
.space
8
#define
#define
#define
/*
#define
4096
/* allocate 4K bootstack */
/* allocate the exception stack */
/* stack top here (stack grows DOWN) */
/* allocate dummy stack */
ik0
k0
ik1
k1
GISTACK_SIZE
REG_SIZE*(26+1)
17 1-15,24-25(at,t0-1,a0-3,t0-9)
5 16(s0),23(s7),29(sp),28(gp),31(ra)
4 cp0*4(hi,lo,status,ecp)
26 */
MAXINT
8
A-23
付録 A TX3927 プログラミングサンプル集
/* -----------------------------------------------------------------*/
/* 外部割り込みの分岐処理
*/
割り込みスタックの設定
/*
*/
レジスタの保存
/*
*/
/*
cause レジスタの IP で分岐する
*/
/* -----------------------------------------------------------------*/
.globl org_EXT_INT_VECT
.ent org_EXT_INT_VECT
org_EXT_INT_VECT:
#if 1
la
ik0,gint_stack
/* normal stack hi address */
sltu
ik1,ik0,sp
bne
ik1,zero,1f
addiu
ik1,ik0,-GINT_STACKSIZE
sltu
ik1,ik1,sp
beq
ik1,zero,1f
nop
#else
la
ik0,gint_stack
/* normal stack Low address */
addiu
ik1,ik0,-GINT_STACKSIZE
sltu
ik1,ik1,sp
beq
ik1,zero,1f
sltu
ik1,ik0,sp
bne
ik1,zero,1f
nop
#endif
add
ik0,zero,sp
1:
/* ik1 = temp stack */
addiu
ik0,ik0,-(GISTACK_SIZE) /* Save Registers */
sw
at,REG_SIZE*1(ik0)
sw
v0,REG_SIZE*2(ik0)
sw
v1,REG_SIZE*3(ik0)
sw
a0,REG_SIZE*4(ik0)
sw
a1,REG_SIZE*5(ik0)
sw
a2,REG_SIZE*6(ik0)
sw
a3,REG_SIZE*7(ik0)
sw
t0,REG_SIZE*8(ik0)
sw
t1,REG_SIZE*9(ik0)
sw
t2,REG_SIZE*10(ik0)
sw
t3,REG_SIZE*11(ik0)
sw
t4,REG_SIZE*12(ik0)
sw
t5,REG_SIZE*13(ik0)
sw
t6,REG_SIZE*14(ik0)
sw
t7,REG_SIZE*15(ik0)
sw
t8,REG_SIZE*16(ik0)
sw
t9,REG_SIZE*17(ik0)
sw
gp,REG_SIZE*18(ik0)
sw
ra,REG_SIZE*19(ik0)
sw
s0,REG_SIZE*20(ik0)
sw
s7,REG_SIZE*21(ik0)
mflo
t0
sw
t0,REG_SIZE*22(ik0)
mfhi
t0
sw
t0,REG_SIZE*23(ik0)
mfc0
t0,C0_STATUS
sw
t0,REG_SIZE*24(ik0)
mfc0
t0,C0_EPC
sw
t0,REG_SIZE*25(ik0)
sw
sp,REG_SIZE*26(ik0)
addu
sp,zero,ik0
lui
lw
s0,%hi(_gint_count)
a1,%lo(_gint_count)(s0)
A-24
# Increment Interrupt counter
付録 A TX3927 プログラミングサンプル集
addiu
sw
a1,a1,1
a1,%lo(_gint_count)(s0)
la
gp,_gp
# set the global data pointer
mfc0
nop
andi
bne
srl
andi
la
j
addu
k0,C0_CAUSE
andi
beq
la
j
nop
k1,k1,0x0100
k1,zero,2f
k0,swIntVector+13*4
3f
k1,k0,0x0300
k1,zero,1f
k0,k0,8
k0,0x3c
k1,swIntVector+15*4
3f
k0,k0,k1
# sw interrupt
# go &(swIntVector[TX3927INT_BASE])[]
1:
# go sw0
2:
la
k0,swIntVector+14*4
# go sw1
k0,0(k0)
# swIntVector read
# call
3:
lw
jalr
nop
k0
lw
addiu
bgtz
addiu
sw
a1,%lo(_gint_count)(s0)
at,a1,-MAXINT
at,99f
/* over multi interrupt */
a1,a1,-1
a1,%lo(_gint_count)(s0)
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
lw
mtlo
lw
mthi
lw
mtc0
lw
mtc0
lw
lw
lw
sync
at,REG_SIZE*1(sp) /* return target */
v1,REG_SIZE*3(sp)
a0,REG_SIZE*4(sp)
a1,REG_SIZE*5(sp)
a2,REG_SIZE*6(sp)
a3,REG_SIZE*7(sp)
t1,REG_SIZE*9(sp)
t2,REG_SIZE*10(sp)
t3,REG_SIZE*11(sp)
t4,REG_SIZE*12(sp)
t5,REG_SIZE*13(sp)
t6,REG_SIZE*14(sp)
t7,REG_SIZE*15(sp)
t8,REG_SIZE*16(sp)
t9,REG_SIZE*17(sp)
gp,REG_SIZE*18(sp)
ra,REG_SIZE*19(sp)
s0,REG_SIZE*20(sp)
s7,REG_SIZE*21(sp)
t0,REG_SIZE*22(sp)
t0
t0,REG_SIZE*23(sp)
t0
t0,REG_SIZE*24(sp)
t0,C0_STATUS
k1,REG_SIZE*25(sp)
k1,C0_EPC
t0,REG_SIZE*8(sp)
v0,REG_SIZE*2(sp)
sp,REG_SIZE*26(sp)
/* Flush the write buffer to memory. */
A-25
付録 A TX3927 プログラミングサンプル集
jr
rfe
nop
k1
99:
b
nop
/* Return to the user program. */
/* stack overflow */
99b
処理の手順は以下のようなものです。
(1) Cause レジスタの ExCode を調べて該当処理ルーチンへ(swIntVect[0-12]へ)処理を
渡す(この例では外部割り込み(ExCode=0)用の処理ルーチンだけが用意されていま
す)。
(2) 外部割り込みの場合(swIntVect[0]の処理)、Cause レジスタの IP ビットを見て該当
処理ルーチン(SwIntVect[13-30])へ処理を渡す。
ここで、割り込みスタックの設定、レジスタ待避、復帰などの処理が行われています。
割り込み処理本体を C で記述することを前提にしていますので、ここでは全てのレ
ジスタは待避していません。ここで待避されていないレジスタは C の関数の中で必
要に応じて待避・復帰が行われます。
この例を使用した場合には、実際の割り込み処理部は例えば以下のように C で記述
されます。
int C_int_timer0(void)
{
static int count = 0;
count++;
CPUReg->TREG[0].TMTISR = 0;
return 0;
}
C の関数の中では
- 実際の割り込み処理
- 割り込み要因のクリア
- (必要に応じて)多重割り込みの許可
と言った処理を行ってください。
A-26
/* 割り込み回数をカウント */
/* 割り込みをネゲート
*/
付録 A TX3927 プログラミングサンプル集
A.2.5
キャッシュの設定および操作
データ/命令キャッシュに関して以下のサンプル関数を用意しています。
•
FlushDCache
指定アドレスから指定サイズのデータがキャッシュにある
場合に書き戻し/インバリデートを行います。
•
FlushDCacheAll
全データキャッシュの書き戻し/インバリデートを行います。
•
InvalidateICache
指定アドレスから指定サイズの命令がキャッシュにある場
合にインバリデートを行います。
•
InvalidateICacheAll
全命令キャッシュのインバリデートを行います。
命令キャッシュ操作の場合は一旦命令キャッシュを無効にしなければならない点にご注意
ください。
■ ファイル名: cache.c
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1991-1998 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
* TX39/H2 cache controll routines
*/
/* TX39H2 Core Cache Size */
#define ICACHE_SIZE 0x2000
/* 8KB */
#define DCACHE_SIZE 0x1000
/* 4KB */
void
FlushDCache(unsigned int address, int size)
{
__asm(".set noreorder");
__asm("add
$5, $4");
__asm("li
$6, ~0xf");
/* TX39/H2 line size 16 bytes */
__asm("and
$4, $4, $6");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 21, 0($4)");
/* Hit_Writeback_Invalidate */
__asm("b
1b");
__asm("addi
$4, $4, 16");
__asm("2:");
}
void
FlushDCacheAll()
{
__asm(".set noreorder");
__asm("lui
$4, 0x8000");
__asm("addi $5, $4, 0x800");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 1, 0($4)");
__asm("cache 1, 1($4)");
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
}
/* start address */
/* end address
*/
/* Index_Writeback_Inv_D way 0 */
/* Index_Writeback_Inv_D way 1 */
A-27
付録 A TX3927 プログラミングサンプル集
void
InvalidateICache(unsigned int address, int size)
{
__asm(".set noreorder");
__asm("add
$5, $4");
__asm("li
$6, ~0xf");
/* line size 16 bytes */
__asm("and
$4, $4, $6");
__asm("mfc0 $6, $3");
/* get C0_Config */
__asm("nop");
__asm("andi $7, $6, 0xffdf");
/* ICE OFF
*/
__asm("mtc0 $7, $3");
/* set C0_Config */
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 16, 0($4)");
/* Hit_Invalidate_I */
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
__asm("mtc0 $6, $3");
/* set C0_Config */
}
void
InvalidateICacheAll()
{
__asm(".set noreorder");
__asm("lui
$4, 0x8000");
__asm("addi $5, $4, 0x1000");
__asm("mfc0 $6, $3");
__asm("nop");
__asm("andi $7, $6, 0xffdf");
__asm("mtc0 $7, $3");
__asm("1:");
__asm("bge
$4, $5, 2f");
__asm("nop");
__asm("cache 0, 0($4)");
__asm("cache 0, 1($4)");
__asm("b
1b");
__asm("addi $4, $4, 16");
__asm("2:");
__asm("mtc0 $6, $3");
}
A-28
/* start address */
/* end address
*/
/* get C0_Config */
/* ICE OFF
*/
/* set C0_Config */
/* Index_Invalidate_I way 0 */
/* Index_Invalidate_I way 1 */
/* set C0_Config */
付録 A TX3927 プログラミングサンプル集
A.1
内蔵ペリフェラル使用例
A.1.1
Timer
タイマ 0 をインターバルタイマモードで使用して、割り込みを発生させるサンプルです。
■ ファイル名: TimerInt.c
#include
#include
"tx3927.h"
"intcosmp27.h"
/* 例題プログラムです。 割り込みハンドラを初期化し、タイマ割り込みを発生させます。 */
int test_timerInt0(void)
{
initInt();
/* 割り込みハンドラを初期化する */
setIntVect(INTNO_TMR0,C_int_timer0);
/* 割り込みハンドラを登録する */
CPUReg->TREG[0].TMTCR = TCE | CCDE;
CPUReg->TREG[0].TMITMR = TIIE | TZCE;
/* タイマを起動する */
CPUReg->IREG.IRILR[6] = (CPUReg->IREG.IRILR[6] & 0x000f) | 0x0300;
/* 割り込みレベルを設定 */
CPUReg->IREG.IRDER = 1;
/* 割り込みコントローラを割り込みを可能にする */
CPUReg->IREG.IRIMR = 1;
setstatus(~SR_BEV,SR_IE | 0xff00); /* ステータスレジスタ(コア)を割込み可能にする */
return 0;
}
int off_timerInt0(void)
{
CPUReg->TREG[0].TMTCR = 0;
CPUReg->TREG[0].TMITMR = 0;
return 0;
}
/* タイマを停止する */
/* タイマ割り込み処理ルーチン */
int C_int_timer0(void)
{
static int count = 0;
/* 割り込み回数をカウント */
/* 割り込みをネゲート */
count++;
CPUReg->TREG[0].TMTISR = 0;
return 0;
}
A-29
付録 A TX3927 プログラミングサンプル集
A.1.2
SIO
以下の動作設定が含まれています。
send-polling & receive-polling mode
send_interrupt & receive-interrupt mode
send_polling & receive-interrupt mode
send_interrupt & receive-polling mode
DMA-SEND & polling-RECEIVE mode
DMA-SEND & interrupt-RECEIVE mode
polling-send & DMA-RECEIVE mode
interrupt-send & DMA-RECEIVE mode
DMA-SEND & DMA-RECEIVE mode
polling loopback mode
interrupt loopback mode
dma loopback mode
receive overflow test
■ ファイル名: 3927sio.c
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1998-1999 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
*/
/*
* TX3927 SIO Control Routine
*
* これは TX3927 内蔵 SIO を制御するサンプルルーチンです。
*
* TX3927 内蔵 SIO の使用上の注意:
*
* マクロ:
* USE_UDEOS 東芝情報システム(株)販売の µITRON3.0 仕様 OS「UDEOS/r39」の
* アプリケーションプログラムとして使用するときに定義する。
* コンフィグレーション時にも影響するので、拡張子 cfo ファイルの設定に
* 定義を追加するのを忘れずに。
*
* 動作確認環境:
* ・COSMP2-TX3927 評価ボード
* ・GHS C Compiler & MULTI Debugger ver.1.8.8 for Win32
* ・GHS Monitor Server RS232C connection or HP.ProcessorProbe
*
* 参考資料:
* ・32 ビット RISC マイクロプロセッサファミリー TX39 ファミリー
* TMPR3901F ユーザーズマニュアル
* ・32 ビット RISC マイクロプロセッサファミリー TX39 ファミリー
* TMPR3927F ユーザーズマニュアル Rev.0.5
*
* History:
* 1999/05/06 ver.0.21 yasui based on r3904sio.c ver.1.08
*****************************************************************************/
#include <itron.h>
#include "3927sio.h"
A-30
付録 A TX3927 プログラミングサンプル集
/* vertiul address to physical address */
#define
Vadrs2Padrs(adrs) ( (unsigned int)(adrs) & 0x5FFFFFFF )
/* I/O Base Addr */
#define REG3927SIO_BASE 0xfffef300
/* Semaphore */
#ifdef USE_UDEOS
#define SIGNAL_SEMAPHORE(x) isig_sem(SIO_SEMID0+x)
#define WAIT_SEMAPHORE(x) wai_sem(SIO_SEMID0+x)
#define SIGNAL_SEMAPHORE_TX(x) isig_sem(SIO_SEMID0+2+x)
#define WAIT_SEMAPHORE_TX(x) wai_sem(SIO_SEMID0+2+x)
#endif
/* Etc */
#define WAIT_TIME
(CPU_CLOCK/500)
#define INCIDX(a) ((a+1)&(SIO_RCVBUFSZ-1))
/* Structure */
typedef struct {
int type;
int (*getc)();
int (*putc)();
volatile int sndbuf_beg;
volatile int sndbuf_end;
volatile int rcvbuf_beg;
volatile int rcvbuf_end;
int sndbuf_ovf;
int rcvbuf_ovf;
char sndbuf[SIO_SNDBUFSZ];
char rcvbuf[SIO_RCVBUFSZ];
} type3927sio;
typedef struct {
unsigned int silcr;
unsigned int sidicr;
unsigned int sidisr;
unsigned int sicisr;
unsigned int sifcr;
unsigned int siflcr;
unsigned int sibgr;
unsigned int sitfifo;
unsigned int sirfifo;
int pad[55];
} reg3927sio;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
SILCR_SCS_BGIMCLK
SILCR_SCS_EXTSCLK
SILCR_SCS_BGSCLK
SILCR_UMODE
SILCR_USBL
SILCR_UPEN
SILCR_UEPS
SIDISR_ERRMASK
SIDISR_RDIS
SIDISR_TDIS
SIDISR_TOUT
SIDISR_ERI
SIDISR_UOER
SIDISR_UPER
SIDISR_UFER
SIDISR_UBRK
SIDISR_UVALID
SICISR_TRDY
SICISR_TXALS
0x20
0x40
0x60
0x00000001
0x00000004
0x00000008
0x00000010
0x0000b800
0x00000080
0x00000100
0x00000200
0x00000400
0x00000800
0x00001000
0x00002000
0x00008000
0x00004000
0x00000004
0x00000002
A-31
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
SIFCR_FRSTE
SIFCR_RFRST
SIFCR_TFRST
SIFCR_TDIL1
SIFCR_TDIL4
SIFCR_TDIL8
SIFCR_RDIL1
SIFCR_RDIL4
SIFCR_RDIL8
SIFCR_RDIL12
SIFLCR_TSDE
SIFLCR_RSDE
SIFLCR_RTSTL(x)
0x00000001
0x00000002
0x00000004
0x00000000
0x00000008
0x00000010
0x00000000
0x00000080
0x00000100
0x00000180
0x00000080
0x00000100
((x&0xf)<<1)
#define
#define
#define
#define
#define
SIDICR_TDE
SIDICR_RDE
SIDICR_TIE
SIDICR_RIE
SIDICR_SPIE
0x00008000
0x00004000
0x00002000
0x00001000
0x00000800
#define SIFCR_RDIL_MASK
#define SIFCR_TDIL_MASK
0x00000180
0x00000018
/* Data */
static type3927sio siotbl[2];
static unsigned int dma_req_flag, dma_end_flag;
/************************************************************
*
Wait loop
************************************************************/
static int
noop (int i){
int a=10;
while (i--)
while(a)
a--;
return a;
}
/***************************************************************
* Initialize SIO
*
* siono is 0 or 1. baud is baud-rate(ie.9600,38400,etc.).
* type is
* SIO_TXPOL
output is polling.
* SIO_TXINT
output is interrupt.
* SIO_TXDMA
output is DMA.
* SIO_RXPOL
input is polling.
* SIO_RXINT
input is interrupt.
* SIO_RXDMA
input is DMA
*****************************************************************/
int
tx3927sio_init(int siono,int type,int baud)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio* sio;
int bclk,regbaud,silcr;
unsigned int *dma_adrs;
/* check parameter (0 or 1) */
A-32
付録 A TX3927 プログラミングサンプル集
if(siono & ~0x1)
return -1;
/* ERROR: illegal siono */
/* preparing */
sioreg+=siono;
sio = &siotbl[siono];
sio->type = type;
/* calcualte baud value */
bclk=0;
#ifdef CPU133M
regbaud = CPU_CLOCK/128/baud;
#else
regbaud = CPU_CLOCK/64/baud;
#endif
while(regbaud>=256){
bclk++;
regbaud /= 4;
}
if(bclk>3)
return -2;
/* general setting */
silcr = 0;
if(type & SIO_PARITY_ODD)
silcr |= SILCR_UPEN;
if(type & SIO_PARITY_EVEN)
silcr |= SILCR_UPEN|SILCR_UEPS;
if(type & SIO_STOP2)
silcr |= SILCR_USBL;
if(type & SIO_7BIT)
silcr |= SILCR_UMODE;
/* ERROR: illeagal baud */
sioreg->silcr = silcr|SILCR_SCS_BGIMCLK;
/* BRG-IMCLK */
sioreg->siflcr = SIFLCR_TSDE|SIFLCR_RSDE|SIFLCR_RTSTL(1);
sioreg->sidicr = 0x0;
sioreg->sifcr = SIFCR_TFRST|SIFCR_RFRST|SIFCR_FRSTE;
sioreg->sifcr = 0x0;
sioreg->sibgr = (bclk<<8)|regbaud;
sioreg->sidisr = 0x0;
sioreg->sicisr = 0x0;
if(type & SIO_TXPOL){
sio->putc = (int(*)())tx3927sio_pol_putc;
sioreg->siflcr &= ~SIFLCR_TSDE;
sioreg->siflcr |= 0x200;
/* Reset FIFO */
/* Set baudrate */
/* enable TX */
}
if(type & SIO_RXPOL){
sio->getc = (int(*)())tx3927sio_pol_getc;
sioreg->siflcr &= ~SIFLCR_RSDE;
}
/* enable RX */
if(type & SIO_TXINT){
sio->sndbuf_beg = sio->sndbuf_end = sio->sndbuf_ovf = 0;
sio->putc = (int(*)())tx3927sio_int_putc;
if (type & SIO_TFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_TDIL1;
}else if (type & SIO_TFIFO_4) {
sioreg->sifcr |= SIFCR_TDIL4;
A-33
付録 A TX3927 プログラミングサンプル集
} else if (type & SIO_TFIFO_8) {
sioreg->sifcr |= SIFCR_TDIL8;
} else {
sioreg->sifcr |= SIFCR_TDIL8;
}
sioreg->siflcr &= ~SIFLCR_TSDE;
chg_ilv(INTNO_SIO0+siono,2);
/* default 8byte */
/* enable TX */
/* set int level */
}
if(type & SIO_RXINT){
sio->rcvbuf_beg = sio->rcvbuf_end = sio->rcvbuf_ovf = 0;
sio->getc = (int(*)())tx3927sio_int_getc;
if (type & SIO_RFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_RDIL1;
} else if (type & SIO_RFIFO_4) {
sioreg->sifcr |= SIFCR_RDIL4;
} else if (type & SIO_RFIFO_8) {
sioreg->sifcr |= SIFCR_RDIL8;
} else if (type & SIO_RFIFO_12) {
sioreg->sifcr |= SIFCR_RDIL12;
} else {
sioreg->sifcr |= SIFCR_RDIL12;
/* default */
}
sioreg->sidicr |= SIDICR_RIE+SIDICR_SPIE;
/* enable RX int */
sioreg->siflcr &= ~SIFLCR_RSDE;
/* enable RX */
chg_ilv(INTNO_SIO0+siono,2);
/* set int level */
}
if(type & SIO_TXDMA){
sio->sndbuf_beg = sio->sndbuf_end = sio->sndbuf_ovf = 0;
if (type & SIO_TFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_TDIL1;
}else if (type & SIO_TFIFO_4) {
sioreg->sifcr |= SIFCR_TDIL4;
} else if (type & SIO_TFIFO_8) {
sioreg->sifcr |= SIFCR_TDIL8;
} else {
sioreg->sifcr |= SIFCR_TDIL8;
/* default 8byte */
}
sioreg->siflcr &= ~SIFLCR_TSDE;
/* enable TX */
dma_adrs = (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
*dma_adrs = 0x00000000;
/* MASTEN(bit0)=off */
chg_ilv(INTNO_DMA,2);
/* set int level */
}
if(type & SIO_RXDMA){
sio->rcvbuf_beg = sio->rcvbuf_end = sio->rcvbuf_ovf = 0;
if (type & SIO_RFIFO_1) {
/* trigger byte */
sioreg->sifcr |= SIFCR_RDIL1;
} else if (type & SIO_RFIFO_4) {
sioreg->sifcr |= SIFCR_RDIL4;
} else if (type & SIO_RFIFO_8) {
sioreg->sifcr |= SIFCR_RDIL8;
} else if (type & SIO_RFIFO_12) {
sioreg->sifcr |= SIFCR_RDIL12;
} else {
sioreg->sifcr |= SIFCR_RDIL12;
/* default */
}
sioreg->sidicr |= SIDICR_SPIE;
/* enable RX int */
sioreg->siflcr &= ~SIFLCR_RSDE;
/* enable RX */
A-34
付録 A TX3927 プログラミングサンプル集
dma_adrs
= (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
*dma_adrs = 0x00000000;
/* MASTEN(bit0)=off */
chg_ilv(INTNO_SIO0+siono,2);
/* set int level */
chg_ilv(INTNO_DMA,2);
/* set int level */
}
return 0;
/* Successful */
}
/*******************************************************************
* Finish SIO
*
* siono is 0 or 1.
* clear register. reset fifo. disable interrupt.
********************************************************************/
int
tx3927sio_fini(int siono){
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio* sio;
int bclk,regbaud;
/* check parameter */
if(siono!=0 && siono!=1)
return -1;
/* ERROR: illegal siono */
tx3927sio_all_sent(siono);
/* initialize */
chg_ilv(INTNO_SIO0+siono,0);
sioreg->siflcr |= SIFLCR_RSDE;
sioreg->siflcr |= SIFLCR_TSDE;
sioreg->sidicr &= ~SIDICR_TIE;
sioreg->sidicr &= ~SIDICR_RIE;
sio = &siotbl[siono];
sio->putc = 0;
sio->getc = 0;
sio->type = 0;
/*
/*
/*
/*
/*
clear int level */
disable RX */
disable TX */
disable TX int */
disable TX int */
}
/************************************************************************
* SIO interrupt handler
*
* clear interrupt. read data and put into buffer.
*************************************************************************/
static void
tx3927sio_int(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio
= &siotbl[siono];
int sidisr,next,err,c;
sioreg += siono;
sidisr = sioreg->sidisr;
if(sidisr & 0xbc00){
printf("error1(sidisr=%x) ¥n", sidisr);
if(sidisr & SIDISR_UBRK)
printf("break during int mode ¥n");
if(sidisr & SIDISR_UFER)
printf("frame error during int mode ¥n");
if(sidisr & SIDISR_UPER)
printf("parity error during int mode ¥n");
A-35
付録 A TX3927 プログラミングサンプル集
if(sidisr & SIDISR_UOER)
printf("overflow during int mode ¥n");
if(sidisr & 0x0400)
printf("error interrupt during int mode ¥n");
c = sioreg->sirfifo;
}
sidisr = sioreg->sidisr;
if(sidisr & 0xbc00){
printf("error1(sidisr=%x) ¥n", sidisr);
if(sidisr & SIDISR_UBRK)
printf("break during int mode ¥n");
if(sidisr & SIDISR_UFER)
printf("frame error during int mode ¥n");
if(sidisr & SIDISR_UPER)
printf("parity error during int mode ¥n");
if(sidisr & SIDISR_UOER)
printf("overflow during int mode ¥n");
if(sidisr & 0x0400)
printf("error interrupt during int mode ¥n");
c = sioreg->sirfifo;
}
if(sidisr & (SIDISR_RDIS | SIDISR_TOUT)){
while(!(sidisr & SIDISR_UVALID) && !(sidisr & SIDISR_ERRMASK)){
c = sioreg->sirfifo;
if(sio->rcvbuf_beg != (next=INCIDX(sio->rcvbuf_end))){
if(sio->rcvbuf_beg == sio->rcvbuf_end)
SIGNAL_SEMAPHORE(siono);
sio->rcvbuf[sio->rcvbuf_end] = c;
sio->rcvbuf_end = next;
}
else{
sio->rcvbuf_ovf++;
/* Overflow */
printf("receive buffer overflow ¥n");
}
sidisr = sioreg->sidisr;
if( sidisr & 0xbc00 )
printf("error2(sidisr=%x) ¥n", sidisr);
}
sioreg->sidisr = ~(SIDISR_RDIS|SIDISR_TOUT);
}
if(sidisr & SIDISR_ERI){
sioreg->sidisr = ~SIDISR_ERI;
/* Clear Error Status */
/* routine after error */
sioreg->sirfifo;
/* waiste */
}
if(sidisr & SIDISR_TDIS){
while((sio->sndbuf_beg != sio->sndbuf_end) &&
(sioreg->sicisr & SICISR_TRDY)){
sioreg->sitfifo = sio->sndbuf[sio->sndbuf_beg];
sio->sndbuf_beg = INCIDX(sio->sndbuf_beg);
}
if(sio->sndbuf_beg != sio->sndbuf_end){
sioreg->sidisr &= ~SIDISR_TDIS;
}
else{
sioreg->sidicr &= ~SIDICR_TIE;
if(sio->sndbuf_ovf){
SIGNAL_SEMAPHORE_TX(siono);
}
}
}
A-36
付録 A TX3927 プログラミングサンプル集
return;
}
void tx3927sio0_int()
{
tx3927sio_int(0);
}
void tx3927sio1_int()
{
tx3927sio_int(1);
}
void tx3927dma_int()
{
unsigned int *dma_adrs, *dma0_adrs, *dma2_adrs, dma_status;
#if 0
dma_adrs
*dma_adrs
#endif
= (unsigned int *)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
= 0x00000000;
/* MASTEN(bit0)=off */
if( dma_req_flag == 2 ){
dma2_adrs = (unsigned int *)( 0xfffeb05c );
/* Channel Status Register(CSR2) */
dma_status = *dma2_adrs;
/* read status register */
if( dma_status != 0x60 )
/* NCHNC & NTRNFC(Normal Transfer Completion) */
printf(" dma2 complete status error=%x ¥n", dma_status);
*dma2_adrs = 0xffffffff;
/* clear CSR2 */
dma_end_flag = 1;
}
if( dma_req_flag == 0 ){
dma0_adrs = (unsigned int *)( 0xfffeb01c );
/* Channel Status Register(CSR0) */
dma_status = *dma0_adrs;
/* read status register */
if( dma_status != 0x60 )
/* NCHNC & NTRNFC(Normal Transfer Completion) */
printf(" dma0 complete status error=%x ¥n", dma_status);
*dma0_adrs = 0xffffffff;
/* clear CSR0 */
dma_end_flag = 1;
}
return;
}
/*****************************************************************************
* Get & Put one byte data in interrupt handler
*
* if data is bufferd, return soon. otherwise sleep.
* use message box.
*****************************************************************************/
int
tx3927sio_int_getc(int siono)
{
type3927sio *sio = &siotbl[siono];
int c;
if(sio->rcvbuf_beg == sio->rcvbuf_end)
WAIT_SEMAPHORE(siono);
if(sio->rcvbuf_beg != sio->rcvbuf_end){
c = sio->rcvbuf[sio->rcvbuf_beg] & 0xff;
sio->rcvbuf_beg = INCIDX(sio->rcvbuf_beg);
A-37
付録 A TX3927 プログラミングサンプル集
return c;
}
else
return -1;
}
int
tx3927sio_int_putc(int siono, char c)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int next=INCIDX(sio->sndbuf_end);
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
/* ERROR:illegal siono */
sioreg+=siono;
retry_tx:
if((sio->sndbuf_beg == sio->sndbuf_end) && (sioreg->sicisr & SICISR_TRDY)){
sioreg->sitfifo = c;
return 0;
}
else
if(sio->sndbuf_beg != next){
sio->sndbuf[sio->sndbuf_end] = c;
sio->sndbuf_end = next;
sioreg->sidisr &= ~SIDISR_TDIS;
sioreg->sidicr |= SIDICR_TIE;
return 0;
}
else{
sio->sndbuf_ovf++;
/* Overflow */
WAIT_SEMAPHORE_TX(siono);
sio->sndbuf_ovf--;
goto retry_tx;
}
return -1;
}
/*****************************************************************************
* Get & Put data block dma handler
*
* if data is bufferd, return soon. otherwise sleep.
* use message box.
*****************************************************************************/
int
tx3927sio_dma_getc(int siono, char *rcv_buf, int buf_size, int *rcvd_size)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int c,i,sidisr,work;
unsigned int *dma0_adrs, *pcr, dma_status;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
=
=
=
=
(unsigned int
0x00000001;
(unsigned int
0x01000000;
(unsigned int
0x00000000;
(unsigned int
0xfffef320+3;
/* Pin Configuration Register */
*)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=on(reset channel) */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=off(enable channel) */
*)( 0xfffeb004 ) ; /* Source Address Register(SAR0) */
/* Receive FIFO buffer 0 */
A-38
付録 A TX3927 プログラミングサンプル集
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/* Destination Address Register(DAR0) */
= Vadrs2Padrs(rcv_buf);
/* receive buffer physical address */
= (unsigned int *)( 0xfffeb00c ) ; /* Count Register(CNAR0) */
= buf_size;
/* receive buffer size */
= (unsigned int *)( 0xfffeb010 ) ;
/* Source Address Incremnet Register(SAI0) */
= 0x0000000;
/* no increment */
= (unsigned int *)( 0xfffeb014 ) ;
/* Destination Address Incremnet Register(DAI0) */
= 0x0000001;
/* transfer size one byte */
= (unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
= 0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0 */
dma_req_flag = 0;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_RDE;
/* dma channel number 0 */
/* enable receive DMA */
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
sidisr
/* don't disturb DMA(memory) bus */
= sioreg->sidisr;
if(sidisr & 0xbc00)
printf("error3(sidisr=%x) ¥n", sidisr);
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
(unsigned int *)( 0xfffeb01c ) ; /* Channel Status Register(CSR0) */
0xffffffff;
/* clear CSR0 */
(unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/*
work = *dma0_adrs;
/*
work = work - Vadrs2Padrs(rcv_buf);
/*
*rcvd_size = work;
/*
Destination Address Register(DAR0) */
end buffer pointer */
receive buffer physical address */
return received size */
return 0;
}
int
tx3927sio_dma_putc(int siono, char *send_buf, int send_size)
{
unsigned int *dma2_adrs, *pcr, dma_status;
int i, c=0x12345678;
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int next=INCIDX(sio->sndbuf_end);
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
/* ERROR:illegal siono */
sioreg += siono;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
/* Pin Configuration Register */
dma2_adrs
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
; /* Channel Control Register(CCR2) */
/* CHRST(bit24)=on(reset channel) */
; /* Channel Control Register(CCR2) */
=
=
=
=
=
(unsigned int *)( 0xfffeb0a4 )
0x00000001;
(unsigned int *)( 0xfffeb058 )
0x01000000;
(unsigned int *)( 0xfffeb058 )
A-39
付録 A TX3927 プログラミングサンプル集
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
=
=
=
=
*dma2_adrs
dma2_adrs
*dma2_adrs
dma2_adrs
=
=
=
=
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
0x00000000;
/* CHRST(bit24)=off(enable channel) */
(unsigned int *)( 0xfffeb044 ) ; /* Source Address Register(SAR2) */
Vadrs2Padrs(send_buf);
/* physical memory address */
(unsigned int *)( 0xfffeb048 ) ;
/* Destination Address Register(DAR2) */
0xfffef31c+3;
/* Transmit FIFO Channel-0(SITFIFO0) */
(unsigned int *)( 0xfffeb04c ) ; /* Count Register(CNAR2) */
send_size;
/* transfer size(force short alignment) */
(unsigned int *)( 0xfffeb050 ) ;
/* Source Address Incremnet Register(SAI2) */
0x00000001;
/* transfer size = 1byte */
(unsigned int *)( 0xfffeb054 ) ;
/* Destination Address Incremnet Register(DAI2) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
dma_req_flag = 2;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_TDE;
/* dma channel number 2 */
/* enable transmit DMA */
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
/* don't disturb DMA(memory) bus */
return 0;
}
int
tx3927sio_dma_putc_getc(int siono, char *send_buf, int send_size, char *rcv_buf, int
*rcvd_size)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int c,i,sidisr,work;
unsigned int *dma0_adrs, *pcr, dma_status, *dma2_adrs;
pcr
= (unsigned int *)( 0xfffee008 ) ;
*pcr |= 0x0000f0f0;
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
=
=
=
=
=
=
=
=
=
*dma0_adrs
dma0_adrs
*dma0_adrs
dma0_adrs
=
=
=
=
*dma0_adrs =
dma0_adrs =
*dma0_adrs =
(unsigned int
0x00000001;
(unsigned int
0x01000000;
(unsigned int
0x00000000;
(unsigned int
0xfffef320+3;
(unsigned int
/* Pin Configuration Register */
*)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
/* MASTEN(bit0)=on */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=on(reset channel) */
*)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
/* CHRST(bit24)=off(enable channel) */
*)( 0xfffeb004 ) ; /* Source Address Register(SAR0) */
/* Receive FIFO buffer 0 */
*)( 0xfffeb008 ) ;
/* Destination Address Register(DAR0) */
Vadrs2Padrs(rcv_buf);
/* receive buffer physical address */
(unsigned int *)( 0xfffeb00c ) ; /* Count Register(CNAR0) */
send_size;
/* receive buffer size */
(unsigned int *)( 0xfffeb010 ) ;
/* Source Address Incremnet Register(SAI0) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb014 ) ;
/* Destination Address Incremnet Register(DAI0)*/
0x0000001;
/* transfer size one byte */
A-40
付録 A TX3927 プログラミングサンプル集
dma0_adrs = (unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
*dma0_adrs = 0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
sioreg->sidicr |= SIDICR_RDE;
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
*/
dma2_adrs =
*/
*dma2_adrs =
*/
dma2_adrs =
*/
*dma2_adrs =
*/
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
dma2_adrs =
*dma2_adrs =
/* enable receive DMA */
(unsigned int *)( 0xfffeb0a4 ) ; /* MCR(Master Control Register) */
0x00000001;
/* MASTEN(bit0)=on */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00000000;
/* CHRST(bit24)=off(enable channel)
(unsigned int *)( 0xfffeb044 ) ; /* Source Address Register(SAR2)
Vadrs2Padrs(send_buf);
(unsigned int *)( 0xfffeb048 ) ; /* Destination Address Register(DAR2)
0xfffef31c+3;
/* Transmit FIFO Channel-0(SITFIFO0)
(unsigned int *)( 0xfffeb04c ) ;
/* Count Register(CNAR2) */
send_size;
/* transfer size(force short alignment) */
(unsigned int *)( 0xfffeb050 ) ;
/* Source Address Incremnet Register(SAI2) */
0x00000001;
/* transfer size = 1byte */
(unsigned int *)( 0xfffeb054 ) ;
/* Destination Address Incremnet Register(DAI2) */
0x0000000;
/* no increment */
(unsigned int *)( 0xfffeb058 ) ; /* Channel Control Register(CCR2) */
0x00011500;
/* EXTRQ,INTENE,INTENT,XTACT,XFSZ=0*/
dma_req_flag = 2;
dma_end_flag = 0;
sioreg->sidicr |= SIDICR_TDE;
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
/* dma channel number 2 */
/* enable transmit DMA */
/* don't disturb DMA(memory) bus */
dma_req_flag = 0;
dma_end_flag = 0;
do{
for(i=0;i<100;i++);
}while( dma_end_flag == 0 );
sidisr
/* physical memory address
/* dma channel number 0 */
/* don't disturb DMA(memory) bus */
= sioreg->sidisr;
if(sidisr & 0xbc00)
printf("error3(sidisr=%x) ¥n", sidisr);
dma0_adrs
*dma0_adrs
dma0_adrs
*dma0_adrs
=
=
=
=
(unsigned int *)( 0xfffeb01c ) ; /* Channel Status Register(CSR0) */
0xffffffff;
/* clear CSR0 */
(unsigned int *)( 0xfffeb018 ) ; /* Channel Control Register(CCR0) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
dma0_adrs
= (unsigned int *)( 0xfffeb008 ) ;
/*
work = *dma0_adrs;
/*
work = work - Vadrs2Padrs(rcv_buf);
/*
*rcvd_size = work;
/*
A-41
Destination Address Register(DAR0) */
end buffer pointer */
receive buffer physical address */
return received size */
付録 A TX3927 プログラミングサンプル集
return 0;
}
/********************************************************************************
* Get & Put one byte data with polling
*
* if successful, return charactor.
* if timeout, return -1.
* interruptable.
* not return until get a charactor.
*********************************************************************************/
int
tx3927sio_pol_getc(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int t = WAIT_TIME;
int
c, silsr, sidisr;
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
sioreg+=siono;
while (t--) {
if((sidisr=sioreg->sidisr) & SIDISR_RDIS){
c = sioreg->sirfifo;
sioreg->sidisr = ~SIDISR_RDIS;
/* ERROR:illegal siono */
/* Check status */
/* Read data */
if( sidisr & SIDISR_ERI){
sioreg->sidisr = ~SIDISR_ERI;
}
if(!(sidisr & SIDISR_ERRMASK)){
return c;
}
if(sidisr & SIDISR_UBRK){
c = c | 0xfffb0000;
return c;
}
/* Break signal */
if(sidisr & SIDISR_UFER){
c = c | 0xfffe0000;
return c;
}
/* Frame Error */
if(sidisr & SIDISR_UPER){
c = c | 0xfffd0000;
return c;
}
/* Parity Error */
if(sidisr & SIDISR_UOER){
/* Over Run Error */
sioreg->sifcr = 0x00008000;
c = c | 0xfffc0000;
return c;
}
}
noop(2);
A-42
付録 A TX3927 プログラミングサンプル集
}
return -1;
/* timed out */
}
int
tx3927sio_pol_putc(int siono, char c)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
type3927sio *sio = &siotbl[siono];
int t = WAIT_TIME;
int silsr, sidisr;
/* check console's sio */
if(siono!=0 && siono!=1)
return -1;
sioreg+=siono;
while (t--) {
if (sioreg->sidisr & SIDISR_TDIS) {
sioreg->sitfifo = c;
sioreg->sidisr = ~SIDISR_TDIS;
return 0;
}
noop(2);
}
return -1;
/* ERROR:illegal siono */
/* timeout */
}
int
tx3927sio_getc(int siono){
int(*func)() = siotbl[siono].getc;
if(func)
return func(siono);
return -1;
}
int
tx3927sio_putc(int siono, char c){
int(*func)() = siotbl[siono].putc;
if(func)
return func(siono,c);
return -1;
}
/*********************************************************************
* Wait until all data is sent
*********************************************************************/
int
tx3927sio_all_sent(int siono)
{
reg3927sio *sioreg = (reg3927sio *)REG3927SIO_BASE;
/* check parameter */
if(siono!=0 && siono!=1)
return -1;
/* ERROR: illegal siono */
sioreg+=siono;
while(!(sioreg->sicisr & SICISR_TXALS));
}
A-43
付録 A TX3927 プログラミングサンプル集
■ ファイル名: 3927sio.h
/*=======================================================================
* $Id$
*----------------------------------------------------------------------* Copyright(C) 1998-1999 TOSHIBA CORPORATION All rights reserved.
*=======================================================================
*/
#ifndef __TX3927SIO_H
#define __TX3927SIO_H
#define CPU133M
/* imclock */
#ifndef CPU_CLOCK
#ifdef CPU133M
#define CPU_CLOCK 132710400
#else
#define CPU_CLOCK 58982400
#endif
#endif
/* buffer size between interrupt and task. multiple of 2 */
#define SIO_RCVBUFSZ 4096
#define SIO_SNDBUFSZ 4096
#ifdef USE_UDEOS
#ifndef
#define
#endif
#define
#define
#define
#define
SIO_SEMID_BASE
SIO_SEMID_BASE 2
SIO_SEMID0
SIO_SEMID1
SIO_SEMID0TX
SIO_SEMID1TX
(SIO_SEMID_BASE)
(SIO_SEMID_BASE+1)
(SIO_SEMID_BASE+2)
(SIO_SEMID_BASE+3)
CRE_SEM(SIO_SEMID0,"sem_sio0",TA_TFIFO,0)
CRE_SEM(SIO_SEMID1,"sem_sio1",TA_TFIFO,0)
CRE_SEM(SIO_SEMID0TX,"sem_sio0tx",TA_TFIFO,0)
CRE_SEM(SIO_SEMID1TX,"sem_sio1tx",TA_TFIFO,0)
/* define for interrupt handler */
/* not required if you use only polling */
DEF_INT(INTNO_SIO0,TA_HLNG,tx3927sio0_int)
/* DEF_INT(INTNO_SIO1,TA_HLNG,tx3927sio1_int) */
#endif
/* type
#define
#define
#define
#define
#define
#define
#define
*/
SIO_DISABLE
SIO_TXPOL
SIO_TXINT
SIO_TXDMA
SIO_RXPOL
SIO_RXINT
SIO_RXDMA
0x00000000
0x00000001
0x00000002
0x00000004
0x00000010
0x00000020
0x00000040
#define
#define
#define
#define
SIO_PARITY_ODD
SIO_PARITY_EVEN
SIO_STOP2
SIO_7BIT
0x00000100
0x00000200
0x00000400
0x00000800
#define SIO_HWFLOW
0x00001000
A-44
付録 A TX3927 プログラミングサンプル集
#define
#define
#define
#define
SIO_RFIFO_1
SIO_RFIFO_4
SIO_RFIFO_8
SIO_RFIFO_12
#define SIO_TFIFO_1
#define SIO_TFIFO_4
#define SIO_TFIFO_8
extern
extern
extern
extern
extern
extern
extern
extern
int
int
int
int
int
int
int
int
0x00002000
0x00004000
0x00008000
0x00010000
0x00020000
0x00040000
0x00080000
tx3927sio_init(int siono,int type,int baud);
tx3927sio_pol_getc(int siono);
tx3927sio_pol_putc(int siono, char c);
tx3927sio_getc(int siono);
tx3927sio_putc(int siono, char c);
tx3927sio_int_getc(int siono);
tx3927sio_int_putc(int siono, char c);
tx3927sio_all_sent(int siono);
#endif /* __TX3927SIO_H */
A-45
付録 A TX3927 プログラミングサンプル集
A.1.3
DMA
イーサネットドライバで、受信バッファの内容をコピーするのに使用したメモリ-メモリ間
転送の例です。内蔵シリアルとを使用した DMA の例が「A.1.2 SIO」のサンプルの中に有り
ます。
■ ファイル名: tx3927dma.c
/*----------------------------------------------------------------------------関数名 :buff_copy
機 能 :受信データバッファコピー処理
入 力 :
出 力 :なし
-----------------------------------------------------------------------------*/
typedef Uint32 unsigned int
void buff_copy(char *userbuff8, char *tc35815buff8, Uint32 recvsize)
{
short
*tc35815buff16,*userbuff16;
Uint32
*tc35815buff32,*userbuff32,*endbuff,*endbuff1,*endbuff2;
Uint32
*dma3_adrs,dma_status;
register unsigned int work32,work33,short_count,char_count,i;
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
dma3_adrs
*dma3_adrs
=
=
=
=
=
=
=
=
=
=
=
=
(Uint32*)( 0xfffeb0a4 ) ;
/* MCR(Master Control Register) */
0x00000001;
/* MASTEN(bit0)=on */
(Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
0x01000000;
/* CHRST(bit24)=on(reset channel) */
(Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
0x00000000;
/* CHRST(bit24)=off(enable channel) */
(Uint32*)( 0xfffeb064 ) ;
/* Source Address Register(SAR3) */
Vadrs2Padrs(tc35815buff8);
/* physical address */
(Uint32*)( 0xfffeb068 ) ;
/* Destination Address Register(DAR3) */
Vadrs2Padrs(userbuff8+NE_ETHER_ALIGN); /* physical address */
(Uint32*)( 0xfffeb06c ) ;
/* Count Register(CNAR3) */
(recvsize+1) & 0xffe;
/* transfer size(force short
alignment) */
dma3_adrs = (Uint32*)( 0xfffeb070 ) ;
/* Source Address Incremnet
Register(SAI3) */
*dma3_adrs = 0x00000002;
/* 2byte */
dma3_adrs = (Uint32*)( 0xfffeb074 ) ;
/* Destination Address Incremnet
Register(DAI3)*/
*dma3_adrs = 0x00000002;
/* 2byte */
dma3_adrs = (Uint32*)( 0xfffeb078 ) ;
/* Channel Control Register(CCR3) */
*dma3_adrs = 0x00000104;
/*
EXTRQ=0,INTRQD=0,INTENT=0,XTACT=1,XFSZ=001,ONEAD=0 */
do{
for(i=0;i<125;i++);
/* don't disturb DMA(memory) bus */
dma3_adrs = (Uint32*)( 0xfffeb07c ); /* Channel Status Register(CSR3) */
dma_status = *dma3_adrs;
/* read status register */
}while( dma_status != 0x60 );
/* NCHNC & NTRNFC(Normal Transfer
Completion) */
*dma3_adrs = 0xffffffff;
/* clear CSR3 */
return;
}
A-46
付録 A TX3927 プログラミングサンプル集
A.1.4
PIO
JMR-TX3927 上で で LED の点灯をさせる簡単な例です。PIO を使用可能にするためにピ
ン コ ン フ ィ グ レ ー シ ョ ン レ ジ ス タ (PCFG) や オ ー プ ン ド レ イ ン コ ン ト ロ ー ル レ ジ ス タ
(XPIOOD)、方向コントロールレジスタ(XPIODIR)の設定が必要になります。
■ ファイル名: pio.c
#include
#include
#include
#include
#include
<stdio.h>
<setjmp.h>
<string.h>
"console.h"
"menu.h"
/* TX3927 PIO のスイッチ/LED の実行例です。 */
/*
PIO Direction Control register address
PIO Data Out register Address
PIO Data 15,14,13,12bit DIP Switchs
1 -> LED off
0 -> LED on
PIO Data 11,10bit LEDs
Switch ON -> 0
Switch OFF -> 1
*/
/* LED 12bit off */
int initPIO(void){
volatile int *pcfg,*xpiood;
pcfg
= (volatile int *)0xfffee008;
xpiood = (volatile int *)0xfffef50c;
*pcfg
= 0x08fc3131;
*xpiood = 0x00000000;
return 0;
}
int led1(void)
{
volatile int *pdir,*pdo;
pdir = (volatile int *)0xfffef508;
pdo = (volatile int *)0xfffef500;
*pdir = 0x0000f000;
*pdo = 0x00001000;
return 0;
}
A-47
0xfffef508
0xfffef500
付録 A TX3927 プログラミングサンプル集
A.2
PCI コントローラ
A.2.1
PCI コントローラの初期化
PCI コントローラの初期化手順のサンプルです。JMR-TX3927 上で
•
バスに接続されている PCI デバイスの検出
•
メモリおよび割り込みの設定
•
TX3927 からのマスタアクセス、スレーブアクセス空間の設定
を行っています。
ただし、このサンプルコードでは、コンフィグレーション type0 のみサポートしているため、
PCI ブリッジデバイスはコンフィグレーションできません。また、マルチファンクションデバ
イスについても検出のみで、実際のマルチファンクションに対する処理は行っていません。ま
た、JMR-TX3927 ボードは動的なインタラプトルーティング機能を持っていませんので、割
り込みはボード設計時に固定的に割り振られている割り込み番号を使用するようになってい
ます。
プログラム構成は以下のようになっています。
: PCI コントローラ初期化
Init_PCI
: 3927PCI バスに接続されたデバイスの検出
+-- find_device
|
+--- set_pci_irq
: 割り込みテーブルの作成
|
+--- get_addr_size
: アドレス空間の要求サイズを検出
+-- pci_mem_space_mapping
+--- sort_table
: アドレス空間の配置
: アドレスサイズ順にソート
+--- swap_table: リソースマップの入れ替え
その他に以下のサブルーチンを使用しています。
get_pci_config
: PCI バスコンフィグレーション ライトアクセス
put_pci_config PCI
: バスコンフィグレーション リードアクセス
master_abort_check
: マスタアボート検出
■ ファイル名: pci3927.c
/***************************************************************
Copyright (C) 1999 TOSHIBA Corporation
TX3927 PCI Initialize function
module PCI3927.c
1999.05.05 Akira.Tanaka
1999.07.19 chenge C file
$Id: PCI3927.c 1.2 1999/07/19 01:29:45 tanaka Exp $
***************************************************************/
#include
#include
#include
#include
<stdio.h>
"cosbd_27.h"
"intcosmp27.h"
"tx3927.h"
/**************************************************************/
#define TC35815
0xd
#define max_device
22
A-48
付録 A TX3927 プログラミングサンプル集
#define TX3927_IO_PA
0x08000000
/* GBus I/O ベースアドレス
*/
#define TX3927_MEM_PA
0x04000000
/* GBus メモリベースアドレス
*/
#define TX3927_END_PA
0x03FFFFFF
/* 64MByte 空間
*/
#define PCI_IO_PA
0x08000000
/* PCI I/O ベースアドレス
*/
#define PCI_MEM_PA
0x04000000
/* PCI メモリベースアドレス
*/
#define PCI_END_PA
0x03FFFFFF
/* 64MByte
*/
#define TX3927_VA
0xa0000000
/* 仮想アドレスオフセット
*/
#define START_PA
0x00000000
/* target start address
*/
#define MEM_OFFSET
0x02000000
/* target space offset(4 i/o) */
/* 上記 define でのアドレスマッピングイメージ
*/
/*
*/
/* TX3927
p-address
PCI Bus
*/
/* v-address
MEMORY
(GBus addr)
p-address
*/
/* ac00_0000 |---------| 0c00_0000
|---------|
*/
/*
| pcic
|
| PCI bus |
*/
/*
<64MB> | IO space| -------------->
<64MB> | IO space|
*/
/* a800_0000 |---------| 0800_0000
0800_0000|---------|
*/
/*
|
pcic |<TX3927_IO_PA> <PCI_IO_PA> | PCI bus |
*/
/*
<64MB> |MEM space| -------------->
<64MB> |MEM space|
*/
/* a400_0000 |---------| 0400_0000
0400_0000|_________|
*/
/*
|
|<TX3927_MEM_PA><PCI_MEM_PA>|
|
*/
/*
|
|
|
|
*/
/*
|
|
|
|
*/
/* a200_0000 |---------| 0200_0000
0200_0000|---------|
*/
/*
| SDRAM
|
<MEM_OFFSET>
|
PCI
|
*/
/*
<32MB> | space
|
<--------------- <32MB> | Target |
*/
/* a000_0000 |
| 0000_0000
0000_0000| Space |
*/
/*
~~~~~~~~~~
<START_PA>
~~~~~~~~~~
*/
/**************************************************************/
/* TX3927 の PCIC(内部)割り込み信号(固定)
*/
/**************************************************************/
#define PCI_INT10
0xa
/**************************************************************/
/* TX3927 PCI リソーステーブルの定義
*/
/* device 型の構造体宣言
*/
/**************************************************************/
struct device {
int
id;
/* IDSEL に等しい */
int
bus_num;
/* バスナンバー、0 のみ */
unsigned short vender_id;
/* ベンダーID */
unsigned short device_id;
/* デバイス ID */
unsigned short subsvid;
/* サブシステムベンダ ID */
unsigned short subsid;
/* サブシステム ID */
int
io_addr_size;
/* I/O 要求アドレスサイズ */
int
mem_addr_size;
/* メモリ要求アドレスサイズ */
int
io_base_addr;
/* 割り当てた I/O ベースアドレス */
int
mem_base_addr;
/* 割り当てた Memory ベースアドレス */
int
int_num;
/* 割り込み信号の番号(TX3927 の INT*) */
int
flg;
/* 使用済みフラグ”1”の時使用済み */
};
/**************************************************************/
/**************************************************************/
struct IRQtable {
int
bus_num;
/* Bus Number */
int
dev_num;
/* Device Number */
int
int_pin;
/* Interrupt Pin 0=INTA..3=INTD */
int
int_line; /* Interrupt Line 0x0=INT0..0xF=INT15 */
int
slot_num; /* Slot Number */
};
A-49
付録 A TX3927 プログラミングサンプル集
/**************************************************************/
/* TX3927 board PCI Interrupt Resouce Table
*/
/**************************************************************/
struct IntResTbl {
int
INTR_NUM; /* 割り込み信号(TX3927)の番号 */
int
DEV_ID;
/* この割り込み信号に接続されるデバイスのデバイスナンバー */
int
SLOT_NUM; /* スロットナンバー。0 の場合はプラットフォーム */
};
struct device
sd[max_device];
struct device
tmp_sd[max_device];
struct IRQtable irq[max_device];
/* 大域変数の宣言 */
/* リソーステーブルのソート */
/* IRQ リソーステーブル */
/* TX3927 board PCI Interrupt Resource Table */
/* 最後のテーブルに識別子として 0xff を ID に設定 */
struct IntResTbl inttbl[8] = {
{0, 0x0f, 0},/* INT[0] PCI Card CN (INTA) or PCI Card Edge (INTC) *
{1, 0x12, 3},
{1, 0x13, 2},
{1, 0x14, 1},
{3, 0x0d, 0},/* INT[3] TC35815 or 10M Ether(from I/O board)
*/
{0, 0xff, 0}
};
/* TX3927 ボードの割り込み接続情報の設定
*/
/* TX3927 外部割込み int[3:0]の接続
*/
/* TX3927 側
接続されているデバイス
*/
/* INT[0] PCI Card CN (INTA) or PCI Card Edge (INTC) */
/* INT[1] IO-C
*/
/* INT[2] ISA-C (from I/O board)
*/
/* INT[3] TC35815 or 10M Ether(from I/O board)
*/
/* INT[10]TX3927 PCIC (INTA<- まちがい 99/05/11)
*/
/* TX3927 は INTA を持たないインタラプトピンは0に設定
*/
/* INT[2:0]は設定不要
*/
/* INT[3]の設定
*/
/**************************************************************/
/* TX3927 PCIC 初期化
*/
/**************************************************************/
void
Init_PCI(int mode)
{
/* TX3927 PCIC の初期化 */
CPUReg->pci_conf.PCISTAT = MEN;
/* マスタイネーブル */
CPUReg->pci_lsp.IOMAS = 0xfc000000; /* PCI I/O サイズ
64Mbyte */
CPUReg->pci_lsp.MMAS = 0xfc000000; /* PCI メモリサイズ 64Mbyte */
CPUReg->pci_lsp.LBC
= EPCAD;
/* TX3927 target コンフィグディセーブル */
/* INT[10]の設定(TX3927 ターゲット側、PCI デバイスとは別に設定 */
CPUReg->pci_conf.ML
= 0xffff010a;
/* PCI に接続されたデバイス検出 */
find_device(mode);
CPUReg->pci_iconf.IPBMMAR
CPUReg->pci_iconf.ILBMMAR
CPUReg->pci_iconf.IPBIOMAR
CPUReg->pci_iconf.ILBIOMAR
=
=
=
=
PCI_MEM_PA;
TX3927_MEM_PA;
PCI_IO_PA;
TX3927_IO_PA;
/*
/*
/*
/*
PCI メモリベースアドレス */
GBus メモリベースアドレス */
PCI I/O ベースアドレス */
GBusI/O ベースアドレス */
/* TX3927 ターゲットの割付は要検討 */
/* I/O スペースは、0200_0000 より、256byte。
*/
/* しかし TX3927 ボードのメモリ領域の外に設定してあることに注意 */
CPUReg->pci_lsp.MBAS
CPUReg->pci_lsp.IOBAS
CPUReg->pci_conf.MBA
= 0xfe000000;
= 0xffffff00;
= START_PA;
A-50
/* ターゲットメモリサイズ 32Mbyte */
/* ターゲット IO サイズ 256byte */
/* ターゲットメモリベースアドレス */
付録 A TX3927 プログラミングサンプル集
CPUReg->pci_conf.IOBA
= START_PA + MEM_OFFSET;
CPUReg->pci_tconf.TLBMMA = START_PA;
CPUReg->pci_tconf.TLBIOMA = START_PA + MEM_OFFSET;
/* ターゲット IO ベースアドレス */
/* ターゲット GBus メモリアドレ */
/* ターゲット GBus I/O アドレス */
/* PCIC メモリ・IO アクセスイネーブル、コンフィグディセーブル */
CPUReg->pci_lsp.LBC = EPCAD | ILMDE | ILIDE;
/* 検索したデバイスにアドレスを割り付ける */
pci_mem_space_mapping();
if (master_abort_check() != 0) {
printf("¥n Config Register Access Error!! after mapping");
CPUReg->pci_conf.PCISTAT = RECMA | MEN;
}
/* アービタの設定 */
/* CPUReg->pci_ext.REQ_TRACE = 0x73737373; */
CPUReg->pci_ext.REQ_TRACE = 0x73210731;
CPUReg->pci_ext.BM = 0x00000000;
/* clear */
/* アービタのイネーブル */
CPUReg->pci_ext.PBAPMC = 0x00000002;
}
/****************************************************************/
/* 3927PCI バスに接続されたデバイスの検出
*/
/*
デバイスが検出されなかった場合は sd[idsel].id に 0xff を入れる
*/
/*
デバイスが検出されたら、マルチデバイスの検出を実行
*/
/*
マルチデバイスでも今のところは何もしない。
*/
/*
割り込み情報の収集。INT 番号をリソーステーブル sd に追加
*/
/*
デバイスがあったときに作られる情報テーブルは間を空けずに
*/
/*
順番に並べる。
(IDSEL の番号とは一致させない)
*/
/*
SubsystemVenderID,Subsysstem ID の追加
*/
/****************************************************************/
int
find_device(int mode)
{
int
idsel, i;
int
vid, htype;
int
intp, intl;
int
num;
int
base_addr;
num = 0;
for (i = 0; i < max_device; i++) {
idsel = i;
/* read vender ID */
vid = 0xffff & get_pci_config(idsel, 0, 0x00);
if ((vid != 0xffff) && (master_abort_check() == 0)) {
sd[num].id
= idsel;
sd[num].vender_id = 0xffff & get_pci_config(idsel, 0, 0x00);
sd[num].device_id = 0xffff & (get_pci_config(idsel, 0, 0x00) >> 16);
sd[num].subsvid
= 0xffff & get_pci_config(idsel, 0, 0x2c);
sd[num].subsid
= 0xffff & (get_pci_config(idsel, 0, 0x2c) >> 16);
sd[num].bus_num
= 0;
sd[num].flg
= 0;
/* read header type */
htype = 0x80 & (get_pci_config(idsel, 0, 0x08) >> 16);
if (htype != 0)
printf("¥n this device is multi device ");
/* 割り込みピンをリード。ID と一致した INT 番号をセット(* InterruptLine)*/
/* int_num をリード */
A-51
付録 A TX3927 プログラミングサンプル集
set_pci_irq(num, mode);
/* read Interrupt line */
intl = 0x0f & get_pci_config(idsel, 0, 0x3c);
sd[num].int_num = intl;
/* base address size check */
/* check 0x10 may be I/O base address register */
base_addr = get_addr_size(idsel, 0x10);
if ((base_addr & 0x00000001) && (base_addr != 0))
sd[num].io_addr_size = base_addr;
else {
if (base_addr != 0)
sd[num].mem_addr_size = base_addr;
else {
sd[num].mem_addr_size = 0xffffffff;
sd[num].io_addr_size = 0xffffffff;
}
}
/* check 0x14 may be memory base address register */
base_addr = get_addr_size(idsel, 0x14);
if ((base_addr & 0x00000001) && (base_addr != 0))
sd[num].io_addr_size = base_addr;
else {
if (base_addr != 0)
sd[num].mem_addr_size = base_addr;
else {
sd[num].mem_addr_size = 0xffffffff;
sd[num].io_addr_size = 0xffffffff;
}
}
num = num + 1;
} else {
/* デバイスが見つからなかった場合はステータスを復帰 */
CPUReg->pci_conf.PCISTAT = RECMA | MEN;
if (master_abort_check() != 0)
/* 再チェック */
printf("¥n Ireagal status !!");
}
}
/* 最後のテーブルの ID に 0xff を代入(識別子) */
sd[num].id = 0xff;
}
/**************************************************************/
/* 割り込みリソーステーブルの定義
*/
/**************************************************************/
void
set_pci_irq(int num, int mode)
{
int
i;
int
past_data; /* 変更前の状態 */
int
undef;
/* 割り込みリソースが定義できないとき:1 */
i = 0;
undef = 0;
while (inttbl[i].DEV_ID != sd[num].id) {
/* テーブルから一致するデバイス番号検索 */
if (inttbl[i].DEV_ID == 0xff) {
/* テーブルの最後まで検索した場合検索終了 */
undef = 1;
if (mode != 0)
printf("¥n %02x is not defined! please check Interrupt
Resouce Table ", sd[num].id);
A-52
付録 A TX3927 プログラミングサンプル集
break;
/* リソーステーブルと一致しない場合に警告 */
}
i++;
}
/* 該当デバイス番号にて割り込みリソーステーブルを設定 */
if (undef == 0) {
irq[i].bus_num = 0;
irq[i].dev_num = inttbl[i].DEV_ID;
irq[i].int_pin = (get_pci_config(irq[i].dev_num, 0, 0x3c) >> 8) & 0x07;
irq[i].int_line = 0x0f & inttbl[i].INTR_NUM;
irq[i].slot_num = inttbl[i].SLOT_NUM;
/* 割込み信号を Interrupt_Line レジスタにライト */
/* ワードライトなので他のレジスタはマスク(リードライトする) */
past_data = get_pci_config(irq[i].dev_num, 0, 0x3c) | (0x000000ff &
irq[i].int_line);
/* printf("¥n put_pci_config reg03h"); */
put_pci_config(irq[i].dev_num, 0, 0x3c, past_data);
}
}
/***********************************************************************/
/* ベースアドレスレジスタからアドレス空間の要求サイズを検出
*/
/* ベースアドレスレジスタに 0xffffffff をライト。ライトできたビット
*/
/* により、要求サイズを検出。オール0ならば予約のレジスタ
*/
/* bit0 が1ならば、IO ベースアドレスレジスタ、0 ならメモリベースレジスタ
*/
/* xx レジスタは 10h,14h,18h,1ch,20h,24h を検索する xx
*/
/* 戻り値はサイズ
*/
/***********************************************************************/
int
get_addr_size(int idsel, int reg)
{
int
ret;
/* int reg[6]={0x10,0x14,0x18,0x1c,0x20,0x24}; */
put_pci_config(idsel, 0, reg, 0xffffffff);
ret = get_pci_config(idsel, 0, reg);
return ret;
}
/**************************************************************/
/* 取得した要求スペースによりアドレス空間の配置
*/
/**************************************************************/
int
pci_mem_space_mapping(void)
{
int
mem_space;
/* メモリが必要とする領域 */
int
io_space;
/* I/O が必要とする領域 */
int
next_io_addr;
/* マッピング後の利用可能な IO 最下位アドレス */
int
next_mem_addr;
/* マッピング後の利用可能な MEMORY 最下位アドレス */
int
i;
int
ret;
i = 0;
next_io_addr = PCI_IO_PA;
next_mem_addr = PCI_MEM_PA;
/* マッピング前処理 テーブルのソーティング */
/* IO space size sort */
sort_table(0);
/* ソート完了 */
/* IO space mapping */
while (sd[i].id != 0xff) {
if (sd[i].io_addr_size != 0xffffffff)
A-53
付録 A TX3927 プログラミングサンプル集
io_space = ~(0xfffffffc & sd[i].io_addr_size) + 1;
sd[i].io_base_addr = next_io_addr;
next_io_addr = next_io_addr + io_space;
if (next_io_addr > PCI_END_PA + PCI_IO_PA)
printf("¥n IO mapping failed!! ");
i++;
}
/* MEM space size sort */
sort_table(1);
/* ソート完了 */
i = 0;
/* MEM space mapping */
while (sd[i].id != 0xff) {
if (sd[i].mem_addr_size != 0xffffffff)
mem_space = ~(0xfffffff0 & sd[i].mem_addr_size) + 1;
sd[i].mem_base_addr = next_mem_addr;
next_mem_addr = next_mem_addr + mem_space;
if (next_mem_addr > PCI_END_PA + PCI_MEM_PA)
printf("¥n memory mapping failed!! ");
i++;
}
}
/**************************************************************/
/* リソース情報のアドレスサイズで大きい順にソートを実行
*/
/* スイッチによりメモリと I/O を切り替えて実行する
*/
/**************************************************************/
int
sort_table(int sw)
{
int
i, j;
i = 0;
if (sw == 0) {
/* IO space */
while (sd[i].id != 0xff) {
if (i != 0) {
j = 0;
while (j < i) {
if (~sd[i].io_addr_size > ~sd[j].io_addr_size) {
swap_table(j, i);
} else
j++;
}
}
i++;
}
} else {
/* MEM space */
while (sd[i].id != 0xff) {
if (i != 0) {
j = 0;
while (j < i) {
if (~sd[i].mem_addr_size > ~sd[j].mem_addr_size)
{
swap_table(j, i);
} else
j++;
}
} i++;
}
}
}
A-54
付録 A TX3927 プログラミングサンプル集
/**************************************************************/
/* リソースマップの入れ替え
*/
/**************************************************************/
void
swap_table(int p, int c)
{
struct device
tmp;
tmp = sd[p];
sd[p] = sd[c];
sd[c] = tmp;
}
/****************************************************************/
/* PCI バスコンフィグレーション ライトアクセス
*/
/* デバイス番号、ファンクション番号、レジスタ番号、ライトデータ
*/
/****************************************************************/
int
put_pci_config(int id, int func, int reg, int buf)
{
int
confreg;
confreg = 0x00000000 | ((id & 0x1f) << 11) | ((func & 0x7) << 8) | reg;
CPUReg->pci_lsp.ICAR = confreg;
CPUReg->pci_lsp.ICDR = buf;
}
/**************************************************************/
/* PCI バスコンフィグレーション リードアクセス
*/
/* デバイス番号、ファンクション番号、レジスタ番号
*/
/* 戻り値:リードデータ
*/
/**************************************************************/
int
get_pci_config(int id, int func, int reg)
{
int
ret, confreg;
confreg = 0x00000000 | ((id & 0x1f) << 11) | ((func & 0x7) << 8) | reg;
CPUReg->pci_lsp.ICAR = confreg;
ret = CPUReg->pci_lsp.ICDR;
return ret;
}
/**************************************************************/
/* 存在しないデバイスへのアクセスによるマスタアボート検出
*/
/**************************************************************/
int
master_abort_check(void)
{
int
ret;
ret = CPUReg->pci_conf.PCISTAT & RECMA;
return ret;
}
A-55
付録 A TX3927 プログラミングサンプル集
A-56
付録 B 熱特性
付録B 熱特性
B.1
FIN 付きパッケージ熱抵抗概略
FIN 付きパッケージの熱抵抗は一般的に次式で定義されます。
θja=θjc+θcf+θfa
θja: ジャンクションから周囲への熱抵抗 (℃/W)
θjc: ジャンクションからケース表面への熱抵抗 (℃/W)
θcf: ケース表面から FIN 表面への熱抵抗 (℃/W)
θfa: FIN 表面から周囲への熱抵抗 (℃/W)
パッケージの熱抵抗は一般的に次式で定義されます。
θja=(Tj–Ta)/P
Ta
θfa
Tf
θcf
Tc
θjc
Tj
図 B.1.1 FIN 付きイメージ図
B-1
付録 B 熱特性
パッケージ熱抵抗測定概略
熱抵抗とはパッケージ内で発生した熱をどれだけパッケージ外部へ逃がすことができるかを表
した値です。熱抵抗の値が小さいと熱が逃げやすく、逆に大きいと熱が逃げにくいということにな
ります。よって、熱抵抗値の低いパッケージは高消費電力に対応できるということになります。通
常単位は[℃/W]を用います。
熱抵抗は、チップ表面(Tj) – パッケージ表面(Tc)間の値のθjc、パッケージ表面 – 周囲(Ta)間の
θca、チップ表面 – 周囲間のθja があります。
θja = θjc + θca
…①
Ta
θca
Tc
Tj
θjc
図 B.2.1 イメージ図
熱抵抗θja・θjc を求めるには、チップ表面温度(Tj)を知る必要があります。しかし、チップ表
面温度を直接計ることはできません。そこで、温度に敏感なダイオードの特性を利用して周囲温度
– ダイオード順方向電圧の校正直線(図 B.2.2)を作成します。[SEMI (G46-88)参考]
ダイオード順方向電圧(Vf)[mV]
B.2
KVf
周囲温度(Ta)[℃]
図 B.2.2 校正直線
B-2
付録 B 熱特性
校正直線を作成するには、測定デバイスを恒温槽に入れ、デバイスを一定時間加熱した後、ダイ
オードに順方向の定電流(Im)を流し、温度に対してリニアに変化するダイオード順方向電圧(Vf)を
測定します(このときデバイスを一定時間加熱することで、Ta = Tj となっています)。温度を振って
数ポイント(最低 2 ポイント)測定することにより、Vf の温度依存計数 Kvf (≡ ∆V/∆T)を求めること
ができます。Kvf を求めておくことで、デバイスの Vf 電圧の測定でチップ表面温度(Tj)を求めるこ
とができます。
熱抵抗θja は、チップ表面温度(Tj)と周囲温度(Ta)の差から、そのときに印可している消費電力
(P)で割ることにより求めることができます。式は以下のようになります。
θja =
Tj - Ta
…②
P
θjc の場合、周囲温度がパッケージ表面温度(Tc)に置き換えることにより求めることができます。
通常のデバイスを用いて熱抵抗の測定を行う場合、保護ダイオードを発熱用と温度モニタ用と兼
用しているため、加熱電力用回路側で電力(P)を加えて発熱させ、温度モニタ回路に切り替え定電
流(Im)を流し、あるタイミングでダイオード電圧(Vf)を測定するという方法を用います(図 B.2.3・
図 B.2.4を参照)。[SEMI (G46-88)参考]
測定には桑野電気製∆mV TESTER TH-256 を使用します。
温度モニター回路
加熱電力用回路
VDD
Im
V
Vf
P
VSS
スイッチングパルス
図 B.2.3 測定回路
加熱電力用回路駆動時間
P
加熱電力用回路
温度モニター回路駆動時間
Im
温度モニター回路
温度モニターパルスタイミング
Vf1
図 B.2.4 切り替えタイミング
B-3
付録 B 熱特性
測定は、発熱させない状態(常温時)の Vf 電圧を基準にするので、その測定を行います(温度モニ
タ用回路のみ使用します)。定電流を流し Vf を測定するのですが、デバイスが馴染むまで少々の時
間を必要とします。Vf 値が安定したところで数値を読み取ります。これが初期値(Vf0)となります
ので時間をしっかり取り安定させます(Vf0=Ta)。
Vf0 測定後、デバイスに電力 P を加え、パルスを繰り返し十分に熱平衡状態になったときに定電
流を流したときの Vf1 値を測定します(Vf1=Tj)。発熱時 Vf1 から初期値 Vf0 の差を温度依存計数 Kvf
より温度の換算をし、そのときの電力 P で割ることにより熱抵抗を求めることができます。計算式
は以下のようになります。
θja =
Tj − Ta
P
=
(Vf1 − Vf 0 ) K Vf
…③
P
図 B.2.5は液槽式のθjc 測定装置の概略図です。パッケージ表面に熱電対を装着し液槽に入れ、
槽内の液体を連続的に撹拌する。加熱電力印可中も液槽温度を一定に保つように調整を行います。
加熱電力印可などの測定方法および装置はθja と同じです。基本的な測定方法は同じです。[SEMI
(G30-88)および(G43-87)参照]
θjc は液槽に入れたりと装置が大掛かりになってしまうため、実際には熱電対をパッケージ表面
に付けて大気中で測定を行う場合があります。厳密には違いますが、この場合でもθjc と言うこと
があります。
SEMI ではこの測定方法をψjt といいます。
当社では大気中で測定しており、厳密にはψjt しか測定していません。[SEMI (G69-96)参照]
温度制御器
液槽
液体循環器
図 B.2.5 液槽式θjc 測定装置
B-4
付録 B 熱特性
B.3
FIN の設計計算例
CHIP・PKG・周囲温度・消費電力が与えられて FIN を選択する場合、下記のようになります。
Tc = 70℃ (パッケージ温度)
周囲温度: Ta = 60℃
消費電力: P = 1W
θca = (Tc–Ta)/P
= (70–60)/1
= 10℃/W
FIN の熱抵抗:
θcf = 0.17℃/W (水谷電気工業(株)のカタログより)
θfa =θca–θc–θcf
= 10–0.17
= 9.83℃/W
よって、FIN は熱抵抗 9.83℃/W 以下のものを選択すればよいことになります。
※ なお、当社では信頼性保証の問題があり、FIN 付けなどの作業はできません。
B-5
付録 B 熱特性
B-6
32 ビット TX System RISC
TX39 ファミリー TMPR3927A
定価 2,380 円
発行年月日
2 0 0 0 年 1 1 月
発
株式会社東芝 セミコンダクター社
行
発行協力
東芝ドキュメンツ株式会社
編
マイクロプロセッサ統括部
(旧版 02434D3AA)
集
2000.11(PC)0.2k
02434D3AB
Fly UP