Ich verwende in meinem Projekt mit XC16 einen dsPIC30F4011 und programmiere derzeit seinen ADC. Meine Frage ist aber auch allgemein:
Muss ich das Peripheriegerät (in diesem Fall ADC) bei jedem Interrupt aus- und wieder einschalten?
Hier ist mein Code:
void __attribute__((__interrupt__, auto_psv)) _ADCInterrupt(void) {
ADCON1bits.ADON = 0; //is this really necessary?
IFS0bits.ADIF = 0; //turn interrupt flag off
//read buffers and save data
ADCON1bits.ADON = 1; //is this really necessary?
}
Sie müssen Ihren ADC nicht bei jedem Interrupt ausschalten, es sei denn, Sie möchten die aktuell laufende Konvertierung abbrechen (die Konvertierung, die den Interrupt erzeugt hat, bleibt auf dem ADCBUF - siehe Abschnitt 20.5 des Datenblatts).
Allerdings würde es wenig Sinn machen, die nächste Wandlung abzubrechen und den ADC am Ende des Interrupts neu zu starten. Man könnte einfach den Autotrigger deaktivieren und den ADC am Ende des Interrupts auslösen ...
Stattdessen müssen Sie, wie Sie es getan haben, das Interrupt-Flag per Software löschen, wie im Referenzhandbuch der dsPIC-Familie ( http://ww1.microchip.com/downloads/en/DeviceDoc/70046E.pdf ) in Abschnitt 6.4 gezeigt.
IFSx: Unterbrechungs-Flag-Statusregister
Alle Interrupt-Request-Flags werden in den IFSx-Registern gehalten, wobei 'x' die Registernummer bezeichnet. Jede Unterbrechungsquelle hat ein Statusbit, das durch die jeweilige Peripherie oder ein externes Signal gesetzt und per Software gelöscht wird.
Matt Jung
D Krüger
//do stuff
ausreichend. Ohne zu sehen, was das "Zeug" ist, wird Ihnen niemand eine genaue Antwort geben können.Jaka Noe
Jaka Noe
Matt Jung
D Krüger
Jaka Noe
DiBosco