3287|3

9

帖子

2

TA的资源

一粒金砂(初级)

楼主
 

MSP430 ADC触发DMA的疑问 [复制链接]

本帖最后由 905105948 于 2017-3-17 08:57 编辑

单片机型号MSP430FR6972我想用ADC序列通道采样,通道0-1,触发DMA,把ADC采样的数据存到flash里去。单片机打断点的情况下,定时器每次触发ADC采样后,flash里更新了一个采样值,但是,实际情况是,采样完1s的数据,我看内存中的数据,两两是相同的,如下图,
给我的感觉像两个ADC12IFGx标志触发了采样,但是pdf也写了,有最后的ADC12IFGx触发DMA,
不知道是不是还需要别的设置。
做过的测试:
1.保留DMA0,注释DMA1,0-1通道序列采,值还是两两重复的。
2.保留DMA0,注释DMA1,0通道序列采样,值是正常的。
3.保留DMA0,注释DMA1,0-1通道单次序列采,flash里更新了两个值,的确触发了两次。
ADC和DMA配置如下:
  1. void startADC(void)
  2. {
  3.   
  4.       while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
  5.       REFCTL0 |= REFVSEL_2 | REFON;             // Select internal ref = 2.5V
  6.                                                 // Internal Reference ON
  7.       // Configure ADC12
  8.       ADC12CTL0 = ADC12ON | ADC12SHT0_2;        // Turn on ADC12, set sampling time 16 ADC12CLK
  9.       ADC12CTL1 = ADC12SHP |ADC12SHS_1 | ADC12CONSEQ_3 ; // Timer_A TA0 CCR1触发采样,序列通道采样 0-1

  10.       
  11.       ADC12CTL3 = ADC12CSTARTADD_0;
  12.   
  13.       ADC12MCTL0 = ADC12INCH_2 | ADC12VRSEL_1 ;
  14.       ADC12MCTL1 = ADC12INCH_3 | ADC12VRSEL_1 | ADC12EOS;
  15.       
  16.       //ADC12IER0 = ADC12IE1;
  17.       
  18.       ADC12CTL0 |= ADC12ENC | ADC12SC;
  19.       
  20.       // Configure DMA channel 0
  21.     __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0);// Source block address
  22.     __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) 0x10000);// Destination address 0x10000
  23.     DMA0SZ = 4000;                              // Block size
  24.     DMACTL0 |= DMA0TSEL_26;                    //触发源选择ADC12采样完成

  25.     DMA0CTL = DMADT_4 | DMASRCINCR_0 | DMADSTINCR_3; // Rpt, inc
  26.     DMA0CTL |= DMAEN;                         // Enable DMA0
  27.    
  28.     // Configure DMA channel 1
  29.     __data16_write_addr((unsigned short) &DMA1SA,(unsigned long) &ADC12MEM1);// Source block address
  30.     __data16_write_addr((unsigned short) &DMA1DA,(unsigned long) 0x12000);// Destination address 0x12000
  31.     DMA1SZ = 4000;                              // Block size
  32.     DMACTL0 |= DMA1TSEL_26;                    //触发源选择ADC12采样完成
  33.     DMA1CTL = DMADT_4 | DMASRCINCR_0 | DMADSTINCR_3; // Rpt, inc
  34.     //DMA1CTL |= DMAEN;                         // Enable DMA1


  35. }
复制代码

最新回复

确定一下,你的数据源地址和目的地址在传输是不是都一起变化,要对应好,你的数据源地址和目的地址都是需要变化的  详情 回复 发表于 2017-3-21 08:11
 
点赞 关注(1)

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
您是做局部放电测量的吧
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
您这是做局放测量的?
 
 
 

回复

1059

帖子

1

TA的资源

版主

4
 
确定一下,你的数据源地址和目的地址在传输是不是都一起变化,要对应好,你的数据源地址和目的地址都是需要变化的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表