Hallo,
ich habe ein Problem mit dem ADC12 des MSP430FG4618 DevBoard.
Ich habe eine Interruptroutine für den ADC-Conversion Vorgang 
programmiert, die allerdings nicht mehr verlassen wird, d.h. es wird 
nicht mehr in den Main-Loop des Programms zurückgekehrt. Hat jemand eine 
Idee, woran das liegen könnte?
Hier erst mal meine init-routine:
| 1 | void init_adc() {
 | 
| 2 | P6SEL = 0x0F;
 | 
| 3 |   ADC12CTL0 = ADC12ON + MSC + SHT0_2;   // Turn on ADC12, set sampling time
 | 
| 4 |   ADC12CTL1 = SHP + CONSEQ_1;           // Use sampling timer, single sequ
 | 
| 5 |   ADC12MCTL0 = INCH_0;                  // ref+=AVcc, channel = A0 
 | 
| 6 |   ADC12MCTL1 = INCH_1;                  // ref+=AVcc, channel = A1
 | 
| 7 |   ADC12MCTL2 = INCH_2;                  // ref+=AVcc, channel = A2
 | 
| 8 |   ADC12MCTL3 = INCH_3 + EOS;            // ref+=AVcc, channel = A3, end seq 
 | 
| 9 |   ADC12IE = 0x08;                       // Enable interrupt
 | 
| 10 |   ADC12CTL0 |= ENC;                     // Conversion enabled 
 | 
| 11 | }
 | 
Die wird aufgerufen durch:
| 1 | WDTCTL = WDTPW + WDTHOLD;  // Stop watchdog timer
 | 
| 2 | FLL_CTL0 |= XCAP18PF;  // Set LoadCap 
 | 
| 3 | init_adc();  
 | 
| 4 | _BIS_SR(CPUOFF + GIE);
 | 
und hier jetzt die Routine selbst - die aber eigentlich nicht viel 
macht, außer eine Ausgabe auf die Serielle Schnittstelle zu schreiben:
| 1 | __interrupt void ADC_ISR (void);
 | 
| 2 | ADC12_ISR(ADC_ISR)
 | 
| 3 | __interrupt void ADC_ISR (void) {
 | 
| 4 |     printUART("ADC-IR\r\n",sizeof("ADC-IR\r\n"));
 | 
| 5 |     _BIC_SR_IRQ(CPUOFF);     
 | 
| 6 |     _NOP();
 | 
| 7 | }
 | 
Im Main-Loop steht noch folgendes:
| 1 | while (true){
 | 
| 2 |   P2OUT ^= 0x02;         
 | 
| 3 |   DC12CTL0 |= ADC12SC;          
 | 
| 4 |   for (i = 0; i < 20000; i++);
 | 
| 5 | }
 | 
Hat vielleicht jemand eine Idee? Wie gesagt - wird die 
Interrupt-Routine, des ADCs nicht verlassen, bzw. dauert so lange, dass 
bevor ins Hauptprogramm zurückgesprungen werden kann, wieder die Routine 
aufgerufen wird.
Ich kenn mich leider mit dem TI nicht so gut aus, daher wäre - falls es 
ein Zeitproblem wäre - die Frage, wie ich die Aufrufzeit der ISR 
bestimmen kann. Also wie kann ich einstellen, mit welcher Frequenz der 
Interrupt "gefeuert" wird?
Danke GALDO