当使用SPI DMA时,假设传输1K的数据那么片选信号在传输过程中是一直低电平,还是每传输一次,片选有效一次?数据手册看的很晕,要是能有 份历程就好了?
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.
Hi Jay
DMA传输和TG传输的区别我一直没搞清楚,我的理解是这样的,你看看对不,TG传输我的理解是把tms470m06607的64个buffer,分成几个组或者干脆就是一个组,通过事件来触发传输,假设我分的一个组有32个buffer,那么首先传输buffer1 然后传buffer2 以此类推最后是buffer32,。那么DMA是怎么情况呢,比如说在TRM中476页中,DMA in Multi-Buffer Mode说明DMA source or destination should be only the multi-buffer RAM(我的理解是DMA的源地址或目的地址必须是multi-buffer RAM),但是TRM随后说了Each DMA channel has the capability to transfer a block of up to (1)32 data wordswithout interruption using only one buffer of the array by configuring the DMAxCTRL register. Using the DMAxCOUNT and DMACTNTLEN register, up(2) to 65535 (64K) words of data can be transferred without any interruption using just one buffer of the array. This enables the transfer of memory blocks from or into an external SPI memory.。那么我的理解是这样的,如果把multi-buffer RAM作为源地址,假设传输1k数据,那么multi-buffer RAM只有64个数据,是不是意味着这64个数据传完后,我还得重新向multi-buffer RAM写入另外64个数据,那这样一来,不是就跟TG一样了吗,在别的厂家的处理器中,好像直接有个指针来传递数据,只要把源地址,目的地址,传的数量配置好就不用管了,那么咱们这个DMA是不是有些特别呢?
还有上面的英文中(1)中说每个通道只能传32个数据没有中断,那么(2)中说可以传65535个数据不用中断,这如何解释?
在(2)中说用just onebuffer of the array ,这个buffer 是在DMAxCTRL说明的,取值范围是0~127,那么这些buffer是对用户可见的吗?如何使用?
这是我个人一些理解,请指教,关于DMA的使用说明,能给个配置过程或者给个说明文档吗,谢谢!!
Hi yong,
的确我们这个SPI和DMA都有些特殊。
首先,解释一下MibSPI的TG的概念。TG允许你在不使能DMA的情况下,自动地一次性传输多字节数据,这是标准的SPI所不具有的功能。
然后,需要澄清TG和DMA是两个独立的功能。TG的传输过程是把MibSPI的Buffer里的数据按次序传输到SPI的TX移位寄存器中向外发送,或从RX移位寄存器中传输到Buffer里。DMA的传输是发生在MCU的系统RAM与MibSPI的Buffer之间,也就是在系统RAM与TG的RAM之间传输数据。
最后,解释你所述的(1)和(2)看似矛盾的问题。
我们这个DMA除了有传输源地址、目的地址等寄存器外,还有几个特殊的寄存器。
DMAxCTRL 寄存器和 DMAxCOUNT 寄存器中都有一个DMA传输数据个数的计数器ICOUNTx和COUNTx,那么要使用那个寄存器中的计数器来控制DMA传输的数据长度,由DMACTNTLEN 寄存器来决定。
DMAxCTRL中的ICOUNTx最大值为0x1F,也就是说如果使用该寄存器中的计数器,那么DMA一次最多传输32个Words。
DMAxCOUNT 中ICOUNTx最大值为0xFFFF,这样如果使用该寄存器中的计数器,那么DMA一次最多传输65536个Words了。
还有一个特殊点需要注意,在MibSPI模式下,DMA与TG的Buffer之间的数据传输不是一个一个传输的,而且一块一块传输的。比如,你用DMAxCOUNT 来做DMA 计数并假设DMA长度为1024,再如果设置的TG的Buffer大小为64,那么DMA一次就可以传输64Words的数据到TG的Buffer中。当Buffer中的64个数据发送完成,会触发下一次DMA传输,又会有64个数据传输到TG的Buffer中,并开始发送。这其中的整个过程不需要软件去控制,都是自动完成的,直到1024个数据全部发送完。
不知道上面的解释,对你理解MibSPI的TG及DMA是否有所帮助。
Regards,
Jay