Hallo,
ich habe eine Frage zum Luminary Micro (LM3S8962) ADC. Ich habe mithilfe
der DriverLib den ADC folgendermaßen initialisiert. Die DriverLib ist
soweit ich weiß korrekt eingebunden --> ADC.c /.h natürlich dabei (Keine
Errors und Warnings)
1 | //ADC einschalten
|
2 | SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);
|
3 | //Abtastrate einstellen
|
4 | SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);
|
5 | //Zum konfigurieren ausschalten
|
6 | ADCSequenceDisable(ADC_BASE, 3);
|
7 | //Sequencer 3 (nur 1 Sample), Prozessor getriggert, Priorität 0
|
8 | ADCSequenceConfigure(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
|
9 | //Im Sequencer 3 wird Sequencenumber 0, Inputchannel ADC0 verwendet--> ADC_CTL_CH0, Trigger Source gewählt
|
10 | ADCSequenceStepConfigure(ADC_BASE, 3, 0, (ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END));
|
11 | //Sequencer einschalten
|
12 | ADCSequenceEnable(ADC_BASE, 3);
|
13 | //Prozessor Triggerung einschalten
|
14 | ADCProcessorTrigger(ADC_BASE, 3);
|
15 | //Interrupt einschalten
|
16 | ADCIntEnable(ADC_BASE, 3);
|
17 | //Interrupt Vektor
|
18 | IntEnable(33); //INT_ADC3
|
Im Startup habe ich den Interrupt Vektor festgelegt.
1 | EXTERN ADC_ISR
|
2 | DCD ADC_ISR ; ADC Sequence 3
|
Dann habe ich mir eine Interrupt Service Routine erstellt.
1 | void ADC_ISR (void)
|
2 | {
|
3 | //Interrupt rurücksetzen
|
4 | ADCIntClear(ADC_BASE, 3);
|
5 |
|
6 | //Wert einlesen
|
7 | ADCSequenceDataGet(ADC_BASE, 3, &value);
|
8 | // Ausgabe auf Display
|
9 | sprintf(buf, "ADC = %d ", value);
|
10 | RIT128x96x4StringDraw(buf, 0, 25, 15);
|
11 | }
|
Soweit ich dem Datenblatt entnehmen kann, müsste durch die
Prozessortriggerung hier 125 * 10^3 mal pro sek die ISR aufrufen. Dies
funktioniert leider nicht.
Ich habe das Projekt bereits im Simulator, sowie auf der Hardware
getestet. Leider ohne erfolg.
Ich hoffe ihr könnt mir helfen.
Vielen Dank im Voraus
Graph Oszillo