3

私はCode Composer StudioTMDSEMU100V2U-14T - XDS100v2 USB JTAG EmulatorTexas IntrumentsのLCDK C6748を使用し て います。

LCDK には、ボードを初期化し、割り込みごとに呼び出されるコールバック関数を定義する関数など、多数のサポート関数が付属しています。

コールバック関数を実装したばかりなので、新しいサンプルが ADC から来るたびに何かを実行します。

割り込み内にブレークポイントを設定しようとしましたが、実行時にプログラムの「フロー」がそこに到達しませんでした。

さらに、私はもっと簡単なことをしました:

volatile int flag = 0;


interrupt void interrupt4(void) // interrupt service routine
{
   flag = 1;
   return;
}

int main(){
    // board initializing function, defining sampling rate etc.
    L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB);

    while(1){
       if (flag == 1){
          printf("interrupt entered");
          flag = 0;
       }
    }
}

しかし、何らかの理由で while ループが 1 回だけ入力されました。

ブレークポイントを設定しないと割り込みが継続的に入力されるので、驚きました。他に何もせずにサンプルをスピーカーラインに渡そうとしたところ、音楽が聞こえました。

割り込みについて非常に基本的なことが欠けているように感じます。私はこのテーマにまったく慣れていません。

誰かが私に説明してくれませんか[または、DSPでメカニズムがどのように機能するかを説明する適切な情報源に私をリンクしてください]:

1) 割り込み内にブレークポイントを設定できないのはなぜですか?

2)メインにブレークポイントを設定しても割り込みが発生しないように見えるのはなぜですか?

3) CCS で実行時に変数にアクセスする必要があるのはどのような方法ですか?

ありがとう

4

2 に答える 2

2

あなたの割り込みはタイマー割り込みだと思います。多くの場合、jtag は、ブレークポイントがトリガーされると、多くの MPU/DSP モジュールを停止しますが、タイマーは実行を続けます。これにより、タイマーのオーバーフローが発生します。つまり、オーバーフロー フラグが設定され、フラグがリセットされるまで割り込みは呼び出されません。

ブレークポイントがトリガーされたときにもタイマーを停止するように jtag を設定できるかどうかはわかりません。フリースケール MPU、IAR IDE、および segger jtag を使用できます。

于 2015-01-13T16:32:01.213 に答える
2
  1. ブレークポイントを置いてから実行してみてください。少なくとも 1 回ヒットするかどうかを確認します。その場合、割り込みソースは自動的にクリアされません [ISR 内で明示的にクリアしていないため]。TIコントローラーでは、私の経験によると、次に受信するISRパスをクリアすることを期待しています.
  2. 1 回目の割り込みも受信しない場合は、ISR 用に生成されたアセンブリとコンパイラによって行われた最適化を確認してください。

  3. ただし、競合が発生した場合に備えて、後でタイミングとグローバル変数の保護を確認する必要があるかもしれませんが、現時点では上記の 2 つの提案で十分です。

于 2015-01-14T04:15:24.403 に答える