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

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi,               

I would like to translate KBA231372 into Japanese.

Please confirm to my work.

Thanks,

Kenshow

0 Likes
2 Replies
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi, Kenshow-san

Confirm to work this KBA.

Thanks

Jenna

Jenna Jo
0 Likes
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

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リンカへのコマンドラインオプションの追加

      pastedImage_3.png

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

0 Likes