ADC中定时器A做采样触发源

2019-03-24 11:19发布

为什么用定时器A做触发源时,无法进入ADC的中断呢?   #include<msp430x14x.h> #define M 4 static unsigned int index = 0 ;
unsigned int results[M]; void ADC12_Init ( void ) ;
void UART_Init ( void ); void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  UART_Init();
  ADC12_Init();   _EINT();
  while(1)
  {
    ADC12CTL0 |= ADC12SC;
    LPM0;
  }
} void ADC12_Init ( void )
{
  P6SEL = 0x0f;
  P6DIR |= BIT7 + BIT6;
  P6OUT &= ~(BIT7 + BIT6);
  P2SEL |= BIT3;
  P2DIR |= 0x08;//0000 0100 //  CCR0 = 7;
  CCR1 = 0x0fff;
  TACCTL0 = OUTMOD_3;
  TACTL = TASSEL_2 + MC_2 + TACLR + TAIE; 
 
  ADC12CTL0 |= SHT0_2 + ADC12ON + MSC;
  ADC12CTL1 |= SHP + CONSEQ_1 + ADC12SSEL_3 + SHS_1;
  ADC12MCTL0 |=  INCH_0;
  ADC12MCTL1 |=  INCH_1;
  ADC12MCTL2 |=  INCH_2;
  ADC12MCTL3 |=  INCH_3 + EOS;
 
  ADC12IE |= 0x08;
  ADC12CTL0 |= ENC;
} void UART_Init ( void )
{
  P3SEL |= BIT4 + BIT5;
  ME1 |= URXE0 + UTXE0;
  UCTL0 |= CHAR;
  UTCTL0 |= SSEL0;
  UBR00 = 0x03;
  UBR10 = 0x00;
  UMCTL0 = 0x4a;
  UCTL0 &= ~SWRST;
 // IE1 |= UTXIE0;
 
}   #pragma vector = ADC_VECTOR
__interrupt void adc(void)
{
  P6OUT ^= BIT7;
//  _NOP();
  results[0] = ADC12MEM0;
  results[1] = ADC12MEM1;
  results[2] = ADC12MEM2;
  results[3] = ADC12MEM3;
//  while(!(IFG1&UTXIFG0));
  TXBUF0 = results[index]/16;
  index = (index + 1) % M;
  ADC12CTL0 &= ~ENC;
  LPM0_EXIT;
}
#pragma vector = TIMERA1_VECTOR
__interrupt void timer(void)
{
  switch(TAIV)
  {
  case 2:break;
  case 4:break;
  case 10:P6OUT ^= BIT6;_NOP();break;
  }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
wstt
1楼-- · 2019-03-24 20:33
< 定时器设置上参考这个:
  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
Lucky_Hu
2楼-- · 2019-03-24 21:46
 精彩回答 2  元偷偷看……
小小鱼
3楼-- · 2019-03-25 01:39
看看。。。。。。。。。。。。。。。。。。。。。。。。

一周热门 更多>

相关问题

    相关文章