Forum: Mikrocontroller und Digitale Elektronik STM32 ADC-Multichannel (Scan Mode)


von Helmut (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.