C言語

RAMチェック、不正メモリアクセス検出処理の実装

RAMチェック、不正メモリアクセス検出の処理は、ともにマイコン機能を使用します。
このため、実装的なことはあまりありません。

不正メモリアクセス検出機能について

不正メモリアクセス検出機能は、マイコン機能です。このため、制御レジスタの設定のみで機能が有効となり、開始されます。
不正メモリアクセス検出機能で使用するレジスタは、不正メモリ・アクセス検出制御レジスタ(IAWCTL)です。
ビット7:IAWENは、不正メモリ・アクセス検出の有効無効を切り替えます。1をセットすることで有効となります。

また、このレジスタには、RAM/SFRガード機能の制御も含まれていますので、簡単に補足します。
ビット5、ビット4:GRAM1、GRAM0は、RAM先頭から選択されたバイト分のデータを保護するための機能です。
ビット2、ビット1、ビット0:GPORT、GINT、GCSCは、SFRガード機能で、ガードされたレジスタへの書き込みは無効になり、読み出しのみ可能になります。

今回、不正メモリアクセス検出機能は、ビット7:IAWENを1にセットするのみで、あとは、マイコンが勝手に検出してくれます。
検出すると、リセットを発生させ、マイコンがリセットします。

ただし、今回は、マイコン機能のウォッチドッグタイマを使用します。オプションバイトで設定しますが、このとき、ウォッチドッグタイマを有効にすると、無条件で不正メモリアクセス検出機能も有効となるため、実際は、不正メモリ・アクセス検出制御レジスタ(IAWCTL)の設定は不要です。

上記により、今回は、ウォッチドッグタイマ機能を使用するため、何も設定は行いません。
この場合、ウォッチドッグタイマ動作許可(オプションバイトWDTON=1)に設定したときに、不正メモリアクセス検出機能は開始されます。

RAMチェック処理

RAMチェック処理もマイコン機能です。制御レジスタの設定のみで機能が有効になります。
使用する制御レジスタは、RAMパリティ・エラー制御レジスタ(RPECTL)、リセット・コントロール・フラグ・レジスタ(RESF)です。
RAMパリティ・エラー制御レジスタ(RPECTL)のビット7:RPERDISが0の場合、パリティ・エラー・リセット発生を許可します。
マイコンのリセット時は0のため、設定する必要はないので、こちらも特に設定する必要はないです。

マイコンのハードウェアマニュアルのRAMパリティチェックフローでは、パリティエラー発生による内部リセットが発生していた場合、RAMパリティ・エラー制御レジスタ(RPECTL)ののビット7:RPERDISを1(リセット発生を禁止)にして、RAM読み出しし、RAMパリティ・エラー制御レジスタ(RPECTL)のビット0:RPEF(パリティ・エラー・ステータス・フラグ)が1の場合、RAM故障処理を行い、0の場合は、パリティ・エラーリセット発生を許可にしてから通常動作に戻るようになっていますが、今回は、このような処理を行うことはしません。

RAMチェックでは、8ビットにつき1ビットのパリティが付加されています。これにより、データ書き込み時にパリティが書き込まれ、データ読み出し時にパリティがチェックされます。
このチェック時にエラーを検出すると、マイコンリセットが発生するという動作になります。

結局、実装することはなにもないのですが、RAMチェック、不正メモリアクセス検出処理の実装については、以上となります。





-C言語