查看: 9967|回复: 7

[已解决] ADC采样DMA传输问题(已解决)

[复制链接]

该用户从未签到

13

主题

65

帖子

0

中级会员

Rank: 3Rank: 3

积分
252
最后登录
1970-1-1
发表于 2013-9-2 01:32:45 | 显示全部楼层 |阅读模式
目的:想配置一个DMA传输ADC采样的数据的程序,ADC采样率为16位,然后想通过外部中断控制DMA的开断,开启的时候目的地址还是回到原来设置的地址
出现的现象:参考别人的程序来配置的,程序在附件中。传输上来的数据只有低八位,而且两个连续的目的地址数据一样,目的地址为一个数组。第一,如图所示,前两位不知为什么始终为0。第二,为什么传上来的数据只有低八位,而且连续的两个地址数据是一样的。第三,传输数据始终要通过DMA0->SSRT|=DMA_SSRT_SSRT(ch);来传输一次,怎样做到自动传输,然后直到我外部中断手动关闭。
初次接触dma,望给予技术支持
我知道答案 目前已有7人回答
QQ图片20130902013230.jpg

修改为dma采样.zip

4.66 MB, 下载次数: 160, 下载积分: 威望 1

回复

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-2 09:58:04 | 显示全部楼层

回复:ADC采样DMA传输问题

 DMA传输的数据为低八位,你需要检查 TCD Transfer Attributes (DMA_TCD_ATTR) 【SSIZE】&【DSIZE】配置,是否传输为16-bit。
关于目标地址增加的问题,如果你是传16位数据,你需要将TCD Signed Destination Address Offset (DMA_TCD_DOFF)设置为2.
DMA传输应该有ADC模块发起,否则在ADC转换未完成时就发起传输,ADC结果寄存器的值0会被传送到目的地址。
ADC可以通过外部硬件触发,如果想停止ADC工作,可以停止ADC外部硬件触发源即可。
祝顺利。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

65

帖子

0

中级会员

Rank: 3Rank: 3

积分
252
最后登录
1970-1-1
 楼主| 发表于 2013-9-2 13:16:13 | 显示全部楼层

回复:ADC采样DMA传输问题

回复第 2 楼 于2013-09-02 09:58:04发表:
 DMA传输的数据为低八位,你需要检查 TCD Transfer Attributes (DMA_TCD_ATTR) 【SSIZE】&【DSIZE】配置,是否传输为16-bit。
关于目标地址增加的问题,如果你是传16位数据,你需要将TCD Signed Destination Address Offset (DMA_TCD_DOFF)设置为2.
DMA传输应该有ADC模块发起,否则在ADC转换未完成时就发起传输,ADC结果寄存器的值0会被传送到目的地址。
ADC可以通过外部硬件触发,如果想停止ADC工作,可以停止ADC外部硬件触发源即可。
祝顺利。
 

传输数据位数已经解决了。 我设置的目的地址偏移是2,我觉得应该是在传输之前目的地址就已经+2了才导致起始地址中的内容一直是0,这个该如何配置?   外部触发那个ADC采样完成后会给DMA一个信号,这样DMA才能进行搬运,我觉得应该是要设置DMA才可以啊,这个的话是跟那个寄存器有关呢?
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-2 13:20:34 | 显示全部楼层

回复:ADC采样DMA传输问题

 你是需要将ADC转换结果通过DMA传输到内存的某个区域,所以目的地址应该是ADC的结果寄存器,这个地址是固定的,不需要改变。
DMA_TCDn_SOFF寄存器设定应该为0. 
DMA 触发源寄存器应该配置Channel Configuration register (DMAMUX_CHCFGn)寄存器。
 
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

65

帖子

0

中级会员

Rank: 3Rank: 3

积分
252
最后登录
1970-1-1
 楼主| 发表于 2013-9-2 16:31:03 | 显示全部楼层

RE:ADC采样DMA传输问题

目的地址和源地址设置都是不错的,现在的问题是:第一是目的地址的数据起始地址里面始终被跳过,应该是让它从第一个就开始保存。第二是传输时需要软件手动进行传输,怎样让它自动检测触发信号进行自动传输,直到设定的传输次数减为零后停止
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-3 15:20:48 | 显示全部楼层

回复:ADC采样DMA传输问题(正解)

回复第 5 楼 于2013-09-02 16:31:03发表:
目的地址和源地址设置都是不错的,现在的问题是:第一是目的地址的数据起始地址里面始终被跳过,应该是让它从第一个就开始保存。第二是传输时需要软件手动进行传输,怎样让它自动检测触发信号进行自动传输,直到设定的传输次数减为零后停止
 
问题一:你是用DMA将ADC的数据传到SRAM中吗? ADC 采样值寄存器为源地址,SRAM为目的地址。如果目的地址数据起始地址有问题,你需要看变量数组定义的地址是不是地址对齐。
问题二: ADC可以采用硬件触发方式。
 
 
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
    发表于 2015-9-5 23:26:27 | 显示全部楼层
    学习了
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-12-21 09:20
  • 签到天数: 57 天

    连续签到: 1 天

    [LV.5]常住居民I

    6

    主题

    163

    帖子

    1

    高级会员

    Rank: 4

    积分
    613
    最后登录
    2021-4-28
    发表于 2018-12-4 11:17:14 | 显示全部楼层
    资料很详细:直接写寄存器,注释完备。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 18:09 , Processed in 0.103137 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表