TWLでは、本体ハードウェアをブロックごとに設定する機能があります。クロックの供給の有無や旧DSとの互換動作設定などを制御することが出来ます。
システムコンフィグ(SCFG) ブロックは NITRO ハードウェアには存在しませんので、基本的にこれらの関数は TWL ハードウェア上で呼び出されることが前提となります。但し SCFG_GetCpuSpeed() はどの環境で呼び出しても正しい値が返るように設計されています。
TWLでは、ARM9用システムROMとして、TWL CPU 用の64KB ROM と、NITRO CPU 用の 8KB ROM が用意されています。この切り替えはARM7で行います。ARM9 からはどちらに設定されているかを取得することが可能です。
取得関数は SCFG_GetSystemRomType() です。
ARM9 用セキュアROMに対し、AHBからアクセス可能かどうかを取得することが可能です。この設定は、ARM7で行います。
取得関数は SCFG_IsSecureRomAccessible() です。
TWL では、以下のブロックへのクロック供給を制御することが可能です。
・カメラ用 CAM_CKI
SCFG_SetCameraCKIClock()で設定し、SCFG_IsCameraCKIClockEnable()で状態取得します。
・新規WRAM (WRAM-A/B/C) ブロック
SCFG_IsClockSuppliedToWram()で状態取得します。
設定は起動時に ARM7側から行って固定されるので変更は出来ません。
・カメラI/F ブロック
SCFG_SupplyClockToCamera()で設定、SCFG_IsClockSuppliedToCamera()で状態取得します。
・DSP ブロック
SCFG_SupplyClockToDSP()で設定、SCFG_IsClockSuppliedToDSP()で状態取得します。
TWL では ARM9 プロセッサの動作周波数を以下の中から切り替えることが可能です。
・NITROと同じ 67.03MHz で動作させる
・倍速の 134.06MHz で動作させる
SCFG_SetCpuSpeed()で設定し、SCFG_GetCpuSpeed()で状態を取得します。
切り替えは ITCM上のコードで走り、かつ必要な空ループを挟んで安全に行われます。
TWLモードの場合NitroMain()に入った時点で倍速となっており、OS_Init()でもその設定は変更しません。
・システムコンフィグブロック
このSCFG ライブラリで行う、システムコンフィグブロックへのアクセスを制御することが可能です。SCFG_SetConfigBlockInaccessible()でアクセスを不可能にします。
一度不可能状態にすると、それ以降(このアクセス制御を含め)すべてのコンフィグブロックへのアクセスが出来なくなります。通常はアプリケーションから不可能状態にはしないようにしてください。現在の状態を取得するにはSCFG_IsConfigBlockAccessible()を呼んでください。
・新規WRAM (WRAM-A/B/C)
新規WRAM (WRAM-A/B/C) のアクセスを制御します。この設定は ARM7 から行いますので、ARM9
からは SCFG_IsWramAccessible() で状態を読むことは可能ですが、変更はできません。
・新規DMA
新規DMAブロックへのアクセスを制御します。
SCFG_SetNDmaAccessible()で設定を行い、SCFG_IsNDmaAccessible()で状態を取得します。
TWLモードでは、初期値は 「アクセス可能」 となります。
・カメラ
カメラI/F ブロックへのアクセスを制御します。
SCFG_SetCameraAccessible()で設定を行い、SCFG_IsCameraAccessible()で状態を取得します。
TWLモードでは、初期値は 「アクセス可能」 となります。
・DSP
DSPブロックへのアクセスを制御します。
SCFG_SetDSPAccessible()で設定を行い、SCFG_IsDSPAccessible()で状態を取得します。
TWLモードでは、初期値は 「アクセス可能」 となります。
・INTC 回路
ARM9 の割り込みコントローラを拡張するかどうか設定することが可能です。
SCFG_SetIntcExpanded()で設定を行い、SCFG_IsIntcExpanded()で状態を取得します。
TWLモードでは、初期値は 「拡張する」 となります。
・LCDC回路
LCDC回路を拡張する(INI 読み出し)するかどうか設定することが可能です。
SCFG_SetLCDCExpanded()で設定を行い、SCFG_IsLCDCExpanded()で状態を取得します。
TWLモードでは、初期値は 「拡張する」 となります。
・VRAMアクセス
VRAMアクセスを拡張する(Byte Write 可、NonWait Word Access) することが可能です。
SCFG_SetVramExpanded()で設定を行い、SCFG_IsVramExpanded()で状態を取得します。
TWLモードでは、初期値は 「拡張する」 となります。
PSRAM アクセスの境界を設定することが可能です。4MB、16MB、32MB から選択します。
で設定を行い、
SCFG_SetPsramBoundary()SCFG_GetPsramBoundary()で状態を取得します。
ただしこの設定はユーザが変更すべきではありません。
・旧DMA 回路
NITROの 旧DMA 回路を修正した回路を使用することが可能です。
SCFG_SetDmacFixed()で設定を行い、SCFG_IsDmacFixed()で状態を取得します。
初期値は 「修正しない」 となります。
・ジオメトリ回路
NITRO のジオメトリ回路を修正した回路を使用することが可能です。
SCFG_SetGeometryFixed()で設定を行い、SCFG_IsGeometryFixed()で状態を取得します。
初期値は 「修正しない」 となります。
・レンダラー回路
NITRO のレンダラー回路を修正した回路を使用することが可能です。
SCFG_SetRendererFixed()で設定を行い、SCFG_IsRendererFixed()で状態を取得します。
初期値は 「修正しない」 となります。
・2Dエンジン回路
NITRO の 2Dエンジン回路を修正した回路を使用することが可能です。
SCFG_Set2DEngineFixed()で設定を行い、SCFG_Is2DEngineFixed()で状態を取得します。
初期値は 「修正しない」 となります。
・除算器回路
NITRO の除算器回路を修正した回路を使用することが可能です。
SCFG_SetDividerFixed()で設定を行い、SCFG_IsDividerFixed()で状態を取得します。
初期値は 「修正しない」 となります。
・メモリカードI/F 回路
NITRO のメモリカードI/F 回路を修正した回路を使用することが可能です。
SCFG_SetCardFixed()で設定を行い、SCFG_IsCardFixed()で状態を取得します。
初期値は 「修正しない」 となります。
2009/01/19 ARM9動作周波数に関する説明を追加
2008/07/15 参照及び履歴を追加
2007/09/06 初版