COBE 0.1 ALPHA
|
Diese Datei enthält die zentrale Funktion zur Vorbereitung einer Daten-Übertragung über den DMA. Mehr ...
gehe zum Quellcode dieser Datei
Funktionen | |
void | set_dma_transfer (uint8_t channel, uint16_t size, void *buffer, bool write_on) |
Diese Funktion bereitet die Daten-Übertragung über den DMA vor. |
Diese Datei enthält die zentrale Funktion zur Vorbereitung einer Daten-Übertragung über den DMA.
Definiert in Datei dma.c.
Diese Funktion bereitet die Daten-Übertragung über den DMA vor.
Dabei wird zunächst der angegebene Channel auf dem DMA maskiert, das heißt, der maskierte Channel wird genutzt, wobei es sowohl Master- als auch Slave-Channel gibt. Die Anzahl der zu übertragenden Größe muss um eins dekrementiert werden, um nicht bereits das Byte des nächsten Speicherbereiches mit zu schreiben / lesen, dies wü umgehend zu Fehlern führen. Da die internen Zwischenregister des DMA nur 8-Bit breit sind, wird das Flip-Flop Verfahren genutzt, bei dem zunä die niederwertigeren 8-Bit übertragen werden und danach die höherwertigen 8-Bit. Dies muss beim DMA sowohl bei der size, als auch bei dem offset verwendet werden. Zwischen jedem Flip-Flop-Verfahren, muss das Flip-Flop-Flag zurückgesetzt werden, um dieses Verfahren wieder anwenden zu können, da ansonsten vom DMA immer nur die höherwertigen Bits erwartet werden würde. Aus der Angabe der Adresse des Datei-Puffer im RAM aus dem gelesen oder in dem geschrieben werden wird, sind die höherwertigen 8-Bit als page zu benutzen, die restlichen niederwertigen 16-Bit stellen das offset dar. Zum Ende der Funktion wird das jeweilige Channel wieder demaskiert. Diese komplette Funktion wird sowohl für das Lesen als auch für das Schreiben auf einem Gerät verwendet, entschieden wird dies durch ein einfaches Flag im Channel-Register, beim Aufruf stellt ein true im vierten Parameter ein Schreibvorgang vom RAM zum Gerät dar, ein false eine Lesevorgang vom Gerät zum RAM.
channel | Dieser Parameter gibt die Nummer des Channels an, an dem das Gerät verdrahtet ist |
size | Dieser Parameter enthält die Größe der zu übertragenden Menge |
buffer | Dieser Parameter ist enthält die Adresse des zu übertragenden oder zu lesenden Datenbereiches |
write_on | Dieser Parameter gibt an, ob vom RAM zum Gerät gelesen oder geschrieben wird (true schreiben auf das Gerät, false umgekehrt) |