5217|3

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430 adc12 关于使用TimerA作为触发时的问题 [复制链接]

这几个关系没有搞清楚
void main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                 // Disable the Watchdog.
  ADC_Init();                               // Initialize ADC12
  ADC12CTL0 |= ENC;                         // Start conversion
                                                            //看别人写的程序在这一般都是加一句ADC12CTL0 |= ADC12SC; 
                                                            //但是这里没有这句话,
  _BIS_SR(LPM0_bits);                       // Enter LPM0
}


void ADC_Init(void)
{
  P1DIR = 0xff;                             // set port to outputs
  P1OUT = 0;                                // reset port outputs
  P6SEL |= 0x01;                            // select A0 input
  ADC12CTL0 = ADC12ON+SHT0_1+REF2_5V+REFON; // Setup ADC12
  ADC12CTL1 = SHP+CONSEQ_2+SHS_1;           // Timer triggers sampling
  ADC12MCTL0 = INCH_0 + SREF_1;
  ADC12IE = 0x0001;                         // Enable ADC12IFG.0


  TACCR0 = 1500;                            // Delay to allow Ref to settle
  TACCTL0 |= CCIE;                          // Compare-mode interrupt.
  TACTL = TASSEL_1 | MC_1;                  // TACLK = ACLK, Up mode.
  _BIS_SR(LPM3_bits + GIE);                 // Wait for delay, Enable interrupts
  TACCTL0 &= ~CCIE;                         // Disable timer

  P2SEL |= BIT3;                            // Set for Timer A1
  P2DIR |= 0x08;
  TACCR0 = 7;                               // Init TACCR0 w/ sample prd=CCR0+1
  TACCR1 = 4;                               // Trig for ADC12 sample & convert
  TACCTL1 = OUTMOD_3;                       // Set/reset
  TACTL = TACLR | MC_1 | TASSEL_1;          // ACLK, clear TAR, up mode
}

// Timer_A0 Interrupt Service Routine
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL = 0;
  LPM3_EXIT;                                // Exit LPM3 on return
}


// ADC12 Interrupt Service Routine
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
  static unsigned int index = 0;

  results[index++] = ADC12MEM0;             // Move results

  if (index == 512)
  {
    ADC12CTL0 &= ~ENC;                      // Stop conversion
    index = 0;
    P1OUT |= 0x01;
    _BIS_SR(LPM3_bits);                     // Enter LPM3
  }
}

最新回复

lz      TACTL = TASSEL_1 | MC_1;                  // TACLK = ACLK, Up mode.   这句有问题啊TASSEL_1=smclk  详情 回复 发表于 2012-10-21 14:57
 
点赞 关注

回复
举报

60

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
LZ您好。
ADC12ENC这一位相当于一个开关,打开此位后就允许ADC工作
ADC12SC是ADC开始采样转换的一个命令,置位后就为进行一次采样。如果选择的单次模式,采样一次后若还需要再次采样则还需要手动置位触发这个命令。
当然ADC12除了使用ADC12SC进行触发之外,还可以选择使用TimerA或TimerB进行触发。
这个时候它的触发源就是TimerA,当设定的时间一到,则ADC12自动启动转换
这个过程就跟ADC12SC无关了~
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复 楼主 ypc8272805 的帖子

回答赚积分,俺太穷了呵呵
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

4
 
lz      TACTL = TASSEL_1 | MC_1;                  // TACLK = ACLK, Up mode.   这句有问题啊TASSEL_1=smclk
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表