打印

请帮忙看一看这个 LPC4357 的 DMA 为什么无法运行!

[复制链接]
2556|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
testmb1|  楼主 | 2013-11-2 13:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       我用的是 LPC4357 ,在调试 DMA 的过程中,调试了很长时间,还是无法通过!
我创建了两个数组,
int dma_test_arr_src[50];   //这个会用 0X32343638 初始化
int dma_test_arr_des[50];  //这个不初始化
当 DMA 运行后 会从 dma_test_arr_src 这个数组中复制数据到  dma_test_arr_des 中,
然后用
  U0THR=dma_test_arr_des[0];    //查看是否 DMA 有运行过 (正确输出: 0X38)
  U0THR=dma_test_arr_des[1];    //查看是否 DMA 有运行过 (正确输出: 0X38)
这两行代码查看 DMA 是否已经运行过,因为 DMA 运行了的话,两数组的内容是一样的!
现在的问题是 dma_test_arr_des 这个数据内的数据全是 0 ,请朋友们帮忙看一看程序哪里出问题!
附上 IAR 的工程!

testm4.rar

155.33 KB

iar工程

相关帖子

沙发
阿南| | 2013-11-2 15:45 | 只看该作者
这个。。。有点难:'(

使用特权

评论回复
板凳
jplzl10000| | 2014-1-6 09:58 | 只看该作者
结合数据手册上的说明,再加单步调试,查看芯片状态是否符合程序逻辑
这个东西没实际的调试根本无从查找
也许还可能是其他的问题,比如编译优化什么的

使用特权

评论回复
地板
airwill| | 2014-1-6 19:14 | 只看该作者
DMA 完全是硬件过程, 通常设置正确就没事了.
调试也要些技巧, 可以人为地触发 DMA, 验证一下数据传输的设置有没有问题.

使用特权

评论回复
5
testmb1|  楼主 | 2014-3-4 16:44 | 只看该作者
    程序已经调通啦!
主要问题是:
原来是这样的
  GPDMA_C0CONTROL_bit.TRANSFERSIZE=     50;//(200/4)&0x0fff;         //传输长度,即传输的数量
  GPDMA_C0CONTROL_bit.SBSIZE=   4;      //源连发大小
  GPDMA_C0CONTROL_bit.DBSIZE=   4;      //目标连发大小
  GPDMA_C0CONTROL_bit.SWIDTH=   2;      //源传输宽度
  GPDMA_C0CONTROL_bit.DWIDTH=   2;      //目标传输宽度
  GPDMA_C0CONTROL_bit.SI=       1;      //源自增
  GPDMA_C0CONTROL_bit.DI=       1;      //目标自增
  GPDMA_C0CONTROL_bit.I=        1;      //终结计数中断使能

要改成这样
  GPDMA_C0CONTROL_bit.SBSIZE=   4;      //源连发大小
  GPDMA_C0CONTROL_bit.DBSIZE=   4;      //目标连发大小
  GPDMA_C0CONTROL_bit.SWIDTH=   2;      //源传输宽度
  GPDMA_C0CONTROL_bit.DWIDTH=   2;      //目标传输宽度
  GPDMA_C0CONTROL_bit.SI=       1;      //源自增
  GPDMA_C0CONTROL_bit.DI=       1;      //目标自增
  GPDMA_C0CONTROL_bit.I=        1;      //终结计数中断使能
GPDMA_C0CONTROL_bit.TRANSFERSIZE=     18;         //传输长度,即传输的数量

最只要的是 传输长度 GPDMA_C0CONTROL_bit.TRANSFERSIZE 这个放在最后,程序就正常了!其它没动!
谢谢各位的帮忙!谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝