Comments
Description
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