This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CPU中断响应时间是固定的吗?若不是,影响因素有哪些?

各位大侠,小的我有一事不明;在使用C6748时发现,在只有一个中断时,这个中断的响应时间不是固定的,最长和最短相差最短时间的数倍。

  • 请问你是怎么测这个中断响应时间的?

  • C6748 的中断是由FPGA给的(GPIO中断);收到FPGA的中断后,DSP会给操作另外的GPIO算是给FPGA回应;这两个GPIO信号都能通过FPGA的调试软件抓到。通过抓到的波形看到,“从触发中断到响应中断的时间”  会在有网口(W5300  EMIFA  没有使用中断)通信时变大。 估算:没有网口通信---中断响应时间是1us左右,有网口通信---中断响应时间10us左右。   我不是纠结于时间的长短,而是这两个时间为什么差别这么大。  另注:程序结构复杂   但只有这一个中断。

  • Shine Zhang 说:

    请问你是怎么测这个中断响应时间的?

    C6748 的中断是由FPGA给的(GPIO中断);收到FPGA的中断后,DSP会给操作另外的GPIO算是给FPGA回应;这两个GPIO信号都能通过FPGA的调试软件抓到。通过抓到的波形看到,“从触发中断到响应中断的时间”  会在有网口(W5300  EMIFA  没有使用中断)通信时变大。 估算:没有网口通信---中断响应时间是1us左右,有网口通信---中断响应时间10us左右。   我不是纠结于时间的长短,而是这两个时间为什么差别这么大。  另注:程序结构复杂   但只有这一个中断。

  • 你的的网口通信程序用bios了吗? gpio中断处理的优先级怎么设的,是设成最高了么?

  • Shine Zhang 说:

    你的的网口通信程序用bios了吗? gpio中断处理的优先级怎么设的,是设成最高了么?

    没有用到bios     整个程序中只有一个中断     也没有设置gpio中断的优先级  

    我想问一下    网口通信程序的函数调用路径比较深  是不是保存现场时间增长了    这样的调用会不会影响中断响应时间    

  • 会有影响。

  • fei han2 说:

    没有用到bios     整个程序中只有一个中断     也没有设置gpio中断的优先级  

    我想问一下    网口通信程序的函数调用路径比较深  是不是保存现场时间增长了    这样的调用会不会影响中断响应时间    

    网口没有用中断吗?

    调用再深,在响应中断时也只保留当前的现场,前面各级调用在调用当时就保存到堆栈了。也中断响应无关。

    影响中断响应时间的还有与优化有关,以及调用RTS库的函数有关,因为RTS库是经过优化的。

    所以你可以看一下你的程序中是否调用RTS库的函数,比如大数据的memcopy之类的。

    你可以对工程做如下措施:

    #1. 编译选项加-mi=xxx,这个XXX是你的应用能容忍的中断响应延时cycle数。

    #2. 把RTS库也加-mi重新编译一下。

    关于-mi的说明,参考文档spru187t。

  • Tony Tang 说:

    没有用到bios     整个程序中只有一个中断     也没有设置gpio中断的优先级  

    我想问一下    网口通信程序的函数调用路径比较深  是不是保存现场时间增长了    这样的调用会不会影响中断响应时间    

    网口没有用中断吗?

    调用再深,在响应中断时也只保留当前的现场,前面各级调用在调用当时就保存到堆栈了。也中断响应无关。

    影响中断响应时间的还有与优化有关,以及调用RTS库的函数有关,因为RTS库是经过优化的。

    所以你可以看一下你的程序中是否调用RTS库的函数,比如大数据的memcopy之类的。

    你可以对工程做如下措施:

    #1. 编译选项加-mi=xxx,这个XXX是你的应用能容忍的中断响应延时cycle数。

    #2. 把RTS库也加-mi重新编译一下。

    关于-mi的说明,参考文档spru187t。

    [/quote]

    您的回答让我见到了曙光!

    关于您的答案还有几个问题要请教:

    1.网口确实没有用到中断。(用的是EMIFA接口(且没有使用EDMA3))

    2.但如您所说使用了memcopy  和  malloc等函数。

    3.我之前一直不知道上述函数是从哪里来的,原来是来自于RTS库。可是我不知道RTS库是怎么就添加到我的工程的。我使用的库都是手动添加到工程里的,如下图。麻烦您指导一下,我在哪里能添加或删除RTS库?

    4.RTS库的源码在哪里能得到?有关于该源码的编译的说明文档吗?

    5.关于我的工程里加入编译选项“-mi=xxx”,是加在下图所示位置吗?

       还有关于TMS320C6748的中断响应延时cycle数大概是多少,这个参数我一直没有查到,您知道是在那篇技术文档里吗?

    6.还有一个比较low的问题,就是您上文提到的参考文档spru187t      我怎么在TI官网通过类似于“spru187t”名字找到文档?这是一直困扰我的小问题了。

    我水平较低,问题较多     麻烦了   !

  • RTS是在建立工程时指定的,不能不用啊,只是说重新编译后再用。

    fei han2 说:
    4.RTS库的源码在哪里能得到?有关于该源码的编译的说明文档吗?

    RTS库是编译器自带的,每个版本的编译器下都有,比如:C:\ti\ccsv6\tools\compiler\c6000_7.4.16\lib\src

    编译说明参考spru187相关章节。

    -mi的设置位置:

    fei han2 说:
    6.还有一个比较low的问题,就是您上文提到的参考文档spru187t      我怎么在TI官网通过类似于“spru187t”名字找到文档?

    然后到出现下面页面:

  • 关于spru187T文档中提到的关于重新编译RTS库的章节我还有几个问题要请教:

    1.perl 和 gmake 是怎么配合的?我想不通为什么需要perl软件?

    2.怎么能在windows7 安装gmake软件。我现在能得到gmake源码,但用VS2010的cmd不能编译通过。所以没有gmake的安装程序。

    3.如果gmake也装上了。我应该怎么操作来编译RTS库。是gmake  rtsname   --mi=xxx   吗?是在spru187T中提到的路径中,执行gmake命令吗?