Forum: Mikrocontroller und Digitale Elektronik ADC landet beim LM3S6965 im Interrupt-Handler


von Jan R. (superjany)


Lesenswert?

Hallo,

ich versuche zur Zeit den ADC am LM36965 zum Laufen zu bringen. Bisher 
bin ich immer ganz gut mit dem Democode von StellarisWare gefahren. 
Diesmal allerdings weiß ich nicht so recht weiter.

Hier erstmal der Code:


unsigned long ulValue;
  //
  // Enable the first sample sequence to capture the value of channel 0 
when
  // the processor trigger occurs.
  //
  ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
  ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_IE | ADC_CTL_END | 
ADC_CTL_CH0);
  ADCSequenceEnable(ADC_BASE, 0);
  //
  // Trigger the sample sequence.
  //
  ADCProcessorTrigger(ADC_BASE, 0);
  //
  // Wait until the sample sequence has completed.
  //
  while(!ADCIntStatus(ADC_BASE, 0, false))
  {
  }
  //
  // Read the value from the ADC.
  //
  ADCSequenceDataGet(ADC_BASE, 0, &ulValue);


Bei ADCSequenceConfigure lande ich allerdings in IntDefaultHandler()... 
theoretisch sollte dies aber nicht passieren - schließlich triggere ich 
ja extra nicht über einen Interrupt. Kann mir jemand weiterhelfen?

Vielen Dank schonmal,
Jan

von Jan R. (superjany)


Lesenswert?

Ich habe jetzt herausgefunden, dass es der Bus Fault Interrupt ist. Sagt 
mir aber trotzdem noch nichts. Also trotzdem bitte Hilfe :-(

Jan

von holger (Gast)


Lesenswert?

ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_IE | ADC_CTL_END |

Das ADC_CTL_IE stinkt doch geradzu nach Interrupt.
Mach das doch mal weg.

von Jan R. (superjany)


Lesenswert?

Prinzipiell ist das natürlich ein Indiz für Interrupts und ich habe es 
auch mal getestet. Nach wie vor funktioniert es aber nicht.
Bei dem Interrupt, welcher aufgerufen wird, handelt es sich wie gesagt 
um den Bus Fault Interrupt. Das selbe geschieht auch, wenn ich den 
Democode für die Analog-Komparatoren teste.

Ich wäre echt dankbar für jedes Stück funktionstüchtigen Democode.

von etec (Gast)


Lesenswert?

Hallo,
das ADC-Modul sollte auch freigegeben werden. Ansonsten geht der in eine 
FaultISR.

Funktion heißt: SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);

Hoffe du hast es noch nicht aufgegeben.

von Jan R. (Gast)


Lesenswert?

War glaube ich damals ne kalte Lötstelle ;-)

von T-Brox (Gast)


Lesenswert?

Ist zwar schon ne Weile her, aber falls es noch jemand interessiert ;-)

Ich hatte das gleiche Problem und habe es folgendermaßen lösen können:

Ein Dummy Read nach dem "PeripheralEnable" sorgt für zeitlich genügend 
Abstand damit die Initialisierung auch tatsächlich beendet wird, bevor 
das nächste Mal auf das Modul zugegriffen wird.
Steht auch in dieser Form in der Beschreibung der Peripheral Driver 
Library. Dort auch der Hinweis dass dies zum einem "Bus Fault" führt.

von Jan R. (Gast)


Lesenswert?

Welchen Stand (Datum) hat deine Beschreibung?

von T-Brox (Gast)


Lesenswert?

Das Dokument was mir gerade vorliegt heißt SW-DRL-UG-9453 vom 05.09.12 
und ist aus der Software-CD Build 733 für das LM3S8962 Eval kit. Die 
uralte Build 148 (noch von Luminary) hatte diese Info bspw. noch nicht 
drin.

von Jan R. (Gast)


Lesenswert?

Genau darauf wollte ich hinaus ;-)

von T-Brox (Gast)


Lesenswert?

besser spät als nie ^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.