您好:
我们项目中需要通过SPI端口传输图像数据,由于硬件原因,DM365 SPI必须工作在从模式,图像数据量较大,为了降低CPU负载,必须通过DMA方式。
我们的问题是,DM365提供的开发环境中SPI子系统
和DMA子系统是否可以支撑这种工作模式?需要实现哪些驱动代码?最好有参考的模板代码,能否推荐一份?
谢谢!
haigang Zhao:
回复 VampireDaVinci:
Jason您好,
驱动代码仅支持master模式吧,能否详细点,需要参考和修改那几个文件?
不吝赐教,多谢指点。
email:bg7jns@163.net
VampireDaVinci:
回复 haigang Zhao:
1. 这个我具体没有Coding过,如果Driver的EDMA只支持主模式,还是放弃的好,自己做从模式再做EDMA控制太难
2. 你能否从整个系统说一下应用,也许有别的办法,贴个系统框图
haigang Zhao:
回复 VampireDaVinci:
可能没有说的这么复杂,我想软件无论如何不会将硬件功能限制死。具体应用是这样的:
有一个通信模块,负责数据的收发任务。使用DM365负责图像的编码和解码任务。两者
通过SPI端口进行数据的交换。编码发射过程中,DM365每完成一帧图像的编码,就通知通信模块将该帧数据取走;
接收解码过程,DM365每完成一帧图像的解码,就通知通信模块送下一帧的数据。
由于硬件条件的限制,通信模块的SPI必须工作在主模式,因此DM365就只能工作在从模式了。为了数据交互,
设置了两根握手信号线,由DM365输出5us的脉冲,以中断方式分别通知通信模块接收图像数据或者发送图像数据。
从上面的过程可以看出,数据的收发起始是由DM365发起的,是一种变相的主模式。但SPI的片选和时钟则由通信模块提供。
我觉得开发平台提供的EDMA驱动是不区分SPI主从模式的,但SPI的驱动则只实现的主模式。现在的工作就是修改部分代码,
让SPI以从模式运行,达到数据交换的目的。
附件是结构简图,供参考。不吝赐教,多谢!
VampireDaVinci:
回复 haigang Zhao:
1. 这样的话没有其它办法,只能修改寄存器使得SPI工作在从模式,EDMA的驱动是封装好的,做事件触发,只是调试起来会麻烦一些
Feng Dong:
简单的来说只要在驱动初始化的时候将master模式改为从模式,就可以工作,但是真正要完成传输,由于linux的框架中并不支持spi从模式,所以需要自己想办法实现同步机制和与应用层相关的交互.