Hallo,
ich schreibe gerade einen ADC-Treiber für den AT91SAM7X256. Woran kann
es liegen, dass die ersten Wandlungen 0x00 sind und danach erst die
richtigen Werte kommen?
In meinem Fall werden die Daten per DMA gespeichert. Beim Debuggen sind
die ersten 3 Samples von Channel1 und Channel3 null und die Samples 4
und 5 sind in Ordnung. Rufe ich die Funktion ein zweites Mal auf haben
alle 5 Samples der beiden Channel den richtigen Wert.
Als ich das ganze ohne DMA und auf ein Minimum reduziert getestet habe
ging es immer noch nicht. Beim schrittweise Debuggen ist komischerweise
nur der Erste Sample.
///////////////////////////////////////////////////////
INIT:
a_pPMC->PMC_PCER = (1 << AT91C_ID_ADC);
//Software Reset
a_pADC->ADC_CR = AT91C_ADC_SWRST;
// Set maximum startup time and hold time
a_pADC->ADC_MR = (
(AT91C_ADC_TRGEN & AT91C_ADC_TRGEN_DIS) | // Hardware triggers
are disabled. Starting a conversion is only possible by software.
(AT91C_ADC_TRGSEL & AT91C_ADC_TRGSEL_TIOA0 ) | // TIOA Ouput of the
Timer Counter Channel 0
(AT91C_ADC_LOWRES & AT91C_ADC_LOWRES_10_BIT) | // (ADC) 10-bit
resolution
(AT91C_ADC_SLEEP & AT91C_ADC_SLEEP_NORMAL_MODE) | // (ADC) Normal
Mode
(AT91C_ADC_PRESCAL & 0x0F) | // (ADC) Prescaler rate
selection [PRESCAL = (MCK / (ADCClock * 2)) - 1]
(AT91C_ADC_STARTUP & 0x1F) | // (ADC) Startup Time
[STARTUP = (Startup Time * ADCClock / 8) - 1]
(AT91C_ADC_SHTIM & 0x0F)); // (ADC) Sample & Hold Time
[SHTIM = Sample & Hold Time * ADCClock]
/////////////////////////////////////////////////////////////
do_conversion:
a_pADC->ADC_RPR = (int)(adcp->ad_samples); //adcp->ad_samples ist
natürlich ein Pointer auf mein Puffer
a_pADC->ADC_RCR = 10;
a_pADC->ADC_PTCR = AT91C_PDC_RXTEN;
//Start conversion
a_pADC->ADC_CR = AT91C_ADC_START;
while(!(a_pADC->ADC_SR & AT91C_ADC_ENDRX))
// Start conversion
a_pADC->ADC_CR = AT91C_ADC_START; //<-- hier setzte ich mein
Breakpoint für das schrittweise debuggen
Gruß
Florian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.