R8C/1x のPD0プロテクションに関して

こんにちは。
現在R8C/1xを使っているのですが、
少々問題が発生しています。

電源投入時にごく稀に(30回に1回ぐらい)
PD0の設定に失敗します。

PD0設定失敗の原因はプロテクトにあるのではないかと
プログラムを確認したところ
PRC2ビットによる書き込み許可と
PD0の設定は連続しており、マニュアル通りの設定手順を守っています。

なおかつ、
PD0の設定より以前にIフラグにより割り込みを禁止しています。

PRC2ビットは任意の番地への書き込みで
禁止状態に戻るとありますが、
何か別の原因で禁止状態に戻ってしまうということが
あるのでしょうか?
どうかお知恵をお貸しいただければと思います。
Parents
  • こんにちは、NAKAといいます。

    以前、R8C21238でPD0の設定を行いましたが、不具合はで
    たことはありませんでした。
    もし、不具合の可能性がありましたら、こちらの掲示板でも
    展開していただければと思います。

    以下、以前の設定です。


    /************************************
    //関数名:fn_Init_Port(void)
    //動作
    :ポートの初期化
    //引数
    :

    //作成
    :NAKA
    07.01.26
    // *********************************/
    void fn_Init_Port(void)
    {

    pd2_0 = 1; //LED_B用PortをOUTにセット
    pd2_1 = 1; //LED_G用PortをOUTにセット
    pd2_5 = 1; //LED_1用PortをOUTにセット
    pd2_4 = 1; //LED_2用PortをOUTにセット
    pd2_3 = 1; //LED_3用PortをOUTにセット
    pd6_3 = 0; //SW1用PortをINにセット

    pd1_3 = 1; //RS233デバイスのシャットダウン端子PortをOUTにセット


    prc2 = 1; //プロテクト2の解除
    pd0_7 = 1; //CANデバイスのシャットダウン端子PortをOUTにセット
    prc2 = 0; //プロテクト2の実行

    pd4_5 = 0; //INT0 INPUT

    pd1_7 = 0; //INT1 INPUT
    pd6_6 = 0; //INT2 INPUT
    pd6_7 = 0; //INT3 INPUT

    }

    /**************************************
    //関数名:fn_Init_Device(void)
    //動作
    :各種デバイスの初期化
    //引数
    :
    //作成
    :NAKA
    07.01.26
    // ***********************************/
    void fn_Init_Device(void)
    {


    fn_Init_Clock(); //システムクロック初期設定
    fn_Init_Port(); //ポート初期設定
    fn_Init_SCI0(); //シリアル0初期設定 クロック同期

    fn_Init_SCI1(); //シリアル1初期設定
    fn_Init_CAN(); //CAN初期設定
    fn_Init_TRD0(); //タイマーRD(0ch)初期設定(1msorPWM)
    fn_Init_TRD1(); //タイマーRD(1ch)初期設定(2msorPWM)
    fn_Init_TRA(); //タイマーRA初期設定(25ms)
    fn_Init_TRB(); //タイマーRB初期設定(25ms)
    fn_Init_TRE(); //タイマーRE初期設定(0.8ms)
    fn_Init_AD(); //AD変換器の初期化

    fn_Init_INT0(); //外部割込み0の初期化
    fn_Init_INT1(); //外部割込み1の初期化
    fn_Init_SSU(); //SSUの初期化

    }

    **************************************/
    /*************************************/
    /*
    メインルーチン

    */
    /*************************************/
    /*************************************/
    void main(void)
    {
    unsigned short
    i; //汎用カウンター
    unsigned short
    j; //汎用カウンター

    //初期設定//

    asm(\”FCLR I\”); //割り込み禁止
    fn_Init_Device(); //機能デバイスのイニシャライズ
    TR_Device_EN(ON); //通信デバイスのハードイネーブル
    asm(\”LDIPL #0\”); //割り込み許可レベルの設定
    asm(\”FSET I\”); //割り込み許可



    //初期値設定//
    i = 0; //汎用カウンタクリア
    j = 0; //汎用カウンタクリア

    while(1)
    {
Reply
  • こんにちは、NAKAといいます。

    以前、R8C21238でPD0の設定を行いましたが、不具合はで
    たことはありませんでした。
    もし、不具合の可能性がありましたら、こちらの掲示板でも
    展開していただければと思います。

    以下、以前の設定です。


    /************************************
    //関数名:fn_Init_Port(void)
    //動作
    :ポートの初期化
    //引数
    :

    //作成
    :NAKA
    07.01.26
    // *********************************/
    void fn_Init_Port(void)
    {

    pd2_0 = 1; //LED_B用PortをOUTにセット
    pd2_1 = 1; //LED_G用PortをOUTにセット
    pd2_5 = 1; //LED_1用PortをOUTにセット
    pd2_4 = 1; //LED_2用PortをOUTにセット
    pd2_3 = 1; //LED_3用PortをOUTにセット
    pd6_3 = 0; //SW1用PortをINにセット

    pd1_3 = 1; //RS233デバイスのシャットダウン端子PortをOUTにセット


    prc2 = 1; //プロテクト2の解除
    pd0_7 = 1; //CANデバイスのシャットダウン端子PortをOUTにセット
    prc2 = 0; //プロテクト2の実行

    pd4_5 = 0; //INT0 INPUT

    pd1_7 = 0; //INT1 INPUT
    pd6_6 = 0; //INT2 INPUT
    pd6_7 = 0; //INT3 INPUT

    }

    /**************************************
    //関数名:fn_Init_Device(void)
    //動作
    :各種デバイスの初期化
    //引数
    :
    //作成
    :NAKA
    07.01.26
    // ***********************************/
    void fn_Init_Device(void)
    {


    fn_Init_Clock(); //システムクロック初期設定
    fn_Init_Port(); //ポート初期設定
    fn_Init_SCI0(); //シリアル0初期設定 クロック同期

    fn_Init_SCI1(); //シリアル1初期設定
    fn_Init_CAN(); //CAN初期設定
    fn_Init_TRD0(); //タイマーRD(0ch)初期設定(1msorPWM)
    fn_Init_TRD1(); //タイマーRD(1ch)初期設定(2msorPWM)
    fn_Init_TRA(); //タイマーRA初期設定(25ms)
    fn_Init_TRB(); //タイマーRB初期設定(25ms)
    fn_Init_TRE(); //タイマーRE初期設定(0.8ms)
    fn_Init_AD(); //AD変換器の初期化

    fn_Init_INT0(); //外部割込み0の初期化
    fn_Init_INT1(); //外部割込み1の初期化
    fn_Init_SSU(); //SSUの初期化

    }

    **************************************/
    /*************************************/
    /*
    メインルーチン

    */
    /*************************************/
    /*************************************/
    void main(void)
    {
    unsigned short
    i; //汎用カウンター
    unsigned short
    j; //汎用カウンター

    //初期設定//

    asm(\”FCLR I\”); //割り込み禁止
    fn_Init_Device(); //機能デバイスのイニシャライズ
    TR_Device_EN(ON); //通信デバイスのハードイネーブル
    asm(\”LDIPL #0\”); //割り込み許可レベルの設定
    asm(\”FSET I\”); //割り込み許可



    //初期値設定//
    i = 0; //汎用カウンタクリア
    j = 0; //汎用カウンタクリア

    while(1)
    {
Children
No Data