在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
10#:
DMA中断可以设置是reansfer开始或结束时产生,默认为开始时。
数据搬运与中断本身没有关系,只要触发DMA的条件满足就开始搬运,所以应该是进中断时就启动。
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
BIN YAO1:
回复 10#:
那也就是说,在进入DMA中断的时候,我无法半段数据是否搬运完成,也没有办法校验搬运的数据是否正确咯?
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
10#:
回复 BIN YAO1:
如果是这样,那就取决于你需要搬运的数据有多少,如果能在进入中断前搬运完成,大概是16个cycles(http://processors.wiki.ti.com/index.php/Interrupt_FAQ_for_C2000#ISR_Latency),当然就可以校验,否则就会存在问题。
另外一点,我们讨论的是默认的情况,也即在数据搬运开始就进入中断,你完全可以设置为数据搬运结束产生中断,那这就不是问题了。
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
BIN YAO1:
回复 10#:
但是我试过设置在搬运完成后进入中断,但是实际效果好像和设置在开始时进入中断时一样的。
此外TI关于DMA的文档中提到过在用连续模式时,中断是在开始时进入;在非连续模式下,中断是在搬运完成之后进入的。这是不是说这就是既定的事实,无法更改?
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
10#:
回复 BIN YAO1:
第一点很容易可以测试一下,在搬运开始触发一个信号,进入中断再触发另一个信号,同时在示波器上抓出来对比一下,应该是有不同的。
后面的描述在手册的哪一段?
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
BIN YAO1:
回复 10#:
在文档的第六章 19页讲到3三种模式时,CHINTMODE那部分
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
10#:
回复 BIN YAO1:
那你说的对,但只有在ping-pong buffer scheme with continuous mode时才是,你确定也一定要使用这种模式吗?
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
BIN YAO1:
回复 10#:
这个模式是怎么使用的呢? 是不是为了使得DMA和CPU不冲突? 那如果不使用ping-pong buffer scheme的时候,CPU和DMA访问同一内存地址会如何?
在连续模式下,默认DMA中断在一个transfer的开始。请问DMA是进中断的同时启动数据的搬运,还是出了DMA中断之后再启动的?
10#:
回复 BIN YAO1:
是的,是为了两才不冲突,具体使用参考你上面提到的那一章节,就是使用active和shadow的Source/Destination Address Pointers和Source/Destination Begin Address Pointers.
如果不使用,CPU和DMA同时访问同一RAM,则DMA优先级高,具体参考4.2 For All Other Peripherals/Memories.