1 | #include "msp430x54x.h"
|
2 | |
3 | #define Num_of_Results 8
|
4 | |
5 | volatile unsigned int A0results[Num_of_Results];
|
6 | volatile unsigned int A1results[Num_of_Results];
|
7 | volatile unsigned int A2results[Num_of_Results];
|
8 | volatile unsigned int A3results[Num_of_Results];
|
9 | |
10 | void main(void)
|
11 | {
|
12 | WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
|
13 | P6SEL = 0x0F; // Enable A/D channel inputs
|
14 | ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8; // Turn on ADC12, extend sampling time
|
15 | // to avoid overflow of results
|
16 | ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; // Use sampling timer, repeated sequence
|
17 | ADC12MCTL0 = ADC12INCH_0; // ref+=AVcc, channel = A0
|
18 | ADC12MCTL1 = ADC12INCH_1; // ref+=AVcc, channel = A1
|
19 | ADC12MCTL2 = ADC12INCH_2; // ref+=AVcc, channel = A2
|
20 | ADC12MCTL3 = ADC12INCH_3+ADC12EOS; // ref+=AVcc, channel = A3, end seq.
|
21 | ADC12IE = 0x08; // Enable ADC12IFG.3
|
22 | ADC12CTL0 |= ADC12ENC; // Enable conversions
|
23 | ADC12CTL0 |= ADC12SC; // Start convn - software trigger
|
24 |
|
25 | __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, Enable interrupts
|
26 | __no_operation(); // For debugger
|
27 |
|
28 | }
|
29 | |
30 | #pragma vector=ADC12_VECTOR
|
31 | __interrupt void ADC12ISR (void)
|
32 | {
|
33 | static unsigned int index = 0;
|
34 | |
35 | switch(__even_in_range(ADC12IV,34))
|
36 | {
|
37 | case 0: break; // Vector 0: No interrupt
|
38 | case 2: break; // Vector 2: ADC overflow
|
39 | case 4: break; // Vector 4: ADC timing overflow
|
40 | case 6: break; // Vector 6: ADC12IFG0
|
41 | case 8: break; // Vector 8: ADC12IFG1
|
42 | case 10: break; // Vector 10: ADC12IFG2
|
43 | case 12: // Vector 12: ADC12IFG3
|
44 | A0results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
|
45 | A1results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
|
46 | A2results[index] = ADC12MEM2; // Move A2 results, IFG is cleared
|
47 | A3results[index] = ADC12MEM3; // Move A3 results, IFG is cleared
|
48 | index++; // Increment results index, modulo; Set Breakpoint1 here
|
49 |
|
50 | if (index == 8)
|
51 | {
|
52 | (index = 0);
|
53 | }
|
54 | case 14: break; // Vector 14: ADC12IFG4
|
55 | case 16: break; // Vector 16: ADC12IFG5
|
56 | case 18: break; // Vector 18: ADC12IFG6
|
57 | case 20: break; // Vector 20: ADC12IFG7
|
58 | case 22: break; // Vector 22: ADC12IFG8
|
59 | case 24: break; // Vector 24: ADC12IFG9
|
60 | case 26: break; // Vector 26: ADC12IFG10
|
61 | case 28: break; // Vector 28: ADC12IFG11
|
62 | case 30: break; // Vector 30: ADC12IFG12
|
63 | case 32: break; // Vector 32: ADC12IFG13
|
64 | case 34: break; // Vector 34: ADC12IFG14
|
65 | default: break;
|
66 | }
|
67 | }
|