Ich kenn zwar den MSP überhaupt nicht.
Aber das hier klingt für mich ziemlich abenteuerlich
1 | ADC_Init();
|
2 | ADC_Disable();
|
3 | }
|
4 |
|
5 | void ADC_Init(void)
|
6 | {
|
7 | P6SEL |= 0x01; // select A0 input
|
8 | ADC12CTL0 = ADC12ON+SHT0_0+ENC+ADC12SC; // Setup ADC12; 4 Cycles Sample Time; Enable Conversion;Start conversion
|
9 | ADC12CTL1 = CSTARTADD0+SHP+ADC12DIV0+ADC12SSEL_3+CONSEQ_0+SHS_0; // ADC12MEM0;Triggerd sampling Timer;Clock Divider=0;SMCLK=3Mhz;Single conversion;Conversion active;Source=ADC12SC
|
10 | ADC12MCTL0 = EOS+INCH_0+SREF_0; //Enable_end of Sample; Source A0;Source AVCC AVSS;
|
11 | ADC12IE = 0x0001; // Enable ADC12IFG.0
|
12 | _BIS_SR(LPM0_bits + GIE); // Wait for delay, Enable interrupts
|
13 |
|
14 | }
|
15 |
|
16 | void ADC_Disable(void){
|
17 | P6SEL |= 0x00; // diselect A0 input
|
18 | ADC12CTL0 = ADC12ON+SHT0_0; // Setup ADC12; 4 Cycles Sample Time; Enable Conversion;Start conversion
|
19 | _BIS_SR(LPM0_bits + GIE); //Nur ACLK active
|
20 | ADC12CTL0 &= ~ENC;
|
21 | }
|
Da wird in der Timer ISR der ADC eingeschaltet um gleich darauf wieder
ausgeschaltet zu werden. Wie gesagt: ICh kenn den MSP nicht. Kann
natürlich gut sein, dass sich der ADC ums Ausschalten nicht kümmert,
solange eine Wandlung im Gange ist. Was er allerdings dazu sagt wenn du
ihm mitten unter der Wandlung den A0 wegschaltest, wage ich nicht zu
erraten.
Wie gesagt: Ich kenn den MSP überhaupt nicht. Aber das was du da hast
ist nicht logisch.
Die Erwartungshaltung wäre gewesen:
In der Timer ISR wird der ADC gestartet. Dar macht sein Ding. Wenn er
fertig ist, wird die ADC-ISR aufgerufen und erst dort wird der ADC
wieder abgeschaltet.