Hi all, i have some problems with my msp432 (#MSP430) and adc14.
I want to have a sample every 5 microseconds. So i have set smclk = 1Mhz (dco = 24Mhz and then divided) and ta0ccr0 = 5 so that every interrupt i should have a sample. Furthermore i have set adc14 clock = smclk (ADC14SSEL_4) and clock cycles (32 cycles sh + 16 cycles conversion --> 32+16 / 12 = 4 < 5us).
Is correct this reasoning? I post a part of my code:
Thanks for help.
Luca
// ==========Configuration clock 24Mhz - Smclk 12Mhz==========
CSKEY = 0x695A; // Unlock CS module for register access
CSCTL0 = 0; // Reset tuning parameters
CSCTL0 = DCORSEL_4; // Set DCO to 24MHz
CSCTL1 = CSCTL1 & ~(SELS_M | DIVS_M); // Clear existing registers
CSCTL1 = CSCTL1 | (SELS_3 | DIVS_1); // For SMCLK = 12Mhz, select DCO as source then divide by 2
CSKEY = 0; // Lock CS module from unintended accesses
// ==========Configurazione ADC 14 bit (24Mhz)==========
P6SEL1 |= BIT1
P6SEL0 |= BIT1; // p1.6 ad
<span></span>ADC14CTL0 &= ~ADC14ENC; //Turn off Enable. With few exceptions, the ADC14 control bits can only be modified when ADC14ENC = 0
<span></span>ADC14CTL0 = ADC14ON | ADC14SHT0_3 | ADC14CONSEQ_2 | ADC14SSEL_4 | ADC14SHP | ADC14SHS_0; // Turn on ADC14, set sampling time (SH = 32), repeat single channel (ssel = smclk), adc14sc start
<span></span>ADC14CTL1 = ADC14RES__14BIT; // Use sampling timer, 14-bit conversion results (16 clock cycles)
ADC14MCTL0 = ADC14VRSEL_0 | ADC14INCH_14; // A0 ADC input select; Vref=AVCC=3.3V
ADC14IER0 |= ADC14IE0;
<span></span>ADC14CTL0 |= ADC14ENC; // ADC enable
// ==========Configurazione TimerA0==========
NVIC_ISER0 = 1 << ((INT_TA0_0 - 16) & 31); // Enable TA0_0 interrupt in NVIC module
TA0CCTL0 &= ~CCIFG; // Interrupt disable
TA0CCR0 = 5; // Overflow (step dell'interrupt)
TA0CTL = TASSEL__SMCLK | MC__UP | ID_2; // SMCLK, UP mode, division 4 (12 MHz / 4 = 3 MHz)
TA0EX0 |= TAIDEX_2; // division 3 (3 MHz / 3 = 1 MHz)
// ==========Timer A0 interrupt service routin==========
void TimerA0_0IsrHandler(void) {
TA0CCTL0 &= ~CCIFG;
// I want adc sampling only in this period (0-1000). Every 5us i have time to have sample
if(microsecondi > 0 && microsecondi <= 1000) {
ADC14CTL0 |= ADC14SC; // Start conversion;
values[index_N] = ADC14MEM0;
index_N++;
}
microsecondi += STEP;
// There is a rtc that repeat this cycle (this works)
if (microsecondi >= 10000){
microsecondi = 0;
}

Hey Luca, if you tell a little more about what you mean by 'some problems', you stand more chances to receive help from other members.
ok :)
1)i would like to know if this method to have a sample every ~5us is correct because having adc14clock = 12Mhz, Cycles&h= 32 and Cycleconversion = 16 the total time to have adc sample is 4us. But if i use Cycles&h = 64 i have time > 5us. (interrupt routine).
2)i would like to know if start conversion with timerA, memorize the values of adc and assure that conversion is only from 0 to 1000 (values of microseconds in TimerA) is correct.
Thanks







