2 Replies Latest reply on Sep 23, 2020 7:52 PM by NoTa_4591161

    Community Translation - FX2/FX2LP SDCC Eclipse Project: Interrupt not Serviced - KBA231372

    NoTa_4591161

      Hi,               

       

      I would like to translate KBA231372 into Japanese.

      Please confirm to my work.

       

      Thanks,

      Kenshow

        • 1. Re: Community Translation - FX2/FX2LP SDCC Eclipse Project: Interrupt not Serviced - KBA231372
          JuyoungJ_06

          Hi, Kenshow-san

          Confirm to work this KBA.

           

          Thanks

          Jenna

          • 2. Re: Community Translation - FX2/FX2LP SDCC Eclipse Project: Interrupt not Serviced - KBA231372
            NoTa_4591161

            Hi Jenna-san,

                                            

            Japanese translation was over.
            Please check below.

             

            Original KBA:

            FX2/FX2LP SDCC Eclipse Project: Interrupt not Serviced - KBA231372

             

            Thanks.

            Kenshow

            ==============================

             

            タイトル: FX2 / FX2LP SDCC Eclipseプロジェクト:割り込みが処理されない - KBA231372

             

            バージョン:**

             

            質問:
            SDCCベースのFX2 / FX2LP Eclipseプロジェクトの使用中にそれぞれの割り込みがトリガーされたときに、割り込みサービスルーチン(ISR)が実行されないのはなぜでしょうか?

             

            回答:

            SDCCベースのFX2 / FX2LP Eclipseプロジェクトを使用している場合、次の2つの理由により、割り込みがトリガーされた後でもISRが実行されないことがあります。

             

            A. SDCCリンカ:

            SDCCリンカは、アドレス0x0003から始まる割り込みベクターテーブルを配置します。このアドレスが上書きまたは破損した場合、対応するISRへのジャンプは実行されず、割り込みは処理されません。これは避けてください。

             

            xdata変数の不適切な初期化は、割り込みベクターテーブルが上書きされる一般的な理由の1つです。

             

            デフォルトでは、初期化されたxdata変数は8051外部RAM、つまりFX2LPのオンチップRAMの先頭に配置されます(EZ-USBテクニカルリファレンスマニュアルセクション5.3外部プログラムメモリと外部データメモリを参照)。

             

            これにより、内蔵RAMのアドレス0x0003から始まる割り込みベクターテーブルが上書きされる可能性があります。その結果、割り込みベクトルテーブル内のISRへのljmp命令が上書きまたは破損するため、ISRは実行されません。

             

            上書きを回避するには、次のいずれかの方法に従います。

             

            1. xdata変数の絶対アドレス指定:xdata変数は、__ at <address>キーワードを使用して特定のアドレスで初期化できます。コード領域と重複しないように<address>を選択します。

            例:__xdata __at(0x3000)unsigned int testVar;

            これは__xdata変数の初期化ごとに行う必要があります。初期化する変数が多数ある場合、これは面倒な作業になる可能性があります。その場合は、方法2に従ってください。

             

            2. XSEGの配置XSEGはコード領域の後に配置できるため、初期化時にxdata変数がコードと重複しません。

            これは、-xram-loc <value>リンカーコマンドラインオプションを追加することで実行できます。

            ことを注意<> XSEGを配置する必要がありますアドレスです。

            --code-size <limit> MSC51コマンドラインオプションを使用してコードサイズを制限することもできるため、xstackをコード領域の後に重複なしに配置できます。

            <limit> コードサイズの制限であることに注意してください

            リンカは、コードメモリの使用量が指定された制限(<>)内にあるかどうかを確認し、コードサイズの制限を超えると、ROM / EPROM / FLASHメモリが不足していることを示すエラーを生成します

             

            次の手順を実行して、EclipseプロジェクトのSDCCリンカにコマンドラインオプションを追加します。

            1. 対応するEclipseプロジェクトのプロパティに移動します(プロジェクトを右クリックして[ Properties ]をクリックします)。
            2. プロパティウィンドウの左側のペインで、[ C/C++ Build ]セクションから[Settings]を選択します。
            3. [ Tool Settings ]タブで[ SDCCリンカ ]選択します。
            4. コマンドテキストボックスで、sdcc後にコマンドラインオプションを追加します。1参照してください。
            5. [ Apply ]をクリックし、[ OK ]をクリックして変更を適用します。

             

            1. SDCCリンカへのコマンドラインオプションの追加

                 

             

            1では、コードサイズは0x2FFFに制限され、XSEGxdata)はFX2 / FX2LPオンチップRAM0x3000の位置に配置されます。。

             

            B. XPAGEの場所:

            デフォルトのFX2LP Bulkloop_SDCCプロジェクトでは、XPAGEはデフォルトで0x00A0なります

            SDCCユーザーガイド SFRによるセクション4.1.1 pdataアクセスに従って、EZ-USBファミリの場合、プロジェクトのfx2regs.hファイルに次のコード行を追加して、XPAGEをアドレス0x92で定義する必要があります。

             

            __sfr __at(0x92)_XPAGE;  /* サイプレスEZ-USBファミリ、テキサスインスツルメンツ(チップコン)、別名MPAGE */

             

            リンカコマンドの変更(Aで説明)とXPAGEの場所(Bで説明)を変更してプロジェクトをビルドします。

             

            :それでもISRの問題が発生する場合は、開発者コミュニティUSB Low-Full-High Speed Peripherals下にスレッドを作成してください。

             

            添付のサンプルプロジェクト:

             

            このナレッジベースの記事で入手できるFX2LP SDCC Eclipseプロジェクト(FX2LP_Project_ISR.zip)には、変更点が含まれています。

             

            プロジェクトには、Eclipse IDE上のSDCCによるFX2LP I2Cベースのデバッグ-KBA229648、および外部割り込み0INT0#)と外部割り込み1INT1#)のISRが定義されて使用されるisr.cファイルも含まれます。 ポートBピンを切り替えるには:

             

            • INT0#:このピンのハイからローへのトランザクションは、ポートBピンを1回トグルします。
            • INT1#:このピンでのハイからローへのトランザクションは、ポートBピンを2回トグルします。

             

             

            ==============================

            24-Sept-2020

            Kenshow