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 :-)
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
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.