最近查DM814x上两个M3莫名其妙挂掉的问题查了将近两周,最后发现居然是各个模块的dma乱用引起的。
A8上的音频mcasp用了两个dma通道……
TI给的simcop里面imx实现的swosd又用了一串的dma通道……
M3上面的cover业务又用了一个……
后面dsp上加跑的算法又用了两个,然后就开始出现死机了,诶……
查到最后,发现是有些模块的edma通道都用冲突了,dsp上算法用的qdma通道随便拿了几个paRamSet,tcc也完全随意指定的。
记得以前开发648的时候,这些东西都是有约定的。
这个DM814x是中途接手的项目,接手后忙着解决各种各样的bug,处理各种各样的需求,这些东西自己也没有留意,偶尔也有出现几次系统莫名奇怪挂了的问题,但是都没查出来,因为根本方向。
这次算法再加上来之后,终于压垮了这头骆驼,呵呵,还好,终于问题暴露出来,也解决了。
以后要注意,对于这种多核的Soc,特别是要注意dma通道的分配使用的情况。
其实TI也有自己的edma3框架库,可惜的前面的人开发的时候根本没用这些东西,一群文盲干的事情啊。
edma3:channel,emda,qdma,paRamSet,tcc,queue,tc
上面这些都是需要注意的地方,特别是qdma,用的别人的tcc和paRamSet,要格外注意!!!!