Forum: Mikrocontroller und Digitale Elektronik Klausuraufgabe zu DMA beim MSP430


von Frank2402 (Gast)


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 :-)

von Kalle (Gast)


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

von Clemens L. (c_l)


Lesenswert?

Frank2402 schrieb:
> 5. Wer/was löst den DMA-Transfer aus?

Willst du den selben Messwert zweitausendmal kopieren? Oder soll das 
Ende einer ADC-Messung jeweils einen DMA-Transfer triggern?

von Mike Messer (Gast)


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.

von Mike Messer (Gast)


Lesenswert?

Grad gecheckt:
https://courses.cs.washington.edu/courses/cse466/11au/calendar/04-Interrupts-posted.pdf 
s.).

der controller kennt tatsächlich einen ADC-IRQ, musst mal nachschauen 
wie der spezifiziert ist.

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.