I would like to measure a value by using the ADC every 20 ms. Therefore I did a PWM with 10 % duty cycle (should be enougth time for sampling) and set the timer trigger ADC10SHSx to Timer trigger 0 (should be the correct one according to the data sheet).
Unfortunately the ADC never runs into the ISR but it produces ISR bits for conversation time overflow.
I don't find any mistake inside my code... is anybody out there who finds a wrong setting - I double checked everything.
I'm using the MSP-EXP430FR5739 Board.
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// Setup clock system
CSCTL0_H = 0xA5; // Password
CSCTL1 |= DCOFSEL0 + DCOFSEL1; // DCO 8 MHz
CSCTL2 = SELA_3 + SELS_3 + SELM_3; // set ACLK = SMCLK = DCO/8
// Port Setup
P1DIR |= BIT0; // Set P1.0 to output direction
P1SEL0 |= BIT0; // P1.0 is output for PWM
P1SEL1 |= BIT1; // P1.1 is input for ADC
P1SEL0 |= BIT1; // P1.1 is input for ADC
// Setup Timer
TA0CCR0 = 20000 - 1; // PWM Period
TA0CCTL1 = OUTMOD_7; // CCR1 reset/set
TA0CCR1 = 2000; // CCR1 PWM duty cycle
TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR
// Setup ADC
ADC10CTL0 &= ~ADC10ENC;
ADC10CTL0 |= ADC10SHT_2 + ADC10ON; // ADC10ON, S&H=16 ADC clks
ADC10CTL1 |= ADC10CONSEQ_0; // Single-channel
ADC10CTL1 |= ADC10SHS_1; // Set PWM as trigger source
ADC10CTL1 &= ~ADC10SHP; // Bypass Sample timer
ADC10CTL2 |= ADC10RES; // 10-bit conversion results
ADC10MCTL0 |= ADC10INCH_1; // A1 ADC input select; Vref=AVCC
ADC10IE |= ADC10IE0; // Enable ADC conv complete interrupt
ADC10CTL0 |= ADC10ENC; // Enable ADC conversation
while(1)
{
__bic_SR_register(CPUOFF);
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__no_operation();
switch(__even_in_range(ADC10IV,12))
{
case 0: break; // No interrupt
case 2: break; // conversion result overflow
case 4: break; // conversion time overflow
case 6: break; // ADC10HI
case 8: break; // ADC10LO
case 10: break; // ADC10IN
case 12:
ADC_Result = ADC10MEM0;
__no_operation();
__bic_SR_register_on_exit(CPUOFF);
break;
default: break;
}
}