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

关于Notify_sendEvent的问题

      我的程序是将网口收发数据和核间通信,当主核接收数据后,通知其他从核对数据进行处理,处理完后主核进行下次接收,但是主核第一次执行notify_sendEvent时,可以触发从核执行callback函数,但是如果第二次执行Notify_sendEvent时会返回-16,查了查函数手册是指remote processor is not initialized,比较困惑如果没有初始化,那第一次是如何触发的呢?就算我在从核处理完数据后加上notify_reigsterEvent情况还是一样,希望TI的工程师能指点一下。

 

 

zjd

2014.11.18

Kevin Cai:

Hi, 您好!

主核通知从核, 是用IPC来实现的吗?

如果是的, 在从核处理完数据以后,有没有将从核的IPCARx寄存器置1 (比如从核是核1, 那么需要将IPCAR1相应位置1),这样做是为了清中断,以表示可以接收下一次中断

 

yongwang zhang:

Hi zhao jd:

  您好,打扰一下!请问您网口收发数据是使用NDK(基于helloworld)方式实现呢,还是基于cifae_KI_STK_Deyi中GE这个工程实现的呢?网络传输速率怎么样?

Kevin Cai:

回复 yongwang zhang:

Hi, 您好!

是基于STK 实现的, 网络传输速率在MAC层测量 ~1000Mbps(与数据包大小有关, 通常数据包越大速率越高),  如果您是在TCP层测量速率,会低于1000Mbps

这是因为有协议层开销。谢谢!

zhao jd:

回复 Kevin Cai:

       通过IPC实现是指调用IPC的API吗,Notify应该就是IPC的一个子模块吧。程序中主核(核0)是通过Notify_sendEvent通知从核,我在从核绑定的回调函数里使用CSL_IPC_clearGEMInterruptSource(3,0)来使IPCARx的相应位置位,但是通过实验还是第二次还是无法触发从核。通过观察IPCGR和IPCAR寄存器的内容发现所有位都是全零。

       同时,我也试过在从核里对KICKer寄存器进行解锁,但是效果是一样的,第二次没有触发从核。不知道还有没有一些其他情形导致Notify_sendEvent无法执行成功。

        还有一个问题,IPCAR中有28个SRCCx位,但是6678只有8个核,为什么会需要那么多的SRCCx,比较困惑。 而且我看TI e2e上的帖子说可以在汇编代码中ti_sysbios_family_c64p_hwi5处添加断点,看notify_sendEvent是否能正常工作,实验证明第一次notify可以正常执行到断点,但是第二次就 无法执行到断点,以为是KICKER寄存器的问题,但是解锁后没有解决。

        谢谢您的指导!

zjd

zhao jd:

回复 Kevin Cai:

         您好!发现新的问题。我的程序只要执行网口接收中断后,就会无法触发其他核,如果不执行接收中断就可以触发其他核,所以我想变通一下,就是采用轮询的方式来接收,不知道这样是可以查看哪些寄存器标记有新的数据包到达网口呢?

 

Kevin Cai:

回复 zhao jd:

Hi, 您好!

轮询接收您可以参考STK中的EMAC_Recv函数, 查看RXnCP寄存器

 

 

zhao jd:

回复 Kevin Cai:

        您好!我用的是6678的评估板,我是在PA_emacExample基础修改的程序,发现使用了high priority Accumulator channel,不太了解,因此在轮询时我是关闭了接收的中断,然后轮询寄存器,但是仍然无法触发从核。最后,通过使用CSL中的IPC中断实现触发从核,从而实现核间同步。我觉得是不是因为Notify应用的是基于硬件中断的软件中断被更高级软件中断或者硬件中断给屏蔽掉了。

       不过还是谢谢您长时间的回复!

zjd

user5324519:

我也遇到同样问题,请问最后是怎么解决的?

user5324519:

回复 Kevin Cai:

你好,我是用的是IPC_NOTIFY,也遇到了同样的问题,请问怎么排除故障啊?

赞(0)
未经允许不得转载:TI中文支持网 » 关于Notify_sendEvent的问题
分享到: 更多 (0)