Klausuraufgabe zu DMA beim MSP430

Gast #5802598
Lesenswert?

Hallo,

ich bereite mich gerade auf eine Mikrorechner-Klausur vor und habe in 
einer alten Klausur folgende Aufgabe gefunden:

Per DMA sollen Messwerte vom ADC (Register ADC12MEMO) in das Feld 
uint16_t messwerte[2000] kopiert werden.
1. Welche Betriebsart wählen Sie?
2. Wie initialisieren Sie Quell- und Zieladressen?
3. Wie viele Transfers müssen ausgeführt werden?
4. Wie werden Quell- und Zieladresse nach jedem Transfer verändert?
5. Wer/was löst den DMA-Transfer aus?

Also bei 1. nehme ich für die Adressierungsart an "fixed address -> 
block of addresses" und für den Transfer-Mode "single transfer", denn es 
sollen ja einzelne Messwerte von Zeit zu Zeit aufgenommen werden. Macht 
das Sinn?

Bei 2. hab ich keine Ahnung.

3. Da jeder Transfer 2 MCLK-Zyklen braucht, wären es für alle Messwerte 
dann wohl 4000 MCLK-Zyklen?

4. Ich denke, dass die Quelladresse immer gleich bleibt und die 
Zieladresse nach jedem Transfer um 1 inkrementiert wird. Richtig?

5. Es müsste ja ein Interrupt sein? Aber diese Antwort wäre wohl zu 
ungenau?

Wäre super wenn da jemand was drüber wüsste :-)
Gast #5802663
Lesenswert?

Solche Aufgaben riechen ja mal wieder stark nach FH... Naja, was soll 
man da groß erwarten.

Zu 2.: Die Quelladresse ist das Datenregister des ADCs also &ADC12MEMO 
und die Zieladresse ist die erste Adresse des Arrays also &messwerte[0]

Zu 3.: Gefragt ist hier nach der Anzahl der Transfers, nicht der Zyklen. 
Die Frage ist aber schwachsinnig formuliert, denn es steht ja nicht da, 
wie viele Transfers für was benötigt werden. Ich vermute, die Frage ist, 
wie viele Transfers nötig sind um das Array zu füllen. Die Antwort 
müsste also 2000 sein

Zu 4.: Die Zieladresse muss um zwei inkrementiert werden, weil die 
einzelnen Einträge zwei Byte groß sind.

Zu 5.: Das müsste man mal im Datenblatt des MSP nachschauen. Ein 
Interrupt ist in den allermeisten Fällen nicht nötig, das ist ja der 
Sinn des DMA
Gast #5802680
Lesenswert?

Frank2402 schrieb:
> 5. Es müsste ja ein Interrupt sein? Aber diese Antwort wäre wohl zu
> ungenau?

Hier wird wohl nach einem Timer-IRQ gefragt, da Messreihe gern 
äquidistante Zeitreihe impliziert. Es könnte auch end_of_aqusition IRQ 
sein, falls moderne ADC's solche IRQ#s überhaupt noch kennen oder 
brauchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren