# キャッシュ (overview)

ARM9 には、キャッシュ機構が用意されており、局所的なメモリアクセス効率を向上させることができます。ARM9 のキャッシュには 8KByte の命令キャッシュと 4KByte のデータキャッシュがあります。

これらの関数は、OS カテゴリに属しますが、用途が特殊であるため、接頭語は「 OS_ 」ではなく、データキャッシュ関連の関数は 「 DC_ 」、命令キャッシュ関連の命令は「 IC_ 」となります。

## データキャッシュの有効・無効設定

データキャッシュを有効にする関数は、`DC_Enable()` です。

無効にする関数は、 `DC_Disable()` です。

有効か無効かを指定の状態に設定する関数は、`DC_Restore()` です。

これらの命令でデータキャッシュを有効に設定しても、プロテクションリージョンの設定でデータキャッシュが無効になっている場合は有効に切り替えることは出来ません。

## データキャッシュの操作

データキャッシュ中の全てのデータを破棄する関数は `DC_InvalidateAll()` です。
領域を指定してデータキャッシュ中のデータを破棄する関数は `DC_InvalidRange()` です。

データキャッシュ中の全てのデータを書き戻す関数は `DC_StoreAll()` です。
領域を指定してデータキャッシュ中のデータを書き戻す関数は `DC_StoreRange()` です。

データキャッシュ中の全てのデータを書き戻して破棄する関数は `DC_FlushAll()` です。
領域を指定してデータキャッシュ中のデータを書き戻して破棄する関数は `DC_FlushRange()` です。

データキャッシュに指定領域のデータを先読みする関数は `DC_TouchRange()` です。

データキャッシュ中の指定領域のデータが別のキャッシュで置換されないようにロックする関数は `DC_LockdownRange()` です。

キャッシュの書き戻しを終え、ライトバッファが空になったかどうかを調べる関数は `DC_WaitWriteBufferEmpty()` です。

## 命令キャッシュの有効・無効設定

命令キャッシュを有効にする関数は、 `IC_Enable()` です。

無効にする関数は、 `IC_Disable()` です。

有効か無効化を指定の状態に設定する関数は、 `IC_Restore()` です。

これらの命令で命令キャッシュを有効に設定しても、プロテクションリージョンの設定で命令キャッシュが無効になっている場合は有効に切り替えることは出来ません。

## 命令キャッシュの操作

命令キャッシュの中の全てのデータを破棄する関数は `IC_InvalidateAll()` です。

領域を指定して命令キャッシュの中のデータを破棄する関数は `IC_InvalidateRange()` です。

命令キャッシュに指定領域の命令コードを先読みする関数は `IC_PrefetchRange()` です。

命令キャッシュの中の指定領域のデータが別のキャッシュで置換されないようにロックする関数は、 `IC_LockdownRange()` です。

## 参照

`OS関数一覧(キャッシュ)
`

## 履歴

2004/12/16 初版