Hi!

I'm working with a project where I want to trig the ADC10 at 64 kHz by using the Timer A Out 1. I can't figure out what I'm doing wrong, please help me, I'm going nuts... or is it ballistics?
Hmmm... Anyway, here's a copy of the "important" code:

Thanks in advance for any help, any help at all! :)
/Robert

int16_t main(void)
{
  uint8_t Channel;
  uint8_t i;
  uint16_t tmpSample;
  WDTCTL = WDTPW | WDTHOLD;             // Stop WDT
  BCSCTL1 |= XTS;                       // ACLK = LFXT1 = HF XTAL
  do
  {
    IFG1 &= ~OFIFG;                     // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);         // Time for flag to set
  }
  while ((IFG1 & OFIFG) != 0);          // OSCFault flag still set?

BCSCTL2 |= (SELM_2|SELS); // MCLK = LFXT1 (safe), SMCLK = LFXT1CLK

  /*
  Setup ADC10
  VR+ = VREF+
  VR- = AVSS
  Internal reference 2,5 Volt
  ADC10 Sample-and-hold time: 16 x ADC10CLK

  A2 used for ADC10 input.
  Sample-and-hold trigged by Timer A Out 1;
  ADC10CLK = ACLK
  */

  ADC10CTL0 = (SREF_1|ADC10SHT_2|REF2_5V|REFON);
  ADC10CTL1 = (INCH_2|SHS_1|ADC10DIV_0|ADC10SSEL_1|CONSEQ_2);
  ADC10AE   = (0x04);

  /*
  Setup Timer A
  clock source: ACLK
  /1
  One tick each 125:e klockcykel (15.625 us @ 8MHz)
  */
  TACTL = TASSEL_ACLK | ID_DIV1 | MC_STOP;
  CCR0 = 125;
  CCR1 = 120;
  TACCTL1 = OUTMOD_2;

  ADC10CTL0 |= ADC10ON;

  TACTL |= MC_UPTO_CCR0;

  for(;;)
  {
    for(Channel = 0 ; Channel < CHANNELS_PER_SENSOR ; Channel++)
    {
      SetChannel(Channel);                    // Setup external mux
      while (!(ADC10CTL0 & ADC10IFG));        // PROGRAM STOPS HERE!

      ADC10CTL0 &= ~(ADC10SC|ENC|ADC10IFG);
      ADC10CTL0 |= ENC;
      tmpSample = ADC10MEM;                   // Read sample
    }
  }
  return 0;
}

Reply via email to