中断C内的断点

时间:2015-01-12 20:27:06

标签: c embedded interrupt texas-instruments code-composer

我在 Code Composer Studio TMDSEMU100V2U-14T - XDS100v2 USB JTAG上使用 Texas Intruments LCDK C6748 仿真器

LCDK带有许多支持函数,包括初始化电路板的函数,并定义为每个中断调用哪些回调函数。

我刚刚实现了回调函数,因此无论何时来自ADC的新样本都会执行。

我试图在中断中设置一个断点但在运行时程序" flow"没到那里。

此外,我做了一些更简单的事情:

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循环只输入一次。

它让我感到惊讶,因为如果我没有设置断点,则连续输入中断 - 我试着将样品传递到扬声器线而没有做任何其他事情,我听到了音乐。

我有一种感觉,我错过了关于中断的非常基本的东西,我对这个主题很新。

有人可以向我解释[或链接我解释机制如何在DSP中工作的良好来源]:

1)为什么我们不能在中断内设置断点?

2)为什么即使我在主要设置断点,似乎中断也不会发生,如果我不这样做。

3)在CCS中,我必须在运行时访问变量的哪些方法?

感谢

2 个答案:

答案 0 :(得分:2)

我认为你的中断是一个定时器中断。在很多情况下,当触发断点时,jtag会停止很多MPU / DSP模块,但定时器会继续运行。这会导致定时器溢出,这意味着溢出标志置位,并且在标志复位之前永远不会调用中断。

我不知道你是否可以在触发断点时设置jtag来停止计时器。使用freescale MPU,IAR IDE和segger jtag,我可以。

答案 1 :(得分:2)

  1. 尝试放置断点然后运行。看它是否至少击中一次。如果是,那么你的中断源不会自动清除[因为你没有在ISR中明确这样做]。在TI控制器中,他们希望您根据我的经验清除接收下一个的ISR路径。
  2. 如果你甚至没有收到第一次中断,那么检查为ISR生成的汇编和编译器完成的优化。

  3. 虽然您可能需要稍后查看时间和全局变量保护,但如果发生冲突,但截至目前为止有2条建议可以做。

相关问题