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.

DSP/BIOS有关HWI和TASK的问题

Other Parts Discussed in Thread: TMS320C6455

有一个问题想要请教各位大神。

在DSP/BIOS中,在TASK执行过程中,如果DSP接到HWI时,此中断会不会打断TASK的执行。

我在调试一个ADC采集和TCP/IP协议网络上传数据的程序。采集存储数据采用HWI,采集采用乒乓模式,当ping块存储满后,转到向pong块存储,同时通过一个TASK任务将ping块数据由网络上传到PC。我想请教一下,这种方式采集pong块时的HWI会不会影响网络上传数据的TASK。

在此先谢过各位,望能得到各位大神的答复。

// ADC

void HWI_ADC()

{

      乒乓缓存代码

      SEM_post(&SemTCP);

}

// 网络上传

void task_send(void)

{

      SEM_pend(&SemTCP, SYS_FOREVER);

      网络传输数据代码;

}

  • 咫尺和天涯 说:
    在DSP/BIOS中,在TASK执行过程中,如果DSP接到HWI时,此中断会不会打断TASK的执行。

    会,除非在任务中把中断禁止了。HWI永远是最高优先级,这是硬件响应的,而TSK是操作系统软件层面的概念。

    至于HWI是否会影响到TSK的网络上传数据,看具体情况,总的来说留给TSK的时间片是否够上传一个buffer数据。HWI_ADC里接收数据采取的方式是什么?如果都是CPU在读数据的话,TSK里的上传过程放在HWI里其实是一样的。

    所以一般没有在HWI里采集数据,而是用EDMA之类的采集数据,在采集完产生EDMA完成中断,在中断ISR里post sem,这样留在HWI里的时间就尽量短了,留给TSK的时间也就尽量多了。

  • 谢谢您的回答。

    我的程序采集数据是在FPGA中进行,每隔一段时间(比如1ms)使用中断方式通知DSP读取FPGA的采集数据,DSP读取此块数据后通过网络上传数据。

    void HWI_adcint(void) // 映射在GPIO4上
    {
    ledon_1;
    if(pingpong_flag == 'p')
    {
    SetEDMA54k((FIFO_address), datadst_add, 3200, 4, 4);
    pingpong_flag = 'q';
    }
    else if(pingpong_flag == 'q')
    {
    SetEDMA54k((FIFO_address), datadst_add_q, 3200, 4, 4);
    pingpong_flag = 'p';
    }

    flag_pccmd = 'A';
    block_index ++;
    if(block_index == InterruptNum)
    {
    ledoff_4;
    ledoff_1;
    flag_process = 0;
    adc_stop;
    }

    if(flag_yesread == 1)
    SEM_post(&SemTcpSend);
    }

    void task_tcp(void)

    {

        SEM_pend(&SemTcpSend, SYS_FOREVER);

        ledon_1;

        上传数据代码;

        ledoff_1;

    }

    实际中,FPGA的FIFO每写满1ms数据量的数据后以中断方式通知DSP读取数据,然后DSP通过网络上传数据。采用乒乓缓存方式。自己想得到的结果是在另外一块采集完成并通知DSP读数之前将上一块数据传输完成。

    实际使用示波器测试上传数据时间约800us(led1等亮灭的时间)。

    最终程序的功能并不能实现,乒乓缓存时,上传上来的数据是错误的。

    麻烦各位大神再帮忙分析一下,问题出现哪里。

    谢谢!

  • #1.  直接用GPIO触发EDMA,而不是在GPIO的中断里配置EDMA再触发EDMA。在EDMA的complete 中断里post sem.

    #2. 如果实时性还不够,再加大FPGA里的buffer。

    说了这么久,这是用的哪款芯片?

  • 谢谢您的回答。

    我使用的DSP是TMS320C6455,FPGA是V5系列的XC5VSX50T。

    今天尝试了将FPGA里的buffer加大,不能成功。我再按照您说的第一种方式尝试一下。

    非常感谢您的解答!

  • 你还可以看一下,从FPGA读数据过来时占了多长时间?还有数据本身是否对。

  • 好的,谢谢Tony Tang的解答。等我尝试以后再回复结果。