高速動作モードから低速動作モードへ切り替えディープスリープへ遷移した場合に復帰できなくなる。

環境:e2Studio(v7.5.0)+E1デバッガ
FITモジュール:r_usb_basic_mini、r_usb_pdcd_mini
通信ソフト:Tera Term(v4.102)
マイコン(評価ボード):(RX111)HSBRX111-64(R5F51115ADFM)
                         https://www.hokutodenshi.co.jp/7/HSBRX111_64.htm


お世話になります。

現在、高速動作モードで動作中にディープスリープに入れて、
省電力化を検討しています。

高速→中速のケースは問題なく確認できたのですが、
高速→低速のケースで復帰できなくて困っております。

低速動作モードにするためにはメインクロック発振(12MHz)から
サブクロック(32.7KHz)発振に切り替える必要があるとのことで、

データシート:「11.5.1 動作電力制御モード設定方法の手順」に従い、
ディープスリープへ遷移しておりますが、
USB割り込みトリガー(コントロール転送割り込み)を
受けれていないのかスリープ状態から復帰できません。
※中速動作モード時のスリープ状態の場合は問題なく復帰できました。

以下にソースコードを記載しますので、
何か原因となる個所はありませんでしょうか。

尚、コントロール割り込みはTeraTernのCOMポート接続、切断を使用しております。

------------------------通常動作時(高速動作モード)------------------------

    SYSTEM.PRCR.WORD        = 0xa50b;      // クロック関連書込み許可
    SYSTEM.MOSCWTCR.BYTE    = 0x06;        // メインクロック待機時間設定
    SYSTEM.PLLCR.BIT.PLIDIV = 0x01;        // 2分周 6MHZ
    SYSTEM.PLLCR.BIT.STC    = 0x0F;        // 8逓倍 48MHz
    SYSTEM.MOSCCR.BIT.MOSTP = 0x0;         // メインクロック発振器停止ビット    (停止:1 動作:0)
    SYSTEM.SCKCR3.BIT.CKSEL = 0x2;         // main回路選択
    SYSTEM.LOCOCR.BIT.LCSTP = 0x1;         // LOCO設定 (停止:1 動作:0)
    SYSTEM.PLLCR2.BIT.PLLEN = 0x0;         // PLL設定  (停止:1 動作:0)
    SYSTEM.SCKCR.LONG       = 0x11000101;  //システムクロック設定(全て2分周:24MHz)
    SYSTEM.SCKCR3.WORD      = 0x0400;      // PLL回路選択
    SYSTEM.PRCR.WORD        = 0xa500;      // クロック関連書込み禁止

 

------------------------ディープスリープ突入処理(高速→低速(Sleep)→高速にしたい)---------
    SYSTEM.PRCR.WORD = 0xa50b;
    SYSTEM.SOSCCR.BIT.SOSTP = 0x0;        // サブクロック発振器停止ビット    (停止:1 動作:0)
    SYSTEM.SCKCR3.BIT.CKSEL = 0x3;        // サブクロック発振器選択
    SYSTEM.PLLCR2.BIT.PLLEN = 0x1;        // PLL設定  (停止:1 動作:0)
    SYSTEM.MOSCCR.BIT.MOSTP = 0x1;        // メインクロック発振器停止ビット    (停止:1 動作:0)
    SYSTEM.PRCR.WORD = 0xa500;

    while(SYSTEM.SOPCCR.BIT.SOPCMTSF != 0){nop();}
    SYSTEM.PRCR.WORD = 0xa502;
    SYSTEM.SOPCCR.BIT.SOPCM = 0x1;    //低速動作モードへ突入
    SYSTEM.PRCR.WORD = 0xa500;
    while(SYSTEM.SOPCCR.BIT.SOPCMTSF != 0){nop();}


    IR(USB0,USBI0)=0;   //USBを割り込み要因(復帰要因)に設定
    IPR(USB0,USBI0)=0xf;//USB割り込み要因優先度最大に設定
    IEN(USB0,USBI0)=1;  //USB割り込みイネーブル

    USB0.INTENB0.WORD = 0x0800;  //コントロール転送割り込みのみ有効
    SYSTEM.PRCR.WORD = 0xa502;
    SYSTEM.MSTPCRC.BIT.DSLPE = 1;  //ディープスリープイネーブル
    SYSTEM.PRCR.WORD = 0xa500;
    while(SYSTEM.MSTPCRC.BIT.DSLPE != 1){nop();}

    wait();//ディープスリープ突入


    while(SYSTEM.SOPCCR.BIT.SOPCMTSF != 0){nop();}
    SYSTEM.PRCR.WORD = 0xa502;
    SYSTEM.SOPCCR.BIT.SOPCM = 0x0;  //低速動作モードから高速モードへ復帰
    SYSTEM.PRCR.WORD = 0xa500;
    while(SYSTEM.SOPCCR.BIT.SOPCMTSF != 0){nop();}
   
    SYSTEM.PRCR.WORD = 0xa50b;
    SYSTEM.SOSCCR.BIT.SOSTP = 0x1;        // サブクロック発振器停止ビット    (停止:1 動作:0)
    SYSTEM.MOSCCR.BIT.MOSTP = 0x0;        // メインクロック発振器停止ビット    (停止:1 動作:0)
    SYSTEM.PLLCR2.BIT.PLLEN = 0x0;        // PLL設定  (停止:1 動作:0)
    SYSTEM.SCKCR3.BIT.CKSEL = 0x2;        // メインクロック発振器選択
    SYSTEM.PRCR.WORD = 0xa500;
    USB0.INTENB0.WORD = 0xFF00;  //USB関連割り込み有効

Parents Reply Children
No Data