Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

FX2 / FX2LP SDCC Eclipseプロジェクト:割り込みが処理されない - KBA231372 - Community Translated (JA)

lock attach
Attachments are accessible only for community members.

FX2 / FX2LP SDCC Eclipseプロジェクト:割り込みが処理されない - KBA231372 - Community Translated (JA)

SivaK_96
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by NoTa_4591161

Version: **

Translation - English: FX2/FX2LP SDCC Eclipse Project: Interrupt not Serviced - 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回トグルします。

 

 

添付
0 件の賞賛
340 件の閲覧回数