IKUZOと申します、RX631のメモリプロテクションユニットの使用方法がわかりません、サンプルコードも探したのですが該当が無いようです、アドバイスをいただけませんでしょうか?
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
すみません。 言葉が足りませんでした。 領域開始ページ番号の RSPAGEnのRSPN[27:0]が28ビットしかないため、 アドレス空間でいう下位4ビットという意味です。 領域終了ページ番号の REPAGEnのREPN[27:0]も同様です。 このため、以下の設定ですと、 RSPAGEnのRSPN[27:0]=0; REPAGEnのREPN[27:0]=0; アクセス制御領域が0x00000000~0x0000000F となっているのではないかということです。
ここで一応mpu.cのソースを開示します /////////////////////////////////////////////////////////////////////// //アクセス例外 /////////////////////////////////////////////////////////////////////// uint32_t g_mpu_err_instruction_adrs; void Access_Inst(void) { sci2_put('*'); MPU.MPECLR.BIT.CLR=1; } /////////////////////////////////////////////////////////////////////// //アクセス例外 /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// //スーパバイザモードからユーザモードに変更 /////////////////////////////////////////////////////////////////////// void Change_PSW_PM_to_UserMode(void) { MVFC PSW,R1 OR #00100000h,R1←ユザーモードフラグ(コメントアウトするとスパーバイザー) PUSH.L R1 MVFC PC,R1 ADD #10,R1 PUSH.L R1 RTE NOP NOP NOP NOP NOP NOP } /////////////////////////////////////////////////////////////////////// //スーパバイザモードからユーザモードに変更 /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// //MPUの初期化 /////////////////////////////////////////////////////////////////////// void mpu_init(void) { MPU.RSPAGE0.LONG=0; MPU.REPAGE0.BIT.REPN=0; MPU.REPAGE0.BIT.UAC=7; MPU.REPAGE0.BIT.V=0; MPU.RSPAGE1.LONG=0; MPU.REPAGE1.BIT.REPN=0; MPU.REPAGE1.BIT.UAC=7; MPU.REPAGE1.BIT.V=0; MPU.RSPAGE2.LONG=0; MPU.REPAGE2.BIT.REPN=0; MPU.REPAGE2.BIT.UAC=7; MPU.REPAGE2.BIT.V=0; MPU.RSPAGE3.LONG=0; MPU.REPAGE3.BIT.REPN=0; MPU.REPAGE3.BIT.UAC=7; MPU.REPAGE3.BIT.V=0; MPU.RSPAGE4.LONG=0; MPU.REPAGE4.BIT.REPN=0; MPU.REPAGE4.BIT.UAC=7; MPU.REPAGE4.BIT.V=0; MPU.RSPAGE5.LONG=0; MPU.REPAGE5.BIT.REPN=0; MPU.REPAGE5.BIT.UAC=7; MPU.REPAGE5.BIT.V=0; MPU.RSPAGE6.LONG=0; MPU.REPAGE6.BIT.REPN=0; MPU.REPAGE6.BIT.UAC=7; MPU.REPAGE6.BIT.V=0; MPU.RSPAGE7.LONG=0; MPU.REPAGE7.BIT.REPN=0; MPU.REPAGE7.BIT.UAC=7; MPU.REPAGE7.BIT.V=0; MPU.MPBAC.BIT.UBAC=7;//111←その他の保護領域(0にすると例外発生します) printf("RSPAGE0=0x%08lX\r",MPU.RSPAGE0.LONG ); printf("REPAGE0=0x%08lX\r",MPU.REPAGE0.LONG ); printf("RSPAGE1=0x%08lX\r",MPU.RSPAGE1.LONG ); printf("REPAGE1=0x%08lX\r",MPU.REPAGE1.LONG ); printf("RSPAGE2=0x%08lX\r",MPU.RSPAGE2.LONG ); printf("REPAGE3=0x%08lX\r",MPU.REPAGE2.LONG ); printf("RSPAGE3=0x%08lX\r",MPU.RSPAGE3.LONG ); printf("REPAGE3=0x%08lX\r",MPU.REPAGE3.LONG ); printf("RSPAGE4=0x%08lX\r",MPU.RSPAGE4.LONG ); printf("REPAGE4=0x%08lX\r",MPU.REPAGE4.LONG ); printf("RSPAGE5=0x%08lX\r",MPU.RSPAGE5.LONG ); printf("REPAGE5=0x%08lX\r",MPU.REPAGE5.LONG ); printf("RSPAGE6=0x%08lX\r",MPU.RSPAGE6.LONG ); printf("REPAGE6=0x%08lX\r",MPU.REPAGE6.LONG ); printf("RSPAGE7=0x%08lX\r",MPU.RSPAGE7.LONG ); printf("REPAGE7=0x%08lX\r",MPU.REPAGE7.LONG ); printf("MPBAC =0x%08lX\r",MPU.MPBAC.LONG ); MPU.MPEN.LONG=(long)1;//メモリプロテクション機能を有効 Change_PSW_PM_to_UserMode();//ユザーモードに nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); printf("設定成功\r");←ここまではOK } /////////////////////////////////////////////////////////////////////// //MPUの初期化 /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// //デバックテスト用 /////////////////////////////////////////////////////////////////////// int cmd_test(char *str) {mpu_init(); printf("正常にリターンしました.\r");←保護ONでは例外なし、ここまで来ず return CMD_OK; } /////////////////////////////////////////////////////////////////////// //デバックテスト用 ///////////////////////////////////////////////////////////////////////
この折にE1エミュレータ [R0E000010KCE00]販売店にお願いしました。
とりあえず、
E1エミュレータ接続は今すぐできませんということでしてシミュレータ等でできるのかもしれないことを伺いましたのでその方向で行ければと思います