”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。
IKUZOと申します、RX631のメモリプロテクションユニットの使用方法がわかりません、サンプルコードも探したのですが該当が無いようです、アドバイスをいただけませんでしょうか?
ものすごく大雑把な紹介は以下にありますが、もう少し具体的な「使用例・応用例」をお探しなのでしょうか。
それとも、何か想定している使い方はあるのでしょうか。
RX 周辺機能 → メモリプロテクションユニット(MPU)
「MPUの使用方法」はハードウェアマニュアルにありますが、サンプルコードが見当たりませんね。
IKUZOさん、こんにちは。NoMaYです。RX62N,RX621グループ用の資料がありますが、RX63N,RX631グループでも参考になりそうな気がします。(すみません、検索して見つかったものをチラ見した程度ですが、、、)Renesasキーワード検索: メモリプロテクションユニットwww.renesas.com/ja-jp/search/keyword-search.html#q=メモリプロテクションユニットドキュメント: RX62N、RX621グループ メモリプロテクションユニットの設定例www.renesas.com/ja-jp/doc/products/mpumcu/apn/rx/001/r01an1078jj0100_rx62n.pdfサンプルプログラム: RX62N、RX621グループ メモリプロテクションユニットの設定例www.renesas.com/ja-jp/software/D3014498.html
メモリプロテクションユニットを追加いたしました、SDRAM部分に書き込み例外を設定すると、即、例外が発生いたします、SDRAM部分というのはリフレッシュ動作しているので、これは書き込み例外の要因になるのでしょうか?、そうではなく、どんな領域でも初期化時に例外が発生いたします、アドバイスお願いできませんでしょうか下記ソースコード
void mpu_init(void){ uint32_t check_reg=CLEAR; long reg_start[1]; long reg_end[1]; reg_start[0]=(_UDWORD)__sectop("PResetPRG"); reg_end[0]=mpu_reg_set((_UDWORD)__secend("RBF"),0x00000007);//0111 RWXV MPU.RSPAGE0.LONG=reg_start[0]; //セクションの開始アドレス MPU.REPAGE0.LONG=reg_end[0]; //セクションの終了アドレス(要調整) MPU.RSPAGE1.LONG=0; MPU.REPAGE1.LONG=0; MPU.RSPAGE2.LONG=0; MPU.REPAGE2.LONG=0; MPU.RSPAGE3.LONG=0; MPU.REPAGE3.LONG=0; MPU.RSPAGE4.LONG=0; MPU.REPAGE4.LONG=0; MPU.RSPAGE5.LONG=0; MPU.REPAGE5.LONG=0; MPU.RSPAGE6.LONG=0; MPU.REPAGE6.LONG=0; MPU.MPBAC.LONG=0; //メモリプロテクション機能を有効 MPU.MPEN.LONG=(long)1; verify_mpu_reg(MPU.RSPAGE0.LONG,reg_start[0]) verify_mpu_reg(MPU.REPAGE0.LONG,reg_end[0]) if(check_reg !=0){ printf("MPUの初期化を失敗!\r"); }else{ Change_PSW_PM_to_UserMode(); }}
マニュアルの記述ですが 1.RSPAGEとREPAGEに設定 2.MPENに1としてプロテクション=有効 3.設定内容を比較(設定値==RSPAGEとREPAGEレジスター値)確認 4.ユーザモードへの移行 以上のような簡単なものです、 現状4.の後時点でメモリー例外が発生いたします、例外発生処理に繰り返し飛んで来ます。
試しに1.RSPAGEとREPAGEに設定をオール0(何も登録しない)にしまして
4.ユーザモードへの移行した場合にも、メモリー例外が発生いたします。