ARM端使用SPI flash跑的是linux的3.3内核,DSP那边跑sysbios,使用slaveloader进行引导,DSP端有mcasp和mcbsp使用EDMA,在ARM端SPI flash也是使用EDMA,当只跑ARM核时可以正常使用EDMA,可以删除、储存文件系统里面的文件,但是DSP端也跑起来的时候ARM这边同步文件之后系统就卡住了,感觉应该是EDMA这一块冲突了,之后查看了一下linux里面关于EDMA初始化的代码,里面有一个结构体是关于EDMA_CC0和EDMA_CC1的,给DSP保留了对应的channel和slot,channel这个参数是芯片维护的32个通道,slot是用户维护的128个通道;
而且手册和代码里面都注明了,可以用同一个EDMACC控制器,ARM核和DSP核使用的shadow寄存器不一样,中断向量也不一样,(错误中断虽然只有一个但是现在还不牵涉这个问题)
DSP端的EMDA配置使用startware里面的代码,进去EDMAIint函数里面,把ARM那边初始化过的全局寄存器这段都屏蔽了,只初始化DSP自己的区域部分寄存器,这样抛弃DSP的EDMA之后DSP的EDMA可以正常跑,但是ARM这边的SPI flash操作部分就卡住了;
现在只能使用中断方式进行SPI flash的读写,速度慢了很多,请问群里有没有用过这种场景的工程师或者TI的技术师傅有没有这方面的例程可以参考一下的,毕竟EDMA控制器这部分文档写的比较简单,就是寄存器的配置,没有写双核都要用时怎么分开使用的情况;
双核通讯用的是syslink