TI中文支持网
TI专业的中文技术问题搜集分享网站

C6657 接受FPGA的 doorbell中断, 在doorbell 中断处理函数中置标志位;之后再main 中while(1)检测,时间400多ms

各位大牛你们好, 我已经实现dsp向FPGA写数据和读数据的功能。

写数据流程:DSP-NWRIRE包

读数据流程:DSP-READ包->FPGA->NWRIRE->Doorbell包 ,然后在收到doorbell后,置全局标志位。在main中的while检测标志位后取数 ,现在都实现了, 但是在调试发现, 从FPGA读时,先是dsp发NREAD包,FPGA收到后,迅速从单口ram中读数据,再给dsp发NWRIE包,发完后 再发doorbell,dsp收到doorbell,进入中断,但问题是从中断入口出来,到main中while检测标志事件大概400ms , 这个时间也太长了,根本不能作为DSP主动从FPGA读数据接口。 我想知道这个时间为啥这么长?

我做了如下尝试:

             1.怀疑其他中断影响,在出中断后,又进入其他中断。但工程里再也没有他中断
    
              2.用CCS的 clock功能,第1个断点在发送NREAD包函数处打断点,第2个断点在main中while检测置位后,再打断点,单步调试中,发现还是400ms。

              但是第1个断点在中断打,发现单步执行,竟然10us;这2中操作差距怎么这么大?我也用TSCH,TSCL计数器测得结果一样,也是400ms

            3.我猜测出中断,检测标志位费好长时间,我将标志位定义成 volatile变量,但是结果一样

我的问题如下:

          1.我本想发送NREAD后,FPGA回NWIRE,doorbell;当收到doorbell后取数,立马用当次数,达到数据同步,是否这种方法不行? 论坛看了好多,

          都是FPGA主动上传大批量数后,再发doorbell,没我这么用的。哪有什么更好方法从FPGA获取数据吗?

           2.从收到doorbell,到main中while检测标志位,为啥这么长时间?

           3.是否跟cmd文件有关,是否需要优化程序?

Shine:

请问中断里有没有用printf打印信息?

fendou yang:

回复 Shine:

没有啊! 只是读取中断标志位,和清标志位, 还有全局一个变量++ ;

如下:
interrupt void SRIO_Doorbell_ISR()
{Uint32 doorbell;doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICSR; //read doorbell. this test only use doorbell reg 0
if(1==doorbell){DoorbellFlg = 1;}gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICCR= doorbell; //clear doorbell interrupt
Doorbell_ISRnum++;
}

fendou yang:

回复 fendou yang:

我有做了如下实验还是不行

1.DoorbellFlg前加 volatile 关键词, 结果还是一样

2.我将全局DoorbellFlg 定义 数据段 , 映射指定内存空间 ,但还是不行啊

#include "MemoryMapInit.h"
#include "Keystone_common.h"

#pragma DATA_SECTION(DoorbellFlg,".Flag");
volatilefar Uint8 DoorbellFlg = 0;

cmd文件如下:.Flag>SL2

fendou yang:

回复 fendou yang:

自己先顶一下

赞(0)
未经允许不得转载:TI中文支持网 » C6657 接受FPGA的 doorbell中断, 在doorbell 中断处理函数中置标志位;之后再main 中while(1)检测,时间400多ms
分享到: 更多 (0)