Hallo,
ich versuche den STM32F103 im ADC Multichannel zu programmieren. Die
Daten von zweier Potis (ADC1_Ch8 und ADC1_Ch9) sollen via DMA in den
Speicher geschrieben werden. Dafür habe ich den Scan und Continous Mode
im ADC programmiert. Außerdem habe ich DMA freigegeben. Für einen Kanal
klappt das auch alles wunderbar.
Wenn ich nun beide Kanäle scannen möchte, dann steht in beiden
Speicheradressen immer nur der Wert des ersten Kanals. Der DMA-Zugriff
übergibt also nicht die Werte beider Kanäle. Ich tippe auf einen Fehler
in der Initialisierung des ADCs.
Vielleicht kann mir jemand helfen.
Vielen Dank...
macros:
BBWH - bit band write - write one bit into register
[Register,Stelle,Wert 0 oder 1]
WRW - write register word - write complete register [Register Wert]
WRHW - write register halfword
program:
;-----------------------------------------------------------------------
------------
AREA Variablen, DATA, READWRITE
AD_value DCD 0 ;start-address of AD_value
;-----------------------------------------------------------------------
------------
AREA ADC1,CODE,READONLY
EXPORT start
start
;--- CLK ---
LDR r2,=RCC_APB2ENR
LDR r3,=2_1000011100 ; ADC1, GPIO A/B/C
STR r3,[r2]
BBWH RCC_AHBENR,0,1 ; DMA
;GPIOs ---
;Port A:
LDR r2,=GPIOA_CRL
LDR r3,=0x44444404 ;Pin 1: analog input
STR r3,[r2]
;Port B
LDR r2,=GPIOA_CRL
LDR r3,=0x44444400 ;Pin 0/1: analog input
STR r3,[r2]
;--- ADC1 init ---
LDR r2,=ADC1_SQR3
LDR r3,=2_0100101000 ;SQ8 first in regular group
STR r3,[r2] ;SQ9 second in regular group
;sample time:
BBWH ADC1_SMPR2,24,1 ;sampletime = 7,5 cycles
BBWH ADC1_SMPR2,27,1
;DMA1 init---
WRW DMA_CPAR1,ADC1_DR ;periph. DMA-ch1
WRW DMA_CMAR1,AD_value ;memory DMA-ch1
WRW DMA_CNDTR1,2 ;DMA-cyc.
WRHW DMA_CCR1, 2_101010100001 ;DMA-ch1 config, B5-circular
B7-mem
increment
B9/B11-32Bit
mode
;ADC calibration:
LDR r2,=ADC1_CR2
LDR r3,=2_101 ;calibration ADC
STR r3,[r2]
test_CAL
BBRH ADC1_CR2,2
CMP r7,#0 ;wait for cal
BNE test_CAL
BBWH ADC1_CR2,8,1 ;DMA enable
BBWH ADC1_CR2,1,1 ;continous Mode
BBWH ADC1_CR1,8,1 ;Scan Mode enable
BBWH ADC1_CR2,0,1 ;start covertion
;=======================================================================
============
;Main:
;-----------------------------------------------------------------------
------------
;LCD
mainloop
;... display data...
B mainloop
END
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.