Forum: Mikrocontroller und Digitale Elektronik max. Buffersize für ADC-DMA-Transfer


von Marko R. (dr_marko_rocznik) Benutzerseite


Lesenswert?

Es sieht so aus, also ob der DMA im STM32H7 für den Buffer einen 
maximalen Adressraum von 16 Bit hat, zumindest funktioniert der Code nur 
bis maximal
ADCbufferSize = 65535

#define ADCbufferSize 65535
volatile uint16_t ADCbuffer[ADCbufferSize];
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADCbuffer, ADCbufferSize);

Schaue ich mir meinen Buffer (nach dem Interrupt von 
HAL_ADC_ConvCpltCallback) an, dann ist alles bis ADCbuffer[65534] mit 
ADC-Werten gefüllt und darüber stehen Nullen.

Am Buffer liegt es nicht, wenn ich den mit einer Schleife mit 
Dummy-Zahlen fülle, dann liegen die Werte auch da.

Im Grunde sollte dem DMA ein Adressraum von 32 Bit zur Verfügung stehen, 
warum hört der Code auf bei 16 Bit Adressraum zu funktionieren?

Viele Grüße!
 Marko

von Jim M. (turboj)


Lesenswert?

Marko R. schrieb:
> Im Grunde sollte dem DMA ein Adressraum von 32 Bit zur Verfügung stehen,

Hast Du das im Referenz Handbuch verifiziert?

DMA Register für "Transfer Size" haben gerne mal <32 Bit Breite, und 
arbeiten auch gerne mal nur auf spezifischen Speicherbereichen, z.B. 
nicht aus dem Flash. YMMV, denn das ist alles µC-spezifisch.

von Marko R. (dr_marko_rocznik) Benutzerseite


Lesenswert?

Ich habe es gefunden:

DMA flow controller: the number of data items to be transferred is 
softwareprogrammable
from 1 to 65535

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.