Hieee Guys,
I am new to MSP430 Controller, I am using MSP430f5325 with 12 ADC channels repeat sequence mode but I am not able store more than 18 results.
when I increased the array size my program not completely debug and I want to take max readings.... plz help ..... Thanx in Advance
XT1=32768hz.
# include "msp430F5325.h"
# define Num_of_Results 18
volatile unsigned int A0results[Num_of_Results];
volatile unsigned int A1results[Num_of_Results];
volatile unsigned int A2results[Num_of_Results];
volatile unsigned int A3results[Num_of_Results];
volatile unsigned int A4results[Num_of_Results];
volatile unsigned int A5results[Num_of_Results];
volatile unsigned int A6results;
volatile unsigned int A7results;
volatile unsigned int A8results;
volatile unsigned int A9results;
volatile unsigned int A10results;
volatile unsigned int A11results;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
init_freq(); // increase MCLK and SMCLK
P6SEL = 0xFF; // Enable A/D channel inputs
P7SEL = 0x0F; // Enable A/D channel inputs
ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8+ADC12SHT1_8; // Turn on ADC12, extend sampling time
// to avoid overflow of results
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; // Use sampling timer, repeated sequence
ADC12MCTL0 = ADC12INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = ADC12INCH_3; // ref+=AVcc, channel = A1
ADC12MCTL2 = ADC12INCH_1; // ref+=AVcc, channel = A2
ADC12MCTL3 = ADC12INCH_4; // ref+=AVcc, channel = A3, end seq.
ADC12MCTL4 = ADC12INCH_2; // ref+=AVcc, channel = A0
ADC12MCTL5 = ADC12INCH_5;
ADC12MCTL6 = ADC12INCH_6;
ADC12MCTL7 = ADC12INCH_7;
ADC12MCTL8 = ADC12INCH_12;
ADC12MCTL9= ADC12INCH_13;
ADC12MCTL10= ADC12INCH_14;
ADC12MCTL11= ADC12INCH_15+ADC12EOS;
ADC12IE = 0x0800; // Enable ADC12IFG.15
ADC12CTL0 |= ADC12ENC; // Enable conversions
ADC12CTL0 |= ADC12SC;// Start convn - software trigger
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, Enable interrupts
__no_operation(); // For debugger
// Interrupt Subroutine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned int index = 0;
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: break; // Vector 6: ADC12IFG0
case 8: break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12: break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: break; // Vector 18: ADC12IFG6
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: // Vector 28: ADC12IFG11
A0results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
A1results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
A2results[index] = ADC12MEM2; // Move A2 results, IFG is cleared
A3results[index] = ADC12MEM3; // Move A3 results, IFG is cleared
A4results[index] = ADC12MEM4; // Move A0 results, IFG is cleared
A5results[index] = ADC12MEM5; // Move A1 results, IFG is cleared
A6results = ADC12MEM6; // Move A2 results, IFG is cleared
A7results = ADC12MEM7; // Move A3 results, IFG is cleared
A8results = ADC12MEM8; // Move A0 results, IFG is cleared
A9results = ADC12MEM9; // Move A1 results, IFG is cleared
A10results = ADC12MEM10; // Move A2 results, IFG is cleared
A11results = ADC12MEM11; // Move A3 results, IFG is cleared
index++; // Increment results index, modulo; Set Breakpoint1 here
if (index == 18)
{
index = 0;
}
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
}