GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
こんにちは。
GR-peachでディープスリープモードを使いたいのですが、復帰方法がわからず質問をさせていただいています。
main関数でアラーム割り込みを設定した後に、以下のような関数を実行し、ディープスリープモードに入ることはできました。しかし、アラーム割り込みを設定した時刻を過ぎても復帰できず、関数の後に書いた処理が実行されませんでした。
void Deep_standby_mode(){ volatile uint32_t dummy_32; volatile uint8_t dummy_8; //----standby_mode_en bitをセット---- L2C.REG15_POWER_CTRL = 0x00000001uL; dummy_32 = L2C.REG15_POWER_CTRL; //----保持する必要のある保持用内臓RAMを選択---- CPGRRAMKP = CPG_RRAMKP_RRAMKP0 |CPG_RRAMKP_RRAMKP1 |CPG_RRAMKP_RRAMKP2 |CPG_RRAMKP_RRAMKP3; //----ディープスタンバイ復帰後の動作を決定---- CPGDSCTR = 1<<CPG_DSCTR_RAMBOOT_SHIFT | 1<<CPG_DSCTR_EBUSKEEPE_SHIFT ; //----復帰ソース選択(1:enable 0:disable)---- CPGDSSSR = 1<<CPG_DSSSR_P8_2_SHIFT | 1<<CPG_DSSSR_P9_1_SHIFT | 1<<CPG_DSSSR_P2_15_SHIFT | 1<<CPG_DSSSR_P7_8_SHIFT | 1<<CPG_DSSSR_P5_9_SHIFT | 1<<CPG_DSSSR_P6_4_SHIFT | 1<<CPG_DSSSR_RTCAR_SHIFT | 1<<CPG_DSSSR_NMI_SHIFT | 1<<CPG_DSSSR_P3_3_SHIFT | 1<<CPG_DSSSR_P8_7_SHIFT | 1<<CPG_DSSSR_P2_12_SHIFT | 1<<CPG_DSSSR_P3_1_SHIFT | 1<<CPG_DSSSR_P3_9_SHIFT | 1<<CPG_DSSSR_P6_2_SHIFT ; dummy_32 = CPGDSSSR; //----状態変化割り込みエッジ選択(1:rising 0:falling)---- CPGDSESR = 1<<CPG_DSESR_P8_2E_SHIFT | 1<<CPG_DSESR_P9_1E_SHIFT | 1<<CPG_DSESR_P2_15E_SHIFT | 1<<CPG_DSESR_P7_8E_SHIFT | 1<<CPG_DSESR_P5_9E_SHIFT | 1<<CPG_DSESR_P6_4E_SHIFT | 1<<CPG_DSESR_NMIE_SHIFT | 1<<CPG_DSESR_P3_3E_SHIFT | 1<<CPG_DSESR_P8_7E_SHIFT | 1<<CPG_DSESR_P2_12E_SHIFT | 1<<CPG_DSESR_P3_1E_SHIFT | 1<<CPG_DSESR_P3_9E_SHIFT | 1<<CPG_DSESR_P6_2E_SHIFT ; dummy_32 = CPGDSESR; //----STBY,DEEP bitsセット---- CPGSTBCR1 = 1<<CPG_STBCR1_DEEP_SHIFT | 1<<CPG_STBCR1_STBY_SHIFT ; dummy_8 = CPGSTBCR1; //----DSRFクリア---- CPGDSFR = 0; dummy_32 = CPGDSFR; //----ICCICRクリア---- INTCICCICR = 0; dummy_32 = INTCICCICR; //----WFIを実行---- __WFI(); //スリープから復帰------------------------------------------------------------ //----周辺機能の再設定---- SystemInit(); //----IOKEEPビット読み出し→クリア---- dummy_32 = CPGDSFR; CPGDSFR &= ~CPG_DSFR_IOKEEP; }
解決方法をご存じでしたら、ご教授願います。
ディープスタンバイからの復帰後はパワーオンリセット処理となるため、「__WFI();」以降の処理は実行されません。
下記にMbed環境でのディープスタンバイ復帰の例を書いてみました。
https://os.mbed.com/users/dkato/notebook/deep-standby-mode/