您好:最近在用F28M35做开发。系统通过M3的SSI挂载了2个SPI接口的陀螺仪,M3在主线程空闲时便采集陀螺数据(包含6个Bytes,共48位),然后通过uDMA放到某个shared RAM Sx。我准备在shared RAM Sx中开一个30个Bytes的Buffer,这样可以存5帧陀螺数据,每当写满5帧,M3再重头开始写,如此循环,保证Buffer中始终是最新的5帧数据。C28也在空闲时(不定时)从Sx中读取数据,用来做滤波处理。
我的问题是:1、按照5.1.1.4关于仲裁机制的理解,若M3写了一半,如2帧数据时,C28同时来访问,是不是等M3写完剩下的3帧,C28才开始读走所有的5帧?若C28正在读取数据时,比如也读了一半,是不是等C28读取完成,然后M3才能开始向里写入呢?
2、由于SPI接口比较快,M3循环高速的重写定义在Sx里的30个Bytes的Buffer,C28随机读此Buffer。我这样设计可行吗?总感觉30个字节甚至更大的缓冲时,如果发生了问题1的冲突情况,处在pending状态的那个操作要等很久。
3、比如M3的SPI通过DMA至shared RAM Sx,如果此时是C28在读,M3要是等待的话,是不是SPI接口也就停止工作了?还是SPI在工作,只是数据没有写到sx中,如果是这样情况,那数据又暂存在哪儿了呢?
刚开始弄时间不长,请大虾多多指点。这里先谢过了!