RXマイコンでの割込み禁止区間の作り方

割込みの禁止区間の作り方について質問させてください。

現在の環境は、
RX64Mマイコン
CC-RX V3.000 コンパイラ
e2studio
スマートコンフィグレータ
を使用しています。

外部とスマートコンフィグレータで生成したコンポーネント(Config_SCIFx)を使用して通信のやり取りをしています。
生成した「R_Config_SCIF9_Serial_Receive」関数を無限ループ内で利用してデータの受信を行っているのですが、
割込みタイミングによっては、データ受信直後に「R_Config_SCIF9_Serial_Receive」が再び呼び出されることで、取得したデータが損失する危険性があるかなと思っています。
下記のコード内で示した位置で割込み禁止にするには具体的にどうすれば良いのでしょうか。

while(1) {

uint8_t array[DATA];        

//この位置か

if(0 == Flag)                 //割込みのコールバック関数にて立てているフラグが立っていないときに実行
{
    
         R_Config_SCIFx_Serial_Receive(array, DATA);

//この位置まで割込み禁止


}
else 
{
        Flag = 0;                //受信が完了し割込みがかかるとフラグが立つので、次のデータ受信をするためにフラグをもどす
}

    //後続の受信データ処理

    }

   

Parents
  • setpsw_i()とclrpsw_i()と言うマクロが用意されています。PSWのIビットの操作をします。

    質問とは直接関係ないですが、このコメントで指定された箇所ですとFlag=1で割り込み禁止解除ができないです。

  • Yamamoto様

    PSWのIビット操作で可能なのですね。マクロという事は、何かヘッダファイルが必要なのでしょうか。
    すいません。割込み禁止解除ができないとはどういう意味でしょうか。

  • //この位置まで割込み禁止
    この場所でsetpsw_i()を書いて割り込みを有効化すると

    clrpsw_i()で割り込み禁止にしたあとelseブロックに入ると解除されないと言うことです。

    マクロはmachine.hで宣言されています。

Reply
  • //この位置まで割込み禁止
    この場所でsetpsw_i()を書いて割り込みを有効化すると

    clrpsw_i()で割り込み禁止にしたあとelseブロックに入ると解除されないと言うことです。

    マクロはmachine.hで宣言されています。

Children