之前都是裸跑,不用操作系统的。
1 先提一个没有操作系统时遇到的问题。
核0乒乓接收(srio)外部的数据,核1~6并行处理数据:
(1)由于数据块大,需要把数据分割成小块,每次EDMA从DDR读数处理1块,处理结果再用EDMA放回DDR,我现在是把需要处理的数据放在了MSM,但MSM 与 L1D之间需要维护cache一致性,导致处理时间不理想,问题来了,处理数据应该放在L2吗?L2与MSM在使用上有没有什么建议?
(2)由于核0接收数据需要访问DDR3,核1~6存取数也需要访问DDR3,都是用EDMA进行突发访问,DDR总线会不会有冲突,我现在为避免总线冲突,用semphore把DDR总线管理起来了,有这种必要吗?
2 sysybios使用
(1)因为用的是自己的板卡,先修改了RTSC->platform下的ti.platform.evm6678中的存储区配置
(2)把PLL和DDR的初始化函数放在了board_ionit()函数中,然后使用Startup.firstFxns[Startup.firstFxn.length++]='&board_init'
(3)在.c的主程序文件中创建一个时钟(Clock)
(4)脱机加载,把文件烧到SPI存储器中
问题 :
(a)经验证,程序确实加载成功了,但board_init中的DDR初始化没有正确地初始化DDR, DDR读写错误,该DDR初始化函数在不加sysbios时验证过的,帮忙分析一下是哪出错了(我在board中放了一个写及寄存器的语句,发现该语句器作用了,证明DDR初始化函数肯定是执行了)
(b)既然加载遇到问题了,那就研究一下Clock吧。可是发现在.c文件的main函数中创建的clk0无法指定Clock源,基于哪个定时器,怎么指定啊?
后来使用XDC图形配置界面生成了一个Clock,可以指定使用哪个定时器Timer产生节拍tick,但调试时,在clkFxn函数中打断点又进不去?这是什么情况啊?
感觉TI sysbios手册太粗糙了,只说了原理,但实际操作的东西没有说,自带的clock例程又太简单,没有跟硬件Timer结合起来,实际操作的时候就会有很多问题,查也查不到,有同感吗?
望 TI工程师和各位过来人解答,谢谢
yaoqin zhang:
回复 Andy Yin1:
您好!
还想再问一个问题,我的处理是周期性的,core0从SRIO接收600包数据,每次接收时都先用l2缓一下,然后用EDMA搬到DDR3, DDR3中开了乒乓两个区域,第一次600包在乒,第二次600包在乓。。。每收完100包后,核0通知核1~6数据准备好
core1~6并行处理,收到core0的处理标志后,启EDMA每次读10包数据,放在MSM,处理,结果仍然放在MSM,启EDMA把结果写到DDR3。再读10包。。。
这样得频繁维护cache,维护也很耗时间。
我想问的是:是不是我把数据直接用EDMA读到L2会好一些,这样不用维护cache一致性,缺点就是EDMA从DDR3到L2的速率稍微慢点。这样可行吗?还有就是L2和MSM在使用上,比如用作数据缓存区,使用哪个合适,有没有什么说法或经验?
Andy Yin1:
回复 yaoqin zhang:
是的,数据放在LL2不需要维护cache一致性,EDMA的速率与很多因素有关,如所使用的EDMA通道等,推荐直接将数据搬到LL2。
chong chen4:
clock问题我也遇到了,怎么解决的呢?