R8C FLGレジスタの確認方法

HEWを使用し、R8Cを使用したUART通信プログラムの
開発を行っています。

時々UART2の受信割り込みが発生しなくなる
現状が発生しており、原因を調べています。
この状態でも、該当の割り込み要求ビット(RI)は
\”1\”となっていることを確認しました。
このため、設定されているIPLのレベルより
UART2の優先レベルが低いため割り込みが発生しなく
なるのでは?と考えたのですが
どのようにIPL(FLGレジスタ)の値を
確認すればよいのでしょうか?

エミュレータは、H/W側の都合で接続できません。
開発にはC言語を使用しています。
よろしくおねがいいたします。

  • yoshさん

    エミュレーターが使用できない場合は昔ながらのデバッグ方法ですけども、メインルーチンのループ中からFLGレジスタの値を余っているポート(もしくはシリアル)から出力するようにすれば、確認できそうですよ。

    さらにポートが余っていたら、FLGを出力するたびに出力値をトグルさせるポートもつけておくと、FLGが更新されているか分かって良いと思います。(プログラムが暴走しているかどうかも分かりますし)
  • kirin様

    アドバイスありがとうございます。
    余りシリアルポートをデバッグ出力に設定したのですが、
    FLGレジスタ値を、C言語のソース上で
    どうやって読み出せばよいのかが
    分からないのです。。

    SFR_R836c.h内には定義がありませんので・・・

  • yoshさん

    失礼しました。
    FLGレジスタ値を、C言語のソース上でリードする方法でしたね。

    C言語オンリーでの読み出し方法は、ちょっと思いつかないので
    とりあえず、アセンブラ関数を呼び出して、STC命令でFLGレジスタを読み出すのがいいかと思います。

    C言語の型宣言を
    extern int asm_func( void );
    として、アセンブラで以下の様に記述してみてはいかがでしょう?
    .section program
    .glb _asm_func
    _asm_func:
    stc FLG\,R0 ;return値(int型)にFLGを格納
    rts
    .END

    詳細は、C コンパイラユーザーズマニュアルの53ページあたり
    http://documentation.renesas.com/doc/products/tool/rjj10j2478_nc30_u.pdf
  • C言語でCPUレジスタを扱うには実は以下のような宣言だけでいいかもしれませんorz

    /*============================*/
    /* CPUレジスタの宣言 */
    /*============================*/
    #pragma CREG _flg_ flg

    http://www2.himdx.net/mcr/product/download/mini_micom_car_ver2_r8c_35a_exercise_manual.pdf 87ページ
    サンプルコードに記載がありました。
  • kirin様

    提示いただいたサンプルコードで
    正しく動作させることができました!
    どうもありがとうございました!