ソフトウェアスタンバイからのUSBレジューム割り込み復帰

早速ですが、掲題の件に関してご教授頂きたく投稿しました。

RX111 + E1デバッガ +E2studioの構成にてソフトウェアスタンバイ突入・復帰0のデバッグを行っており、

現在下記のような状態でIRQ要因では復帰できるものの、USBレジューム要因では復帰が出来ません。

USBレジューム割り込みをイネーブルに設定しており、割り込みルーチンに突入することは

確認できており、r_usb_basic_miniおよびr_usb_pdcd_miniコンポーネントを使用し、

マイコンをペリフェラル側にしたUSB通信は確認できているのでUSB関係の初期設定は問題ないと考えています。

クロックは、外部水晶12MHzを2分周8逓倍し48MHzとし、これを2分周してシステムクロック・周辺クロック等で

使用しています。

設定漏れ等、復帰できない原因と考えられる部分はございますでしょうか。

 

■状況

・IRQ端子からの割り込み要因使用時

 ディープスリープからの復帰OK

 ソフトウェアスタンバイからの復帰OK

 

・USBレジューム割り込み(USBR0)要因使用時

  ディープスリープからの復帰OK

  ソフトウェアスタンバイからの復帰NG ←この条件が動かない

 

■ソース (ソフトウェアスタンバイ突入部分抜粋)


 R_USB_Open(&ctrl, &cfg);
 R_USB_PullUp(USB_ON); //FullSpeed(12Mbps)設定 D+=PU,D-=PD

 SYSTEM.PRCR.WORD = 0xA501;

 //DTCモジュールオフ
 DTC.DTCST.BIT.DTCST = 0;

 //発振停止検出許可ビットをオフ
 SYSTEM.OSTDCR.BIT.OSTDE = 0;

  //レジューム割り込み有効
 USB0.INTENB0.BIT.RSME = 1;

 //USBI0割り込み禁止
 IR(USB0,USBI0)=0;
 IPR(USB0,USBI0)=0x0;
 IEN(USB0,USBI0)=0;

 //USBROレジュームを割り込み要因(復帰要因)に設定
 IR(USB0,USBR0)=0;
 IPR(USB0,USBR0)=0xF;
 IEN(USB0,USBR0)=1;

  //PSW.I=0に設定
 clrpsw_i();

 //ディープスリープにしない
 SYSTEM.MSTPCRC.BIT.DSLPE = 0;

  //ソフトウェアスタンバイ
 SYSTEM.SBYCR.BIT.SSBY = 1;
 while(SYSTEM.SBYCR.BIT.SSBY != 1){nop();}

 wait();

  • コピペミスで、プロテクトレジスタの設定は
     SYSTEM.PRCR.WORD = 0xA501; ではなく、
     SYSTEM.PRCR.WORD = 0xA503; としています。

    また、最終行のwait();実行にて、e2studio上のデバッグステータスは
    "実行中"からスタンバイ"になることと消費電流が削減されることは確認できています。
  • こんにちは

    >ソフトウェアスタンバイからの復帰NG ←この条件が動かない

    NGとはどんな状態になっているのでしょうか。状況によって何かアドバイスがいただけるかもしれません。
    また、E1とターゲット接続時の注意事項「3.11. マイコン単体動作時とデバッグ時の相違点」などに該当しないか今一度確認してみては。
    www.renesas.com/.../r20ut0399jj1200_e1e20e2e2lite_rx.pdf
  • じま様

    ご提案ありがとうございます。

    NGの意味ですが、wait();の後に復帰確認としてポートのトグル動作をさせており、このトグル動作が起きない
    (=復帰していない)ことをNGと表現しております。OKと表記した条件はトグル動作が発生しているため、
    復帰したと判断しています。

    ソフトウェアスタンバイ突入後、USBを抜き差ししUSBレジューム割り込みを発生させても、e2studioの左下に
    表示されるデバッグステータスも"スタンバイ"のままとなっている状態ですが、スリープ、ディープスリープモード
    ですと、デバッグステータスが"スリープ"の状態でUSB抜き差しをすると"実行中"に変わりますので復帰が
    出来ています。また、ソフトウェアスタンバイであってもIRQ割り込みではステータスが"スタンバイ"から"実行中"に
    変わりますので、復帰が出来ています。
    つまり、ソフトウェアスタンバイ状態からUSBレジューム要因での復帰のみ出来ていない状況です。

    >E1とターゲット接続時の注意事項「3.11. マイコン単体動作時とデバッグ時の相違点」などに該当しないか

    関係ありそうな所は、下記の部分で確かにデバッガ停止・中断でスタンバイが解除される動作はしておりますが
    本件については残念ながら関係しそうにありません。
      
      3.11. マイコン単体動作時とデバッグ時の相違点
      デバッグ時は、低消費電力状態の解除要因の他に、エミュレータデバッガの【停止】ボタンもしくは、
      【中断】ボタンによっても状態が解除され、ブレークします。

    念のためプログラムをライタ(Renesas Flash Programmer)で書き込み、E1を外した状態で確認しましたが、
    OK,NGの結果は変わりませんでした。
  • こんにちは

    とりあえずデバッガの制限事項に該当しないとなると、以下マニュアル抜粋にある「発信安定待ち時間」が十分か、USB割り込み要求が発生しておりそれを読み込めているか、などが要チェックでしょうか。

    具体的なアドバイスができず申し訳ないです。他の方からアドバイスがあると良いですがRenesasの技術サポートへ問い合わせてみるという手もあります。

    ”サポート問い合せ先”メールフォーム:
    ja-support.renesas.com/dashboard

  • じま様

    ご返信が遅くなり申し訳ありません。

    >下マニュアル抜粋にある「発信安定待ち時間」
    発振安定時間を最長にしてやってみましたがやはり復帰できませんでした。

    >USB割り込み要求が発生しておりそれを読み込めているか
    ソフトウェアスタンバイに入ると、USBを抜き差ししてもレジューム割り込み自体が発生していないようです。
    (スリープ、ディープスリープではレジューム割り込みは発生します)

    今の所原因不明ですので、サポートに問い合わせ中です。
    もし進展ありましたらご報告させて頂きます。
  • 本件、解決いたしました。

    ソフトウェアスタンバイで復帰出来ない理由は、スタンバイ復帰のタイミングで
    USBデバイスステートがSUSPENDステートに入りきれていなかったためでした。
    SUSPENDステートに居るときでないと復帰割り込み要因としていたRESUME割り込みは
    発生しないようです。

    ◆ディープスリープの場合(=解除できる場合)

     ①PCキーボードからの入力でディープスリープ突入。
      突入直後のUSBデバイスステートはCONFIGUREDステート(INTSTS0.DVSQ=011)
     ②PCからUSBを抜くと、USBデバイスステートがSUSPENDステート(INTSTS0.DVSQ=1xx)になる
     ③PCにUSBを挿すとRESUME割り込み発生
     ④ディープスリープ解除

    ◆ソフトウェアスタンバイの場合(=解除できない場合)

     ①PCキーボードからの入力でソフトウェアスタンバイ突入。
      突入直後のUSBデバイスステートはCONFIGUREDステート(INTSTS0.DVSQ=011)
     ②PCからUSBを抜いても、USBデバイスステートはCONFIGUREDステート(INTSTS0.DVSQ=011)のまま
     ③PCにUSBを挿してもSUSPENDステートではないためRESUME割り込みが発生せず
     ④ソフトウェアスタンバイは解除されない

    下記のように、あらかじめSUSPENDステートに遷移させたうえで
    USBを挿すと、ソフトウェアスタンバイが解除できました。

     ①PCからUSBを抜いて、USBデバイスステートをSUSPENDステート(INTSTS0.DVSQ=1xx)へ遷移させる
     ②ソフトウェアスタンバイに突入
     ③PCにUSBを挿すとRESUME割り込み発生
     ④ソフトウェアスタンバイ解除