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.

sysbios学习第一周(C6678),困惑,求解答

Other Parts Discussed in Thread: SYSBIOS

之前都是裸跑,不用操作系统的。

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工程师和各位过来人解答,谢谢

  • 1 如果存放在MSMC及DDR的数据只是EDMA在访问,不需要维护cache一致性,也不需要软件避免总线冲突,ternet switch总线会自动管理多个master对同一块区域的操作;

    2 关于DDR的问题,请先使用CCS加载程序测试该DDR函数初始化能否测试通过,注意论坛中有很多地方讲到在对DDR初始化时需要根据layout及DDR型号生成特定的参数再进行初始化。

    关于sysBios的使用可以参考wiki:http://processors.wiki.ti.com/index.php/Category:SYSBIOS

  • 您好!

    还想再问一个问题,我的处理是周期性的,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在使用上,比如用作数据缓存区,使用哪个合适,有没有什么说法或经验?

     

  • 是的,数据放在LL2不需要维护cache一致性,EDMA的速率与很多因素有关,如所使用的EDMA通道等,推荐直接将数据搬到LL2。

  • clock问题我也遇到了,怎么解决的呢?