# PM_ForceToResetHardware

## 構文

      #include <twl/spi.h>

      void PM_ForceToResetHardware( void );

## 引数

なし。

## 返り値

なし。

## 説明

強制的にハードウェアリセットを行います。

この関数は基本的にアプリケーションが直接呼ぶべきではありません。自らをハードウェアリセットするという目的ならば、 `OS_RebootSystem()` を呼んでください。また、システムメニューに戻る場合は `OS_JumpToSystemMenu()` を呼んでください。これらの関数は、メインメモリの先頭領域に動作を決定するパラメータを書き込んで本関数をを呼ぶという仕組みなので、何かの原因でそのパラメータが書き換えられていた場合には予期せぬ動作を引き起こす可能性があります。なので、本関数はハードウェアリセットを利用する別のシステム関数が使う関数です。(もちろん、メモリに書き込まれるパラメータをユーザがきちんと把握した上で本関数を呼び出し、意図した動作を行うことも出来ます。)

この関数は ARM7 に該当動作を行うコマンドを PXI で送り、それを受け取った ARM7 側が PMIC を操作することで実行されます。

`PM_AppendPreExitCallback()` などで設定した終了コールバック (Pre コールバック) は呼ばれません。必要な終了処理を行ってからハードウェアリセットを行うようにしてください、。Post コールバックは呼ばれます。

似た関数として `OS_ResetSystem()` があります。`OS_ResetSystem()` はハードウェアリセットではなく、必要なプログラムをロードしなおしてエントリーアドレスから再実行するソフトウェアリセット関数です。

本関数は、他のデバイスが SPI を占有して BUSY 状態だった場合でも成功するまでリトライを繰り返します。

## 参照

`PM_Init, PM_ForceToPowerOff, OS_ResetSystem
`

## 履歴

2009/06/03 `PM_Init()` についての記述を削除 (`OS_Init()` が必須となったため)
2009/04/13 Post 終了コールバックは呼ばれると記述変更
2008/08/23 BUSY 状態のことを追記
2008/02/07 初版