環境: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関連割り込み有効