28335 dma双通道及cpu协调问题

2019-07-27 17:56发布

本帖最后由 chenzhi658 于 2015-2-13 13:58 编辑

最近在通过DMA读写片外RAM,DMA的触发源是片外RAM的1个1毫秒脉冲信号,同时触发DMA1,DMA2。我在设计中,测试DMA通道切换和CPU的协调时,写了以下代码:
while(DmaRegs.CH1.CONTROL.bit.TRANSFERSTS==1){
   dma_halt_test[0]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[1]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[2]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[3]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
}
while(DmaRegs.CH2.CONTROL.bit.TRANSFERSTS==1)  dma_halt_test[4]++;


发现dma_halt_test[2]dma_halt_test[3]dma_halt_test[4] 没有变化,一直是初始化值;而
dma_halt_test[0]和 dma_halt_test[1]会变化,但是没规律,有时其中一个变化,有时一起变化。
请高手解释其中原因,我想不通。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
angerbird
1楼-- · 2019-07-27 23:55
dma_halt_test[0]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[1]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[2]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;
   dma_halt_test[3]  += DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;

楼上这样写的话,,岂不是dma_halt_test[3]是前几个数据的叠加?
angerbird
2楼-- · 2019-07-28 02:54
这样写是有很大问题的。。。
mintspring
3楼-- · 2019-07-28 08:14
DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;这个里面不会是个0吧?如果是0累死都不会变化
chenzhi658
4楼-- · 2019-07-28 08:53
 精彩回答 2  元偷偷看……
chenzhi658
5楼-- · 2019-07-28 13:51
mintspring 发表于 2015-2-27 16:05
DmaRegs.CH2.CONTROL.bit.TRANSFERSTS;这个里面不会是个0吧?如果是0累死都不会变化

dma_halt_test[0]和 dma_halt_test[1]会计数啊
mintspring
6楼-- · 2019-07-28 18:19
楼主搞明白没,我看回复看糊涂了

一周热门 更多>